Support PLT and GOT references in local PIC check

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".
This commit is contained in:
H.J. Lu 2015-10-14 05:59:50 -07:00
parent 8f763b04a0
commit d3d9c95aef
5 changed files with 29 additions and 19 deletions

View file

@ -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> 2015-10-14 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/unix/sysv/linux/i386/brk.c (__brk): Use * sysdeps/unix/sysv/linux/i386/brk.c (__brk): Use

6
NEWS
View file

@ -17,9 +17,9 @@ Version 2.23
18661, 18674, 18675, 18681, 18724, 18757, 18778, 18781, 18787, 18789, 18661, 18674, 18675, 18681, 18724, 18757, 18778, 18781, 18787, 18789,
18790, 18795, 18796, 18803, 18820, 18823, 18824, 18825, 18857, 18863, 18790, 18795, 18796, 18803, 18820, 18823, 18824, 18825, 18857, 18863,
18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18956, 18961, 18870, 18872, 18873, 18875, 18887, 18921, 18951, 18952, 18956, 18961,
18966, 18967, 18969, 18970, 18977, 18980, 18981, 18985, 19003, 19012, 18966, 18967, 18969, 18970, 18977, 18980, 18981, 18985, 19003, 19007,
19016, 19018, 19032, 19046, 19049, 19050, 19059, 19071, 19076, 19077, 19012, 19016, 19018, 19032, 19046, 19049, 19050, 19059, 19071, 19076,
19078, 19079, 19085, 19086, 19088, 19094, 19095, 19124, 19125 19077, 19078, 19079, 19085, 19086, 19088, 19094, 19095, 19124, 19125
* The obsolete header <regexp.h> has been removed. Programs that require * The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead. this header must be updated to use <regex.h> instead.

View file

@ -7,7 +7,7 @@
BEGIN { result = 0 } BEGIN { result = 0 }
FILENAME != lastfile { 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)"; print FILENAME ": *** failed to find expected output (readelf -WSdr)";
result = 2; result = 2;
} }

View file

@ -1,17 +1,17 @@
# Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT # Linker in binutils 2.26 and newer consolidates R_X86_64_JUMP_SLOT
# relocation with R_386_GLOB_DAT relocation against the same symbol. # relocation with R_386_GLOB_DAT relocation against the same symbol.
libc.so: _Unwind_Find_FDE libc.so: _Unwind_Find_FDE + REL R_386_GLOB_DAT
libc.so: calloc libc.so: calloc + REL R_386_GLOB_DAT
libc.so: free + REL R_386_GLOB_DAT libc.so: free + REL R_386_GLOB_DAT
libc.so: malloc + REL R_386_GLOB_DAT libc.so: malloc + REL R_386_GLOB_DAT
libc.so: memalign libc.so: memalign + REL R_386_GLOB_DAT
libc.so: realloc libc.so: realloc + REL R_386_GLOB_DAT
libm.so: matherr libm.so: matherr
# The dynamic loader uses __libc_memalign internally to allocate aligned # The dynamic loader uses __libc_memalign internally to allocate aligned
# TLS storage. The other malloc family of functions are expected to allow # TLS storage. The other malloc family of functions are expected to allow
# user symbol interposition. # user symbol interposition.
ld.so: __libc_memalign ld.so: __libc_memalign + REL R_386_GLOB_DAT
ld.so: malloc ld.so: malloc + REL R_386_GLOB_DAT
ld.so: calloc ld.so: calloc + REL R_386_GLOB_DAT
ld.so: realloc ld.so: realloc + REL R_386_GLOB_DAT
ld.so: free + REL R_386_GLOB_DAT ld.so: free + REL R_386_GLOB_DAT

View file

@ -3,17 +3,17 @@
# users can define their own functions and have library internals call them. # 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 # 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. # 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: free + RELA R_X86_64_GLOB_DAT
libc.so: malloc + RELA R_X86_64_GLOB_DAT libc.so: malloc + RELA R_X86_64_GLOB_DAT
libc.so: memalign libc.so: memalign + RELA R_X86_64_GLOB_DAT
libc.so: realloc libc.so: realloc + RELA R_X86_64_GLOB_DAT
libm.so: matherr libm.so: matherr
# The dynamic loader uses __libc_memalign internally to allocate aligned # The dynamic loader uses __libc_memalign internally to allocate aligned
# TLS storage. The other malloc family of functions are expected to allow # TLS storage. The other malloc family of functions are expected to allow
# user symbol interposition. # user symbol interposition.
ld.so: __libc_memalign ld.so: __libc_memalign + RELA R_X86_64_GLOB_DAT
ld.so: malloc ld.so: malloc + RELA R_X86_64_GLOB_DAT
ld.so: calloc ld.so: calloc + RELA R_X86_64_GLOB_DAT
ld.so: realloc ld.so: realloc + RELA R_X86_64_GLOB_DAT
ld.so: free + RELA R_X86_64_GLOB_DAT ld.so: free + RELA R_X86_64_GLOB_DAT