This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.16-ports-merge-158-g2aa5b9c


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  2aa5b9c146ae9a3efabd430b12cddb635bc29164 (commit)
      from  7f540252876b853889c9482c9086ac1c55fe6e3c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=2aa5b9c146ae9a3efabd430b12cddb635bc29164

commit 2aa5b9c146ae9a3efabd430b12cddb635bc29164
Author: Roland McGrath <roland@hack.frob.com>
Date:   Thu Aug 9 16:17:14 2012 -0700

    Make ARM setjmp/longjmp respect ARM_ASSUME_NO_IWMMXT macro.

diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index 1375922..34d606d 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,5 +1,12 @@
 2012-08-09  Roland McGrath  <roland@hack.frob.com>
 
+	* sysdeps/arm/arm-features.h: Document ARM_ASSUME_NO_IWMMXT.
+	* sysdeps/arm/setjmp.S: Include <arm-features.h>.
+	[!ARM_ASSUME_NO_IWMMXT || __SOFTFP__]: Conditionalize hwcap
+	fetching bits on this.
+	[!ARM_ASSUME_NO_IWMMXT]: Conditionalize iWMMXt register use on this.
+	* sysdeps/arm/__longjmp.S: Likewise.
+
 	* sysdeps/arm/__longjmp.S: Use .Lxxx rather than Lxxx for local labels.
 	[__SOFTFP__]: Conditionalize HWCAP_ARM_VFP check on this.
 	* sysdeps/arm/setjmp.S: Likewise.
diff --git a/ports/sysdeps/arm/__longjmp.S b/ports/sysdeps/arm/__longjmp.S
index aa5cf74..b3c2860 100644
--- a/ports/sysdeps/arm/__longjmp.S
+++ b/ports/sysdeps/arm/__longjmp.S
@@ -21,6 +21,7 @@
 #define _ASM
 #include <bits/setjmp.h>
 #include <rtld-global-offsets.h>
+#include <arm-features.h>
 
 /* __longjmp(jmpbuf, val) */
 
@@ -46,23 +47,29 @@ ENTRY (__longjmp)
 	cfi_restore (sp)
 	cfi_restore (lr)
 
-#ifdef IS_IN_rtld
+#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__
+# define NEED_HWCAP 1
+#endif
+
+#ifdef NEED_HWCAP
+# ifdef IS_IN_rtld
 	ldr	a2, 1f
 	ldr	a3, .Lrtld_local_ro
 0:	add	a2, pc, a2
 	add	a2, a2, a3
 	ldr	a2, [a2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET]
-#else
-#ifdef PIC
+# else
+#  ifdef PIC
 	ldr	a2, 1f
 	ldr	a3, .Lrtld_global_ro
 0:	add	a2, pc, a2
 	ldr	a2, [a2, a3]
 	ldr	a2, [a2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET]
