Jelajahi Sumber

Merge commit 'origin/master' into prelink

Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Carmelo Amoroso 14 tahun lalu
induk
melakukan
e018b8ba1a

+ 15 - 3
libc/string/sh/sh4/memcpy.S

@@ -497,6 +497,12 @@ ENTRY(memcpy)
 	mov	r5, r6
 	add	#-0x80, r6	! prefetch head
 
+	! store FPU (in single precision mode, do not check R15 align).
+	fmov	fr12, @-r15
+	fmov	fr13, @-r15
+	fmov	fr14, @-r15
+	fmov	fr15, @-r15
+
 	FPU_SET_PAIRED_PREC
 
 	mov	#4, r0
@@ -553,16 +559,22 @@ ENTRY(memcpy)
 	bt/s	67b
 	 pref	@r6
 
+	RESTORE_FPSCR
+
+	! Restore FPU callee save registers
+	fmov	@r15+, fr15
+	fmov	@r15+, fr14
+	fmov	@r15+, fr13
+	fmov	@r15+, fr12
+
 	! Other cache lines could be copied: so use the FPU in single paired
 	! precision without prefetching. No check for alignment is necessary.
 
 	mov	#1, r0
 	cmp/ge	r0, r3
-	bt/s	4f
+	bt/s	3f
 	 add	#0x60, r5
 
-	RESTORE_FPSCR
-
 	bra	5f
 	 nop
 

+ 4 - 0
libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S

@@ -648,6 +648,10 @@ __condvar_tw_cleanup:
 
 	movl	%esi, (%esp)
 .LcallUR:
+#ifdef __PIC__
+	call	__i686.get_pc_thunk.bx
+	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+#endif
 	call	_Unwind_Resume@PLT
 	hlt
 .LENDCODE:

+ 11 - 7
libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S

@@ -535,6 +535,10 @@ __condvar_w_cleanup:
 
 	movl	%esi, (%esp)
 .LcallUR:
+#ifdef __PIC__
+	call	__i686.get_pc_thunk.bx
+	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+#endif
 	call	_Unwind_Resume@PLT
 	hlt
 .LENDCODE:
@@ -569,14 +573,14 @@ __condvar_w_cleanup:
 .Lcstend:
 
 #ifdef __PIC__
-	.section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits
-	.globl	__i686.get_pc_thunk.cx
-	.hidden	__i686.get_pc_thunk.cx
-	.type	__i686.get_pc_thunk.cx,@function
-__i686.get_pc_thunk.cx:
-	movl (%esp), %ecx;
+	.section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
+	.globl	__i686.get_pc_thunk.bx
+	.hidden	__i686.get_pc_thunk.bx
+	.type	__i686.get_pc_thunk.bx,@function
+__i686.get_pc_thunk.bx:
+	movl (%esp), %ebx;
 	ret
-	.size	__i686.get_pc_thunk.cx,.-__i686.get_pc_thunk.cx
+	.size	__i686.get_pc_thunk.bx,.-__i686.get_pc_thunk.bx
 #endif
 
 #ifdef SHARED

+ 48 - 24
utils/getconf.c

