aboutsummaryrefslogtreecommitdiffstats
path: root/libc/bionic/dlmalloc.c
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2013-01-11 15:25:44 -0800
committerIan Rogers <irogers@google.com>2013-01-11 17:42:17 -0800
commit8921060253f95fa77dbfe96ddaab5a39c446a49e (patch)
treee772aa74be62c50a61c47671aa5dd79def2f30d5 /libc/bionic/dlmalloc.c
parent69c89942db2ed472c71aa84903d0259cc84aa074 (diff)
downloadandroid_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.c41
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;
+}