diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 24 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-aux-off.s | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-def-off.s | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-exe-off-hidden.dd | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-exe-off-visible.dd | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-exe-off.xd | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-lib-off-hidden.dd | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-lib-off-visible.ed | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-lib-off.xd | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-off-external.ed | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-ref-off-external.s | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-ref-off-hidden.s | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local-ref-off-visible.s | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/got-local.ld | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-vax-elf/vax-elf.exp | 85 |
15 files changed, 238 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index f33bd41..9e72b31 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,27 @@ +2020-12-05 Maciej W. Rozycki <macro@linux-mips.org> + + * testsuite/ld-vax-elf/got-local-exe-off-hidden.dd: New test + dump. + * testsuite/ld-vax-elf/got-local-exe-off-visible.dd: New test + dump. + * testsuite/ld-vax-elf/got-local-lib-off-hidden.dd: New test + dump. + * testsuite/ld-vax-elf/got-local-lib-off-visible.ed: New test + dump. + * testsuite/ld-vax-elf/got-local-off-external.ed: New test dump. + * testsuite/ld-vax-elf/got-local-exe-off.xd: New test dump. + * testsuite/ld-vax-elf/got-local-lib-off.xd: New test dump. + * testsuite/ld-vax-elf/got-local.ld: New test linker script. + * testsuite/ld-vax-elf/got-local-aux-off.s: New test source. + * testsuite/ld-vax-elf/got-local-def-off.s: New test source. + * testsuite/ld-vax-elf/got-local-ref-off-external.s: New test + source. + * testsuite/ld-vax-elf/got-local-ref-off-hidden.s: New test + source. + * testsuite/ld-vax-elf/got-local-ref-off-visible.s: New test + source. + * testsuite/ld-vax-elf/vax-elf.exp: Run the new tests. + 2020-12-04 H.J. Lu <hongjiu.lu@intel.com> PR ld/27016 diff --git a/ld/testsuite/ld-vax-elf/got-local-aux-off.s b/ld/testsuite/ld-vax-elf/got-local-aux-off.s new file mode 100644 index 0000000..36ea987 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-aux-off.s @@ -0,0 +1,5 @@ + .globl baz + .type baz, @object +baz: + .byte 0, 1, 2 + .size baz, . - baz diff --git a/ld/testsuite/ld-vax-elf/got-local-def-off.s b/ld/testsuite/ld-vax-elf/got-local-def-off.s new file mode 100644 index 0000000..2ad0473 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-def-off.s @@ -0,0 +1,12 @@ + .data + .globl bar_hidden + .type bar_hidden, @object + .hidden bar_hidden +bar_hidden: + .byte 0, 1, 2 + .size bar_hidden, . - bar_hidden + .globl bar_visible + .type bar_visible, @object +bar_visible: + .byte 0, 1, 2 + .size bar_visible, . - bar_visible diff --git a/ld/testsuite/ld-vax-elf/got-local-exe-off-hidden.dd b/ld/testsuite/ld-vax-elf/got-local-exe-off-hidden.dd new file mode 100644 index 0000000..4a1b54b --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-exe-off-hidden.dd @@ -0,0 +1,17 @@ +.*: +file format .*vax.* + +Disassembly of section \.text: + +00000000 <foo>: + 0: 00 00 \.word 0x0000 # Entry mask: < > + 2: 9e ef f8 1f movab 2000 <bar_hidden>,r0 + 6: 00 00 50 + 9: 9e ef f2 1f movab 2001 <bar_hidden\+0x1>,r0 + d: 00 00 50 + 10: 9e ef ec 1f movab 2002 <bar_hidden\+0x2>,r0 + 14: 00 00 50 + 17: 9e ef e6 1f movab 2003 <bar_visible>,r1 + 1b: 00 00 51 + 1e: 9e ff dc 0f movab \*1000 <baz>,r2 + 22: 00 00 52 + 25: 04 ret diff --git a/ld/testsuite/ld-vax-elf/got-local-exe-off-visible.dd b/ld/testsuite/ld-vax-elf/got-local-exe-off-visible.dd new file mode 100644 index 0000000..8eddd36 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-exe-off-visible.dd @@ -0,0 +1,17 @@ +.*: +file format .*vax.* + +Disassembly of section \.text: + +00000000 <foo>: + 0: 00 00 \.word 0x0000 # Entry mask: < > + 2: 9e ef f8 1f movab 2000 <bar_hidden>,r0 + 6: 00 00 50 + 9: 9e ef f4 1f movab 2003 <bar_visible>,r1 + d: 00 00 51 + 10: 9e ef ee 1f movab 2004 <bar_visible\+0x1>,r1 + 14: 00 00 51 + 17: 9e ef e8 1f movab 2005 <bar_visible\+0x2>,r1 + 1b: 00 00 51 + 1e: 9e ff dc 0f movab \*1000 <baz>,r2 + 22: 00 00 52 + 25: 04 ret diff --git a/ld/testsuite/ld-vax-elf/got-local-exe-off.xd b/ld/testsuite/ld-vax-elf/got-local-exe-off.xd new file mode 100644 index 0000000..c4c1ab6 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-exe-off.xd @@ -0,0 +1,3 @@ +# Make sure there's only one GOT entry, for the symbol defined externally. +Hex dump of section '\.got': + 0x00001000 00000000 .* diff --git a/ld/testsuite/ld-vax-elf/got-local-lib-off-hidden.dd b/ld/testsuite/ld-vax-elf/got-local-lib-off-hidden.dd new file mode 100644 index 0000000..1e4dfe9 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-lib-off-hidden.dd @@ -0,0 +1,17 @@ +.*: +file format .*vax.* + +Disassembly of section \.text: + +00000000 <foo>: + 0: 00 00 \.word 0x0000 # Entry mask: < > + 2: 9e ef f8 1f movab 2000 <bar_hidden>,r0 + 6: 00 00 50 + 9: 9e ef f2 1f movab 2001 <bar_hidden\+0x1>,r0 + d: 00 00 50 + 10: 9e ef ec 1f movab 2002 <bar_hidden\+0x2>,r0 + 14: 00 00 50 + 17: 9e ff e7 0f movab \*1004 <bar_visible-0xfff>,r1 + 1b: 00 00 51 + 1e: 9e ff dc 0f movab \*1000 <baz>,r2 + 22: 00 00 52 + 25: 04 ret diff --git a/ld/testsuite/ld-vax-elf/got-local-lib-off-visible.ed b/ld/testsuite/ld-vax-elf/got-local-lib-off-visible.ed new file mode 100644 index 0000000..d7eacd6 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-lib-off-visible.ed @@ -0,0 +1,2 @@ +\A[^\n]*\.o: warning: GOT addend of 1 to `bar_visible' does not match previous GOT addend of 0 +[^\n]*\.o: warning: GOT addend of 2 to `bar_visible' does not match previous GOT addend of 0\Z diff --git a/ld/testsuite/ld-vax-elf/got-local-lib-off.xd b/ld/testsuite/ld-vax-elf/got-local-lib-off.xd new file mode 100644 index 0000000..2f86b2b --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-lib-off.xd @@ -0,0 +1,3 @@ +# Make sure there are only two GOT entries, for the preemptible symbols. +Hex dump of section '\.got': + 0x00001000 00000000 00000000 .* diff --git a/ld/testsuite/ld-vax-elf/got-local-off-external.ed b/ld/testsuite/ld-vax-elf/got-local-off-external.ed new file mode 100644 index 0000000..773ea0f --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-off-external.ed @@ -0,0 +1,2 @@ +\A[^\n]*\.o: warning: GOT addend of 1 to `baz' does not match previous GOT addend of 0 +[^\n]*\.o: warning: GOT addend of 2 to `baz' does not match previous GOT addend of 0\Z diff --git a/ld/testsuite/ld-vax-elf/got-local-ref-off-external.s b/ld/testsuite/ld-vax-elf/got-local-ref-off-external.s new file mode 100644 index 0000000..260194c --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-ref-off-external.s @@ -0,0 +1,12 @@ + .text + .globl foo + .type foo, @function +foo: + .word 0 + movab bar_hidden, %r0 + movab bar_visible, %r1 + movab baz, %r2 + movab baz + 1, %r2 + movab baz + 2, %r2 + ret + .size foo, . - foo diff --git a/ld/testsuite/ld-vax-elf/got-local-ref-off-hidden.s b/ld/testsuite/ld-vax-elf/got-local-ref-off-hidden.s new file mode 100644 index 0000000..fdff42c --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-ref-off-hidden.s @@ -0,0 +1,12 @@ + .text + .globl foo + .type foo, @function +foo: + .word 0 + movab bar_hidden, %r0 + movab bar_hidden + 1, %r0 + movab bar_hidden + 2, %r0 + movab bar_visible, %r1 + movab baz, %r2 + ret + .size foo, . - foo diff --git a/ld/testsuite/ld-vax-elf/got-local-ref-off-visible.s b/ld/testsuite/ld-vax-elf/got-local-ref-off-visible.s new file mode 100644 index 0000000..cf3d070 --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local-ref-off-visible.s @@ -0,0 +1,12 @@ + .text + .globl foo + .type foo, @function +foo: + .word 0 + movab bar_hidden, %r0 + movab bar_visible, %r1 + movab bar_visible + 1, %r1 + movab bar_visible + 2, %r1 + movab baz, %r2 + ret + .size foo, . - foo diff --git a/ld/testsuite/ld-vax-elf/got-local.ld b/ld/testsuite/ld-vax-elf/got-local.ld new file mode 100644 index 0000000..330046d --- /dev/null +++ b/ld/testsuite/ld-vax-elf/got-local.ld @@ -0,0 +1,17 @@ +SECTIONS +{ + .text : { *(.text) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rela.dyn : { *(.rela.*) } + . = ALIGN (0x1000); + .got : { *(.got) } + . = ALIGN (0x1000); + .data : { *(.data) } + .dynamic : { *(.dynamic) } + .symtab : { *(.symtab) } + .strtab : { *(.strtab) } + .shstrtab : { *(.shstrtab) } + /DISCARD/ : { *(*) } +} diff --git a/ld/testsuite/ld-vax-elf/vax-elf.exp b/ld/testsuite/ld-vax-elf/vax-elf.exp index 2748000..fb1fc3b 100644 --- a/ld/testsuite/ld-vax-elf/vax-elf.exp +++ b/ld/testsuite/ld-vax-elf/vax-elf.exp @@ -51,7 +51,7 @@ run_ld_link_tests [list \ "plt-local"]] # Global offset table tests. Make sure hidden symbols do not get GOT -# assignments. +# assignments. Also verify offset references. run_ld_link_tests [list \ [list "GOT test (auxiliary shared library)" \ "-shared" "" \ @@ -59,18 +59,48 @@ run_ld_link_tests [list \ { got-local-aux.s } \ {} \ "got-local-aux.so"] \ + [list "GOT test (auxiliary shared library for offsets)" \ + "-shared" "" \ + "-k" \ + { got-local-aux-off.s } \ + {} \ + "got-local-aux-off.so"] \ [list "GOT test (object 1)" \ "-r" "" \ "-k" \ { got-local-ref.s } \ {} \ "got-local-ref-r.o"] \ + [list "GOT test (object 1 hidden reference with offset)" \ + "-r" "" \ + "-k" \ + { got-local-ref-off-hidden.s } \ + {} \ + "got-local-ref-off-hidden-r.o"] \ + [list "GOT test (object 1 visible reference with offset)" \ + "-r" "" \ + "-k" \ + { got-local-ref-off-visible.s } \ + {} \ + "got-local-ref-off-visible-r.o"] \ + [list "GOT test (object 1 external reference with offset)" \ + "-r" "" \ + "-k" \ + { got-local-ref-off-external.s } \ + {} \ + "got-local-ref-off-external-r.o"] \ [list "GOT test (object 2)" \ "-r" "" \ "-k" \ { got-local-def.s } \ {} \ "got-local-def-r.o"] \ + [list "GOT test (object 2 for offsets)" \ + "-r" "" \ + "-k" \ + { got-local-def-off.s } \ + {} \ + "got-local-def-off-r.o"] \ [list "GOT test (executable)" \ "-e 0 tmpdir/got-local-aux.so tmpdir/got-local-ref-r.o \ tmpdir/got-local-def-r.o" "" \ @@ -84,7 +114,58 @@ run_ld_link_tests [list \ "" \ {} \ { { readelf "-x .got" got-local-lib.xd } } \ - "got-local-lib.so"]] + "got-local-lib.so"] \ + [list "GOT test (executable hidden reference with offset)" \ + "-e 0 -T got-local.ld tmpdir/got-local-aux-off.so \ + tmpdir/got-local-ref-off-hidden-r.o \ + tmpdir/got-local-def-off-r.o" "" \ + "" \ + {} \ + { { readelf "-x .got" got-local-exe-off.xd } \ + { objdump -d got-local-exe-off-hidden.dd } } \ + "got-local-exe-off-hidden"] \ + [list "GOT test (shared library hidden reference with offset)" \ + "-shared -T got-local.ld tmpdir/got-local-aux-off.so \ + tmpdir/got-local-ref-off-hidden-r.o \ + tmpdir/got-local-def-off-r.o" "" \ + "" \ + {} \ + { { readelf "-x .got" got-local-lib-off.xd } \ + { objdump -d got-local-lib-off-hidden.dd } } \ + "got-local-lib-off-hidden.so"] \ + [list "GOT test (executable visible reference with offset)" \ + "-e 0 -T got-local.ld tmpdir/got-local-aux-off.so \ + tmpdir/got-local-ref-off-visible-r.o \ + tmpdir/got-local-def-off-r.o" "" \ + "" \ + {} \ + { { readelf "-x .got" got-local-exe-off.xd } \ + { objdump -d got-local-exe-off-visible.dd } } \ + "got-local-exe-off-visible"] \ + [list "GOT test (shared library visible reference with offset)" \ + "-shared -T got-local.ld tmpdir/got-local-aux-off.so \ + tmpdir/got-local-ref-off-visible-r.o \ + tmpdir/got-local-def-off-r.o" "" \ + "" \ + {} \ + { { ld got-local-lib-off-visible.ed } } \ + "got-local-lib-off-visible.so"] \ + [list "GOT test (executable external reference with offset)" \ + "-e 0 -T got-local.ld tmpdir/got-local-aux-off.so \ + tmpdir/got-local-ref-off-external-r.o \ + tmpdir/got-local-def-off-r.o" "" \ + "" \ + {} \ + { { ld got-local-off-external.ed } } \ + "got-local-exe-off-external"] \ + [list "GOT test (shared library external reference with offset)" \ + "-shared -T got-local.ld tmpdir/got-local-aux-off.so \ + tmpdir/got-local-ref-off-external-r.o \ + tmpdir/got-local-def-off-r.o" "" \ + "" \ + {} \ + { { ld got-local-off-external.ed } } \ + "got-local-lib-off-external.so"]] # Export class relocation tests. run_ld_link_tests [list \ |