binutils-gdb/ld/testsuite/ld-i386
H.J. Lu a5b4ee9451 Disallow copy relocation against protected data symbol
We shpouldn't generate copy relocation to resolve reference to protected
data symbol defined in shared object with the NO_COPY_ON_PROTECTED
property.  This patch adds a bit to elf_obj_tdata as well as
elf_i386_link_hash_entry and elf_x86_64_link_hash_entry to track the bfd
with the NO_COPY_ON_PROTECTED property as well as protected symbol
defined in shared object.  extern_protected_data is set to FALSE if any
input relocatable file contains the NO_COPY_ON_PROTECTED property.

bfd/

	PR ld/21997
	* elf-bfd.h (elf_obj_tdata): Use ENUM_BITFIELD on object_id,
	dyn_lib_class and has_gnu_symbols.  Change bad_symtab to bitfield.
	Add a has_no_copy_on_protected bitfield.
	(elf_has_no_copy_on_protected): New.
	* elf-properties.c (_bfd_elf_parse_gnu_properties): Set
	elf_has_no_copy_on_protected for GNU_PROPERTY_NO_COPY_ON_PROTECTED.
	(elf_merge_gnu_property_list): Likewise.
	(_bfd_elf_link_setup_gnu_properties): Set extern_protected_data
	to FALSE for elf_has_no_copy_on_protected.
	* elf32-i386.c (SYMBOL_NO_COPYRELOC): New.
	(elf_i386_link_hash_entry): Add def_protected.
	(elf_i386_adjust_dynamic_symbol): Also check SYMBOL_NO_COPYRELOC
	when checking info->nocopyreloc.
	(elf_i386_link_setup_gnu_properties): Don't set
	extern_protected_data here.
	(elf_i386_merge_symbol_attribute): New function.
	(elf_backend_merge_symbol_attribute): New.
	* elf64-x86-64.c (SYMBOL_NO_COPYRELOC): New.
	(elf_x86_64_link_hash_entry): Add def_protected.
	(elf_x86_64_need_pic): Report protected symbol for def_protected.
	(elf_x86_64_adjust_dynamic_symbol): Also check SYMBOL_NO_COPYRELOC
	when checking info->nocopyreloc.
	(elf_x86_64_relocate_section): Also check for R_X86_64_PC32
	relocation run-time overflow and unresolvable R_X86_64_32S
	relocation against protected data symbol defined in shared object
	with GNU_PROPERTY_NO_COPY_ON_PROTECTED.
	(elf_x86_64_link_setup_gnu_properties): Don't set
	extern_protected_data here.
	(elf_x86_64_merge_symbol_attribute): New function.
	(elf_backend_merge_symbol_attribute): New.

ld/

	PR ld/21997
	* testsuite/ld-i386/i386.exp: Run PR ld/21997 tests.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
	* testsuite/ld-i386/pr21997-1a.S: New file.
	* testsuite/ld-i386/pr21997-1b.c: Likewise.
	* testsuite/ld-i386/pr21997-1c.S: Likewise.
	* testsuite/ld-x86-64/pr21997-1a.S: Likewise.
	* testsuite/ld-x86-64/pr21997-1a.err: Likewise.
	* testsuite/ld-x86-64/pr21997-1b.c: Likewise.
	* testsuite/ld-x86-64/pr21997-1b.err: Likewise.
	* testsuite/ld-x86-64/pr21997-1c.c: Likewise.
