diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2006-03-27 11:30:54 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2006-03-27 11:30:54 +0000 |
commit | ead49a57e845c028e794fdeb6f3b2492e70b918e (patch) | |
tree | e830d5b48fc73f225d5a269740e7d969e9a787be /ld | |
parent | 5cc40a5834a894e69901fc4a4e0e9b6cd9876e75 (diff) | |
download | binutils-ead49a57e845c028e794fdeb6f3b2492e70b918e.zip binutils-ead49a57e845c028e794fdeb6f3b2492e70b918e.tar.gz binutils-ead49a57e845c028e794fdeb6f3b2492e70b918e.tar.bz2 |
* elfxx-mips.c (mips_got_entry): Add more commentary.
(mips_elf_local_got_index): Use the hash table entry to record
the GOT index of forced-local symbols.
(mips_elf_initialize_tls_index): Rearrange code. Store the index
in either the hash table entry or the mips_got_entry, not both.
Add more commentary.
(mips_elf_multi_got): Make sure the g->next is nonnull when calling
mips_elf_initialize_tls_index.
* ld-mips-elf/tls-hidden3a.s, ld-mips-elf/tls-hidden3b.s,
* ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got,
* ld-mips-elf/tls-hidden3.ld, ld-mips-elf/tls-hidden3.r,
* ld-mips-elf/tls-hidden4a.s, ld-mips-elf/tls-hidden4b.s,
* ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: New tests.
* ld-mips-elf/mips-elf.exp: Run them.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden3.d | 24 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden3.got | 24 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden3.ld | 31 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden3.r | 13 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden3a.s | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden3b.s | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden4.got | 28 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden4.r | 19 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden4a.s | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/tls-hidden4b.s | 27 |
12 files changed, 232 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 4be03b8..7684e38 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2006-03-27 Richard Sandiford <richard@codesourcery.com> + + * ld-mips-elf/tls-hidden3a.s, ld-mips-elf/tls-hidden3b.s, + * ld-mips-elf/tls-hidden3.d, ld-mips-elf/tls-hidden3.got, + * ld-mips-elf/tls-hidden3.ld, ld-mips-elf/tls-hidden3.r, + * ld-mips-elf/tls-hidden4a.s, ld-mips-elf/tls-hidden4b.s, + * ld-mips-elf/tls-hidden4.got, ld-mips-elf/tls-hidden4.r: New tests. + * ld-mips-elf/mips-elf.exp: Run them. + 2006-03-25 Richard Sandiford <richard@codesourcery.com> * ld-m68k/merge-error-1a.s, ld-m68k/merge-error-1b.s, diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index add2060..645b7e0 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -199,6 +199,17 @@ set mips_tls_tests { "-EB -march=mips1 -32 -KPIC" {tls-hidden2a.s tls-hidden2b.s} {{objdump -drj.text tls-hidden2.d} {objdump -sj.got tls-hidden2-got.d}} "tls-hidden2.so"} + {"Shared library with TLS and hidden symbols (3)" + "-shared -melf32btsmip -T tls-hidden3.ld" + "-EB -march=mips2 -32 -KPIC" {tls-hidden3a.s tls-hidden3b.s} + {{objdump -dj.text tls-hidden3.d} {objdump -sj.got tls-hidden3.got} + {readelf --relocs tls-hidden3.r}} + "tls-hidden3.so"} + {"Shared library with TLS and hidden symbols (4)" + "-shared -melf32btsmip -T tls-hidden3.ld" + "-EB -march=mips2 -32 -KPIC" {tls-hidden4a.s tls-hidden4b.s} + {{objdump -sj.got tls-hidden4.got} {readelf --relocs tls-hidden4.r}} + "tls-hidden4.so"} } if {[istarget mips*-*-linux*]} { diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.d b/ld/testsuite/ld-mips-elf/tls-hidden3.d new file mode 100644 index 0000000..6d58686 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden3.d @@ -0,0 +1,24 @@ + +.*: file format .* + +Disassembly of section \.text: + +# +# The TLS entries are ordered as follows: +# +# foo0 (-0x7ff0 + 0x20) +# foo2 (-0x7ff0 + 0x24) +# foo3 (-0x7ff0 + 0x28) +# foo1 (-0x7ff0 + 0x2c) +# +# Any order would be acceptable, but it must match the .got dump. +# +00080c00 <\.text>: + 80c00: 8f848030 lw a0,-32720\(gp\) + 80c04: 8f84803c lw a0,-32708\(gp\) + 80c08: 8f848034 lw a0,-32716\(gp\) + 80c0c: 8f848038 lw a0,-32712\(gp\) + 80c10: 8f848030 lw a0,-32720\(gp\) + 80c14: 8f84803c lw a0,-32708\(gp\) + 80c18: 8f848034 lw a0,-32716\(gp\) + 80c1c: 8f848038 lw a0,-32712\(gp\) diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.got b/ld/testsuite/ld-mips-elf/tls-hidden3.got new file mode 100644 index 0000000..8b9c87f --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden3.got @@ -0,0 +1,24 @@ + +.*: file format .* + +# +# The GOT layout is: +# +# - 2 reserved entries +# - 5 local page entries +# - 1 global entry for "undef" +# - 4 TLS entries +# +# The order of the TLS entries is: +# +# foo0 (offset 0x20) +# foo2 (offset 0x24) +# foo3 (offset 0x28) +# foo1 (offset 0x2c) +# +# Any order would be acceptable, but it must match the .d dump. +# +Contents of section \.got: + 90000 00000000 80000000 00000000 00000000 .* + 90010 00000000 00000000 00000000 00000000 .* + 90020 0000abc0 0000abc8 0000abcc 0000abc4 .* diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.ld b/ld/testsuite/ld-mips-elf/tls-hidden3.ld new file mode 100644 index 0000000..b3d0584 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden3.ld @@ -0,0 +1,31 @@ +SECTIONS +{ + . = 0x80000; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + + . = ALIGN (0x400); + .rel.dyn : { *(.rel.dyn) } + + . = ALIGN (0x400); + .MIPS.stubs : { *(.MIPS.stubs) } + + . = ALIGN (0x400); + .text : { *(.text) } + + . = ALIGN (0x10000); + _gp = . + 0x7ff0; + .got : { *(.got) } + + . = ALIGN (0x400); + .tdata : { *(.tdata) } + + /DISCARD/ : { *(.reginfo) } +} + +VERSION +{ + { local: *; }; +} diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3.r b/ld/testsuite/ld-mips-elf/tls-hidden3.r new file mode 100644 index 0000000..500e7b1 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden3.r @@ -0,0 +1,13 @@ + +Relocation section '\.rel\.dyn' at offset .* contains 6 entries: + Offset Info Type Sym\.Value Sym\. Name +00000000 00000000 R_MIPS_NONE +# +# The order of the next four entries doesn't matter. The important thing +# is that there is exactly one entry per GOT TLS slot. +# +00090020 0000002f R_MIPS_TLS_TPREL3 +0009002c 0000002f R_MIPS_TLS_TPREL3 +00090024 0000002f R_MIPS_TLS_TPREL3 +00090028 0000002f R_MIPS_TLS_TPREL3 +00090030 .*03 R_MIPS_REL32 00000000 undef diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3a.s b/ld/testsuite/ld-mips-elf/tls-hidden3a.s new file mode 100644 index 0000000..d1e6d64 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden3a.s @@ -0,0 +1,10 @@ + .macro load + lw $4,%gottprel(foo\@)($gp) + .endm + + .rept 4 + load + .endr + + .section .tdata,"awT",@progbits + .fill 0xabc0 diff --git a/ld/testsuite/ld-mips-elf/tls-hidden3b.s b/ld/testsuite/ld-mips-elf/tls-hidden3b.s new file mode 100644 index 0000000..0744b07 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden3b.s @@ -0,0 +1,18 @@ + .macro load + .text + lw $4,%gottprel(foo\@)($gp) + + .global foo\@ + .type foo\@,@object + .size foo\@,4 + .section .tdata,"awT",@progbits +foo\@: + .word \@ + .endm + + .rept 4 + load + .endr + + .data + .word undef diff --git a/ld/testsuite/ld-mips-elf/tls-hidden4.got b/ld/testsuite/ld-mips-elf/tls-hidden4.got new file mode 100644 index 0000000..84120c0 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden4.got @@ -0,0 +1,28 @@ + +.*: file format .* + +Contents of section \.got: +# +# The order of the TLS entries in this GOT is: +# +# foo2 +# foo3 +# foo0 +# foo1 +# +# The order and address don't matter; the important thing is that the +# addresses match the relocs in the .r dump and that there is a separate +# entry for each symbol. +# +#... + 1c4080 0000abc8 0000abcc 0000abc0 0000abc4 .* +# +# Likewise, but the order of the entries in this GOT is: +# +# foo3 +# foo2 +# foo0 +# foo1 +#... + 1d00c0 00000000 00000000 00000000 0000abcc .* + 1d00d0 0000abc8 0000abc0 0000abc4 .* diff --git a/ld/testsuite/ld-mips-elf/tls-hidden4.r b/ld/testsuite/ld-mips-elf/tls-hidden4.r new file mode 100644 index 0000000..f6809b5 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden4.r @@ -0,0 +1,19 @@ + +Relocation section '\.rel\.dyn' at offset .* contains .* entries: + Offset Info Type Sym\.Value Sym\. Name +00000000 00000000 R_MIPS_NONE +# +# The order and addresses of the next eight entries don't matter. The +# important thing is that there is exactly one entry per GOT TLS slot +# and that the addresses match those in the .got dump. +# +001d00d4 0000002f R_MIPS_TLS_TPREL3 +001d00d8 0000002f R_MIPS_TLS_TPREL3 +001d00d0 0000002f R_MIPS_TLS_TPREL3 +001d00cc 0000002f R_MIPS_TLS_TPREL3 +001c4088 0000002f R_MIPS_TLS_TPREL3 +001c408c 0000002f R_MIPS_TLS_TPREL3 +001c4080 0000002f R_MIPS_TLS_TPREL3 +001c4084 0000002f R_MIPS_TLS_TPREL3 +.* R_MIPS_REL32 .* +#pass diff --git a/ld/testsuite/ld-mips-elf/tls-hidden4a.s b/ld/testsuite/ld-mips-elf/tls-hidden4a.s new file mode 100644 index 0000000..02a0d35 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden4a.s @@ -0,0 +1,18 @@ + .macro load + lw $4,%gottprel(foo\@)($gp) + .endm + + .rept 4 + load + .endr + + .macro load2 + lw $4,%got(undefa\@)($gp) + .endm + + .rept 0x3000 + load2 + .endr + + .section .tdata,"awT",@progbits + .fill 0xabc0 diff --git a/ld/testsuite/ld-mips-elf/tls-hidden4b.s b/ld/testsuite/ld-mips-elf/tls-hidden4b.s new file mode 100644 index 0000000..d6deb00 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/tls-hidden4b.s @@ -0,0 +1,27 @@ + .macro load + .text + lw $4,%gottprel(foo\@)($gp) + + .global foo\@ + .type foo\@,@object + .size foo\@,4 + .section .tdata,"awT",@progbits +foo\@: + .word \@ + .endm + + .rept 4 + load + .endr + + .text + .macro load2 + lw $4,%got(undefb\@)($gp) + .endm + + .rept 0x3000 + load2 + .endr + + .data + .word undef |