Browse Source

Merge commit 'origin/master' into nptl

Conflicts:
	libc/signal/sigpause.c
	libc/string/x86_64/memset.S

Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Austin Foxley 15 years ago
parent
commit
875d11eec5

+ 3 - 3
libc/stdlib/malloc/free.c

@@ -177,14 +177,14 @@ __free_to_heap (void *mem, struct heap_free_area **heap
 	      /* Start searching again from the end of this block.  */
 	      /* Start searching again from the end of this block.  */
 	      start = mmb_end;
 	      start = mmb_end;
 
 
+	      /* Release the descriptor block we used.  */
+	      free_to_heap (mmb, &__malloc_mmb_heap, &__malloc_mmb_heap_lock);
+
 	      /* We have to unlock the heap before we recurse to free the mmb
 	      /* We have to unlock the heap before we recurse to free the mmb
 		 descriptor, because we might be unmapping from the mmb
 		 descriptor, because we might be unmapping from the mmb
 		 heap.  */
 		 heap.  */
               __heap_unlock (heap_lock);
               __heap_unlock (heap_lock);
 
 
-	      /* Release the descriptor block we used.  */
-	      free_to_heap (mmb, &__malloc_mmb_heap, &__malloc_mmb_heap_lock);
-
 	      /* Do the actual munmap.  */
 	      /* Do the actual munmap.  */
 	      munmap ((void *)mmb_start, mmb_end - mmb_start);
 	      munmap ((void *)mmb_start, mmb_end - mmb_start);
 
 

+ 4 - 3
libc/stdlib/malloc/malloc.c

@@ -46,7 +46,7 @@ struct malloc_mmb *__malloc_mmapped_blocks = 0;
 HEAP_DECLARE_STATIC_FREE_AREA (initial_mmb_fa, 48); /* enough for 3 mmbs */
 HEAP_DECLARE_STATIC_FREE_AREA (initial_mmb_fa, 48); /* enough for 3 mmbs */
 struct heap_free_area *__malloc_mmb_heap = HEAP_INIT_WITH_FA (initial_mmb_fa);
 struct heap_free_area *__malloc_mmb_heap = HEAP_INIT_WITH_FA (initial_mmb_fa);
 #ifdef HEAP_USE_LOCKING
 #ifdef HEAP_USE_LOCKING
-malloc_mutex_t __malloc_mmb_heap_lock = PTHREAD_MUTEX_INITIALIZER;
+malloc_mutex_t __malloc_mmb_heap_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
 #endif
 #endif
 #endif /* __UCLIBC_UCLINUX_BROKEN_MUNMAP__ */
 #endif /* __UCLIBC_UCLINUX_BROKEN_MUNMAP__ */
 
 
@@ -149,19 +149,19 @@ __malloc_from_heap (size_t size, struct heap_free_area **heap
 	  /* Try again to allocate.  */
 	  /* Try again to allocate.  */
 	  mem = __heap_alloc (heap, &size);
 	  mem = __heap_alloc (heap, &size);
 
 
-	  __heap_unlock (heap_lock);
 
 
 #if !defined(MALLOC_USE_SBRK) && defined(__UCLIBC_UCLINUX_BROKEN_MUNMAP__)
 #if !defined(MALLOC_USE_SBRK) && defined(__UCLIBC_UCLINUX_BROKEN_MUNMAP__)
 	  /* Insert a record of BLOCK in sorted order into the
 	  /* Insert a record of BLOCK in sorted order into the
 	     __malloc_mmapped_blocks list.  */
 	     __malloc_mmapped_blocks list.  */
 
 
+	  new_mmb = malloc_from_heap (sizeof *new_mmb, &__malloc_mmb_heap, &__malloc_mmb_heap_lock);
+
 	  for (prev_mmb = 0, mmb = __malloc_mmapped_blocks;
 	  for (prev_mmb = 0, mmb = __malloc_mmapped_blocks;
 	       mmb;
 	       mmb;
 	       prev_mmb = mmb, mmb = mmb->next)
 	       prev_mmb = mmb, mmb = mmb->next)
 	    if (block < mmb->mem)
 	    if (block < mmb->mem)
 	      break;
 	      break;
 
 
-	  new_mmb = malloc_from_heap (sizeof *new_mmb, &__malloc_mmb_heap, &__malloc_mmb_heap_lock);
 	  new_mmb->next = mmb;
 	  new_mmb->next = mmb;
 	  new_mmb->mem = block;
 	  new_mmb->mem = block;
 	  new_mmb->size = block_size;
 	  new_mmb->size = block_size;
@@ -175,6 +175,7 @@ __malloc_from_heap (size_t size, struct heap_free_area **heap
 			    (unsigned)new_mmb,
 			    (unsigned)new_mmb,
 			    (unsigned)new_mmb->mem, block_size);
 			    (unsigned)new_mmb->mem, block_size);
 #endif /* !MALLOC_USE_SBRK && __UCLIBC_UCLINUX_BROKEN_MUNMAP__ */
 #endif /* !MALLOC_USE_SBRK && __UCLIBC_UCLINUX_BROKEN_MUNMAP__ */
+	  __heap_unlock (heap_lock);
 	}
 	}
     }
     }
 
 

