static void* new_block ( ThreadId tid, SizeT req_szB, SizeT req_alignB, Bool is_zeroed ) { void* p; HP_Chunk* hc; SizeT actual_szB, slop_szB; Trace_Block* block; if ((SSizeT)req_szB < 0) return NULL; // Allocate and zero if necessary p = VG_(cli_malloc)( req_alignB, req_szB ); if (!p) { return NULL; } if (is_zeroed) VG_(memset)(p, 0, req_szB); actual_szB = VG_(malloc_usable_size)(p); tl_assert(actual_szB >= req_szB); slop_szB = actual_szB - req_szB; // Make new HP_Chunk node, add to malloc_list hc = VG_(malloc)("freya.malloc", sizeof(HP_Chunk)); hc->data = (Addr)p; hc->req_szB = req_szB; hc->slop_szB = slop_szB; block = alloc_trace(tid); hc->block = block; hc->tid = tid; while (block) { block->allocs ++; block->total += req_szB; block->current += req_szB; if (block->peak < block->current) block->peak = block->current; block = block->parent; } VG_(HT_add_node)(malloc_list, hc); return p; }
void MonteCarlo(collector *C, int NMC, REAL emean, REAL estdv, REAL sigma, REAL angle, REAL azimuth) { particle *P; trace *T; int NF; unsigned int seed; NF = 0; #if DEBUG printf("entering MonteCarlo for %d samples and storing into %lx (%d)\n", NMC, (long unsigned int) C, C->NTOTAL); #endif /* create the trace and particle */ fast_srand(&seed); T = alloc_trace(); P = (particle *) malloc(sizeof(particle)); /* the Monte Carlo loop */ //what is sigma?? if (sigma > AS_REAL(0.0)) { while (NF++ < NMC) { MakeParticle(P, normal(emean, estdv,&seed), angle+normal(AS_REAL(0.0), sigma,&seed), azimuth+normal(AS_REAL(0.0), sigma,&seed), &seed); reset_trace(T); while (P->energy > AS_REAL(0.0)) { proton_event(P, T, &seed); //stepping() } if (TRACE) dump_trace(stdout, T, P); collect(C, P, T); //Hits collection } } else { while (NF++ < NMC) { MakeParticle(P, normal(emean, estdv,&seed), angle, azimuth, &seed); reset_trace(T); while (P->energy > AS_REAL(0.0)) { proton_event(P, T, &seed); } if (TRACE) dump_trace(stdout, T, P); collect(C, P, T); } } }
static void fr_mmap(Addr a, SizeT len, Bool rr, Bool ww, Bool xx, ULong di_handle) { if (clo_mmap) mem_map( a, a + len, alloc_trace(VG_(get_running_tid)()) ); }