@@ -1014,18 +1014,42 @@ static const struct conf vars[] =
 
 static const struct { const char *name; int num; } specs[] =
   {
+#ifdef _SC_XBS5_ILP32_OFF32
     { "XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32 },
+#endif
+#ifdef _SC_XBS5_ILP32_OFFBIG
     { "XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG },
+#endif
+#ifdef _SC_XBS5_LP64_OFF64
     { "XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64 },
+#endif
+#ifdef _SC_XBS5_LPBIG_OFFBIG
     { "XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG },
+#endif
+#ifdef _SC_V6_ILP32_OFF32
     { "POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32 },
+#endif
+#ifdef _SC_V6_ILP32_OFFBIG
     { "POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG },
+#endif
+#ifdef _SC_V6_LP64_OFF64
     { "POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64 },
+#endif
+#ifdef _SC_V6_LPBIG_OFFBIG
     { "POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG },
+#endif
+#ifdef _SC_V7_ILP32_OFF32
     { "POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32 },
+#endif
+#ifdef _SC_V7_ILP32_OFFBIG
     { "POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG },
+#endif
+#ifdef _SC_V7_LP64_OFF64
     { "POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64 },
+#endif
+#ifdef _SC_V7_LPBIG_OFFBIG
     { "POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG },
+#endif
   };
 static const int nspecs = sizeof (specs) / sizeof (specs[0]);
 
@@ -1177,41 +1201,41 @@ environment SPEC.\n\n");
 
       switch (specs[i].num)
 	{
-#ifndef _XBS5_ILP32_OFF32
-	  case _SC_XBS5_ILP32_OFF32:
+#if !defined(_XBS5_ILP32_OFF32) && defined(_SC_XBS5_ILP32_OFF32)
+	case _SC_XBS5_ILP32_OFF32:
 #endif
-#ifndef _XBS5_ILP32_OFFBIG
-	  case _SC_XBS5_ILP32_OFFBIG:
+#if !defined(_XBS5_ILP32_OFFBIG) && defined(_SC_XBS5_ILP32_OFFBIG)
+	case _SC_XBS5_ILP32_OFFBIG:
 #endif
-#ifndef _XBS5_LP64_OFF64
-	  case _SC_XBS5_LP64_OFF64:
+#if !defined(_XBS5_LP64_OFF64) && defined(_SC_XBS5_LP64_OFF64)
+	case _SC_XBS5_LP64_OFF64:
 #endif
-#ifndef _XBS5_LPBIG_OFFBIG
-	  case _SC_XBS5_LPBIG_OFFBIG:
+#if !defined(_XBS5_LPBIG_OFFBIG) && defined(_SC_XBS5_LPBIG_OFFBIG)
+	case _SC_XBS5_LPBIG_OFFBIG:
 #endif
-#ifndef _POSIX_V6_ILP32_OFF32
-	  case _SC_V6_ILP32_OFF32:
+#if !defined(_POSIX_V6_ILP32_OFF32) && defined(_SC_V6_ILP32_OFF32)
+	case _SC_V6_ILP32_OFF32:
 #endif
-#ifndef _POSIX_V6_ILP32_OFFBIG
-	  case _SC_V6_ILP32_OFFBIG:
+#if !defined(_POSIX_V6_ILP32_OFFBIG) && defined(_SC_V6_ILP32_OFFBIG)
+	case _SC_V6_ILP32_OFFBIG:
 #endif
-#ifndef _POSIX_V6_LP64_OFF64
-	  case _SC_V6_LP64_OFF64:
+#if !defined(_POSIX_V6_LP64_OFF64) && defined(_SC_V6_LP64_OFF64)
+	case _SC_V6_LP64_OFF64:
 #endif
-#ifndef _POSIX_V6_LPBIG_OFFBIG
-	  case _SC_V6_LPBIG_OFFBIG:
+#if !defined(_POSIX_V6_LPBIG_OFFBIG) && defined(_SC_V6_LPBIG_OFFBIG)
+	case _SC_V6_LPBIG_OFFBIG:
 #endif
-#ifndef _POSIX_V7_ILP32_OFF32
-	  case _SC_V7_ILP32_OFF32:
+#if !defined(_POSIX_V7_ILP32_OFF32) && defined(_SC_V7_ILP32_OFF32)
+	case _SC_V7_ILP32_OFF32:
 #endif
-#ifndef _POSIX_V7_ILP32_OFFBIG
-	  case _SC_V7_ILP32_OFFBIG:
+#if !defined(_POSIX_V7_ILP32_OFFBIG) && defined(_SC_V7_ILP32_OFFBIG)
+	case _SC_V7_ILP32_OFFBIG:
 #endif
-#ifndef _POSIX_V7_LP64_OFF64
-	  case _SC_V7_LP64_OFF64:
+#if !defined(_POSIX_V7_LP64_OFF64) && defined(_SC_V7_LP64_OFF64)
+	case _SC_V7_LP64_OFF64:
 #endif
-#ifndef _POSIX_V7_LPBIG_OFFBIG
-	  case _SC_V7_LPBIG_OFFBIG:
+#if !defined(_POSIX_V7_LPBIG_OFFBIG) && defined(_SC_V7_LPBIG_OFFBIG)
+	case _SC_V7_LPBIG_OFFBIG:
 #endif
 	    {
 	      const char *args[argc + 3];