+ 1 - 0
libc/string/x86_64/bzero.S

@@ -1,5 +1,6 @@
 #include <features.h>
 #include <features.h>
 #ifdef __UCLIBC_SUSV3_LEGACY__
 #ifdef __UCLIBC_SUSV3_LEGACY__
 # define memset bzero
 # define memset bzero
+# define __memset_chk __bzero_chk
 # include "memset.S"
 # include "memset.S"
 #endif
 #endif

+ 2 - 0
libc/string/x86_64/memcpy.S

@@ -29,7 +29,9 @@
 #if defined __PIC__ && !defined NOT_IN_libc
 #if defined __PIC__ && !defined NOT_IN_libc
 ENTRY (__memcpy_chk)
 ENTRY (__memcpy_chk)
 	cmpq	%rdx, %rcx
 	cmpq	%rdx, %rcx
+#if defined __UCLIBC_HAS_SSP__
 	jb	HIDDEN_JUMPTARGET (__chk_fail)
 	jb	HIDDEN_JUMPTARGET (__chk_fail)
+#endif
 END (__memcpy_chk)
 END (__memcpy_chk)
 #endif
 #endif
 ENTRY (BP_SYM (memcpy))
 ENTRY (BP_SYM (memcpy))

+ 1 - 0
libc/string/x86_64/mempcpy.S

@@ -1,3 +1,4 @@
 #define memcpy mempcpy
 #define memcpy mempcpy
+#define __memcpy_chk __mempcpy_chk
 #include "memcpy.S"
 #include "memcpy.S"
 libc_hidden_def(mempcpy)
 libc_hidden_def(mempcpy)

+ 3 - 1
libc/string/x86_64/memset.S

@@ -29,10 +29,12 @@
 #define LARGE $120000
 #define LARGE $120000
 
 
         .text
         .text
-#if !BZERO_P && defined __PIC__ && !defined NOT_IN_libc
+#if defined __PIC__ && !defined NOT_IN_libc
 ENTRY (__memset_chk)
 ENTRY (__memset_chk)
 	cmpq	%rdx, %rcx
 	cmpq	%rdx, %rcx
+#if defined __UCLIBC_HAS_SSP__
 	jb	HIDDEN_JUMPTARGET (__chk_fail)
 	jb	HIDDEN_JUMPTARGET (__chk_fail)
+#endif
 END (__memset_chk)
 END (__memset_chk)
 #endif
 #endif
 ENTRY (memset)
 ENTRY (memset)

+ 1 - 2
libc/sysdeps/linux/common/ssp.c

@@ -100,7 +100,6 @@ void __stack_chk_fail(void)
 		terminate();
 		terminate();
 }
 }
 
 
-#if 0
 void __chk_fail(void) attribute_noreturn;
 void __chk_fail(void) attribute_noreturn;
 void __chk_fail(void)
 void __chk_fail(void)
 {
 {
@@ -115,4 +114,4 @@ void __chk_fail(void)
 	while(1)
 	while(1)
 		terminate();
 		terminate();
 }
 }
-#endif
+

+ 1 - 1
libpthread/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

@@ -130,7 +130,7 @@ __LABEL($syscall_error)						\
 extern int __local_multiple_threads attribute_hidden;
 extern int __local_multiple_threads attribute_hidden;
 #   define SINGLE_THREAD_P \
 #   define SINGLE_THREAD_P \
   __builtin_expect (__local_multiple_threads == 0, 1)
   __builtin_expect (__local_multiple_threads == 0, 1)
-# elif defined(PIC)
+# elif defined(__PIC__)
 #  define SINGLE_THREAD_P(reg)  ldl reg, __local_multiple_threads(gp) !gprel
 #  define SINGLE_THREAD_P(reg)  ldl reg, __local_multiple_threads(gp) !gprel
 # else
 # else
 #  define SINGLE_THREAD_P(reg)					\
 #  define SINGLE_THREAD_P(reg)					\