]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Support PLT and GOT references in local PIC check
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 14 Oct 2015 12:59:50 +0000 (05:59 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 14 Oct 2015 13:00:02 +0000 (06:00 -0700)
Linker in binutils 2.26 and newer generate GOT references instead
PLT references when -z now is passed to linker.  We need to extend
scripts/localplt.awk to allow PLT or GOT references.

[BZ #19007]
* scripts/localplt.awk: Also allow GOT references.
* sysdeps/unix/sysv/linux/i386/localplt.data: Mark
_Unwind_Find_FDE, calloc, memalign, realloc and __libc_memalign
with "+ REL R_386_GLOB_DAT".
* sysdeps/x86_64/localplt.data: Mark calloc, memalign, realloc
and __libc_memalign with "+ RELA R_X86_64_GLOB_DAT".

ChangeLog
NEWS
scripts/localplt.awk
sysdeps/unix/sysv/linux/i386/localplt.data
sysdeps/x86_64/localplt.data

index 5c8dc110f40e399c233402dcd7b99fb625738154..6cc7224af6095fc21930c4854ec87c15b05d0e6c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2015-10-14  H.J. Lu  <hongjiu.lu@intel.com>
+
+       [BZ #19007]
+       * scripts/localplt.awk: Also allow GOT references.
+       * sysdeps/unix/sysv/linux/i386/localplt.data: Mark
+       _Unwind_Find_FDE, calloc, memalign, realloc and __libc_memalign
+       with "+ REL R_386_GLOB_DAT".
+       * sysdeps/x86_64/localplt.data: Mark calloc, memalign, realloc
+       and __libc_memalign with "+ RELA R_X86_64_GLOB_DAT".
+
 2015-10-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        * sysdeps/unix/sysv/linux/i386/brk.c (__brk): Use
diff --git a/NEWS b/NEWS
index 6d39148afc06f905579538ba6889606263bc96cc..5f455fe9d6d00f2043f89f3c245021a431412da5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -17,9 +17,9 @@ Version 2.23
   18661, 18674, 18675, 18681, 18724, 18757, 18778, 18781, 18787, 18789,
   18790, 18795, 18796, 18803, 18820, 18823, 18824, 18825, 18857, 18863,
   18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18956, 18961,
-  18966, 18967, 18969, 18970, 18977, 18980, 18981, 18985, 19003, 19012,
-  19016, 19018, 19032, 19046, 19049, 19050, 19059, 19071, 19076, 19077,
-  19078, 19079, 19085, 19086, 19088, 19094, 19095, 19124, 19125
+  18966, 18967, 18969, 18970, 18977, 18980, 18981, 18985, 19003, 19007,
+  19012, 19016, 19018, 19032, 19046, 19049, 19050, 19059, 19071, 19076,
+  19077, 19078, 19079, 19085, 19086, 19088, 19094, 19095, 19124, 19125
 
 * The obsolete header <regexp.h> has been removed.  Programs that require
   this header must be updated to use <regex.h> instead.
index f75b3b427b1328ddd59dd068052775f5e2828e9a..beaa342922e7fd466224e5c08a9b88430cd7f59d 100644 (file)
@@ -7,7 +7,7 @@
 BEGIN { result = 0 }
 
 FILENAME != lastfile {
-  if (lastfile && jmprel_offset == 0) {
+  if (lastfile && jmprel_offset == 0 && rela_offset == 0 && rel_offset == 0) {
     print FILENAME ": *** failed to find expected output (readelf -WSdr)";
     result = 2;
   }
index 2e03821dfdc59c76e3252028e481c5c81f56b008..4ce8447673be80d5229f345e4b9b4dc048a77366 100644 (file)
@@ -1,17 +1,17 @@
 # Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT
 # relocation with R_386_GLOB_DAT relocation against the same symbol.
-libc.so: _Unwind_Find_FDE
-libc.so: calloc
+libc.so: _Unwind_Find_FDE + REL R_386_GLOB_DAT
+libc.so: calloc + REL R_386_GLOB_DAT
 libc.so: free + REL R_386_GLOB_DAT
 libc.so: malloc + REL R_386_GLOB_DAT
-libc.so: memalign
-libc.so: realloc
+libc.so: memalign + REL R_386_GLOB_DAT
+libc.so: realloc + REL R_386_GLOB_DAT
 libm.so: matherr
 # The dynamic loader uses __libc_memalign internally to allocate aligned
 # TLS storage. The other malloc family of functions are expected to allow
 # user symbol interposition.
-ld.so: __libc_memalign
-ld.so: malloc
-ld.so: calloc
-ld.so: realloc
+ld.so: __libc_memalign + REL R_386_GLOB_DAT
+ld.so: malloc + REL R_386_GLOB_DAT
+ld.so: calloc + REL R_386_GLOB_DAT
+ld.so: realloc + REL R_386_GLOB_DAT
 ld.so: free + REL R_386_GLOB_DAT
index d140476dfeff1ca31a6208142f1860f96ed4edbb..f168b143ff264668fab402a1c872ab3369b08412 100644 (file)
@@ -3,17 +3,17 @@
 # users can define their own functions and have library internals call them.
 # Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT
 # relocation with R_X86_64_GLOB_DAT relocation against the same symbol.
-libc.so: calloc
+libc.so: calloc + RELA R_X86_64_GLOB_DAT
 libc.so: free + RELA R_X86_64_GLOB_DAT
 libc.so: malloc + RELA R_X86_64_GLOB_DAT
-libc.so: memalign
-libc.so: realloc
+libc.so: memalign + RELA R_X86_64_GLOB_DAT
+libc.so: realloc + RELA R_X86_64_GLOB_DAT
 libm.so: matherr
 # The dynamic loader uses __libc_memalign internally to allocate aligned
 # TLS storage. The other malloc family of functions are expected to allow
 # user symbol interposition.
-ld.so: __libc_memalign
-ld.so: malloc
-ld.so: calloc
-ld.so: realloc
+ld.so: __libc_memalign + RELA R_X86_64_GLOB_DAT
+ld.so: malloc + RELA R_X86_64_GLOB_DAT
+ld.so: calloc + RELA R_X86_64_GLOB_DAT
+ld.so: realloc + RELA R_X86_64_GLOB_DAT
 ld.so: free + RELA R_X86_64_GLOB_DAT