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.15-757-g7f18b53


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  7f18b530e92914cfb5c5991e6610befc0444de40 (commit)
      from  20f244a03fda84d1556674584b340e2459ef3d99 (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=7f18b530e92914cfb5c5991e6610befc0444de40

commit 7f18b530e92914cfb5c5991e6610befc0444de40
Author: David S. Miller <davem@davemloft.net>
Date:   Mon May 7 16:54:11 2012 -0700

    Fix sparc libm when all of glibc is built with -frounding-math.
    
    	[BZ #14074]
    	* sysdeps/sparc/sysdep.h (SPARC_PIC_THUNK_CALL): New macro.
    	(SETUP_PIC_REG): Use it.
    	(SETUP_PIC_REG_LEAF): Use it.

diff --git a/ChangeLog b/ChangeLog
index b80b485..ab0b7cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-05-07  David S. Miller  <davem@davemloft.net>
+
+	[BZ #14074]
+	* sysdeps/sparc/sysdep.h (SPARC_PIC_THUNK_CALL): New macro.
+	(SETUP_PIC_REG): Use it.
+	(SETUP_PIC_REG_LEAF): Use it.
+
 2012-05-07  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #13885]
diff --git a/sysdeps/sparc/sysdep.h b/sysdeps/sparc/sysdep.h
index 2702620..bcffec9 100644
--- a/sysdeps/sparc/sysdep.h
+++ b/sysdeps/sparc/sysdep.h
@@ -58,21 +58,34 @@ __sparc_get_pc_thunk.reg:		   				\
 	.previous;							\
 	.endif;
 
-/* Even when v9 we use a call sequence instead of using "rd %pc" because
+/* The "-4" and "+4" offsets against _GLOBAL_OFFSET_TABLE_ are
+   critical since they represent the offset from the thunk call to the
+   instruction containing the _GLOBAL_OFFSET_TABLE_ reference.
+   Therefore these instructions cannot be moved around without
+   appropriate adjustments to those offsets.
+
+   Furthermore, these expressions are special in another regard.  When
+   the assembler sees a reference to _GLOBAL_OFFSET_TABLE_ inside of
+   a %hi() or %lo(), it emits a PC-relative relocation.  This causes
+   R_SPARC_HI22 to turn into R_SPARC_PC22, and R_SPARC_LO10 to turn into
+   R_SPARC_PC10, respectively.
+
+   Even when v9 we use a call sequence instead of using "rd %pc" because
    RDPC is extremely expensive and incurs a full pipeline flush.  */
 
-#define SETUP_PIC_REG(reg)						\
-	SPARC_PIC_THUNK(reg)						\
+#define SPARC_PIC_THUNK_CALL(reg)					\
 	sethi	%hi(_GLOBAL_OFFSET_TABLE_-4), %##reg;			\
 	call	__sparc_get_pc_thunk.reg;				\
 	 or	%##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg;
 
+#define SETUP_PIC_REG(reg)						\
+	SPARC_PIC_THUNK(reg)						\
+	SPARC_PIC_THUNK_CALL(reg)
+
 #define SETUP_PIC_REG_LEAF(reg, tmp)					\
 	SPARC_PIC_THUNK(reg)						\
-	sethi	%hi(_GLOBAL_OFFSET_TABLE_-4), %##reg;			\
 	mov	%o7, %##tmp;		      				\
-	call	__sparc_get_pc_thunk.reg;				\
-	 or	%##reg, %lo(_GLOBAL_OFFSET_TABLE_+4), %##reg;		\
+	SPARC_PIC_THUNK_CALL(reg);					\
 	mov	%##tmp, %o7;
 
 #undef ENTRY

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

Summary of changes:
 ChangeLog              |    7 +++++++
 sysdeps/sparc/sysdep.h |   25 +++++++++++++++++++------
 2 files changed, 26 insertions(+), 6 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]