This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.15-757-g7f18b53
- From: davem at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 8 May 2012 02:27:53 -0000
- Subject: 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