[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commits] r20479 - in /fsf/trunk/libc: ChangeLog NEWS sysdeps/x86_64/dl-machine.h
- To: commits@xxxxxxxxxx
- Subject: [Commits] r20479 - in /fsf/trunk/libc: ChangeLog NEWS sysdeps/x86_64/dl-machine.h
- From: eglibc@xxxxxxxxxx
- Date: Mon, 03 Sep 2012 00:01:45 -0000
Author: eglibc
Date: Mon Sep 3 00:01:44 2012
New Revision: 20479
Log:
Import glibc-mainline for 2012-09-03
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/NEWS
fsf/trunk/libc/sysdeps/x86_64/dl-machine.h
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Mon Sep 3 00:01:44 2012
@@ -1,8 +1,16 @@
+2012-09-02 H.J. Lu <hongjiu.lu@xxxxxxxxx>
+
+ [BZ #14538]
+ * sysdeps/x86_64/dl-machine.h (elf_machine_dynamic): Use the
+ first element of the GOT.
+ (elf_machine_load_address): Return the difference between
+ the runtime address of _DYNAMIC and elf_machine_dynamic ().
+
2012-09-01 Allan McRae <allan@xxxxxxxxxxxxx>
- [BZ #13412]
- * configure.in (AWK): Require gawk version 3.0 or later.
- * configure: Regenerated.
+ [BZ #13412]
+ * configure.in (AWK): Require gawk version 3.0 or later.
+ * configure: Regenerated.
2012-09-01 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
Modified: fsf/trunk/libc/NEWS
==============================================================================
--- fsf/trunk/libc/NEWS (original)
+++ fsf/trunk/libc/NEWS Mon Sep 3 00:01:44 2012
@@ -12,7 +12,7 @@
3479, 5400, 6778, 6808, 9685, 11607, 13412, 13717, 13696, 13939, 14042,
14090, 14166, 14150, 14151, 14154, 14157, 14166, 14173, 14195, 14252,
14283, 14298, 14303, 14307, 14328, 14331, 14336, 14337, 14347, 14349,
- 14459, 14476, 14505, 14516, 14519, 14532
+ 14459, 14476, 14505, 14516, 14519, 14532, 14538
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
Optimized versions of memcpy, memset, and memcmp added for System z10 and
Modified: fsf/trunk/libc/sysdeps/x86_64/dl-machine.h
==============================================================================
--- fsf/trunk/libc/sysdeps/x86_64/dl-machine.h (original)
+++ fsf/trunk/libc/sysdeps/x86_64/dl-machine.h Mon Sep 3 00:01:44 2012
@@ -41,13 +41,9 @@
static inline ElfW(Addr) __attribute__ ((unused))
elf_machine_dynamic (void)
{
- ElfW(Addr) addr;
-
- /* This works because we have our GOT address available in the small PIC
- model. */
- addr = (ElfW(Addr)) &_DYNAMIC;
-
- return addr;
+ /* This produces an IP-relative reloc which is resolved at link time. */
+ extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden;
+ return _GLOBAL_OFFSET_TABLE_[0];
}
@@ -55,31 +51,11 @@
static inline ElfW(Addr) __attribute__ ((unused))
elf_machine_load_address (void)
{
- ElfW(Addr) addr;
-
- /* The easy way is just the same as on x86:
- leaq _dl_start, %0
- leaq _dl_start(%%rip), %1
- subq %0, %1
- but this does not work with binutils since we then have
- a R_X86_64_32S relocation in a shared lib.
-
- Instead we store the address of _dl_start in the data section
- and compare it with the current value that we can get via
- an RIP relative addressing mode. Note that this is the address
- of _dl_start before any relocation performed at runtime. In case
- the binary is prelinked the resulting "address" is actually a
- load offset which is zero if the binary was loaded at the address
- it is prelinked for. */
-
- asm ("lea _dl_start(%%rip), %0\n\t"
- "sub 1f(%%rip), %0\n\t"
- ".section\t.data.rel.ro\n"
- "1:\t" ASM_ADDR " _dl_start\n\t"
- ".previous\n\t"
- : "=r" (addr) : : "cc");
-
- return addr;
+ /* Compute the difference between the runtime address of _DYNAMIC as seen
+ by an IP-relative reference, and the link-time address found in the
+ special unrelocated first GOT entry. */
+ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
+ return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic ();
}
/* Set up the loaded object described by L so its unrelocated PLT
_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits