MCPcopy Create free account
hub / github.com/Singular/Singular / omAllocTrackAddr

Function omAllocTrackAddr

omalloc/omDebugTrack.c:283–366  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

281 return d_addr;
282}
283void* omAllocTrackAddr(void* bin_size,
284 omTrackFlags_t flags, char track, OM_FLR_DECL)
285{
286 void* o_addr;
287 size_t o_size = (flags & OM_FBIN ? ((omBin)bin_size)->sizeW << LOG_SIZEOF_LONG :
288 (bin_size != NULL ? OM_ALIGN_SIZE((size_t) bin_size) : OM_ALIGN_SIZE(1)));
289 omTrackAddr d_addr;
290 size_t d_size;
291 if (track <= 0) track = 1;
292 else if (track > 5) track = 5;
293
294 if ((flags & OM_FBIN) && !omIsStaticNormalBin((omBin)bin_size))
295 /* Need to set track >= 3 such that bin_size is kept: Needed
296 for om_KeptAddr */
297 track = (track > 3 ? track : 3);
298 d_size = omOutSize_2_TrackAddrSize(o_size, track);
299
300 d_addr = _omAllocTrackAddr(d_size);
301 d_addr->next = (void*)-1;
302 d_addr->track = track;
303 d_addr->flags = flags | OM_FUSED;
304 if (om_Opts.MarkAsStatic)
305 d_addr->flags |= OM_FSTATIC;
306
307#ifdef OM_TRACK_FILE_LINE
308 d_addr->alloc_file = f;
309 d_addr->alloc_line = (l > SHRT_MAX || l < 0 ? 0 : l);
310#endif
311#ifdef OM_TRACK_RETURN
312 d_addr->alloc_r = r;
313#endif
314
315 o_addr = omTrackAddr_2_OutAddr(d_addr);
316 if (track > 1)
317 {
318#ifdef OM_INTERNAL_DEBUG
319#define FROM_FRAMES 0
320#else
321#define FROM_FRAMES 2
322#endif
323
324#ifdef OM_TRACK_BACKTRACE
325 omGetBackTrace((void **)d_addr->alloc_frames, FROM_FRAMES, OM_MAX_KEPT_FRAMES);
326#endif
327
328 if (track > 2)
329 {
330 if (flags & OM_FBIN && ((omBin) bin_size)->sticky)
331 {
332 d_addr->bin_size = (void*)(((omBin) bin_size)->sizeW<<LOG_SIZEOF_LONG);
333 d_addr->flags &= ~OM_FBIN;
334 d_addr->flags |= OM_FSIZE;
335 }
336 else
337 d_addr->bin_size = (flags & OM_FBIN ? bin_size : (void*) o_size);
338 omAssume(OM_ALIGN_SIZE((size_t)d_addr->bin_size) == (size_t) d_addr->bin_size);
339
340 memset(omTrackAddr_2_FrontPattern(d_addr), OM_FRONT_PATTERN, omTrackAddr_2_SizeOfFrontPattern(d_addr));

Callers 1

__omDebugAllocFunction · 0.85

Calls 7

_omAllocTrackAddrFunction · 0.85
omGetBackTraceFunction · 0.85

Tested by

no test coverage detected