diff options
author | Ian Rogers <irogers@google.com> | 2013-01-11 15:25:44 -0800 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2013-01-11 17:42:17 -0800 |
commit | 8921060253f95fa77dbfe96ddaab5a39c446a49e (patch) | |
tree | e772aa74be62c50a61c47671aa5dd79def2f30d5 /libc/bionic/dlmalloc.c | |
parent | 69c89942db2ed472c71aa84903d0259cc84aa074 (diff) | |
download | android_bionic-8921060253f95fa77dbfe96ddaab5a39c446a49e.tar.gz android_bionic-8921060253f95fa77dbfe96ddaab5a39c446a49e.tar.bz2 android_bionic-8921060253f95fa77dbfe96ddaab5a39c446a49e.zip |
Name anonymous mmap mallocs.
Change-Id: Icc53ba1eecb8445210623826d8e99a611d686f7f
Diffstat (limited to 'libc/bionic/dlmalloc.c')
-rw-r--r-- | libc/bionic/dlmalloc.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libc/bionic/dlmalloc.c b/libc/bionic/dlmalloc.c index dc5f8ab02..6287549fe 100644 --- a/libc/bionic/dlmalloc.c +++ b/libc/bionic/dlmalloc.c @@ -24,6 +24,10 @@ static void __bionic_heap_error(const char* msg, const char* function, void* p); #define USAGE_ERROR_ACTION(m,p) \ __bionic_heap_error("ARGUMENT IS INVALID HEAP ADDRESS", __FUNCTION__, p) +/* Bionic named anonymous memory declarations */ +static void* named_anonymous_mmap(size_t length); +#define MMAP(s) named_anonymous_mmap(s) + /* * Ugly inclusion of C file so that bionic specific #defines configure * dlmalloc. @@ -74,3 +78,40 @@ static void __bionic_heap_error(const char* msg, const char* function, void* p) /* So that we can get a memory dump around p */ *((int **) 0xdeadbaad) = (int *) p; } + +/* Bionic named anonymous memory definitions */ +#include <linux/ashmem.h> +static int __ashmem_create_region(const char* name, size_t size) +{ + int fd, ret; + fd = open("/dev/ashmem", O_RDWR); + if (fd < 0) + return fd; + if (name != NULL) { + char buf[ASHMEM_NAME_LEN]; + + strlcpy(buf, name, sizeof(buf)); + ret = ioctl(fd, ASHMEM_SET_NAME, buf); + if (ret < 0) { /* error */ + close(fd); + return ret; + } + } + ret = ioctl(fd, ASHMEM_SET_SIZE, size); + if (ret < 0) { /* error */ + close(fd); + return ret; + } + return fd; +} + +static void* named_anonymous_mmap(size_t length) +{ + void* ret; + int fd = __ashmem_create_region("libc malloc", length); + if (fd < 0) + return MAP_FAILED; + ret = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); + close (fd); + return ret; +} |