-#else
+#  else
 	ldr	a2, .Lhwcap
 	ldr	a2, [a2, #0]
-#endif
+#  endif
+# endif
 #endif
 
 #ifdef __SOFTFP__
@@ -79,6 +86,7 @@ ENTRY (__longjmp)
 	mcr	p10, 7, a3, cr1, cr0, 0
 .Lno_vfp:
 
+#ifndef ARM_ASSUME_NO_IWMMXT
 	tst	a2, #HWCAP_ARM_IWMMXT
 	beq	.Lno_iwmmxt
 
@@ -91,22 +99,25 @@ ENTRY (__longjmp)
 	ldcl	p1, cr14, [r12], #8
 	ldcl	p1, cr15, [r12], #8
 .Lno_iwmmxt:
+#endif
 
 	DO_RET(lr)
 
-#ifdef IS_IN_rtld
+#ifdef NEED_HWCAP
+# ifdef IS_IN_rtld
 1:	.long	_GLOBAL_OFFSET_TABLE_ - 0b - 8
 .Lrtld_local_ro:
 	.long	C_SYMBOL_NAME(_rtld_local_ro)(GOTOFF)
-#else
-#ifdef PIC
+# else
+#  ifdef PIC
 1:	.long	_GLOBAL_OFFSET_TABLE_ - 0b - 8
 .Lrtld_global_ro:
 	.long	C_SYMBOL_NAME(_rtld_global_ro)(GOT)
-#else
+#  else
 .Lhwcap:
 	.long	C_SYMBOL_NAME(_dl_hwcap)
-#endif
+#  endif
+# endif
 #endif
 
 END (__longjmp)
diff --git a/ports/sysdeps/arm/arm-features.h b/ports/sysdeps/arm/arm-features.h
index 0f99b3a..41befb5 100644
--- a/ports/sysdeps/arm/arm-features.h
+++ b/ports/sysdeps/arm/arm-features.h
@@ -31,4 +31,9 @@
 # define ARM_HAVE_VFP	1
 #endif
 
+/* An OS-specific arm-features.h file may define ARM_ASSUME_NO_IWMMXT
+   to indicate at compile time that iWMMXt hardware is never present
+   at runtime (or that we never care about its state) and so need not
+   be checked for.  */
+
 #endif  /* arm-features.h */
diff --git a/ports/sysdeps/arm/setjmp.S b/ports/sysdeps/arm/setjmp.S
index 9bfacc1..dbd59dd 100644
--- a/ports/sysdeps/arm/setjmp.S
+++ b/ports/sysdeps/arm/setjmp.S
@@ -21,6 +21,7 @@
 #define _ASM
 #include <bits/setjmp.h>
 #include <rtld-global-offsets.h>
+#include <arm-features.h>
 
 ENTRY (__sigsetjmp)
 	mov	ip, r0
@@ -28,24 +29,30 @@ ENTRY (__sigsetjmp)
 	/* Save registers */
 	stmia	ip!, {v1-v6, sl, fp, sp, lr}
 
+#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__
+# define NEED_HWCAP 1
+#endif
+
+#ifdef NEED_HWCAP
 	/* Check if we have a VFP unit.  */
-#ifdef IS_IN_rtld
+# ifdef IS_IN_rtld
 	ldr	a3, 1f
 	ldr	a4, .Lrtld_local_ro
 0:	add	a3, pc, a3
 	add	a3, a3, a4
 	ldr	a3, [a3, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET]
-#else
-#ifdef PIC
+# else
+#  ifdef PIC
 	ldr	a3, 1f
 	ldr	a4, .Lrtld_global_ro
 0:	add	a3, pc, a3
 	ldr	a3, [a3, a4]
 	ldr	a3, [a3, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET]
-#else
+#  else
 	ldr	a3, .Lhwcap
 	ldr	a3, [a3, #0]
-#endif
+#  endif
+# endif
 #endif
 
 #ifdef __SOFTFP__
@@ -64,6 +71,7 @@ ENTRY (__sigsetjmp)
 	str	a4, [ip], #4
 .Lno_vfp:
 
+#ifndef ARM_ASSUME_NO_IWMMXT
 	tst	a3, #HWCAP_ARM_IWMMXT
 	beq	.Lno_iwmmxt
 
@@ -76,23 +84,26 @@ ENTRY (__sigsetjmp)
 	stcl	p1, cr14, [r12], #8
 	stcl	p1, cr15, [r12], #8
 .Lno_iwmmxt:
+#endif
 
 	/* Make a tail call to __sigjmp_save; it takes the same args.  */
 	B	PLTJMP(C_SYMBOL_NAME(__sigjmp_save))
 
-#ifdef IS_IN_rtld
+#ifdef NEED_HWCAP
+# ifdef IS_IN_rtld
 1:	.long	_GLOBAL_OFFSET_TABLE_ - 0b - 8
 .Lrtld_local_ro:
 	.long	C_SYMBOL_NAME(_rtld_local_ro)(GOTOFF)
-#else
-#ifdef PIC
+# else
+#  ifdef PIC
 1:	.long	_GLOBAL_OFFSET_TABLE_ - 0b - 8
 .Lrtld_global_ro:
 	.long	C_SYMBOL_NAME(_rtld_global_ro)(GOT)
-#else
+#  else
 .Lhwcap:
 	.long	C_SYMBOL_NAME(_dl_hwcap)
-#endif
+#  endif
+# endif
 #endif
 
 END (__sigsetjmp)

-----------------------------------------------------------------------

Summary of changes:
 ports/ChangeLog.arm              |    7 +++++++
 ports/sysdeps/arm/__longjmp.S    |   31 +++++++++++++++++++++----------
 ports/sysdeps/arm/arm-features.h |    5 +++++
 ports/sysdeps/arm/setjmp.S       |   31 +++++++++++++++++++++----------
 4 files changed, 54 insertions(+), 20 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]