| 281 | return d_addr; |
| 282 | } |
| 283 | void* 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)); |
no test coverage detected