|
@@ -700,7 +700,7 @@ index eef2bfd..a21d2ac 100644
|
|
|
#define OUT \
|
|
|
for (map = MAPS; map != NULL; map = map->l_next) \
|
|
|
diff --git a/malloc/arena.c b/malloc/arena.c
|
|
|
-index 5088a25..d12cf1e 100644
|
|
|
+index 5088a25..b3b0e1c 100644
|
|
|
--- a/malloc/arena.c
|
|
|
+++ b/malloc/arena.c
|
|
|
@@ -21,6 +21,27 @@
|
|
@@ -720,7 +720,7 @@ index 5088a25..d12cf1e 100644
|
|
|
+ if (!heap_max_size) { \
|
|
|
+ long int size = glibc_option("heap_size"); \
|
|
|
+ if (size > 0) \
|
|
|
-+ heap_max_size = size >> 1; \
|
|
|
++ heap_max_size = size; \
|
|
|
+ else \
|
|
|
+ heap_max_size = DEFAULT_HEAP_MAX_SIZE; \
|
|
|
+ } \
|
|
@@ -731,6 +731,51 @@ index 5088a25..d12cf1e 100644
|
|
|
#define HEAP_MIN_SIZE (32 * 1024)
|
|
|
#ifndef HEAP_MAX_SIZE
|
|
|
# ifdef DEFAULT_MMAP_THRESHOLD_MAX
|
|
|
+@@ -545,33 +566,7 @@ new_heap (size_t size, size_t top_pad)
|
|
|
+ mapping (on Linux, this is the case for all non-writable mappings
|
|
|
+ anyway). */
|
|
|
+ p2 = MAP_FAILED;
|
|
|
+- if (aligned_heap_area)
|
|
|
+- {
|
|
|
+- p2 = (char *) MMAP (aligned_heap_area, HEAP_MAX_SIZE, PROT_NONE,
|
|
|
+- MAP_NORESERVE);
|
|
|
+- aligned_heap_area = NULL;
|
|
|
+- if (p2 != MAP_FAILED && ((unsigned long) p2 & (HEAP_MAX_SIZE - 1)))
|
|
|
+- {
|
|
|
+- __munmap (p2, HEAP_MAX_SIZE);
|
|
|
+- p2 = MAP_FAILED;
|
|
|
+- }
|
|
|
+- }
|
|
|
+- if (p2 == MAP_FAILED)
|
|
|
+- {
|
|
|
+- p1 = (char *) MMAP (0, HEAP_MAX_SIZE << 1, PROT_NONE, MAP_NORESERVE);
|
|
|
+- if (p1 != MAP_FAILED)
|
|
|
+- {
|
|
|
+- p2 = (char *) (((unsigned long) p1 + (HEAP_MAX_SIZE - 1))
|
|
|
+- & ~(HEAP_MAX_SIZE - 1));
|
|
|
+- ul = p2 - p1;
|
|
|
+- if (ul)
|
|
|
+- __munmap (p1, ul);
|
|
|
+- else
|
|
|
+- aligned_heap_area = p2 + HEAP_MAX_SIZE;
|
|
|
+- __munmap (p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul);
|
|
|
+- }
|
|
|
+- else
|
|
|
+- {
|
|
|
++
|
|
|
+ /* Try to take the chance that an allocation of only HEAP_MAX_SIZE
|
|
|
+ is already aligned. */
|
|
|
+ p2 = (char *) MMAP (0, HEAP_MAX_SIZE, PROT_NONE, MAP_NORESERVE);
|
|
|
+@@ -583,8 +578,7 @@ new_heap (size_t size, size_t top_pad)
|
|
|
+ __munmap (p2, HEAP_MAX_SIZE);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+- }
|
|
|
+- }
|
|
|
++
|
|
|
+ if (__mprotect (p2, size, PROT_READ | PROT_WRITE) != 0)
|
|
|
+ {
|
|
|
+ __munmap (p2, HEAP_MAX_SIZE);
|
|
|
diff --git a/nptl/Makefile b/nptl/Makefile
|
|
|
index 57cc8c6..81f1bf4 100644
|
|
|
--- a/nptl/Makefile
|