diff options
Diffstat (limited to 'ld')
77 files changed, 638 insertions, 1 deletions
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 3e9f684..2f115af 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1354,10 +1354,14 @@ gld${EMULATION_NAME}_find_exp_assignment (etree_type *exp) will do no harm. */ if (strcmp (exp->assign.dst, ".") != 0) { + /* Symbol defined --defsym command-line option or absolute + symbol defined in linker script have absolute value. */ if (!bfd_elf_record_link_assignment (link_info.output_bfd, &link_info, exp->assign.dst, provide, - exp->assign.hidden)) + exp->assign.hidden, + (exp->assign.defsym + || !expld.rel_from_abs))) einfo ("%P%F: failed to record assignment to %s: %E\n", exp->assign.dst); } @@ -1506,6 +1510,7 @@ gld${EMULATION_NAME}_before_allocation (void) library. */ ehdr_start = h; ehdr_start_save = h->root; + h->def_linker = 1; h->root.type = bfd_link_hash_defined; h->root.u.def.section = bfd_abs_section_ptr; h->root.u.def.value = 0; diff --git a/ld/testsuite/ld-elf/pr19818a.d b/ld/testsuite/ld-elf/pr19818a.d new file mode 100644 index 0000000..6e493c4 --- /dev/null +++ b/ld/testsuite/ld-elf/pr19818a.d @@ -0,0 +1,6 @@ +#source: pr19818a.s +#ld: -pie --defsym foo=0x7fffffff +#readelf: -r --wide +#target: *-*-linux* *-*-gnu* *-*-solaris* + +There are no relocations in this file. diff --git a/ld/testsuite/ld-elf/pr19818a.s b/ld/testsuite/ld-elf/pr19818a.s new file mode 100644 index 0000000..447c06b --- /dev/null +++ b/ld/testsuite/ld-elf/pr19818a.s @@ -0,0 +1,12 @@ + .text + .global start /* Used by SH targets. */ +start: + .global _start +_start: + .global __start +__start: + .global main /* Used by HPPA targets. */ +main: + .dc.a 0 + .data + .dc.a foo diff --git a/ld/testsuite/ld-elf/pr19818b.d b/ld/testsuite/ld-elf/pr19818b.d new file mode 100644 index 0000000..2a025c8 --- /dev/null +++ b/ld/testsuite/ld-elf/pr19818b.d @@ -0,0 +1,7 @@ +#source: pr19818a.s +#source: pr19818b.s +#ld: -pie +#readelf: -r --wide +#target: *-*-linux* *-*-gnu* *-*-solaris* + +There are no relocations in this file. diff --git a/ld/testsuite/ld-elf/pr19818b.s b/ld/testsuite/ld-elf/pr19818b.s new file mode 100644 index 0000000..c72adaa --- /dev/null +++ b/ld/testsuite/ld-elf/pr19818b.s @@ -0,0 +1,2 @@ + .globl foo + foo = 0x7fffffff diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 1e52cdb..27c252a 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -364,6 +364,26 @@ run_dump_test "pr19609-2c" run_dump_test "undefweaka" run_dump_test "undefweakb" run_dump_test "pr19539" +run_dump_test "pr19818-1a" +run_dump_test "pr19818-1b" +run_dump_test "pr19818-1c" +run_dump_test "pr19818-1a" +run_dump_test "pr19818-1e" +run_dump_test "pr19818-1f" +run_dump_test "pr19818-1g" +run_dump_test "pr19818-1h" +run_dump_test "pr19818-1i" +run_dump_test "pr19818-1j" +run_dump_test "pr19818-1k" +run_dump_test "pr19818-1l" +run_dump_test "pr19818-2a" +run_dump_test "pr19818-2b" +run_dump_test "pr19818-2c" +run_dump_test "pr19818-2d" +run_dump_test "pr19818-2e" +run_dump_test "pr19818-2f" +run_dump_test "pr19818-2g" +run_dump_test "pr19818-2h" if { !([istarget "i?86-*-linux*"] || [istarget "i?86-*-gnu*"] diff --git a/ld/testsuite/ld-i386/pr19818-1.t b/ld/testsuite/ld-i386/pr19818-1.t new file mode 100644 index 0000000..591940b --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1.t @@ -0,0 +1 @@ +foo = 0xffffffff; diff --git a/ld/testsuite/ld-i386/pr19818-1a.d b/ld/testsuite/ld-i386/pr19818-1a.d new file mode 100644 index 0000000..9f5a15f --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1a.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -pie -m elf_i386 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-1a.s b/ld/testsuite/ld-i386/pr19818-1a.s new file mode 100644 index 0000000..df03cd1 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1a.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + movl $foo, %eax diff --git a/ld/testsuite/ld-i386/pr19818-1b.d b/ld/testsuite/ld-i386/pr19818-1b.d new file mode 100644 index 0000000..497c013 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1b.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -pie -m elf_i386 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-1b.s b/ld/testsuite/ld-i386/pr19818-1b.s new file mode 100644 index 0000000..6f37759 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1b.s @@ -0,0 +1,2 @@ + .globl foo + foo = 0xffffffff diff --git a/ld/testsuite/ld-i386/pr19818-1c.d b/ld/testsuite/ld-i386/pr19818-1c.d new file mode 100644 index 0000000..7d15d1f --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1c.d @@ -0,0 +1,7 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --32 +#ld: -pie -m elf_i386 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-1c.s b/ld/testsuite/ld-i386/pr19818-1c.s new file mode 100644 index 0000000..5cdf8b9 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1c.s @@ -0,0 +1,3 @@ + .globl foo + .hidden foo + foo = 0xffffffff diff --git a/ld/testsuite/ld-i386/pr19818-1d.d b/ld/testsuite/ld-i386/pr19818-1d.d new file mode 100644 index 0000000..7eb1901 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1d.d @@ -0,0 +1,14 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --32 +#ld: -pie -m elf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-1e.d b/ld/testsuite/ld-i386/pr19818-1e.d new file mode 100644 index 0000000..0edbf86 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1e.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -shared -Bsymbolic -m elf_i386 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-1f.d b/ld/testsuite/ld-i386/pr19818-1f.d new file mode 100644 index 0000000..d74cbce --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1f.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -shared -Bsymbolic -m elf_i386 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-1g.d b/ld/testsuite/ld-i386/pr19818-1g.d new file mode 100644 index 0000000..3b5b689 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1g.d @@ -0,0 +1,7 @@ +#source: pr19818-1a.s +#source: pr19818-1c.s +#as: --32 +#ld: -shared -m elf_i386 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-1h.d b/ld/testsuite/ld-i386/pr19818-1h.d new file mode 100644 index 0000000..309ef23 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1h.d @@ -0,0 +1,14 @@ +#source: pr19818-1a.s +#source: pr19818-1c.s +#as: --32 +#ld: -shared -m elf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-1i.d b/ld/testsuite/ld-i386/pr19818-1i.d new file mode 100644 index 0000000..d46f8f2 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1i.d @@ -0,0 +1,8 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -shared -m elf_i386 --defsym foo=0xffffffff -z nocombreloc +#readelf: -r --wide + +Relocation section '.rel.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name +[0-9a-f]+ +[0-9a-f]+ +R_386_32 +ffffffff +foo diff --git a/ld/testsuite/ld-i386/pr19818-1j.d b/ld/testsuite/ld-i386/pr19818-1j.d new file mode 100644 index 0000000..942fdca --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1j.d @@ -0,0 +1,9 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --32 +#ld: -shared -m elf_i386 -z nocombreloc +#readelf: -r --wide + +Relocation section '.rel.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name +[0-9a-f]+ +[0-9a-f]+ +R_386_32 +ffffffff +foo diff --git a/ld/testsuite/ld-i386/pr19818-1k.d b/ld/testsuite/ld-i386/pr19818-1k.d new file mode 100644 index 0000000..d4bdb84 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1k.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -pie -m elf_i386 -T pr19818-1.t +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-1l.d b/ld/testsuite/ld-i386/pr19818-1l.d new file mode 100644 index 0000000..b0cd6d0 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-1l.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --32 +#ld: -pie -m elf_i386 -T pr19818-1.t +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-2.s b/ld/testsuite/ld-i386/pr19818-2.s new file mode 100644 index 0000000..65c0875 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + movl foo@GOT(%ebx), %eax diff --git a/ld/testsuite/ld-i386/pr19818-2a.d b/ld/testsuite/ld-i386/pr19818-2a.d new file mode 100644 index 0000000..2de25e7 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2a.d @@ -0,0 +1,6 @@ +#source: pr19818-2.s +#as: --32 -mrelax-relocations=no +#ld: -pie -m elf_i386 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-2b.d b/ld/testsuite/ld-i386/pr19818-2b.d new file mode 100644 index 0000000..c02a10d --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2b.d @@ -0,0 +1,13 @@ +#source: pr19818-2.s +#as: --32 +#ld: -pie -m elf_i386 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: c7 c0 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-2c.d b/ld/testsuite/ld-i386/pr19818-2c.d new file mode 100644 index 0000000..bf235d4 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2c.d @@ -0,0 +1,7 @@ +#source: pr19818-2.s +#source: pr19818-1b.s +#as: --32 +#ld: -pie -m elf_i386 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-2d.d b/ld/testsuite/ld-i386/pr19818-2d.d new file mode 100644 index 0000000..28a1701 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2d.d @@ -0,0 +1,14 @@ +#source: pr19818-2.s +#source: pr19818-1b.s +#as: --32 +#ld: -pie -m elf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: c7 c0 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-2e.d b/ld/testsuite/ld-i386/pr19818-2e.d new file mode 100644 index 0000000..30337e3 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2e.d @@ -0,0 +1,6 @@ +#source: pr19818-2.s +#as: --32 -mrelax-relocations=no +#ld: -shared -Bsymbolic -m elf_i386 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-2f.d b/ld/testsuite/ld-i386/pr19818-2f.d new file mode 100644 index 0000000..9e238c5 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2f.d @@ -0,0 +1,13 @@ +#source: pr19818-2.s +#as: --32 +#ld: -shared -Bsymbolic -m elf_i386 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: c7 c0 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-i386/pr19818-2g.d b/ld/testsuite/ld-i386/pr19818-2g.d new file mode 100644 index 0000000..4ec0179 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2g.d @@ -0,0 +1,7 @@ +#source: pr19818-2.s +#source: pr19818-1c.s +#as: --32 +#ld: -shared -m elf_i386 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-i386/pr19818-2h.d b/ld/testsuite/ld-i386/pr19818-2h.d new file mode 100644 index 0000000..ab3df88 --- /dev/null +++ b/ld/testsuite/ld-i386/pr19818-2h.d @@ -0,0 +1,14 @@ +#source: pr19818-2.s +#source: pr19818-1c.s +#as: --32 +#ld: -shared -m elf_i386 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: c7 c0 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1.t b/ld/testsuite/ld-x86-64/pr19818-1.t new file mode 100644 index 0000000..591940b --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1.t @@ -0,0 +1 @@ +foo = 0xffffffff; diff --git a/ld/testsuite/ld-x86-64/pr19818-1a.d b/ld/testsuite/ld-x86-64/pr19818-1a.d new file mode 100644 index 0000000..96a72c7 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1a.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -pie -m elf_x86_64 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1a.s b/ld/testsuite/ld-x86-64/pr19818-1a.s new file mode 100644 index 0000000..df03cd1 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1a.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + movl $foo, %eax diff --git a/ld/testsuite/ld-x86-64/pr19818-1b.d b/ld/testsuite/ld-x86-64/pr19818-1b.d new file mode 100644 index 0000000..5b9fbef --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1b.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -pie -m elf_x86_64 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1b.s b/ld/testsuite/ld-x86-64/pr19818-1b.s new file mode 100644 index 0000000..6f37759 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1b.s @@ -0,0 +1,2 @@ + .globl foo + foo = 0xffffffff diff --git a/ld/testsuite/ld-x86-64/pr19818-1c.d b/ld/testsuite/ld-x86-64/pr19818-1c.d new file mode 100644 index 0000000..90d6a3c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1c.d @@ -0,0 +1,7 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --64 +#ld: -pie -m elf_x86_64 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1c.s b/ld/testsuite/ld-x86-64/pr19818-1c.s new file mode 100644 index 0000000..5cdf8b9 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1c.s @@ -0,0 +1,3 @@ + .globl foo + .hidden foo + foo = 0xffffffff diff --git a/ld/testsuite/ld-x86-64/pr19818-1d.d b/ld/testsuite/ld-x86-64/pr19818-1d.d new file mode 100644 index 0000000..63b65af --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1d.d @@ -0,0 +1,14 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --64 +#ld: -pie -m elf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1e.d b/ld/testsuite/ld-x86-64/pr19818-1e.d new file mode 100644 index 0000000..2e693c1 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1e.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --x32 +#ld: -pie -m elf32_x86_64 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1f.d b/ld/testsuite/ld-x86-64/pr19818-1f.d new file mode 100644 index 0000000..afc3ec7 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1f.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --x32 +#ld: -pie -m elf32_x86_64 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1g.d b/ld/testsuite/ld-x86-64/pr19818-1g.d new file mode 100644 index 0000000..ef9a482 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1g.d @@ -0,0 +1,7 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --x32 +#ld: -pie -m elf32_x86_64 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1h.d b/ld/testsuite/ld-x86-64/pr19818-1h.d new file mode 100644 index 0000000..7f591eb --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1h.d @@ -0,0 +1,14 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --x32 +#ld: -pie -m elf32_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1i.d b/ld/testsuite/ld-x86-64/pr19818-1i.d new file mode 100644 index 0000000..cf1a226 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1i.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -shared -Bsymbolic -m elf_x86_64 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1j.d b/ld/testsuite/ld-x86-64/pr19818-1j.d new file mode 100644 index 0000000..9174c03 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1j.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -shared -Bsymbolic -m elf_x86_64 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1k.d b/ld/testsuite/ld-x86-64/pr19818-1k.d new file mode 100644 index 0000000..d61f964 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1k.d @@ -0,0 +1,7 @@ +#source: pr19818-1a.s +#source: pr19818-1c.s +#as: --64 +#ld: -shared -m elf_x86_64 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1l.d b/ld/testsuite/ld-x86-64/pr19818-1l.d new file mode 100644 index 0000000..bea7f2f --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1l.d @@ -0,0 +1,14 @@ +#source: pr19818-1a.s +#source: pr19818-1c.s +#as: --64 +#ld: -shared -m elf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1m.d b/ld/testsuite/ld-x86-64/pr19818-1m.d new file mode 100644 index 0000000..e95b9f4 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1m.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --x32 +#ld: -shared -Bsymbolic -m elf32_x86_64 --defsym foo=0xffffffff +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1n.d b/ld/testsuite/ld-x86-64/pr19818-1n.d new file mode 100644 index 0000000..33e7b32 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1n.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --x32 +#ld: -shared -Bsymbolic -m elf32_x86_64 --defsym foo=0xffffffff +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1o.d b/ld/testsuite/ld-x86-64/pr19818-1o.d new file mode 100644 index 0000000..7470234 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1o.d @@ -0,0 +1,7 @@ +#source: pr19818-1a.s +#source: pr19818-1c.s +#as: --x32 +#ld: -shared -m elf32_x86_64 +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1p.d b/ld/testsuite/ld-x86-64/pr19818-1p.d new file mode 100644 index 0000000..40d7ff6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1p.d @@ -0,0 +1,14 @@ +#source: pr19818-1a.s +#source: pr19818-1c.s +#as: --x32 +#ld: -shared -m elf32_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1q.d b/ld/testsuite/ld-x86-64/pr19818-1q.d new file mode 100644 index 0000000..28b4c09 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1q.d @@ -0,0 +1,4 @@ +#source: pr19818-1a.s +#as: --64 -mrelax-relocations=no +#ld: -shared -m elf_x86_64 --defsym foo=0xffffffff +#error: .*relocation R_X86_64_32 against absolute symbol `foo' can not be used when making a shared object diff --git a/ld/testsuite/ld-x86-64/pr19818-1r.d b/ld/testsuite/ld-x86-64/pr19818-1r.d new file mode 100644 index 0000000..de68580 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1r.d @@ -0,0 +1,5 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --64 -mrelax-relocations=no +#ld: -shared -m elf_x86_64 +#error: .*relocation R_X86_64_32 against absolute symbol `foo' can not be used when making a shared object diff --git a/ld/testsuite/ld-x86-64/pr19818-1s.d b/ld/testsuite/ld-x86-64/pr19818-1s.d new file mode 100644 index 0000000..fc27a50 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1s.d @@ -0,0 +1,8 @@ +#source: pr19818-1a.s +#as: --x32 -mrelax-relocations=no +#ld: -shared -m elf32_x86_64 --defsym foo=0xffffffff -z nocombreloc +#readelf: -r --wide + +Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +ffffffff +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-1t.d b/ld/testsuite/ld-x86-64/pr19818-1t.d new file mode 100644 index 0000000..19d775a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1t.d @@ -0,0 +1,9 @@ +#source: pr19818-1a.s +#source: pr19818-1b.s +#as: --x32 -mrelax-relocations=no +#ld: -shared -m elf32_x86_64 -z nocombreloc +#readelf: -r --wide + +Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +ffffffff +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-1u.d b/ld/testsuite/ld-x86-64/pr19818-1u.d new file mode 100644 index 0000000..b6155ca --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1u.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -pie -m elf_x86_64 -T pr19818-1.t +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1v.d b/ld/testsuite/ld-x86-64/pr19818-1v.d new file mode 100644 index 0000000..6ff6046 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1v.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -pie -m elf_x86_64 -T pr19818-1.t +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1w.d b/ld/testsuite/ld-x86-64/pr19818-1w.d new file mode 100644 index 0000000..aa8028e --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1w.d @@ -0,0 +1,6 @@ +#source: pr19818-1a.s +#as: --x32 +#ld: -pie -m elf32_x86_64 -T pr19818-1.t +#readelf: -r --wide + +There are no relocations in this file. diff --git a/ld/testsuite/ld-x86-64/pr19818-1x.d b/ld/testsuite/ld-x86-64/pr19818-1x.d new file mode 100644 index 0000000..ce043aa --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1x.d @@ -0,0 +1,13 @@ +#source: pr19818-1a.s +#as: --x32 +#ld: -pie -m elf32_x86_64 -T pr19818-1.t +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ff ff ff ff mov \$0xffffffff,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-1y.d b/ld/testsuite/ld-x86-64/pr19818-1y.d new file mode 100644 index 0000000..aac2e11 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-1y.d @@ -0,0 +1,4 @@ +#source: pr19818-1a.s +#as: --64 +#ld: -pie -melf_x86_64 --defsym foo=0x100000000 +#error: .*relocation truncated to fit: R_X86_64_32 .* diff --git a/ld/testsuite/ld-x86-64/pr19818-2.s b/ld/testsuite/ld-x86-64/pr19818-2.s new file mode 100644 index 0000000..d9541ff --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-2.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + leal foo(%rip), %eax diff --git a/ld/testsuite/ld-x86-64/pr19818-2a.d b/ld/testsuite/ld-x86-64/pr19818-2a.d new file mode 100644 index 0000000..5ba6b0e --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-2a.d @@ -0,0 +1,4 @@ +#source: pr19818-2.s +#as: --64 -mrelax-relocations=no +#ld: -pie -m elf_x86_64 --defsym foo=0xffffffff +#error: .*relocation R_X86_64_PC32 against absolute symbol `foo' can not be used when making a shared object diff --git a/ld/testsuite/ld-x86-64/pr19818-2b.d b/ld/testsuite/ld-x86-64/pr19818-2b.d new file mode 100644 index 0000000..5e044c4 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-2b.d @@ -0,0 +1,5 @@ +#source: pr19818-2.s +#source: pr19818-1b.s +#as: --64 -mrelax-relocations=no +#ld: -pie -m elf_x86_64 +#error: .*relocation R_X86_64_PC32 against absolute symbol `foo' can not be used when making a shared object diff --git a/ld/testsuite/ld-x86-64/pr19818-2c.d b/ld/testsuite/ld-x86-64/pr19818-2c.d new file mode 100644 index 0000000..4dc13a2 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-2c.d @@ -0,0 +1,4 @@ +#source: pr19818-2.s +#as: --x32 -mrelax-relocations=no +#ld: -pie -m elf32_x86_64 --defsym foo=0xffffffff +#error: .*relocation R_X86_64_PC32 against absolute symbol `foo' can not be used when making a shared object diff --git a/ld/testsuite/ld-x86-64/pr19818-2d.d b/ld/testsuite/ld-x86-64/pr19818-2d.d new file mode 100644 index 0000000..e518ae3 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-2d.d @@ -0,0 +1,5 @@ +#source: pr19818-2.s +#source: pr19818-1b.s +#as: --x32 -mrelax-relocations=no +#ld: -pie -m elf32_x86_64 +#error: .*relocation R_X86_64_PC32 against absolute symbol `foo' can not be used when making a shared object diff --git a/ld/testsuite/ld-x86-64/pr19818-3.s b/ld/testsuite/ld-x86-64/pr19818-3.s new file mode 100644 index 0000000..d3b0660 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-3.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + movabs $foo, %rax diff --git a/ld/testsuite/ld-x86-64/pr19818-3a.d b/ld/testsuite/ld-x86-64/pr19818-3a.d new file mode 100644 index 0000000..8031a03 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-3a.d @@ -0,0 +1,8 @@ +#source: pr19818-3.s +#as: --64 -mrelax-relocations=no +#ld: -shared -m elf_x86_64 --defsym foo=0xffffffff -z nocombreloc +#readelf: -r --wide + +Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +0+ffffffff +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-3b.d b/ld/testsuite/ld-x86-64/pr19818-3b.d new file mode 100644 index 0000000..0059a8c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-3b.d @@ -0,0 +1,9 @@ +#source: pr19818-3.s +#source: pr19818-1b.s +#as: --64 -mrelax-relocations=no +#ld: -shared -m elf_x86_64 -z nocombreloc +#readelf: -r --wide + +Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_64 +0+ffffffff +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-3c.d b/ld/testsuite/ld-x86-64/pr19818-3c.d new file mode 100644 index 0000000..c940773 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-3c.d @@ -0,0 +1,8 @@ +#source: pr19818-3.s +#as: --x32 -mrelax-relocations=no +#ld: -shared -m elf32_x86_64 --defsym foo=0xffffffff -z nocombreloc +#readelf: -r --wide + +Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +ffffffff +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-3d.d b/ld/testsuite/ld-x86-64/pr19818-3d.d new file mode 100644 index 0000000..cc7e79b --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-3d.d @@ -0,0 +1,9 @@ +#source: pr19818-3.s +#source: pr19818-1b.s +#as: --x32 -mrelax-relocations=no +#ld: -shared -m elf32_x86_64 -z nocombreloc +#readelf: -r --wide + +Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +ffffffff +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-4.s b/ld/testsuite/ld-x86-64/pr19818-4.s new file mode 100644 index 0000000..486ba0f --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-4.s @@ -0,0 +1,5 @@ + .globl foo + .type foo, @object + .data +foo: + .long 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-4a.d b/ld/testsuite/ld-x86-64/pr19818-4a.d new file mode 100644 index 0000000..1a48089 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-4a.d @@ -0,0 +1,5 @@ +#source: pr19818-4.s +#source: pr19818-1a.s +#as: --64 +#ld: -pie -melf_x86_64 +#error: .*relocation R_X86_64_32 against symbol `foo' can not be used when making a shared object; recompile with -fPIC diff --git a/ld/testsuite/ld-x86-64/pr19818-4b.d b/ld/testsuite/ld-x86-64/pr19818-4b.d new file mode 100644 index 0000000..b2c4763 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-4b.d @@ -0,0 +1,14 @@ +#source: pr19818-4.s +#source: pr19818-1a.s +#as: --x32 +#ld: -pie -melf32_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: b8 ([0-9a-f]{2} ){4} mov \$0x[a-f0-9]+,%eax +#pass diff --git a/ld/testsuite/ld-x86-64/pr19818-5.s b/ld/testsuite/ld-x86-64/pr19818-5.s new file mode 100644 index 0000000..0870f6a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-5.s @@ -0,0 +1,8 @@ + .globl _start + .type _start, @function +_start: + movq $foo, %rax + .size _start, .-_start + .data +foo: + .quad 0 diff --git a/ld/testsuite/ld-x86-64/pr19818-5a.d b/ld/testsuite/ld-x86-64/pr19818-5a.d new file mode 100644 index 0000000..21df19c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-5a.d @@ -0,0 +1,4 @@ +#source: pr19818-5.s +#as: --64 +#ld: -pie -melf_x86_64 +#error: .*relocation R_X86_64_32S against symbol `.data' can not be used when making a shared object; recompile with -fPIC diff --git a/ld/testsuite/ld-x86-64/pr19818-5b.d b/ld/testsuite/ld-x86-64/pr19818-5b.d new file mode 100644 index 0000000..a30858e --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr19818-5b.d @@ -0,0 +1,4 @@ +#source: pr19818-5.s +#as: --x32 +#ld: -pie -melf32_x86_64 +#error: .*relocation R_X86_64_32S against symbol `.data' can not be used when making a shared object; recompile with -fPIC diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index 49f9fa3..3938597 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -247,6 +247,43 @@ run_dump_test "largecomm-1e" run_dump_test "largecomm-1f" run_dump_test "pr19539a" run_dump_test "pr19539b" +run_dump_test "pr19818-1a" +run_dump_test "pr19818-1b" +run_dump_test "pr19818-1c" +run_dump_test "pr19818-1d" +run_dump_test "pr19818-1e" +run_dump_test "pr19818-1f" +run_dump_test "pr19818-1g" +run_dump_test "pr19818-1h" +run_dump_test "pr19818-1i" +run_dump_test "pr19818-1j" +run_dump_test "pr19818-1k" +run_dump_test "pr19818-1l" +run_dump_test "pr19818-1m" +run_dump_test "pr19818-1n" +run_dump_test "pr19818-1o" +run_dump_test "pr19818-1p" +run_dump_test "pr19818-1q" +run_dump_test "pr19818-1r" +run_dump_test "pr19818-1s" +run_dump_test "pr19818-1t" +run_dump_test "pr19818-1u" +run_dump_test "pr19818-1v" +run_dump_test "pr19818-1w" +run_dump_test "pr19818-1x" +run_dump_test "pr19818-1y" +run_dump_test "pr19818-2a" +run_dump_test "pr19818-2b" +run_dump_test "pr19818-2c" +run_dump_test "pr19818-2d" +run_dump_test "pr19818-3a" +run_dump_test "pr19818-3b" +run_dump_test "pr19818-3c" +run_dump_test "pr19818-3d" +run_dump_test "pr19818-4a" +run_dump_test "pr19818-4b" +run_dump_test "pr19818-5a" +run_dump_test "pr19818-5b" if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} { return |