diff options
author | marha <marha@users.sourceforge.net> | 2013-04-08 08:20:47 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-04-08 08:20:47 +0200 |
commit | a4505330e3469b6956348812ff2d6c24f812a8ba (patch) | |
tree | cf2b88c771188580ab585f763d2e7a0309ecab26 /mesalib/src/gallium/auxiliary/util/u_debug_memory.c | |
parent | 44fb3db38c5148666f62c78e10fc37bb20ed5c5c (diff) | |
parent | 95fb19d661154ba8cfc6c793a0daa25657294b3b (diff) | |
download | vcxsrv-a4505330e3469b6956348812ff2d6c24f812a8ba.tar.gz vcxsrv-a4505330e3469b6956348812ff2d6c24f812a8ba.tar.bz2 vcxsrv-a4505330e3469b6956348812ff2d6c24f812a8ba.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
fontconfig libXau mesa xserver xkeyboard-config git update 8 Apr 2013
Diffstat (limited to 'mesalib/src/gallium/auxiliary/util/u_debug_memory.c')
-rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_debug_memory.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/mesalib/src/gallium/auxiliary/util/u_debug_memory.c b/mesalib/src/gallium/auxiliary/util/u_debug_memory.c index 4bf26a524..472354781 100644 --- a/mesalib/src/gallium/auxiliary/util/u_debug_memory.c +++ b/mesalib/src/gallium/auxiliary/util/u_debug_memory.c @@ -76,6 +76,7 @@ struct debug_memory_header #endif unsigned magic; + unsigned tag; }; struct debug_memory_footer @@ -140,6 +141,7 @@ debug_malloc(const char *file, unsigned line, const char *function, hdr->function = function; hdr->size = size; hdr->magic = DEBUG_MEMORY_MAGIC; + hdr->tag = 0; #if DEBUG_FREED_MEMORY hdr->freed = FALSE; #endif @@ -263,6 +265,7 @@ debug_realloc(const char *file, unsigned line, const char *function, new_hdr->function = old_hdr->function; new_hdr->size = new_size; new_hdr->magic = DEBUG_MEMORY_MAGIC; + new_hdr->tag = 0; #if DEBUG_FREED_MEMORY new_hdr->freed = FALSE; #endif @@ -348,6 +351,58 @@ debug_memory_end(unsigned long start_no) /** + * Put a tag (arbitrary integer) on a memory block. + * Can be useful for debugging. + */ +void +debug_memory_tag(void *ptr, unsigned tag) +{ + struct debug_memory_header *hdr; + + if (!ptr) + return; + + hdr = header_from_data(ptr); + if (hdr->magic != DEBUG_MEMORY_MAGIC) { + debug_printf("%s corrupted memory at %p\n", __FUNCTION__, ptr); + debug_assert(0); + } + + hdr->tag = tag; +} + + +/** + * Check the given block of memory for validity/corruption. + */ +void +debug_memory_check_block(void *ptr) +{ + struct debug_memory_header *hdr; + struct debug_memory_footer *ftr; + + if (!ptr) + return; + + hdr = header_from_data(ptr); + ftr = footer_from_header(hdr); + + if (hdr->magic != DEBUG_MEMORY_MAGIC) { + debug_printf("%s:%u:%s: bad or corrupted memory %p\n", + hdr->file, hdr->line, hdr->function, ptr); + debug_assert(0); + } + + if (ftr->magic != DEBUG_MEMORY_MAGIC) { + debug_printf("%s:%u:%s: buffer overflow %p\n", + hdr->file, hdr->line, hdr->function, ptr); + debug_assert(0); + } +} + + + +/** * We can periodically call this from elsewhere to do a basic sanity * check of the heap memory we've allocated. */ |