Browse Source

Use MAP_PRIVATE whenever __ARCH_HAS_MMU__ is set.
Only use MAP_SHARED when mmu-less.

Eric Andersen 20 years ago
parent
commit
921fde55c3

+ 2 - 2
libc/stdlib/malloc-simple/alloc.c

@@ -33,14 +33,14 @@ void *malloc(size_t size)
 
 #ifdef __ARCH_HAS_MMU__
     result = mmap((void *) 0, size + sizeof(size_t), PROT_READ | PROT_WRITE,
-	    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	    MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
     if (result == MAP_FAILED)
 	return 0;
     * (size_t *) result = size;
     return(result + sizeof(size_t));
 #else
     result = mmap((void *) 0, size, PROT_READ | PROT_WRITE,
-	    MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+	    MAP_SHARED | MAP_ANONYMOUS, 0, 0);
     if (result == MAP_FAILED)
 	return 0;
     return(result);

+ 2 - 2
libc/stdlib/malloc-standard/malloc.c

@@ -406,7 +406,7 @@ static void* __malloc_alloc(size_t nb, mstate av)
 	/* Don't try if size wraps around 0 */
 	if ((unsigned long)(size) > (unsigned long)(nb)) {
 
-	    mm = (char*)(MMAP(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE));
+	    mm = (char*)(MMAP(0, size, PROT_READ|PROT_WRITE));
 
 	    if (mm != (char*)(MORECORE_FAILURE)) {
 
@@ -526,7 +526,7 @@ static void* __malloc_alloc(size_t nb, mstate av)
 	/* Don't try if size wraps around 0 */
 	if ((unsigned long)(size) > (unsigned long)(nb)) {
 
-	    brk = (char*)(MMAP(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE));
+	    brk = (char*)(MMAP(0, size, PROT_READ|PROT_WRITE));
 
 	    if (brk != (char*)(MORECORE_FAILURE)) {
 

+ 11 - 2
libc/stdlib/malloc-standard/malloc.h

@@ -350,8 +350,17 @@ extern pthread_mutex_t __malloc_lock;
 #define MAP_ANONYMOUS MAP_ANON
 #endif
 
-#define MMAP(addr, size, prot, flags) \
- (mmap((addr), (size), (prot), (flags)|MAP_ANONYMOUS, -1, 0))
+#ifdef __ARCH_HAS_MMU__
+
+#define MMAP(addr, size, prot) \
+ (mmap((addr), (size), (prot), MAP_PRIVATE|MAP_ANONYMOUS, 0, 0))
+
+#else
+
+#define MMAP(addr, size, prot) \
+ (mmap((addr), (size), (prot), MAP_SHARED|MAP_ANONYMOUS, 0, 0))
+
+#endif
 
 
 /* -----------------------  Chunk representations ----------------------- */

+ 6 - 1
libc/stdlib/malloc/malloc.c

@@ -103,8 +103,13 @@ malloc_from_heap (size_t size, struct heap *heap)
 #else /* !MALLOC_USE_SBRK */
 
       /* Otherwise, use mmap.  */
-      block = mmap (0, block_size, PROT_READ | PROT_WRITE,
+#ifdef __ARCH_HAS_MMU__
+      block = mmap ((void *)0, block_size, PROT_READ | PROT_WRITE,
+		    MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+#else
+      block = mmap ((void *)0, block_size, PROT_READ | PROT_WRITE,
 		    MAP_SHARED | MAP_ANONYMOUS, 0, 0);
+#endif
 
 #endif /* MALLOC_USE_SBRK */