2017-08-26 19:26:21 -07:00
..
abs-iamcu.d
abs.d
abs.s
alloc.d
alloc.s
alloc.t
branch1.d
branch1.s
call1.d
call1.s
call2.d
call2.s
call3.s
call3a.d
call3b.d
call3c.d
call3d.d
call3e.d
call3f.d
call3g.d
call3h.d
combreloc.d
combreloc.s
compressed1.d
compressed1.s
copyreloc-lib.c
copyreloc-main1.rd
copyreloc-main2.rd
copyreloc-main.out
copyreloc-main.S
discarded1.d
discarded1.s
discarded1.t
dummy.c
dummy.s
emit-relocs-nacl.rd
emit-relocs.rd
emit-relocs.s
export-class.exp
foo.s
got1.dd
got1.out
got1a.S
got1b.c
got1c.c
got1d.S
hidden1.d
hidden1.s
hidden2.d
hidden2.s
hidden3.d
hidden3.s
i386-export-class.rd
i386-export-class.xd
i386.exp Disallow copy relocation against protected data symbol 2017-08-26 19:26:21 -07:00
iamcu-1.d
iamcu-2.d
iamcu-3.d
iamcu-4.d
ibt-plt-1.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
ibt-plt-1.s
ibt-plt-2.s
ibt-plt-2a.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
ibt-plt-2b.d
ibt-plt-2c.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
ibt-plt-2d.d
ibt-plt-3.s
ibt-plt-3a.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
ibt-plt-3b.d
ibt-plt-3c.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
ibt-plt-3d.d
ifunc-1a.c
ifunc-1b.S
ifunc-1c.S
ifunc-1d.S
jmp1.d
jmp1.s
jmp2.d
jmp2.s
lea1.s
lea1a.d
lea1b.d
lea1c.d
lea1d.d
lea1e.d
lea1f.d
libno-plt-1b.dd
libno-plt-1b.rd
load1-nacl.d
load1.d
load1.s
load2.d
load2.s
load3.d
load3.s
load4.s
load4a.d
load4b.d
load5.s
load5a.d
load5b.d
load6.d
load6.s
load7.d
load7.map
load7.s
mov1.s
mov1a.d
mov1b.d
mov2.s
mov2a.d
mov2b.d
mov3.d
mov3.s
no-plt-1a.dd
no-plt-1a.rd
no-plt-1b.dd
no-plt-1b.rd
no-plt-1c.dd
no-plt-1c.rd
no-plt-1d.dd
no-plt-1d.rd
no-plt-1e.dd
no-plt-1e.rd
no-plt-1f.dd
no-plt-1f.rd
no-plt-1g.dd
no-plt-1g.rd
no-plt-1h.dd
no-plt-1h.rd
no-plt-1i.dd
no-plt-1i.rd
no-plt-1j.dd
no-plt-1j.rd
no-plt-check1a.S
no-plt-check1b.S
no-plt-extern1a.S
no-plt-extern1b.S
no-plt-func1.c
no-plt-main1.c
no-plt.exp Pass $NOPIE_CFLAGS and $NOPIE_LDFLAGS to more ELF tests 2017-06-22 09:53:33 -07:00
nogot1.d
nogot1.s
nogot2.d
nogot2.s
pass.c
pass.out
pcrel8.d
pcrel8.s
pcrel16.d
pcrel16.s
pcrel16abs.d
pcrel16abs.s
pie1-nacl.d i386: Add tests for PIE with undefined weak symbol 2017-07-17 12:42:32 -07:00
pie1.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
pie1.s i386: Add tests for PIE with undefined weak symbol 2017-07-17 12:42:32 -07:00
plt2.dd
plt2.rd
plt2.s
plt-lib.c
plt-main1.c
plt-main1.rd
plt-main2.c
plt-main2.rd
plt-main3.c
plt-main3.rd
plt-main4.c
plt-main4.rd
plt-main5.c
plt-main-ibt.dd
plt-main.out
plt-main.rd
plt-nacl.pd
plt-pic2.dd Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
plt-pic-nacl.pd
plt-pic.pd
plt-pic.s
plt-pie-ibt.dd
plt.pd
plt.s
pltgot-1.d
pltgot-1.s
pltgot-2.d
pltlib.s
pr12570a.d
pr12570a.s
pr12570b.d
pr12570b.s
pr12627.d
pr12627.s
pr12627.t
pr12718.d
pr12718.s
pr12921.d
pr12921.s
pr13302.d
pr13302.s
pr14215.d
pr14215.s
pr17057.d
pr17057.s
pr17306a.s
pr17306b.s
pr17689.out
pr17689.rd
pr17689a.c
pr17689a.t
pr17689b.S
pr17689now.rd
pr17689ver.rd
pr17709-nacl.rd
pr17709.rd
pr17709a.s
pr17709b.s
pr17827.rd
pr17935-1.d
pr17935-1.s
pr17935-2.d
pr17935-2.s
pr18801.d
pr18801.s
pr18815.d
pr18815.s
pr18900.out
pr18900a.c
pr18900a.rd
pr18900b.c
pr18900b.rd
pr18900c.c
pr19031.out
pr19031a.c
pr19031b.S
pr19031c.c
pr19175.d
pr19175.s
pr19175.t
pr19319.dd
pr19319a.S
pr19319b.S
pr19539.d
pr19539.s
pr19539.t
pr19609-1.s
pr19609-1a.d
pr19609-1b.d
pr19609-1c.d
pr19609-1d.d
pr19609-1e.d
pr19609-1f.d
pr19609-1g.d
pr19609-1h.d
pr19609-1i.d
pr19609-2.s
pr19609-2a.d
pr19609-2b.d
pr19609-2c.d
pr19615.d
pr19615.s
pr19636-1.s
pr19636-1a.d
pr19636-1b.d
pr19636-1c.d
pr19636-1d-nacl.d
pr19636-1d.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
pr19636-1e.d
pr19636-1f.d
pr19636-1g.d
pr19636-1h.d
pr19636-1i.d
pr19636-2.s
pr19636-2a.d
pr19636-2b.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
pr19636-2c-nacl.d
pr19636-2c.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
pr19636-2d-nacl.d
pr19636-2d.d
pr19636-2e-nacl.d
pr19636-2e.d
pr19636-3.s
pr19636-3a.d
pr19636-3b.d
pr19636-3c.d
pr19636-3d.d
pr19636-3e.d
pr19636-3f.d
pr19636-3g.d
pr19636-4.s
pr19636-4a.d
pr19636-4b.d
pr19636-4c.d
pr19636-4d.d
pr19645.d
pr19645.s
pr19704.out
pr19704a.c
pr19704b.c
pr19827-nacl.rd
pr19827.rd
pr19827a.S
pr19827b.S
pr19939.s
pr19939a.d
pr19939b.d
pr20117.d
pr20117.s
pr20244-1.s
pr20244-1a.d
pr20244-1b.d
pr20244-1c.d
pr20244-2.s
pr20244-2a.d
pr20244-2b.d
pr20244-2c.d
pr20244-2d.d
pr20244-3a.c
pr20244-3b.S
pr20244-3c.S
pr20244-3d.S
pr20244-4.s
pr20244-4a.d
pr20244-4b.d
pr20244-4c.d
pr20253-1a.c
pr20253-1b.S
pr20253-1c.S
pr20253-1d.S
pr20253-2a.c
pr20253-2b.S
pr20253-2c.S
pr20253-2d.S
pr20253-3.d
pr20253-3.s
pr20253-4.s
pr20253-4a.d
pr20253-4b.d
pr20253-4c.d
pr20253-5.d
pr20253-5.s
pr20515.d
pr20515.s
pr20830.d Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
pr20830.s
pr21168a.c
pr21168b.S
pr21884-nacl.d ld: Restore linker scripts in PR ld/21884 tests 2017-08-13 05:41:37 -07:00
pr21884-nacl.t ld: Restore linker scripts in PR ld/21884 tests 2017-08-13 05:41:37 -07:00
pr21884.d ld: Restore linker scripts in PR ld/21884 tests 2017-08-13 05:41:37 -07:00
pr21884.t ld: Restore linker scripts in PR ld/21884 tests 2017-08-13 05:41:37 -07:00
pr21997-1a.S Disallow copy relocation against protected data symbol 2017-08-26 19:26:21 -07:00
pr21997-1b.c Disallow copy relocation against protected data symbol 2017-08-26 19:26:21 -07:00
pr21997-1c.S Disallow copy relocation against protected data symbol 2017-08-26 19:26:21 -07:00
pr22001-1a.c x86-64: Check relocations with -z nocopyreloc 2017-08-24 06:34:38 -07:00
pr22001-1b.c x86-64: Check relocations with -z nocopyreloc 2017-08-24 06:34:38 -07:00
pr22001-1c.S x86-64: Check relocations with -z nocopyreloc 2017-08-24 06:34:38 -07:00
property-1.r
property-2.r
property-3.r
property-4.r
property-5.r
property-6.r
property-6a.c
property-6b.c
property-6c.S
property-7.r
property-no-copy.S
property-stack.S
property-unsorted-1.S
property-unsorted-2.S
property-x86-1.S
property-x86-2.S
property-x86-3.d
property-x86-3.s
property-x86-4a.d
property-x86-4a.s
property-x86-4b.d
property-x86-4b.s
property-x86-empty.s
property-x86-ibt1a.d
property-x86-ibt1b.d
property-x86-ibt2.d
property-x86-ibt3a.d
property-x86-ibt3b.d
property-x86-ibt4.d
property-x86-ibt5.d
property-x86-ibt.s
property-x86-shstk1a.d
property-x86-shstk1b.d
property-x86-shstk2.d
property-x86-shstk3a.d
property-x86-shstk3b.d
property-x86-shstk4.d
property-x86-shstk5.d
property-x86-shstk.s
protected1.d
protected1.s
protected2.d
protected2.s
protected3.d
protected3.s
protected4.d
protected4.s
protected5.d
protected5.s
protected6.s
protected6a.d
protected6b.d
protected7.d x86: Clear extern_protected_data for GNU_PROPERTY_NO_COPY_ON_PROTECTED 2017-08-23 10:15:58 -07:00
protected7.s x86: Clear extern_protected_data for GNU_PROPERTY_NO_COPY_ON_PROTECTED 2017-08-23 10:15:58 -07:00
reloc.d
reloc.s
start.s
tls-def1.c
tls-gd1.S
tls-ld1.S
tls-main1.c
tls.exp
tlsbin2-nacl.rd
tlsbin2.dd
tlsbin2.rd
tlsbin2.sd
tlsbin2.td
tlsbin-nacl.rd
tlsbin.dd
tlsbin.rd
tlsbin.s
tlsbin.sd
tlsbin.td
tlsbindesc-nacl.rd
tlsbindesc.dd
tlsbindesc.rd
tlsbindesc.s
tlsbindesc.sd
tlsbindesc.td
tlsbinpic2.s
tlsbinpic.s
tlsdesc1a.c
tlsdesc1b.c
tlsdesc2.d
tlsdesc-nacl.rd
tlsdesc.dd
tlsdesc.rd
tlsdesc.s
tlsdesc.sd
tlsdesc.td
tlsg.s
tlsg.sd
tlsgd1.dd
tlsgd1.s
tlsgd2.d
tlsgd2.s
tlsgd3.dd
tlsgd3.s
tlsgd4.d
tlsgd4.s
tlsgdesc-nacl.rd
tlsgdesc.dd
tlsgdesc.rd
tlsgdesc.s
tlsie1.dd
tlsie1.s
tlsie2.d
tlsie2.s
tlsie3.d
tlsie3.s
tlsie4.d
tlsie4.s
tlsie5.d
tlsie5.s
tlsindntpoff.dd
tlsindntpoff.s
tlsld1.dd
tlsld1.s
tlsld2.dd
tlsld2.s
tlslib.s
tlsnopic1.s
tlsnopic2.s
tlsnopic-nacl.rd
tlsnopic.dd
tlsnopic.rd
tlsnopic.sd
tlspic1.s
tlspic2-nacl.rd
tlspic2.dd
tlspic2.rd
tlspic2.s
tlspic2.sd
tlspic2.td
tlspic3.s
tlspic-nacl.rd
tlspic.dd
tlspic.rd
tlspic.sd
tlspic.td
tlspie1.d
tlspie1.s
tlspie2.d
tlspie2.s
tlspie3.s
tlspie3a.d
tlspie3b.d
tlspie3c.d
undefweak.s
undefweaka.d
undefweakb.d
vxworks1-lib.dd
vxworks1-lib.nd
vxworks1-lib.rd
vxworks1-lib.s
vxworks1-lib.td
vxworks1-static.d
vxworks1.dd
vxworks1.ld
vxworks1.rd
vxworks1.s
vxworks2-static.sd
vxworks2.s
vxworks2.sd
warn1.d
warn1.s
weakundef1.c i386: Add hidden weak undefined tests 2017-06-22 15:13:15 -07:00
zero.s