diff options
| author | Ian Rogers <irogers@google.com> | 2013-01-14 10:54:44 -0800 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2013-01-14 10:54:44 -0800 |
| commit | 68fa57f000285af20100c00db3d2bc143ad32294 (patch) | |
| tree | be6d38c52f4539923d50848bfe04b729e21dafd2 /libc | |
| parent | bb897fa9f79d25e4445fe3ab46b86657d6660c10 (diff) | |
| parent | 8921060253f95fa77dbfe96ddaab5a39c446a49e (diff) | |
| download | bionic-68fa57f000285af20100c00db3d2bc143ad32294.zip bionic-68fa57f000285af20100c00db3d2bc143ad32294.tar.gz bionic-68fa57f000285af20100c00db3d2bc143ad32294.tar.bz2 | |
Merge "Name anonymous mmap mallocs."
Diffstat (limited to 'libc')
| -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 dc5f8ab..6287549 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; +} |
