Lines Matching defs:hdr

44 struct hdr {
46 struct hdr *prev;
47 struct hdr *next;
60 static inline struct ftr * to_ftr(struct hdr *hdr)
62 return (struct ftr *)(((char *)(hdr + 1)) + hdr->size);
65 static inline void *user(struct hdr *hdr)
67 return hdr + 1;
70 static inline struct hdr *meta(void *user)
72 return ((struct hdr *)user) - 1;
90 static struct hdr *first;
91 static struct hdr *last;
95 static struct hdr *backlog_first;
96 static struct hdr *backlog_last;
119 static inline void init_front_guard(struct hdr *hdr)
121 memset(hdr->front_guard, FRONT_GUARD, FRONT_GUARD_LEN);
124 static inline int is_front_guard_valid(struct hdr *hdr)
128 if (hdr->front_guard[i] != FRONT_GUARD)
133 static inline void init_rear_guard(struct hdr *hdr)
135 struct ftr *ftr = to_ftr(hdr);
139 static inline int is_rear_guard_valid(struct hdr *hdr)
144 struct ftr *ftr = to_ftr(hdr);
162 static inline void __add(struct hdr *hdr, struct hdr **first, struct hdr **last)
164 hdr->prev = 0;
165 hdr->next = *last;
167 (*last)->prev = hdr;
169 *first = hdr;
170 *last = hdr;
173 static inline int __del(struct hdr *hdr, struct hdr **first, struct hdr **last)
175 if (hdr->prev)
176 hdr->prev->next = hdr->next;
178 *last = hdr->next;
179 if (hdr->next)
180 hdr->next->prev = hdr->prev;
182 *first = hdr->prev;
186 static inline void add(struct hdr *hdr, size_t size)
189 hdr->tag = ALLOCATION_TAG;
190 hdr->size = size;
191 init_front_guard(hdr);
192 init_rear_guard(hdr);
194 __add(hdr, &first, &last);
198 static inline int del(struct hdr *hdr)
200 if (hdr->tag != ALLOCATION_TAG)
204 __del(hdr, &first, &last);
210 static inline void poison(struct hdr *hdr)
212 memset(user(hdr), FREE_POISON, hdr->size);
215 static int was_used_after_free(struct hdr *hdr)
218 const char *data = (const char *)user(hdr);
219 for (i = 0; i < hdr->size; i++)
226 static inline int check_guards(struct hdr *hdr, int *safe)
229 if (!is_front_guard_valid(hdr)) {
230 if (hdr->front_guard[0] == FRONT_GUARD) {
232 user(hdr), hdr->size);
235 "(NOT DUMPING STACKTRACE)\n", user(hdr));
242 if (!is_rear_guard_valid(hdr)) {
244 user(hdr), hdr->size);
252 static inline int __check_allocation(struct hdr *hdr, int *safe)
257 if (hdr->tag != ALLOCATION_TAG && hdr->tag != BACKLOG_TAG) {
259 user(hdr), hdr->tag);
267 if (hdr->tag == BACKLOG_TAG && was_used_after_free(hdr)) {
269 user(hdr), hdr->size);
272 (void)check_guards(hdr, safe);
275 valid = check_guards(hdr, safe);
279 user(hdr), hdr->size);
280 print_backtrace(hdr->bt, hdr->bt_depth);
281 if (hdr->tag == BACKLOG_TAG) {
283 user(hdr), hdr->size);
284 print_backtrace(hdr->freed_bt, hdr->freed_bt_depth);
291 static inline int __del_and_check(struct hdr *hdr,
292 struct hdr **first, struct hdr **last, unsigned *cnt,
296 valid = __check_allocation(hdr, safe);
299 __del(hdr, first, last);
304 static inline void __del_from_backlog(struct hdr *hdr)
307 (void)__del_and_check(hdr,
310 hdr->tag = 0; /* clear the tag */
313 static inline void del_from_backlog(struct hdr *hdr)
316 __del_from_backlog(hdr);
320 static inline int del_leak(struct hdr *hdr, int *safe)
324 valid = __del_and_check(hdr,
331 static inline void add_to_backlog(struct hdr *hdr)
334 hdr->tag = BACKLOG_TAG;
336 __add(hdr, &backlog_first, &backlog_last);
337 poison(hdr);
340 struct hdr *gone = backlog_first;
350 struct hdr *hdr = __real_malloc(sizeof(struct hdr) + size +
352 if (hdr) {
353 hdr->bt_depth = heaptracker_stacktrace(
354 hdr->bt, MAX_BACKTRACE_DEPTH);
355 add(hdr, size);
356 return user(hdr);
363 struct hdr *hdr;
367 hdr = meta(ptr);
369 if (del(hdr) < 0) {
373 if (hdr->tag == BACKLOG_TAG) {
375 user(hdr), hdr->size);
377 user(hdr), hdr->size);
378 print_backtrace(hdr->bt, hdr->bt_depth);
379 /* hdr->freed_bt_depth should be nonzero here */
381 user(hdr), hdr->size);
382 print_backtrace(hdr->freed_bt, hdr->freed_bt_depth);
384 user(hdr), hdr->size);
389 user(hdr));
392 //__real_free(user(hdr));
396 hdr->freed_bt_depth = heaptracker_stacktrace(hdr->freed_bt,
398 add_to_backlog(hdr);
404 struct hdr *hdr;
414 hdr = meta(ptr);
417 if (del(hdr) < 0) {
421 if (hdr->tag == BACKLOG_TAG) {
423 user(hdr), size, hdr->size);
425 user(hdr), hdr->size);
426 print_backtrace(hdr->bt, hdr->bt_depth);
427 /* hdr->freed_bt_depth should be nonzero here */
429 user(hdr), hdr->size);
430 print_backtrace(hdr->freed_bt, hdr->freed_bt_depth);
432 user(hdr), hdr->size);
439 del_from_backlog(hdr);
443 user(hdr), size);
447 // return __real_realloc(user(hdr), size); // assuming it was allocated externally
451 hdr = __real_realloc(hdr, sizeof(struct hdr) + size + sizeof(struct ftr));
452 if (hdr) {
453 hdr->bt_depth = heaptracker_stacktrace(hdr->bt, MAX_BACKTRACE_DEPTH);
454 add(hdr, size);
455 return user(hdr);
464 struct hdr *hdr;
466 hdr = __real_calloc(1, sizeof(struct hdr) + __size + sizeof(struct ftr));
467 if (hdr) {
468 hdr->bt_depth = heaptracker_stacktrace(
469 hdr->bt, MAX_BACKTRACE_DEPTH);
470 add(hdr, __size);
471 return user(hdr);
478 struct hdr *del; int cnt;
505 static int check_list(struct hdr *list, pthread_rwlock_t *rwlock)
507 struct hdr *hdr;
512 hdr = list;
513 while (hdr) {
514 (void)__check_allocation(hdr, &safe);
515 hdr = hdr->next;