diff options
author | Vladimir Chtchetkine <vchtchetkine@google.com> | 2009-11-17 14:13:38 -0800 |
---|---|---|
committer | Vladimir Chtchetkine <vchtchetkine@google.com> | 2009-11-18 10:36:25 -0800 |
commit | b74ceb25aae555570df64fa4d4076272733a9a20 (patch) | |
tree | 3bf49e716722b67f4b0f0bcb391156bf29fa6ad0 /libc/bionic/malloc_debug_common.h | |
parent | e8870ffc965d553a885f63b26e724da279728b72 (diff) | |
download | android_bionic-b74ceb25aae555570df64fa4d4076272733a9a20.tar.gz android_bionic-b74ceb25aae555570df64fa4d4076272733a9a20.tar.bz2 android_bionic-b74ceb25aae555570df64fa4d4076272733a9a20.zip |
Split libc_debug.so into two .so modules loaded on demand from libc.so
This change is intended to eliminate need to replace libc.so with libc_debug.so in order to enablememory allocation debugging.
This is also the first step towards implementing extended memoryallocation debugging using emulator's capabilities in monitoring memory access.
Diffstat (limited to 'libc/bionic/malloc_debug_common.h')
-rw-r--r-- | libc/bionic/malloc_debug_common.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/libc/bionic/malloc_debug_common.h b/libc/bionic/malloc_debug_common.h new file mode 100644 index 000000000..a6301b386 --- /dev/null +++ b/libc/bionic/malloc_debug_common.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Contains declarations of types and constants used by malloc leak + * detection code in both, libc and libc_malloc_debug libraries. + */ +#ifndef MALLOC_DEBUG_COMMON_H +#define MALLOC_DEBUG_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define HASHTABLE_SIZE 1543 +#define BACKTRACE_SIZE 32 +/* flag definitions, currently sharing storage with "size" */ +#define SIZE_FLAG_ZYGOTE_CHILD (1<<31) +#define SIZE_FLAG_MASK (SIZE_FLAG_ZYGOTE_CHILD) + +#define MAX_SIZE_T (~(size_t)0) + +// ============================================================================= +// Structures +// ============================================================================= + +typedef struct HashEntry HashEntry; +struct HashEntry { + size_t slot; + HashEntry* prev; + HashEntry* next; + size_t numEntries; + // fields above "size" are NOT sent to the host + size_t size; + size_t allocations; + intptr_t backtrace[0]; +}; + +typedef struct HashTable HashTable; +struct HashTable { + size_t count; + HashEntry* slots[HASHTABLE_SIZE]; +}; + +/* Entry in malloc dispatch table. */ +typedef struct MallocDebug MallocDebug; +struct MallocDebug { + void* (*malloc)(size_t bytes); + void (*free)(void* mem); + void* (*calloc)(size_t n_elements, size_t elem_size); + void* (*realloc)(void* oldMem, size_t bytes); + void* (*memalign)(size_t alignment, size_t bytes); +}; + +#ifdef __cplusplus +}; /* end of extern "C" */ +#endif + +#endif // MALLOC_DEBUG_COMMON_H |