diff options
author | Andrew Hsieh <andrewhsieh@google.com> | 2014-06-13 12:38:00 -0700 |
---|---|---|
committer | Andrew Hsieh <andrewhsieh@google.com> | 2014-06-13 12:38:00 -0700 |
commit | 54f1b3cf509cd889905287cb8ce6c5ae33911a21 (patch) | |
tree | e39b1a7fa04db86a8215b7f9d4656d74e394aec0 /binutils-2.25/ld/testsuite/ld-sparc | |
parent | 2a6558a8ecfb81d75215b4ec7dc61113e12cfd5f (diff) | |
download | toolchain_binutils-54f1b3cf509cd889905287cb8ce6c5ae33911a21.tar.gz toolchain_binutils-54f1b3cf509cd889905287cb8ce6c5ae33911a21.tar.bz2 toolchain_binutils-54f1b3cf509cd889905287cb8ce6c5ae33911a21.zip |
Add upstream binutils-2.25 snapshot 4/4 2014
For MIPS -mmsa support
Change-Id: I08c4f002fa7b33dec85ed75956e6ab551bb03c96
Diffstat (limited to 'binutils-2.25/ld/testsuite/ld-sparc')
61 files changed, 4072 insertions, 0 deletions
diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop32.dd b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.dd new file mode 100644 index 00000000..a5999304 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.dd @@ -0,0 +1,34 @@ +#source: gotop32.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Disassembly of section .text: +00001000 <foo-0x8>: + +1000: 81 c3 e0 08 retl * + +1004: ae 03 c0 17 add %o7, %l7, %l7 + +00001008 <foo>: + +1008: 9d e3 bf 98 save %sp, -104, %sp + +100c: 2f 00 00 44 sethi %hi\(0x11000\), %l7 + +1010: 7f ff ff fc call 1000 <_.*> + +1014: ae 05 e0 60 add %l7, 0x60, %l7 ! 11060 <.*> + +1018: 01 00 00 00 nop * + +101c: 23 00 00 00 sethi %hi\(0\), %l1 + +1020: 01 00 00 00 nop * + +1024: a2 1c 60 04 xor %l1, 4, %l1 + +1028: 01 00 00 00 nop * + +102c: f0 05 c0 11 ld \[ %l7 \+ %l1 \], %i0 + +1030: 01 00 00 00 nop * + +1034: 23 00 00 03 sethi %hi\(0xc00\), %l1 + +1038: 01 00 00 00 nop + +103c: a2 1c 63 94 xor %l1, 0x394, %l1 + +1040: 01 00 00 00 nop + +1044: b0 05 c0 11 add %l7, %l1, %i0 + +1048: 01 00 00 00 nop + +104c: 81 c7 e0 08 ret + +1050: 81 e8 00 00 restore +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop32.rd b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.rd new file mode 100644 index 00000000..acbbdeb1 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.rd @@ -0,0 +1,73 @@ +#source: gotop32.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#readelf: -WSsrl +#target: sparc*-*-* + +There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+: + +Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0 + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12000 0+2000 0+70 08 +WA +3 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+12070 0+2070 0+8 04 +WA +0 +0 +4 + +\[[ 0-9]+\] .data +PROGBITS +0+13000 0+3000 0+1000 00 +WA +0 +0 4096 + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... + +Elf file type is DYN \(Shared object file\) +Entry point 0x1000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align + +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000 + +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+2000 0x0+2000 RW +0x10000 + +DYNAMIC +0x0+2000 0x0+12000 0x0+12000 0x0+70 0x0+70 RW +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_GLOB_DAT +0+13000 +sym \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +7 * +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* FUNC +GLOBAL +DEFAULT +5 foo +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end +.* NOTYPE +GLOBAL +DEFAULT +8 sym + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* NOTYPE +LOCAL +DEFAULT +8 local_sym +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_ +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* FUNC +GLOBAL +DEFAULT +5 foo +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end +.* NOTYPE +GLOBAL +DEFAULT +8 sym + diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop32.s b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.s new file mode 100644 index 00000000..604694c6 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.s @@ -0,0 +1,37 @@ + .data + .align 4096 + .globl sym +sym: .word 0x12345678 + +local_sym: + .word 0xdeadbeef + + .text + .align 4096 +.LLGETPC0: + retl + add %o7, %l7, %l7 + + .globl foo + .type foo,#function + .proc 04 +foo: + save %sp, -104, %sp + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 + call .LLGETPC0 + add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 + nop + sethi %gdop_hix22(sym), %l1 + nop + xor %l1, %gdop_lox10(sym), %l1 + nop + ld [%l7 + %l1], %i0, %gdop(sym) + nop + sethi %gdop_hix22(local_sym), %l1 + nop + xor %l1, %gdop_lox10(local_sym), %l1 + nop + ld [%l7 + %l1], %i0, %gdop(local_sym) + nop + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop32.sd b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.sd new file mode 100644 index 00000000..fc167560 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.sd @@ -0,0 +1,10 @@ +#source: gotop32.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#objdump: -sj.got +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .got: + 12070 00012000 00000000 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop32.td b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.td new file mode 100644 index 00000000..520788b0 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop32.td @@ -0,0 +1,12 @@ +#source: gotop32.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#objdump: -sj.data +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .data: + 13000 12345678 deadbeef 00000000 00000000 .* + 13010 00000000 00000000 00000000 00000000 .* +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop64.dd b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.dd new file mode 100644 index 00000000..d73fb183 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.dd @@ -0,0 +1,34 @@ +#source: gotop64.s +#as: --64 -K PIC +#ld: -shared -melf64_sparc +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Disassembly of section .text: +0000000000001000 <foo-0x8>: + +1000: 81 c3 e0 08 retl * + +1004: ae 03 c0 17 add %o7, %l7, %l7 + +0000000000001008 <foo>: + +1008: 9d e3 bf 60 save %sp, -160, %sp + +100c: 2f 00 04 04 sethi %hi\(0x101000\), %l7 + +1010: 7f ff ff fc call 1000 <_.*> + +1014: ae 05 e0 d0 add %l7, 0xd0, %l7 ! 1010d0 <.*> + +1018: 01 00 00 00 nop * + +101c: 23 00 00 00 sethi %hi\(0\), %l1 + +1020: 01 00 00 00 nop * + +1024: a2 1c 60 08 xor %l1, 8, %l1 + +1028: 01 00 00 00 nop * + +102c: f0 5d c0 11 ldx \[ %l7 \+ %l1 \], %i0 + +1030: 01 00 00 00 nop * + +1034: 23 00 00 03 sethi %hi\(0xc00\), %l1 + +1038: 01 00 00 00 nop * + +103c: a2 1c 63 24 xor %l1, 0x324, %l1 + +1040: 01 00 00 00 nop * + +1044: b0 05 c0 11 add %l7, %l1, %i0 + +1048: 01 00 00 00 nop * + +104c: 81 c7 e0 08 ret + +1050: 81 e8 00 00 restore +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop64.rd b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.rd new file mode 100644 index 00000000..08a9514a --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.rd @@ -0,0 +1,73 @@ +#source: gotop64.s +#as: --64 -K PIC +#ld: -shared -melf64_sparc +#readelf: -WSsrl +#target: sparc*-*-* + +There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+: + +Section Headers: + +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0 + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102000 0+2000 0+e0 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+1020e0 0+20e0 0+10 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .data +PROGBITS +0+103000 0+3000 0+1000 00 +WA +0 +0 4096 + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... + +Elf file type is DYN \(Shared object file\) +Entry point 0x1000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align + +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x100000 + +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+2000 0x0+2000 RW +0x100000 + +DYNAMIC +0x0+2000 0x0+102000 0x0+102000 0x0+e0 0x0+e0 RW +0x8 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_GLOB_DAT +0+103000 +sym \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +7 * +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* FUNC +GLOBAL +DEFAULT +5 foo +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end +.* NOTYPE +GLOBAL +DEFAULT +8 sym + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* NOTYPE +LOCAL +DEFAULT +8 local_sym +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_ +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* FUNC +GLOBAL +DEFAULT +5 foo +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end +.* NOTYPE +GLOBAL +DEFAULT +8 sym + diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop64.s b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.s new file mode 100644 index 00000000..9910813d --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.s @@ -0,0 +1,37 @@ + .data + .align 4096 + .globl sym +sym: .word 0x12345678 + +local_sym: + .word 0xdeadbeef + + .text + .align 4096 +.LLGETPC0: + retl + add %o7, %l7, %l7 + + .globl foo + .type foo,#function + .proc 04 +foo: + save %sp, -160, %sp + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 + call .LLGETPC0 + add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 + nop + sethi %gdop_hix22(sym), %l1 + nop + xor %l1, %gdop_lox10(sym), %l1 + nop + ldx [%l7 + %l1], %i0, %gdop(sym) + nop + sethi %gdop_hix22(local_sym), %l1 + nop + xor %l1, %gdop_lox10(local_sym), %l1 + nop + ldx [%l7 + %l1], %i0, %gdop(local_sym) + nop + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop64.sd b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.sd new file mode 100644 index 00000000..9ab0f619 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.sd @@ -0,0 +1,10 @@ +#source: gotop64.s +#as: --64 -K PIC +#ld: -shared -melf64_sparc +#objdump: -sj.got +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .got: + 1020e0 00000000 00102000 00000000 00000000 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/gotop64.td b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.td new file mode 100644 index 00000000..28d40edc --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/gotop64.td @@ -0,0 +1,12 @@ +#source: gotop64.s +#as: --64 -K PIC +#ld: -shared -melf64_sparc +#objdump: -sj.data +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .data: + 103000 12345678 deadbeef 00000000 00000000 .* + 103010 00000000 00000000 00000000 00000000 .* +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/sparc.exp b/binutils-2.25/ld/testsuite/ld-sparc/sparc.exp new file mode 100644 index 00000000..3caa4943 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/sparc.exp @@ -0,0 +1,135 @@ +# Expect script for ld-sparc tests +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +# Test SPARC linking; all types of relocs. This tests the assembler and +# tools like objdump as well as the linker. + +if {[istarget "sparc-*-vxworks"]} { + set sparcvxworkstests { + {"VxWorks shared library test 1" "-shared -Tvxworks1.ld" "" + "-KPIC" {vxworks1-lib.s} + {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd} + {readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}} + "libvxworks1.so"} + {"VxWorks executable test 1 (dynamic)" \ + "tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic" "" + "" {vxworks1.s} + {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}} + "vxworks1"} + {"VxWorks executable test 2 (dynamic)" \ + "-Tvxworks1.ld -q --force-dynamic" "" + "" {vxworks2.s} + {{readelf --segments vxworks2.sd}} + "vxworks2"} + {"VxWorks executable test 2 (static)" + "-Tvxworks1.ld" "" + "" {vxworks2.s} + {{readelf --segments vxworks2-static.sd}} + "vxworks2"} + } + run_ld_link_tests $sparcvxworkstests + run_dump_test "vxworks1-static" +} + +if { !([istarget "sparc*-*-elf*"] + || [istarget "sparc*-sun-solaris*"] + || ([istarget "sparc*-*-linux*"] + && ![istarget "*-*-*aout*"] + && ![istarget "*-*-*oldld*"])) } { + return +} + +# List contains test-items with 3 items followed by 2 lists: +# 0:name 1:ld early options 2:ld late options 3:assembler options +# 4:filenames of assembler files 5: action and options. 6: name of output file + +# Actions: +# objdump: Apply objdump options on result. Compare with regex (last arg). +# nm: Apply nm options on result. Compare with regex (last arg). +# readelf: Apply readelf options on result. Compare with regex (last arg). + +set sparctests { + {"32-bit: TLS -fpic -shared transitions" "-shared -melf32_sparc" "" + "--32 -K PIC" {tlssunpic32.s tlspic.s} + {{readelf -WSsrl tlssunpic32.rd} {objdump -drj.text tlssunpic32.dd} + {objdump -sj.got tlssunpic32.sd} {objdump -sj.tdata tlssunpic32.td}} + "libtlssunpic32.so"} + {"32-bit: Helper shared library" "-shared -melf32_sparc" "" + "--32 -K PIC" {tlslib.s} {} "libtlslib32.so"} + {"32-bit: Another helper shared library" "-shared -melf32_sparc" "" + "--32 -K PIC" {tlssunbinpic32.s} {} "libtlssunbinpic32.so"} + {"32-bit: TLS -fpic and -fno-pic exec transitions" + "-melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o" "" + "--32" {tlssunbin32.s} + {{readelf -WSsrl tlssunbin32.rd} {objdump -drj.text tlssunbin32.dd} + {objdump -sj.got tlssunbin32.sd} {objdump -sj.tdata tlssunbin32.td}} + "tlssunbin32"} + {"32-bit: TLS -fno-pic -shared" "-shared -melf32_sparc" "" + "--32" {tlssunnopic32.s tlsnopic.s} + {{readelf -WSsrl tlssunnopic32.rd} {objdump -drj.text tlssunnopic32.dd} + {objdump -sj.got tlssunnopic32.sd}} "libtlssunnopic32.so"} + {"32-bit: TLS in debug sections" "-melf32_sparc" "" + "--32" {tlsg32.s} + {{objdump -sj.debug_foobar tlsg32.sd}} "tlsg32"} + {"32-bit: GOTDATA relocations" "-shared -melf32_sparc" "" + "--32 -K PIC" {gotop32.s} + {{readelf -WSsrl gotop32.rd} {objdump -drj.text gotop32.dd} + {objdump -sj.got gotop32.sd} {objdump -sj.data gotop32.td}} + "libgotop32.so"} +} +set sparc64tests { + {"64-bit: TLS -fpic -shared transitions" "-shared -melf64_sparc" "" + "--64 -Av9 -K PIC" {tlssunpic64.s tlspic.s} + {{readelf -WSsrl tlssunpic64.rd} {objdump -drj.text tlssunpic64.dd} + {objdump -sj.got tlssunpic64.sd} {objdump -sj.tdata tlssunpic64.td}} + "libtlssunpic64.so"} + {"64-bit: Helper shared library" "-shared -melf64_sparc" "" + "--64 -Av9 -K PIC" {tlslib.s} {} "libtlslib64.so"} + {"64-bit: Another helper shared library" "-shared -melf64_sparc" "" + "--64 -Av9 -K PIC" {tlssunbinpic64.s} {} "libtlssunbinpic64.so"} + {"64-bit: TLS -fpic and -fno-pic exec transitions" + "-melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o" "" + "--64 -Av9" {tlssunbin64.s} + {{readelf -WSsrl tlssunbin64.rd} {objdump -drj.text tlssunbin64.dd} + {objdump -sj.got tlssunbin64.sd} {objdump -sj.tdata tlssunbin64.td}} + "tlssunbin64"} + {"64-bit: TLS -fno-pic -shared" "-shared -melf64_sparc" "" + "--64 -Av9" {tlssunnopic64.s tlsnopic.s} + {{readelf -WSsrl tlssunnopic64.rd} {objdump -drj.text tlssunnopic64.dd} + {objdump -sj.got tlssunnopic64.sd}} "libtlssunnopic64.so"} + {"64-bit: TLS in debug sections" "-melf64_sparc" "" + "--64 -Av9" {tlsg64.s} + {{objdump -sj.debug_foobar tlsg64.sd}} "tlsg64"} + {"64-bit: GOTDATA relocations" "-shared -melf64_sparc" "" + "--64 -K PIC" {gotop64.s} + {{readelf -WSsrl gotop64.rd} {objdump -drj.text gotop64.dd} + {objdump -sj.got gotop64.sd} {objdump -sj.data gotop64.td}} + "libgotop64.so"} +} + +if { ![istarget "sparc64-*-elf*"] } { + run_ld_link_tests $sparctests +} +if { !([istarget "sparc-*-elf*"] + || [istarget "sparc-sun-solaris2.5*"] + || [istarget "sparc-sun-solaris2.6"]) } { + run_ld_link_tests $sparc64tests +} diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlsg32.s b/binutils-2.25/ld/testsuite/ld-sparc/tlsg32.s new file mode 100644 index 00000000..0339f50c --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlsg32.s @@ -0,0 +1,12 @@ + .section .tbss + .align 4 + .word 0, 0, 0, 0, 0, 0 + .type a,#tls_object + .size a,4 +a: + .word 0 + .text + .globl _start +_start: + .section .debug_foobar + .word %r_tls_dtpoff32(a) diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlsg32.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlsg32.sd new file mode 100644 index 00000000..861ac2eb --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlsg32.sd @@ -0,0 +1,10 @@ +#source: tlsg.s +#as: --32 +#ld: -melf32_sparc +#objdump: -sj.debug_foobar +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .debug_foobar: + 0+ 0+18 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlsg64.s b/binutils-2.25/ld/testsuite/ld-sparc/tlsg64.s new file mode 100644 index 00000000..4419974e --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlsg64.s @@ -0,0 +1,12 @@ + .section .tbss + .align 4 + .word 0, 0, 0, 0, 0, 0 + .type a,#tls_object + .size a,4 +a: + .word 0 + .text + .globl _start +_start: + .section .debug_foobar + .xword %r_tls_dtpoff64(a) diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlsg64.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlsg64.sd new file mode 100644 index 00000000..4181dde4 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlsg64.sd @@ -0,0 +1,10 @@ +#source: tlsg.s +#as: --64 -Av9 +#ld: -melf64_sparc +#objdump: -sj.debug_foobar +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .debug_foobar: + 0+ 0+ 0+18 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlslib.s b/binutils-2.25/ld/testsuite/ld-sparc/tlslib.s new file mode 100644 index 00000000..6b62e09f --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlslib.s @@ -0,0 +1,20 @@ + .section ".tdata", #alloc, #write, #tls + .align 4 + .globl sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8 +sG1: .word 513 +sG2: .word 514 +sG3: .word 515 +sG4: .word 516 +sG5: .word 517 +sG6: .word 518 +sG7: .word 519 +sG8: .word 520 + + .text + /* Dummy. */ + .globl __tls_get_addr + .type __tls_get_addr,#function + .proc 04 +__tls_get_addr: + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlsnopic.s b/binutils-2.25/ld/testsuite/ld-sparc/tlsnopic.s new file mode 100644 index 00000000..648660a7 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlsnopic.s @@ -0,0 +1,8 @@ + .section ".tbss" + .align 4 + .globl sh1, sh2, sh3, sh4 + .hidden sh1, sh2, sh3, sh4 +sh1: .word 0 +sh2: .word 0 +sh3: .word 0 +sh4: .word 0 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlspic.s b/binutils-2.25/ld/testsuite/ld-sparc/tlspic.s new file mode 100644 index 00000000..7c806d00 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlspic.s @@ -0,0 +1,12 @@ + .section ".tbss" + .align 4 + .globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8 + .hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8 +sH1: .word 0 +sH2: .word 0 +sH3: .word 0 +sH4: .word 0 +sH5: .word 0 +sH6: .word 0 +sH7: .word 0 +sH8: .word 0 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.dd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.dd new file mode 100644 index 00000000..c31d1909 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.dd @@ -0,0 +1,273 @@ +#source: tlssunbin32.s +#as: --32 +#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Disassembly of section .text: + +0+11000 <fn2-0x8>: + +11000: 81 c3 e0 08 retl * + +11004: ae 03 c0 17 add %o7, %l7, %l7 + +0+11008 <fn2>: + +11008: 9d e3 bf 98 save %sp, -104, %sp + +1100c: 2f 00 00 48 sethi %hi\(0x12000\), %l7 + +11010: 7f ff ff fc call 11000 <.*> + +11014: ae 05 e2 64 add %l7, 0x264, %l7 ! 12264 <.*> + +11018: 01 00 00 00 nop * + +1101c: 01 00 00 00 nop * + +11020: 01 00 00 00 nop * + +11024: 01 00 00 00 nop * + +11028: 23 00 00 00 sethi %hi\(0\), %l1 + +1102c: 01 00 00 00 nop * + +11030: a4 04 60 10 add %l1, 0x10, %l2 + +11034: 01 00 00 00 nop * + +11038: d0 05 c0 12 ld \[ %l7 \+ %l2 \], %o0 + +1103c: 01 00 00 00 nop * + +11040: 01 00 00 00 nop * + +11044: 90 01 c0 08 add %g7, %o0, %o0 + +11048: 01 00 00 00 nop * + +1104c: 01 00 00 00 nop * + +11050: 01 00 00 00 nop * + +11054: 01 00 00 00 nop * + +11058: 11 00 00 00 sethi %hi\(0\), %o0 + +1105c: 92 02 20 08 add %o0, 8, %o1 ! 8 <.*> + +11060: d0 05 c0 09 ld \[ %l7 \+ %o1 \], %o0 + +11064: 01 00 00 00 nop * + +11068: 90 01 c0 08 add %g7, %o0, %o0 + +1106c: 01 00 00 00 nop * + +11070: 01 00 00 00 nop * + +11074: 01 00 00 00 nop * + +11078: 01 00 00 00 nop * + +1107c: 21 00 00 04 sethi %hi\(0x1000\), %l0 + +11080: aa 1c 3f 60 xor %l0, -160, %l5 + +11084: 90 01 c0 15 add %g7, %l5, %o0 + +11088: 01 00 00 00 nop * + +1108c: 01 00 00 00 nop * + +11090: 01 00 00 00 nop * + +11094: 01 00 00 00 nop * + +11098: 01 00 00 00 nop * + +1109c: 01 00 00 00 nop * + +110a0: 11 00 00 00 sethi %hi\(0\), %o0 + +110a4: 92 1a 3f 80 xor %o0, -128, %o1 + +110a8: 90 01 c0 09 add %g7, %o1, %o0 + +110ac: 01 00 00 00 nop * + +110b0: 01 00 00 00 nop * + +110b4: 01 00 00 00 nop * + +110b8: 01 00 00 00 nop * + +110bc: 01 00 00 00 nop * + +110c0: 01 00 00 00 nop * + +110c4: 11 00 00 00 sethi %hi\(0\), %o0 + +110c8: 92 1a 3f a0 xor %o0, -96, %o1 + +110cc: 90 01 c0 09 add %g7, %o1, %o0 + +110d0: 01 00 00 00 nop * + +110d4: 01 00 00 00 nop * + +110d8: 01 00 00 00 nop * + +110dc: 01 00 00 00 nop * + +110e0: 01 00 00 00 nop * + +110e4: 01 00 00 00 nop * + +110e8: 01 00 00 00 nop * + +110ec: 01 00 00 00 nop * + +110f0: 01 00 00 00 nop * + +110f4: 01 00 00 00 nop * + +110f8: 01 00 00 00 nop * + +110fc: 01 00 00 00 nop * + +11100: 90 10 00 00 mov %g0, %o0 + +11104: 01 00 00 00 nop * + +11108: 27 00 00 00 sethi %hi\(0\), %l3 + +1110c: 01 00 00 00 nop * + +11110: a8 1c ff 80 xor %l3, -128, %l4 + +11114: 01 00 00 00 nop * + +11118: aa 01 c0 14 add %g7, %l4, %l5 + +1111c: 01 00 00 00 nop * + +11120: 25 00 00 00 sethi %hi\(0\), %l2 + +11124: 01 00 00 00 nop * + +11128: a6 1c bf 86 xor %l2, -122, %l3 + +1112c: 01 00 00 00 nop * + +11130: ec 11 c0 13 lduh \[ %g7 \+ %l3 \], %l6 + +11134: 01 00 00 00 nop * + +11138: 01 00 00 00 nop * + +1113c: 01 00 00 00 nop * + +11140: 01 00 00 00 nop * + +11144: 01 00 00 00 nop * + +11148: 27 00 00 00 sethi %hi\(0\), %l3 + +1114c: 01 00 00 00 nop * + +11150: 25 00 00 00 sethi %hi\(0\), %l2 + +11154: 01 00 00 00 nop * + +11158: a8 1c ff a0 xor %l3, -96, %l4 + +1115c: 90 10 00 00 mov %g0, %o0 + +11160: a6 1c bf a5 xor %l2, -91, %l3 + +11164: aa 01 c0 14 add %g7, %l4, %l5 + +11168: ec 09 c0 13 ldub \[ %g7 \+ %l3 \], %l6 + +1116c: 01 00 00 00 nop * + +11170: 01 00 00 00 nop * + +11174: 01 00 00 00 nop * + +11178: 01 00 00 00 nop * + +1117c: 23 00 00 00 sethi %hi\(0\), %l1 + +11180: 01 00 00 00 nop * + +11184: a4 04 60 08 add %l1, 8, %l2 + +11188: 01 00 00 00 nop * + +1118c: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2 + +11190: 01 00 00 00 nop * + +11194: a4 01 c0 12 add %g7, %l2, %l2 + +11198: 01 00 00 00 nop * + +1119c: 01 00 00 00 nop * + +111a0: 01 00 00 00 nop * + +111a4: 01 00 00 00 nop * + +111a8: 17 00 00 04 sethi %hi\(0x1000\), %o3 + +111ac: 96 1a ff 60 xor %o3, -160, %o3 + +111b0: 01 00 00 00 nop * + +111b4: 98 01 c0 0b add %g7, %o3, %o4 + +111b8: 01 00 00 00 nop * + +111bc: 01 00 00 00 nop * + +111c0: 01 00 00 00 nop * + +111c4: 01 00 00 00 nop * + +111c8: 29 00 00 00 sethi %hi\(0\), %l4 + +111cc: a2 1d 3f 80 xor %l4, -128, %l1 + +111d0: a6 10 00 11 mov %l1, %l3 + +111d4: a6 01 c0 13 add %g7, %l3, %l3 + +111d8: 01 00 00 00 nop * + +111dc: 01 00 00 00 nop * + +111e0: 01 00 00 00 nop * + +111e4: 01 00 00 00 nop * + +111e8: 13 00 00 00 sethi %hi\(0\), %o1 + +111ec: 96 1a 7f a0 xor %o1, -96, %o3 + +111f0: 90 10 00 0b mov %o3, %o0 + +111f4: 96 01 c0 08 add %g7, %o0, %o3 + +111f8: 01 00 00 00 nop * + +111fc: 01 00 00 00 nop * + +11200: 01 00 00 00 nop * + +11204: 01 00 00 00 nop * + +11208: 17 00 00 00 sethi %hi\(0\), %o3 + +1120c: 96 02 e0 04 add %o3, 4, %o3 ! 4 <.*> + +11210: d4 05 c0 0b ld \[ %l7 \+ %o3 \], %o2 + +11214: d8 01 c0 0a ld \[ %g7 \+ %o2 \], %o4 + +11218: 01 00 00 00 nop * + +1121c: 01 00 00 00 nop * + +11220: 01 00 00 00 nop * + +11224: 01 00 00 00 nop * + +11228: 17 00 00 00 sethi %hi\(0\), %o3 + +1122c: 96 1a ff 90 xor %o3, -112, %o3 + +11230: 94 10 00 0b mov %o3, %o2 + +11234: d8 29 c0 0a stb %o4, \[ %g7 \+ %o2 \] + +11238: 01 00 00 00 nop * + +1123c: 01 00 00 00 nop * + +11240: 01 00 00 00 nop * + +11244: 01 00 00 00 nop * + +11248: 1b 00 00 00 sethi %hi\(0\), %o5 + +1124c: 96 1b 7f b0 xor %o5, -80, %o3 + +11250: 94 10 00 0b mov %o3, %o2 + +11254: d8 49 c0 0a ldsb \[ %g7 \+ %o2 \], %o4 + +11258: 01 00 00 00 nop * + +1125c: 01 00 00 00 nop * + +11260: 01 00 00 00 nop * + +11264: 01 00 00 00 nop * + +11268: 81 c7 e0 08 ret * + +1126c: 81 e8 00 00 restore * +#... + +00012000 <_start>: + +12000: 9d e3 bf 98 save %sp, -104, %sp + +12004: 29 00 00 8c sethi %hi\(0x23000\), %l4 + +12008: a8 15 22 74 or %l4, 0x274, %l4 ! 23274 <.*> + +1200c: 01 00 00 00 nop * + +12010: 01 00 00 00 nop * + +12014: 01 00 00 00 nop * + +12018: 01 00 00 00 nop * + +1201c: 17 00 00 00 sethi %hi\(0\), %o3 + +12020: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*> + +12024: d4 05 00 0b ld \[ %l4 \+ %o3 \], %o2 + +12028: 98 01 c0 0a add %g7, %o2, %o4 + +1202c: 01 00 00 00 nop * + +12030: 01 00 00 00 nop * + +12034: 01 00 00 00 nop * + +12038: 01 00 00 00 nop * + +1203c: 17 00 00 00 sethi %hi\(0\), %o3 + +12040: 9a 1a ff d4 xor %o3, -44, %o5 + +12044: 94 10 00 0d mov %o5, %o2 + +12048: 98 01 c0 0a add %g7, %o2, %o4 + +1204c: 01 00 00 00 nop * + +12050: 01 00 00 00 nop * + +12054: 01 00 00 00 nop * + +12058: 01 00 00 00 nop * + +1205c: 17 00 00 00 sethi %hi\(0\), %o3 + +12060: 9a 1a ff f4 xor %o3, -12, %o5 + +12064: a4 10 00 0d mov %o5, %l2 + +12068: a4 01 c0 12 add %g7, %l2, %l2 + +1206c: 01 00 00 00 nop * + +12070: 01 00 00 00 nop * + +12074: 01 00 00 00 nop * + +12078: 01 00 00 00 nop * + +1207c: 17 00 00 00 sethi %hi\(0\), %o3 + +12080: 9a 1a ff fc xor %o3, -4, %o5 + +12084: a4 10 00 0d mov %o5, %l2 + +12088: e4 01 c0 12 ld \[ %g7 \+ %l2 \], %l2 + +1208c: 01 00 00 00 nop * + +12090: 01 00 00 00 nop * + +12094: 01 00 00 00 nop * + +12098: 01 00 00 00 nop * + +1209c: 17 00 00 00 sethi %hi\(0\), %o3 + +120a0: 9a 1a ff b4 xor %o3, -76, %o5 + +120a4: a4 10 00 0d mov %o5, %l2 + +120a8: a4 01 c0 12 add %g7, %l2, %l2 + +120ac: 01 00 00 00 nop * + +120b0: 01 00 00 00 nop * + +120b4: 01 00 00 00 nop * + +120b8: 01 00 00 00 nop * + +120bc: 17 00 00 00 sethi %hi\(0\), %o3 + +120c0: 9a 1a ff fc xor %o3, -4, %o5 + +120c4: a4 10 00 0d mov %o5, %l2 + +120c8: e2 29 c0 12 stb %l1, \[ %g7 \+ %l2 \] + +120cc: 01 00 00 00 nop * + +120d0: 01 00 00 00 nop * + +120d4: 01 00 00 00 nop * + +120d8: 01 00 00 00 nop * + +120dc: 23 00 00 00 sethi %hi\(0\), %l1 + +120e0: 01 00 00 00 nop * + +120e4: a4 1c 7f 64 xor %l1, -156, %l2 + +120e8: 01 00 00 00 nop * + +120ec: a6 01 c0 12 add %g7, %l2, %l3 + +120f0: 01 00 00 00 nop * + +120f4: 01 00 00 00 nop * + +120f8: 01 00 00 00 nop * + +120fc: 01 00 00 00 nop * + +12100: 11 00 00 00 sethi %hi\(0\), %o0 + +12104: 90 1a 3f e6 xor %o0, -26, %o0 + +12108: 90 01 c0 08 add %g7, %o0, %o0 + +1210c: 01 00 00 00 nop * + +12110: 01 00 00 00 nop * + +12114: 01 00 00 00 nop * + +12118: 01 00 00 00 nop * + +1211c: 23 00 00 00 sethi %hi\(0\), %l1 + +12120: 9a 1c 7f a5 xor %l1, -91, %o5 + +12124: 92 01 c0 0d add %g7, %o5, %o1 + +12128: 01 00 00 00 nop * + +1212c: 01 00 00 00 nop * + +12130: 01 00 00 00 nop * + +12134: 01 00 00 00 nop * + +12138: 23 00 00 00 sethi %hi\(0\), %l1 + +1213c: 9a 1c 7f 68 xor %l1, -152, %o5 + +12140: d2 01 c0 0d ld \[ %g7 \+ %o5 \], %o1 + +12144: 01 00 00 00 nop * + +12148: 01 00 00 00 nop * + +1214c: 01 00 00 00 nop * + +12150: 01 00 00 00 nop * + +12154: 11 00 00 00 sethi %hi\(0\), %o0 + +12158: 90 1a 3f eb xor %o0, -21, %o0 + +1215c: d2 29 c0 08 stb %o1, \[ %g7 \+ %o0 \] + +12160: 01 00 00 00 nop * + +12164: 01 00 00 00 nop * + +12168: 01 00 00 00 nop * + +1216c: 01 00 00 00 nop * + +12170: 15 00 00 00 sethi %hi\(0\), %o2 + +12174: 98 1a bf ab xor %o2, -85, %o4 + +12178: da 69 c0 0c ldstub \[ %g7 \+ %o4 \], %o5 + +1217c: 01 00 00 00 nop * + +12180: 01 00 00 00 nop * + +12184: 01 00 00 00 nop * + +12188: 01 00 00 00 nop * + +1218c: 81 c7 e0 08 ret * + +12190: 81 e8 00 00 restore * diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.rd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.rd new file mode 100644 index 00000000..7212732e --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.rd @@ -0,0 +1,129 @@ +#source: tlssunbin32.s +#as: --32 +#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o +#readelf: -WSsrl +#target: sparc*-*-* + +.* + +Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0 + +\[[ 0-9]+\] .interp +.* + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .text +PROGBITS +0+11000 0+1000 0+1194 00 +AX +0 +0 4096 + +\[[ 0-9]+\] .tdata +PROGBITS +0+22194 0+2194 0+1060 00 WAT +0 +0 +4 + +\[[ 0-9]+\] .tbss +NOBITS +0+231f4 0+31f4 0+40 00 WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+231f4 0+31f4 0+80 08 +WA +4 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+23274 0+3274 0+14 04 +WA +0 +0 +4 + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... + +Elf file type is EXEC \(Executable file\) +Entry point 0x12000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align + +PHDR +0x0+34 0x0+10034 0x0+10034 0x0+c0 0x0+c0 R E 0x4 + +INTERP +0x0+f4 0x0+100f4 0x0+100f4 0x0+11 0x0+11 R +0x1 +.*Requesting program interpreter.* + +LOAD .* R E 0x10000 + +LOAD .* RW +0x10000 + +DYNAMIC .* RW +0x4 + +TLS .* 0x0+1060 0x0+10a0 R +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries: + Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG5 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG2 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG6 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +00000000 +sG1 \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* TLS +GLOBAL +DEFAULT +UND sG5 +.* TLS +GLOBAL +DEFAULT +UND sG2 +.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr +.* NOTYPE +GLOBAL +DEFAULT +10 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sG6 +.* TLS +GLOBAL +DEFAULT +UND sG1 +.* NOTYPE +GLOBAL +DEFAULT +10 _edata +.* NOTYPE +GLOBAL +DEFAULT +10 _end + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* SECTION +LOCAL +DEFAULT +9 * +.* SECTION +LOCAL +DEFAULT +10 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +7 sl1 +.* TLS +LOCAL +DEFAULT +7 sl2 +.* TLS +LOCAL +DEFAULT +7 sl3 +.* TLS +LOCAL +DEFAULT +7 sl4 +.* TLS +LOCAL +DEFAULT +7 sl5 +.* TLS +LOCAL +DEFAULT +7 sl6 +.* TLS +LOCAL +DEFAULT +7 sl7 +.* TLS +LOCAL +DEFAULT +7 sl8 +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +8 bl1 +.* TLS +LOCAL +DEFAULT +8 bl2 +.* TLS +LOCAL +DEFAULT +8 bl3 +.* TLS +LOCAL +DEFAULT +8 bl4 +.* TLS +LOCAL +DEFAULT +8 bl5 +.* TLS +LOCAL +DEFAULT +8 bl6 +.* TLS +LOCAL +DEFAULT +8 bl7 +.* TLS +LOCAL +DEFAULT +8 bl8 +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +10 _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +10 _GLOBAL_OFFSET_TABLE_ +.* TLS +GLOBAL +DEFAULT +7 sg8 +.* TLS +GLOBAL +DEFAULT +8 bg8 +.* TLS +GLOBAL +DEFAULT +8 bg6 +.* TLS +GLOBAL +DEFAULT +UND sG5 +.* TLS +GLOBAL +DEFAULT +8 bg3 +.* TLS +GLOBAL +DEFAULT +7 sg3 +.* TLS +GLOBAL +HIDDEN +7 sh3 +.* TLS +GLOBAL +DEFAULT +UND sG2 +.* TLS +GLOBAL +DEFAULT +7 sg4 +.* TLS +GLOBAL +DEFAULT +7 sg5 +.* TLS +GLOBAL +DEFAULT +8 bg5 +.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr +.* TLS +GLOBAL +HIDDEN +7 sh7 +.* TLS +GLOBAL +HIDDEN +7 sh8 +.* TLS +GLOBAL +DEFAULT +7 sg1 +.* FUNC +GLOBAL +DEFAULT +6 _start +.* TLS +GLOBAL +HIDDEN +7 sh4 +.* TLS +GLOBAL +DEFAULT +8 bg7 +.* TLS +GLOBAL +HIDDEN +7 sh5 +.* NOTYPE +GLOBAL +DEFAULT +10 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sG6 +.* FUNC +GLOBAL +DEFAULT +6 fn2 +.* TLS +GLOBAL +DEFAULT +7 sg2 +.* TLS +GLOBAL +DEFAULT +UND sG1 +.* TLS +GLOBAL +HIDDEN +7 sh1 +.* TLS +GLOBAL +DEFAULT +7 sg6 +.* TLS +GLOBAL +DEFAULT +7 sg7 +.* NOTYPE +GLOBAL +DEFAULT +10 _edata +.* NOTYPE +GLOBAL +DEFAULT +10 _end +.* TLS +GLOBAL +HIDDEN +7 sh2 +.* TLS +GLOBAL +HIDDEN +7 sh6 +.* TLS +GLOBAL +DEFAULT +8 bg2 +.* TLS +GLOBAL +DEFAULT +8 bg1 +.* TLS +GLOBAL +DEFAULT +8 bg4 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.s new file mode 100644 index 00000000..21716f36 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.s @@ -0,0 +1,114 @@ + .section ".tbss" + .align 4 + .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8 +bg1: .word 0 +bg2: .word 0 +bg3: .word 0 +bg4: .word 0 +bg5: .word 0 +bg6: .word 0 +bg7: .word 0 +bg8: .word 0 +bl1: .word 0 +bl2: .word 0 +bl3: .word 0 +bl4: .word 0 +bl5: .word 0 +bl6: .word 0 +bl7: .word 0 +bl8: .word 0 + .text + .globl _start + .type _start,#function + .proc 04 +_start: + save %sp, -104, %sp + .hidden _GLOBAL_OFFSET_TABLE_ + sethi %hi(_GLOBAL_OFFSET_TABLE_), %l4 + or %l4, %lo(_GLOBAL_OFFSET_TABLE_), %l4 + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sG6), %o3 + add %o3, %tie_lo10(sG6), %o3 + ld [%l4 + %o3], %o2, %tie_ld(sG6) + add %g7, %o2, %o4, %tie_add(sG6) + nop;nop;nop;nop + + /* IE -> LE against global var defined in exec */ + sethi %tie_hi22(bg6), %o3 + add %o3, %tie_lo10(bg6), %o5 + ld [%l4 + %o5], %o2, %tie_ld(bg6) + add %g7, %o2, %o4, %tie_add(bg6) + nop;nop;nop;nop + + /* IE -> LE against local var */ + sethi %tie_hi22(bl6), %o3 + add %o3, %tie_lo10(bl6), %o5 + ld [%l4 + %o5], %l2, %tie_ld(bl6) + add %g7, %l2, %l2, %tie_add(bl6) + nop;nop;nop;nop + + /* direct %g7 access IE -> LE against local var */ + sethi %tie_hi22(bl8), %o3 + add %o3, %tie_lo10(bl8), %o5 + ld [%l4 + %o5], %l2, %tie_ld(bl8) + ld [%g7 + %l2], %l2, %tie_add(bl8) + nop;nop;nop;nop + + /* IE -> LE against hidden but not local var */ + sethi %tie_hi22(sh6), %o3 + add %o3, %tie_lo10(sh6), %o5 + ld [%l4 + %o5], %l2, %tie_ld(sh6) + add %g7, %l2, %l2, %tie_add(sh6) + nop;nop;nop;nop + + /* direct %g7 access IE -> LE against hidden but not local var */ + sethi %tie_hi22(bl8), %o3 + add %o3, %tie_lo10(bl8), %o5 + ld [%l4 + %o5], %l2, %tie_ld(bl8) + stb %l1, [%g7 + %l2], %tie_add(bl8) + nop;nop;nop;nop + + /* LE, global var defined in exec */ + sethi %tle_hix22(sg2), %l1 + nop + xor %l1, %tle_lox10(sg2), %l2 + nop + add %g7, %l2, %l3 + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl2+2), %o0 + xor %o0, %tle_lox10(bl2+2), %o0 + add %g7, %o0, %o0 + nop;nop;nop;nop + + /* LE, hidden var defined in exec */ + sethi %tle_hix22(sh2+1), %l1 + xor %l1, %tle_lox10(sh2+1), %o5 + add %g7, %o5, %o1 + nop;nop;nop;nop + + /* Direct %g7 access */ + + /* LE, global var defined in exec */ + sethi %tle_hix22(sg3), %l1 + xor %l1, %tle_lox10(sg3), %o5 + ld [%g7 + %o5], %o1 + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl3 + 3), %o0 + xor %o0, %tle_lox10(bl3 + 3), %o0 + stb %o1, [%g7 + %o0] + nop;nop;nop;nop + + /* LE, hidden var defined in exec */ + sethi %tle_hix22(sh3 + 3), %o2 + xor %o2, %tle_lox10(sh3 + 3), %o4 + ldstub [%g7 + %o4], %o5 + nop;nop;nop;nop + + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.sd new file mode 100644 index 00000000..7db88c9f --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.sd @@ -0,0 +1,11 @@ +#source: tlssunbin32.s +#as: --32 +#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinbin32.o +#objdump: -sj.got +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .got: + 23274 000231f4 0+ 0+ 0+ .* + 23284 0+ .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.td b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.td new file mode 100644 index 00000000..f5974e75 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin32.td @@ -0,0 +1,19 @@ +#source: tlssunbin32.s +#as: --32 +#ld: -shared -melf32_sparc tmpdir/libtlslib32.so tmpdir/tlssunbinpic32.o +#objdump: -sj.tdata +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .tdata: + 22194 00000011 00000000 00000000 00000000 .* + 221a4 00000000 00000000 00000000 00000000 .* +#... + 23184 00000000 00000000 00000000 00000000 .* + 23194 00000000 00000012 00000013 00000014 .* + 231a4 00000015 00000016 00000017 00000018 .* + 231b4 00000041 00000042 00000043 00000044 .* + 231c4 00000045 00000046 00000047 00000048 .* + 231d4 00000101 00000102 00000103 00000104 .* + 231e4 00000105 00000106 00000107 00000108 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.dd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.dd new file mode 100644 index 00000000..cd7db1c5 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.dd @@ -0,0 +1,277 @@ +#source: tlssunbin64.s +#as: --64 +#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Disassembly of section .text: + +0+101000 <fn2-0x8>: + +101000: 81 c3 e0 08 retl * + +101004: ae 03 c0 17 add %o7, %l7, %l7 + +0+101008 <fn2>: + +101008: 9d e3 bf 60 save %sp, -160, %sp + +10100c: 2f 00 04 04 sethi %hi\(0x101000\), %l7 + +101010: 7f ff ff fc call 101000 <.*> + +101014: ae 05 e2 f8 add %l7, 0x2f8, %l7 ! 1012f8 <.*> + +101018: 01 00 00 00 nop * + +10101c: 01 00 00 00 nop * + +101020: 01 00 00 00 nop * + +101024: 01 00 00 00 nop * + +101028: 23 00 00 00 sethi %hi\(0\), %l1 + +10102c: 01 00 00 00 nop * + +101030: a4 04 60 20 add %l1, 0x20, %l2 + +101034: 01 00 00 00 nop * + +101038: d0 5d c0 12 ldx \[ %l7 \+ %l2 \], %o0 + +10103c: 01 00 00 00 nop * + +101040: 01 00 00 00 nop * + +101044: 90 01 c0 08 add %g7, %o0, %o0 + +101048: 01 00 00 00 nop * + +10104c: 01 00 00 00 nop * + +101050: 01 00 00 00 nop * + +101054: 01 00 00 00 nop * + +101058: 11 00 00 00 sethi %hi\(0\), %o0 + +10105c: 92 02 20 10 add %o0, 0x10, %o1 ! 10 <.*> + +101060: d0 5d c0 09 ldx \[ %l7 \+ %o1 \], %o0 + +101064: 01 00 00 00 nop * + +101068: 90 01 c0 08 add %g7, %o0, %o0 + +10106c: 01 00 00 00 nop * + +101070: 01 00 00 00 nop * + +101074: 01 00 00 00 nop * + +101078: 01 00 00 00 nop * + +10107c: 21 00 00 00 sethi %hi\(0\), %l0 + +101080: aa 1c 3f 60 xor %l0, -160, %l5 + +101084: 90 01 c0 15 add %g7, %l5, %o0 + +101088: 01 00 00 00 nop * + +10108c: 01 00 00 00 nop * + +101090: 01 00 00 00 nop * + +101094: 01 00 00 00 nop * + +101098: 01 00 00 00 nop * + +10109c: 01 00 00 00 nop * + +1010a0: 11 00 00 00 sethi %hi\(0\), %o0 + +1010a4: 92 1a 3f 80 xor %o0, -128, %o1 + +1010a8: 90 01 c0 09 add %g7, %o1, %o0 + +1010ac: 01 00 00 00 nop * + +1010b0: 01 00 00 00 nop * + +1010b4: 01 00 00 00 nop * + +1010b8: 01 00 00 00 nop * + +1010bc: 01 00 00 00 nop * + +1010c0: 01 00 00 00 nop * + +1010c4: 11 00 00 00 sethi %hi\(0\), %o0 + +1010c8: 92 1a 3f a0 xor %o0, -96, %o1 + +1010cc: 90 01 c0 09 add %g7, %o1, %o0 + +1010d0: 01 00 00 00 nop * + +1010d4: 01 00 00 00 nop * + +1010d8: 01 00 00 00 nop * + +1010dc: 01 00 00 00 nop * + +1010e0: 01 00 00 00 nop * + +1010e4: 01 00 00 00 nop * + +1010e8: 01 00 00 00 nop * + +1010ec: 01 00 00 00 nop * + +1010f0: 01 00 00 00 nop * + +1010f4: 01 00 00 00 nop * + +1010f8: 01 00 00 00 nop * + +1010fc: 01 00 00 00 nop * + +101100: 90 10 00 00 mov %g0, %o0 + +101104: 01 00 00 00 nop * + +101108: 27 00 00 00 sethi %hi\(0\), %l3 + +10110c: 01 00 00 00 nop * + +101110: a8 1c ff 80 xor %l3, -128, %l4 + +101114: 01 00 00 00 nop * + +101118: aa 01 c0 14 add %g7, %l4, %l5 + +10111c: 01 00 00 00 nop * + +101120: 25 00 00 00 sethi %hi\(0\), %l2 + +101124: 01 00 00 00 nop * + +101128: a6 1c bf 86 xor %l2, -122, %l3 + +10112c: 01 00 00 00 nop * + +101130: ec 11 c0 13 lduh \[ %g7 \+ %l3 \], %l6 + +101134: 01 00 00 00 nop * + +101138: 01 00 00 00 nop * + +10113c: 01 00 00 00 nop * + +101140: 01 00 00 00 nop * + +101144: 01 00 00 00 nop * + +101148: 27 00 00 00 sethi %hi\(0\), %l3 + +10114c: 01 00 00 00 nop * + +101150: 25 00 00 00 sethi %hi\(0\), %l2 + +101154: 01 00 00 00 nop * + +101158: a8 1c ff a0 xor %l3, -96, %l4 + +10115c: 90 10 00 00 mov %g0, %o0 + +101160: a6 1c bf a5 xor %l2, -91, %l3 + +101164: aa 01 c0 14 add %g7, %l4, %l5 + +101168: ec 09 c0 13 ldub \[ %g7 \+ %l3 \], %l6 + +10116c: 01 00 00 00 nop * + +101170: 01 00 00 00 nop * + +101174: 01 00 00 00 nop * + +101178: 01 00 00 00 nop * + +10117c: 23 00 00 00 sethi %hi\(0\), %l1 + +101180: 01 00 00 00 nop * + +101184: a4 04 60 10 add %l1, 0x10, %l2 + +101188: 01 00 00 00 nop * + +10118c: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2 + +101190: 01 00 00 00 nop * + +101194: a4 01 c0 12 add %g7, %l2, %l2 + +101198: 01 00 00 00 nop * + +10119c: 01 00 00 00 nop * + +1011a0: 01 00 00 00 nop * + +1011a4: 01 00 00 00 nop * + +1011a8: 17 00 00 00 sethi %hi\(0\), %o3 + +1011ac: 96 1a ff 60 xor %o3, -160, %o3 + +1011b0: 94 10 00 0b mov %o3, %o2 + +1011b4: 98 01 c0 0a add %g7, %o2, %o4 + +1011b8: 01 00 00 00 nop * + +1011bc: 01 00 00 00 nop * + +1011c0: 01 00 00 00 nop * + +1011c4: 01 00 00 00 nop * + +1011c8: 29 00 00 00 sethi %hi\(0\), %l4 + +1011cc: a2 1d 3f 80 xor %l4, -128, %l1 + +1011d0: a6 10 00 11 mov %l1, %l3 + +1011d4: a6 01 c0 13 add %g7, %l3, %l3 + +1011d8: 01 00 00 00 nop * + +1011dc: 01 00 00 00 nop * + +1011e0: 01 00 00 00 nop * + +1011e4: 01 00 00 00 nop * + +1011e8: 13 00 00 00 sethi %hi\(0\), %o1 + +1011ec: 96 1a 7f a0 xor %o1, -96, %o3 + +1011f0: 90 10 00 0b mov %o3, %o0 + +1011f4: 96 01 c0 08 add %g7, %o0, %o3 + +1011f8: 01 00 00 00 nop * + +1011fc: 01 00 00 00 nop * + +101200: 01 00 00 00 nop * + +101204: 01 00 00 00 nop * + +101208: 17 00 00 00 sethi %hi\(0\), %o3 + +10120c: 96 02 e0 08 add %o3, 8, %o3 ! 8 <.*> + +101210: d4 5d c0 0b ldx \[ %l7 \+ %o3 \], %o2 + +101214: d8 59 c0 0a ldx \[ %g7 \+ %o2 \], %o4 + +101218: 01 00 00 00 nop * + +10121c: 01 00 00 00 nop * + +101220: 01 00 00 00 nop * + +101224: 01 00 00 00 nop * + +101228: 17 00 00 00 sethi %hi\(0\), %o3 + +10122c: 96 1a ff 90 xor %o3, -112, %o3 + +101230: 94 10 00 0b mov %o3, %o2 + +101234: d8 29 c0 0a stb %o4, \[ %g7 \+ %o2 \] + +101238: 01 00 00 00 nop * + +10123c: 01 00 00 00 nop * + +101240: 01 00 00 00 nop * + +101244: 01 00 00 00 nop * + +101248: 1b 00 00 00 sethi %hi\(0\), %o5 + +10124c: 96 1b 7f b0 xor %o5, -80, %o3 + +101250: 94 10 00 0b mov %o3, %o2 + +101254: d8 49 c0 0a ldsb \[ %g7 \+ %o2 \], %o4 + +101258: 01 00 00 00 nop * + +10125c: 01 00 00 00 nop * + +101260: 01 00 00 00 nop * + +101264: 01 00 00 00 nop * + +101268: 81 cf e0 08 rett %i7 \+ 8 + +10126c: 01 00 00 00 nop * +#... + +0+102000 <_start>: + +102000: 9d e3 bf 60 save %sp, -160, %sp + +102004: 23 00 00 00 sethi %hi\(0\), %l1 + +102008: 25 00 08 08 sethi %hi\(0x202000\), %l2 + +10200c: a2 14 60 00 mov %l1, %l1 + +102010: a4 14 a3 08 or %l2, 0x308, %l2 + +102014: a3 2c 70 20 sllx %l1, 0x20, %l1 + +102018: a8 04 40 12 add %l1, %l2, %l4 + +10201c: 01 00 00 00 nop * + +102020: 01 00 00 00 nop * + +102024: 01 00 00 00 nop * + +102028: 01 00 00 00 nop * + +10202c: 17 00 00 00 sethi %hi\(0\), %o3 + +102030: 96 02 e0 18 add %o3, 0x18, %o3 ! 18 <.*> + +102034: d4 5d 00 0b ldx \[ %l4 \+ %o3 \], %o2 + +102038: 98 01 c0 0a add %g7, %o2, %o4 + +10203c: 01 00 00 00 nop * + +102040: 01 00 00 00 nop * + +102044: 01 00 00 00 nop * + +102048: 01 00 00 00 nop * + +10204c: 17 00 00 00 sethi %hi\(0\), %o3 + +102050: 9a 1a ff d4 xor %o3, -44, %o5 + +102054: 94 10 00 0d mov %o5, %o2 + +102058: 98 01 c0 0a add %g7, %o2, %o4 + +10205c: 01 00 00 00 nop * + +102060: 01 00 00 00 nop * + +102064: 01 00 00 00 nop * + +102068: 01 00 00 00 nop * + +10206c: 17 00 00 00 sethi %hi\(0\), %o3 + +102070: 9a 1a ff f4 xor %o3, -12, %o5 + +102074: a4 10 00 0d mov %o5, %l2 + +102078: a4 01 c0 12 add %g7, %l2, %l2 + +10207c: 01 00 00 00 nop * + +102080: 01 00 00 00 nop * + +102084: 01 00 00 00 nop * + +102088: 01 00 00 00 nop * + +10208c: 17 00 00 00 sethi %hi\(0\), %o3 + +102090: 9a 1a ff fc xor %o3, -4, %o5 + +102094: a4 10 00 0d mov %o5, %l2 + +102098: e4 41 c0 12 ldsw \[ %g7 \+ %l2 \], %l2 + +10209c: 01 00 00 00 nop * + +1020a0: 01 00 00 00 nop * + +1020a4: 01 00 00 00 nop * + +1020a8: 01 00 00 00 nop * + +1020ac: 17 00 00 00 sethi %hi\(0\), %o3 + +1020b0: 9a 1a ff b4 xor %o3, -76, %o5 + +1020b4: a4 10 00 0d mov %o5, %l2 + +1020b8: a4 01 c0 12 add %g7, %l2, %l2 + +1020bc: 01 00 00 00 nop * + +1020c0: 01 00 00 00 nop * + +1020c4: 01 00 00 00 nop * + +1020c8: 01 00 00 00 nop * + +1020cc: 17 00 00 00 sethi %hi\(0\), %o3 + +1020d0: 9a 1a ff fc xor %o3, -4, %o5 + +1020d4: a4 10 00 0d mov %o5, %l2 + +1020d8: e2 29 c0 12 stb %l1, \[ %g7 \+ %l2 \] + +1020dc: 01 00 00 00 nop * + +1020e0: 01 00 00 00 nop * + +1020e4: 01 00 00 00 nop * + +1020e8: 01 00 00 00 nop * + +1020ec: 23 00 00 00 sethi %hi\(0\), %l1 + +1020f0: 01 00 00 00 nop * + +1020f4: a4 1c 7f 64 xor %l1, -156, %l2 + +1020f8: 01 00 00 00 nop * + +1020fc: a6 01 c0 12 add %g7, %l2, %l3 + +102100: 01 00 00 00 nop * + +102104: 01 00 00 00 nop * + +102108: 01 00 00 00 nop * + +10210c: 01 00 00 00 nop * + +102110: 11 00 00 00 sethi %hi\(0\), %o0 + +102114: 90 1a 3f e6 xor %o0, -26, %o0 + +102118: 90 01 c0 08 add %g7, %o0, %o0 + +10211c: 01 00 00 00 nop * + +102120: 01 00 00 00 nop * + +102124: 01 00 00 00 nop * + +102128: 01 00 00 00 nop * + +10212c: 23 00 00 00 sethi %hi\(0\), %l1 + +102130: 9a 1c 7f a5 xor %l1, -91, %o5 + +102134: 92 01 c0 0d add %g7, %o5, %o1 + +102138: 01 00 00 00 nop * + +10213c: 01 00 00 00 nop * + +102140: 01 00 00 00 nop * + +102144: 01 00 00 00 nop * + +102148: 23 00 00 00 sethi %hi\(0\), %l1 + +10214c: 9a 1c 7f 68 xor %l1, -152, %o5 + +102150: d2 59 c0 0d ldx \[ %g7 \+ %o5 \], %o1 + +102154: 01 00 00 00 nop * + +102158: 01 00 00 00 nop * + +10215c: 01 00 00 00 nop * + +102160: 01 00 00 00 nop * + +102164: 11 00 00 00 sethi %hi\(0\), %o0 + +102168: 90 1a 3f eb xor %o0, -21, %o0 + +10216c: d2 29 c0 08 stb %o1, \[ %g7 \+ %o0 \] + +102170: 01 00 00 00 nop * + +102174: 01 00 00 00 nop * + +102178: 01 00 00 00 nop * + +10217c: 01 00 00 00 nop * + +102180: 15 00 00 00 sethi %hi\(0\), %o2 + +102184: 98 1a bf ab xor %o2, -85, %o4 + +102188: da 69 c0 0c ldstub \[ %g7 \+ %o4 \], %o5 + +10218c: 01 00 00 00 nop * + +102190: 01 00 00 00 nop * + +102194: 01 00 00 00 nop * + +102198: 01 00 00 00 nop * + +10219c: 81 c7 e0 08 ret + +1021a0: 81 e8 00 00 restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.rd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.rd new file mode 100644 index 00000000..5480dab9 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.rd @@ -0,0 +1,129 @@ +#source: tlssunbin64.s +#as: --64 +#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o +#readelf: -WSsrl +#target: sparc*-*-* + +.* + +Section Headers: + +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 00 +0 +0 +0 + +\[[ 0-9]+\] .interp +.* + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .text +PROGBITS +0+101000 0+1000 0+11a4 00 +AX +0 +0 4096 + +\[[ 0-9]+\] .tdata +PROGBITS +0+2021a4 0+21a4 0+0060 00 WAT +0 +0 +4 + +\[[ 0-9]+\] .tbss +NOBITS +0+202204 0+2204 0+40 00 WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+202208 0+2208 0+100 10 +WA +4 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+202308 0+2308 0+28 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... + +Elf file type is EXEC \(Executable file\) +Entry point 0x102000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align + +PHDR +0x0+40 0x0+100040 0x0+100040 0x0+150 0x0+150 R E 0x8 + +INTERP +0x0+190 0x0+100190 0x0+100190 0x0+19 0x0+19 R +0x1 +.*Requesting program interpreter.* + +LOAD .* R E 0x100000 + +LOAD .* RW +0x100000 + +DYNAMIC .* RW +0x8 + +TLS .* 0x0+60 0x0+a0 R +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG5 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG2 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG6 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sG1 \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* TLS +GLOBAL +DEFAULT +UND sG5 +.* TLS +GLOBAL +DEFAULT +UND sG2 +.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr +.* NOTYPE +GLOBAL +DEFAULT +10 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sG6 +.* TLS +GLOBAL +DEFAULT +UND sG1 +.* NOTYPE +GLOBAL +DEFAULT +10 _edata +.* NOTYPE +GLOBAL +DEFAULT +10 _end + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size Type +Bind +Vis +Ndx Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* SECTION +LOCAL +DEFAULT +9 * +.* SECTION +LOCAL +DEFAULT +10 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +7 sl1 +.* TLS +LOCAL +DEFAULT +7 sl2 +.* TLS +LOCAL +DEFAULT +7 sl3 +.* TLS +LOCAL +DEFAULT +7 sl4 +.* TLS +LOCAL +DEFAULT +7 sl5 +.* TLS +LOCAL +DEFAULT +7 sl6 +.* TLS +LOCAL +DEFAULT +7 sl7 +.* TLS +LOCAL +DEFAULT +7 sl8 +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +8 bl1 +.* TLS +LOCAL +DEFAULT +8 bl2 +.* TLS +LOCAL +DEFAULT +8 bl3 +.* TLS +LOCAL +DEFAULT +8 bl4 +.* TLS +LOCAL +DEFAULT +8 bl5 +.* TLS +LOCAL +DEFAULT +8 bl6 +.* TLS +LOCAL +DEFAULT +8 bl7 +.* TLS +LOCAL +DEFAULT +8 bl8 +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +9 _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +10 _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +10 _GLOBAL_OFFSET_TABLE_ +.* TLS +GLOBAL +DEFAULT +7 sg8 +.* TLS +GLOBAL +DEFAULT +8 bg8 +.* TLS +GLOBAL +DEFAULT +8 bg6 +.* TLS +GLOBAL +DEFAULT +UND sG5 +.* TLS +GLOBAL +DEFAULT +8 bg3 +.* TLS +GLOBAL +DEFAULT +7 sg3 +.* TLS +GLOBAL +HIDDEN +7 sh3 +.* TLS +GLOBAL +DEFAULT +UND sG2 +.* TLS +GLOBAL +DEFAULT +7 sg4 +.* TLS +GLOBAL +DEFAULT +7 sg5 +.* TLS +GLOBAL +DEFAULT +8 bg5 +.* FUNC +GLOBAL +DEFAULT +UND __tls_get_addr +.* TLS +GLOBAL +HIDDEN +7 sh7 +.* TLS +GLOBAL +HIDDEN +7 sh8 +.* TLS +GLOBAL +DEFAULT +7 sg1 +.* FUNC +GLOBAL +DEFAULT +6 _start +.* TLS +GLOBAL +HIDDEN +7 sh4 +.* TLS +GLOBAL +DEFAULT +8 bg7 +.* TLS +GLOBAL +HIDDEN +7 sh5 +.* NOTYPE +GLOBAL +DEFAULT +10 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sG6 +.* FUNC +GLOBAL +DEFAULT +6 fn2 +.* TLS +GLOBAL +DEFAULT +7 sg2 +.* TLS +GLOBAL +DEFAULT +UND sG1 +.* TLS +GLOBAL +HIDDEN +7 sh1 +.* TLS +GLOBAL +DEFAULT +7 sg6 +.* TLS +GLOBAL +DEFAULT +7 sg7 +.* NOTYPE +GLOBAL +DEFAULT +10 _edata +.* NOTYPE +GLOBAL +DEFAULT +10 _end +.* TLS +GLOBAL +HIDDEN +7 sh2 +.* TLS +GLOBAL +HIDDEN +7 sh6 +.* TLS +GLOBAL +DEFAULT +8 bg2 +.* TLS +GLOBAL +DEFAULT +8 bg1 +.* TLS +GLOBAL +DEFAULT +8 bg4 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.s new file mode 100644 index 00000000..bb62610d --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.s @@ -0,0 +1,118 @@ + .section ".tbss" + .align 4 + .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8 +bg1: .word 0 +bg2: .word 0 +bg3: .word 0 +bg4: .word 0 +bg5: .word 0 +bg6: .word 0 +bg7: .word 0 +bg8: .word 0 +bl1: .word 0 +bl2: .word 0 +bl3: .word 0 +bl4: .word 0 +bl5: .word 0 +bl6: .word 0 +bl7: .word 0 +bl8: .word 0 + .text + .globl _start + .type _start,#function + .proc 04 +_start: + save %sp, -160, %sp + .hidden _GLOBAL_OFFSET_TABLE_ + sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1 + sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2 + or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1 + or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2 + sllx %l1, 32, %l1 + add %l1, %l2, %l4 + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sG6), %o3 + add %o3, %tie_lo10(sG6), %o3 + ldx [%l4 + %o3], %o2, %tie_ldx(sG6) + add %g7, %o2, %o4, %tie_add(sG6) + nop;nop;nop;nop + + /* IE -> LE against global var defined in exec */ + sethi %tie_hi22(bg6), %o3 + add %o3, %tie_lo10(bg6), %o5 + ldx [%l4 + %o5], %o2, %tie_ldx(bg6) + add %g7, %o2, %o4, %tie_add(bg6) + nop;nop;nop;nop + + /* IE -> LE against local var */ + sethi %tie_hi22(bl6), %o3 + add %o3, %tie_lo10(bl6), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(bl6) + add %g7, %l2, %l2, %tie_add(bl6) + nop;nop;nop;nop + + /* direct %g7 access IE -> LE against local var */ + sethi %tie_hi22(bl8), %o3 + add %o3, %tie_lo10(bl8), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(bl8) + ldsw [%g7 + %l2], %l2, %tie_add(bl8) + nop;nop;nop;nop + + /* IE -> LE against hidden but not local var */ + sethi %tie_hi22(sh6), %o3 + add %o3, %tie_lo10(sh6), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(sh6) + add %g7, %l2, %l2, %tie_add(sh6) + nop;nop;nop;nop + + /* direct %g7 access IE -> LE against hidden but not local var */ + sethi %tie_hi22(bl8), %o3 + add %o3, %tie_lo10(bl8), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(bl8) + stb %l1, [%g7 + %l2], %tie_add(bl8) + nop;nop;nop;nop + + /* LE, global var defined in exec */ + sethi %tle_hix22(sg2), %l1 + nop + xor %l1, %tle_lox10(sg2), %l2 + nop + add %g7, %l2, %l3 + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl2+2), %o0 + xor %o0, %tle_lox10(bl2+2), %o0 + add %g7, %o0, %o0 + nop;nop;nop;nop + + /* LE, hidden var defined in exec */ + sethi %tle_hix22(sh2+1), %l1 + xor %l1, %tle_lox10(sh2+1), %o5 + add %g7, %o5, %o1 + nop;nop;nop;nop + + /* Direct %g7 access */ + + /* LE, global var defined in exec */ + sethi %tle_hix22(sg3), %l1 + xor %l1, %tle_lox10(sg3), %o5 + ldx [%g7 + %o5], %o1 + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl3 + 3), %o0 + xor %o0, %tle_lox10(bl3 + 3), %o0 + stb %o1, [%g7 + %o0] + nop;nop;nop;nop + + /* LE, hidden var defined in exec */ + sethi %tle_hix22(sh3 + 3), %o2 + xor %o2, %tle_lox10(sh3 + 3), %o4 + ldstub [%g7 + %o4], %o5 + nop;nop;nop;nop + + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.sd new file mode 100644 index 00000000..73a87e07 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.sd @@ -0,0 +1,12 @@ +#source: tlssunbin64.s +#as: --64 +#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o +#objdump: -sj.got +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .got: + 202308 0+ 0+202208 0+ 0+ .* + 202318 0+ 0+ 0+ 0+ .* + 202328 0+ 0+ +.* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.td b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.td new file mode 100644 index 00000000..f7eef833 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbin64.td @@ -0,0 +1,15 @@ +#source: tlssunbin64.s +#as: --64 +#ld: -shared -melf64_sparc tmpdir/libtlslib64.so tmpdir/tlssunbinpic64.o +#objdump: -sj.tdata +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .tdata: + 2021a4 00000011 00000012 00000013 00000014 .* + 2021b4 00000015 00000016 00000017 00000018 .* + 2021c4 00000041 00000042 00000043 00000044 .* + 2021d4 00000045 00000046 00000047 00000048 .* + 2021e4 00000101 00000102 00000103 00000104 .* + 2021f4 00000105 00000106 00000107 00000108 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbinpic32.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbinpic32.s new file mode 100644 index 00000000..60fb5857 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbinpic32.s @@ -0,0 +1,183 @@ + .data + .align 4096 + .section ".tdata", #alloc, #write, #tls + .align 4 + .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 + .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 + .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 +sg1: .word 17 + .skip 4096 +sg2: .word 18 +sg3: .word 19 +sg4: .word 20 +sg5: .word 21 +sg6: .word 22 +sg7: .word 23 +sg8: .word 24 +sl1: .word 65 +sl2: .word 66 +sl3: .word 67 +sl4: .word 68 +sl5: .word 69 +sl6: .word 70 +sl7: .word 71 +sl8: .word 72 +sh1: .word 257 +sh2: .word 258 +sh3: .word 259 +sh4: .word 260 +sh5: .word 261 +sh6: .word 262 +sh7: .word 263 +sh8: .word 264 + .text + .align 4096 +.LLGETPC0: + retl + add %o7, %l7, %l7 + + .globl fn2 + .type fn2,#function + .proc 04 +fn2: + save %sp, -104, %sp + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 + call .LLGETPC0 + add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 + nop;nop;nop;nop + + /* GD -> IE because variable is not defined in executable */ + sethi %tgd_hi22(sG1), %l1 + nop + add %l1, %tgd_lo10(sG1), %l2 + nop + add %l7, %l2, %o0, %tgd_add(sG1) + nop + call __tls_get_addr, %tgd_call(sG1) + nop + nop;nop;nop;nop + + /* GD -> IE because variable is not defined in executable where + the variable is referenced through IE too */ + sethi %tgd_hi22(sG2), %o0 + add %o0, %tgd_lo10(sG2), %o1 + add %l7, %o1, %o0, %tgd_add(sG2) + call __tls_get_addr, %tgd_call(sG2) + nop + nop;nop;nop;nop + + /* GD -> LE with global variable defined in executable */ + sethi %tgd_hi22(sg1), %l0 + add %l0, %tgd_lo10(sg1), %l5 + add %l7, %l5, %o0, %tgd_add(sg1) + call __tls_get_addr, %tgd_call(sg1) + nop + nop;nop;nop;nop + + /* GD -> LE with local variable defined in executable */ + sethi %tgd_hi22(sl1), %o0 + add %o0, %tgd_lo10(sl1), %o1 + add %l7, %o1, %o0, %tgd_add(sl1) + call __tls_get_addr, %tgd_call(sl1) + nop + nop;nop;nop;nop + + /* GD -> LE with hidden variable defined in executable */ + sethi %tgd_hi22(sh1), %o0 + add %o0, %tgd_lo10(sh1), %o1 + add %l7, %o1, %o0, %tgd_add(sh1) + call __tls_get_addr, %tgd_call(sh1) + nop + nop;nop;nop;nop + + /* LD -> LE */ + sethi %tldm_hi22(sl1), %l1 + nop + add %l1, %tldm_lo10(sl1), %l2 + nop + add %l7, %l2, %o0, %tldm_add(sl1) + nop + call __tls_get_addr, %tldm_call(sl1) + nop + sethi %tldo_hix22(sl1), %l3 + nop + xor %l3, %tldo_lox10(sl1), %l4 + nop + add %o0, %l4, %l5, %tldo_add(sl1) + nop + sethi %tldo_hix22(sl2 + 2), %l2 + nop + xor %l2, %tldo_lox10(sl2 + 2), %l3 + nop + lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2) + nop;nop;nop;nop + + /* LD -> LE against hidden variables */ + sethi %tldm_hi22(sh1), %o1 + sethi %tldo_hix22(sh1), %l3 + add %o1, %tldm_lo10(sh1), %o2 + sethi %tldo_hix22(sh2 + 1), %l2 + add %l7, %o2, %o0, %tldm_add(sh1) + xor %l3, %tldo_lox10(sh1), %l4 + call __tls_get_addr, %tldm_call(sh1) + xor %l2, %tldo_lox10(sh2 + 1), %l3 + add %o0, %l4, %l5, %tldo_add(sh1) + ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1) + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sG2), %l1 + nop + add %l1, %tie_lo10(sG2), %l2 + nop + ld [%l7 + %l2], %l2, %tie_ld(sG2) + nop + add %g7, %l2, %l2, %tie_add(sG2) + nop;nop;nop;nop + + /* IE -> LE against global var defined in exec */ + sethi %tie_hi22(sg1), %o3 + add %o3, %tie_lo10(sg1), %o3 + ld [%l7 + %o3], %o3, %tie_ld(sg1) + add %g7, %o3, %o4, %tie_add(sg1) + nop;nop;nop;nop + + /* IE -> LE against local var */ + sethi %tie_hi22(sl1), %l4 + add %l4, %tie_lo10(sl1), %l1 + ld [%l7 + %l1], %l3, %tie_ld(sl1) + add %g7, %l3, %l3, %tie_add(sl1) + nop;nop;nop;nop + + /* IE -> LE against hidden var */ + sethi %tie_hi22(sh1), %o1 + add %o1, %tie_lo10(sh1), %o3 + ld [%l7 + %o3], %o0, %tie_ld(sh1) + add %g7, %o0, %o3, %tie_add(sh1) + nop;nop;nop;nop + + /* Direct access through %g7 */ + + /* IE against global var */ + sethi %tie_hi22(sG5), %o3 + add %o3, %tie_lo10(sG5), %o3 + ld [%l7 + %o3], %o2, %tie_ld(sG5) + ld [%g7 + %o2], %o4, %tie_add(sG5) + nop;nop;nop;nop + + /* IE->LE against local var */ + sethi %tie_hi22(sl5), %o3 + add %o3, %tie_lo10(sl5), %o3 + ld [%l7 + %o3], %o2, %tie_ld(sl5) + stb %o4, [%g7 + %o2], %tie_add(sl5) + nop;nop;nop;nop + + /* IE->LE against hidden var */ + sethi %tie_hi22(sh5), %o5 + add %o5, %tie_lo10(sh5), %o3 + ld [%l7 + %o3], %o2, %tie_ld(sh5) + ldsb [%g7 + %o2], %o4, %tie_add(sh5) + nop;nop;nop;nop + + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunbinpic64.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbinpic64.s new file mode 100644 index 00000000..a13d2d31 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunbinpic64.s @@ -0,0 +1,182 @@ + .data + .align 4096 + .section ".tdata", #alloc, #write, #tls + .align 4 + .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 + .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 + .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 +sg1: .word 17 +sg2: .word 18 +sg3: .word 19 +sg4: .word 20 +sg5: .word 21 +sg6: .word 22 +sg7: .word 23 +sg8: .word 24 +sl1: .word 65 +sl2: .word 66 +sl3: .word 67 +sl4: .word 68 +sl5: .word 69 +sl6: .word 70 +sl7: .word 71 +sl8: .word 72 +sh1: .word 257 +sh2: .word 258 +sh3: .word 259 +sh4: .word 260 +sh5: .word 261 +sh6: .word 262 +sh7: .word 263 +sh8: .word 264 + .text + .align 4096 +.LLGETPC0: + retl + add %o7, %l7, %l7 + + .globl fn2 + .type fn2,#function + .proc 04 +fn2: + save %sp, -160, %sp + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 + call .LLGETPC0 + add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 + nop;nop;nop;nop + + /* GD -> IE because variable is not defined in executable */ + sethi %tgd_hi22(sG1), %l1 + nop + add %l1, %tgd_lo10(sG1), %l2 + nop + add %l7, %l2, %o0, %tgd_add(sG1) + nop + call __tls_get_addr, %tgd_call(sG1) + nop + nop;nop;nop;nop + + /* GD -> IE because variable is not defined in executable where + the variable is referenced through IE too */ + sethi %tgd_hi22(sG2), %o0 + add %o0, %tgd_lo10(sG2), %o1 + add %l7, %o1, %o0, %tgd_add(sG2) + call __tls_get_addr, %tgd_call(sG2) + nop + nop;nop;nop;nop + + /* GD -> LE with global variable defined in executable */ + sethi %tgd_hi22(sg1), %l0 + add %l0, %tgd_lo10(sg1), %l5 + add %l7, %l5, %o0, %tgd_add(sg1) + call __tls_get_addr, %tgd_call(sg1) + nop + nop;nop;nop;nop + + /* GD -> LE with local variable defined in executable */ + sethi %tgd_hi22(sl1), %o0 + add %o0, %tgd_lo10(sl1), %o1 + add %l7, %o1, %o0, %tgd_add(sl1) + call __tls_get_addr, %tgd_call(sl1) + nop + nop;nop;nop;nop + + /* GD -> LE with hidden variable defined in executable */ + sethi %tgd_hi22(sh1), %o0 + add %o0, %tgd_lo10(sh1), %o1 + add %l7, %o1, %o0, %tgd_add(sh1) + call __tls_get_addr, %tgd_call(sh1) + nop + nop;nop;nop;nop + + /* LD -> LE */ + sethi %tldm_hi22(sl1), %l1 + nop + add %l1, %tldm_lo10(sl1), %l2 + nop + add %l7, %l2, %o0, %tldm_add(sl1) + nop + call __tls_get_addr, %tldm_call(sl1) + nop + sethi %tldo_hix22(sl1), %l3 + nop + xor %l3, %tldo_lox10(sl1), %l4 + nop + add %o0, %l4, %l5, %tldo_add(sl1) + nop + sethi %tldo_hix22(sl2 + 2), %l2 + nop + xor %l2, %tldo_lox10(sl2 + 2), %l3 + nop + lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2) + nop;nop;nop;nop + + /* LD -> LE against hidden variables */ + sethi %tldm_hi22(sh1), %o1 + sethi %tldo_hix22(sh1), %l3 + add %o1, %tldm_lo10(sh1), %o2 + sethi %tldo_hix22(sh2 + 1), %l2 + add %l7, %o2, %o0, %tldm_add(sh1) + xor %l3, %tldo_lox10(sh1), %l4 + call __tls_get_addr, %tldm_call(sh1) + xor %l2, %tldo_lox10(sh2 + 1), %l3 + add %o0, %l4, %l5, %tldo_add(sh1) + ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1) + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sG2), %l1 + nop + add %l1, %tie_lo10(sG2), %l2 + nop + ldx [%l7 + %l2], %l2, %tie_ldx(sG2) + nop + add %g7, %l2, %l2, %tie_add(sG2) + nop;nop;nop;nop + + /* IE -> LE against global var defined in exec */ + sethi %tie_hi22(sg1), %o3 + add %o3, %tie_lo10(sg1), %o3 + ldx [%l7 + %o3], %o2, %tie_ldx(sg1) + add %g7, %o2, %o4, %tie_add(sg1) + nop;nop;nop;nop + + /* IE -> LE against local var */ + sethi %tie_hi22(sl1), %l4 + add %l4, %tie_lo10(sl1), %l1 + ldx [%l7 + %l1], %l3, %tie_ldx(sl1) + add %g7, %l3, %l3, %tie_add(sl1) + nop;nop;nop;nop + + /* IE -> LE against hidden var */ + sethi %tie_hi22(sh1), %o1 + add %o1, %tie_lo10(sh1), %o3 + ldx [%l7 + %o3], %o0, %tie_ldx(sh1) + add %g7, %o0, %o3, %tie_add(sh1) + nop;nop;nop;nop + + /* Direct access through %g7 */ + + /* IE against global var */ + sethi %tie_hi22(sG5), %o3 + add %o3, %tie_lo10(sG5), %o3 + ldx [%l7 + %o3], %o2, %tie_ldx(sG5) + ldx [%g7 + %o2], %o4, %tie_add(sG5) + nop;nop;nop;nop + + /* IE->LE against local var */ + sethi %tie_hi22(sl5), %o3 + add %o3, %tie_lo10(sl5), %o3 + ldx [%l7 + %o3], %o2, %tie_ldx(sl5) + stb %o4, [%g7 + %o2], %tie_add(sl5) + nop;nop;nop;nop + + /* IE->LE against hidden var */ + sethi %tie_hi22(sh5), %o5 + add %o5, %tie_lo10(sh5), %o3 + ldx [%l7 + %o3], %o2, %tie_ldx(sh5) + ldsb [%g7 + %o2], %o4, %tie_add(sh5) + nop;nop;nop;nop + + return %i7 + 8 + nop diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.dd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.dd new file mode 100644 index 00000000..4f47c7a3 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.dd @@ -0,0 +1,84 @@ +#source: tlssunnopic32.s +#source: tlsnopic.s +#as: --32 +#ld: -shared -melf32_sparc +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Disassembly of section .text: + +00001000 <fn3>: + +1000: 9d e3 bf 98 save %sp, -104, %sp + +1004: 23 00 00 00 sethi %hi\(0\), %l1 + +1008: a2 14 60 00 mov %l1, %l1 ! 0 <.*> + +100c: 01 00 00 00 nop * + +1010: 01 00 00 00 nop * + +1014: 01 00 00 00 nop * + +1018: 01 00 00 00 nop * + +101c: 17 00 00 00 sethi %hi\(0\), %o3 + +1020: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*> + +1024: d4 04 40 0b ld \[ %l1 \+ %o3 \], %o2 + +1028: 98 01 c0 0a add %g7, %o2, %o4 + +102c: 01 00 00 00 nop * + +1030: 01 00 00 00 nop * + +1034: 01 00 00 00 nop * + +1038: 01 00 00 00 nop * + +103c: 11 00 00 00 sethi %hi\(0\), %o0 + +1040: 90 02 20 10 add %o0, 0x10, %o0 ! 10 <.*> + +1044: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0 + +1048: d0 01 c0 08 ld \[ %g7 \+ %o0 \], %o0 + +104c: 01 00 00 00 nop * + +1050: 01 00 00 00 nop * + +1054: 01 00 00 00 nop * + +1058: 01 00 00 00 nop * + +105c: 11 00 00 00 sethi %hi\(0\), %o0 + +1060: 90 02 20 14 add %o0, 0x14, %o0 ! 14 <.*> + +1064: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0 + +1068: 90 01 c0 08 add %g7, %o0, %o0 + +106c: 01 00 00 00 nop * + +1070: 01 00 00 00 nop * + +1074: 01 00 00 00 nop * + +1078: 01 00 00 00 nop * + +107c: 1b 00 00 00 sethi %hi\(0\), %o5 + +1080: 92 03 60 18 add %o5, 0x18, %o1 ! 18 <.*> + +1084: d4 04 40 09 ld \[ %l1 \+ %o1 \], %o2 + +1088: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \] + +108c: 01 00 00 00 nop * + +1090: 01 00 00 00 nop * + +1094: 01 00 00 00 nop * + +1098: 01 00 00 00 nop * + +109c: 11 00 00 00 sethi %hi\(0\), %o0 + +10a0: 90 02 20 04 add %o0, 4, %o0 ! 4 <.*> + +10a4: d0 04 40 08 ld \[ %l1 \+ %o0 \], %o0 + +10a8: 90 01 c0 08 add %g7, %o0, %o0 + +10ac: 01 00 00 00 nop * + +10b0: 01 00 00 00 nop * + +10b4: 01 00 00 00 nop * + +10b8: 01 00 00 00 nop * + +10bc: 1b 00 00 00 sethi %hi\(0\), %o5 + +10c0: 92 03 60 08 add %o5, 8, %o1 ! 8 <.*> + +10c4: d4 04 40 09 ld \[ %l1 \+ %o1 \], %o2 + +10c8: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \] + +10cc: 01 00 00 00 nop * + +10d0: 01 00 00 00 nop * + +10d4: 01 00 00 00 nop * + +10d8: 01 00 00 00 nop * + +10dc: 15 00 00 00 sethi %hi\(0\), %o2 + +10e0: 98 1a a0 00 xor %o2, 0, %o4 + +10e4: 90 01 c0 0c add %g7, %o4, %o0 + +10e8: 01 00 00 00 nop * + +10ec: 01 00 00 00 nop * + +10f0: 01 00 00 00 nop * + +10f4: 01 00 00 00 nop * + +10f8: 15 00 00 00 sethi %hi\(0\), %o2 + +10fc: 94 1a a0 00 xor %o2, 0, %o2 + +1100: d4 01 c0 0a ld \[ %g7 \+ %o2 \], %o2 + +1104: 01 00 00 00 nop * + +1108: 01 00 00 00 nop * + +110c: 01 00 00 00 nop * + +1110: 01 00 00 00 nop * + +1114: 81 c7 e0 08 ret * + +1118: 81 e8 00 00 restore * +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.rd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.rd new file mode 100644 index 00000000..86fba1d7 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.rd @@ -0,0 +1,95 @@ +#source: tlssunnopic32.s +#source: tlsnopic.s +#as: --32 +#ld: -shared -melf32_sparc +#readelf: -WSsrl +#target: sparc*-*-* + +.* + +Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0 + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096 + +\[[ 0-9]+\] .tbss +NOBITS +0+12000 0+2000 0+24 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12000 0+2000 0+80 08 +WA +3 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+12080 0+2080 0+1c 04 +WA +0 +0 +4 + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... +Elf file type is DYN \(Shared object file\) +Entry point 0x1000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align + +LOAD .* R E 0x10000 + +LOAD .* RW +0x10000 + +DYNAMIC .* RW +0x4 + +TLS .* 0x0+ 0x0+24 R +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 12 entries: + Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_HI22 +0+12080 +\.got \+ 12080 +[0-9a-f ]+R_SPARC_LO10 +0+12080 +\.got \+ 12080 +[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +9 +[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +9 +[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +1c +[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +1c +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +4 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +14 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +18 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+ +sg1 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+ +sg2 \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +8 * +.* FUNC +GLOBAL +DEFAULT +5 fn3 +.* TLS +GLOBAL +DEFAULT +UND sg1 +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sg2 +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +6 bl1 +.* TLS +LOCAL +DEFAULT +6 bl2 +.* TLS +LOCAL +DEFAULT +6 bl3 +.* TLS +LOCAL +DEFAULT +6 bl4 +.* TLS +LOCAL +DEFAULT +6 bl5 +.* TLS +LOCAL +DEFAULT +6 sh3 +.* TLS +LOCAL +DEFAULT +6 sh4 +.* TLS +LOCAL +DEFAULT +6 sh1 +.* TLS +LOCAL +DEFAULT +6 sh2 +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_ +.* FUNC +GLOBAL +DEFAULT +5 fn3 +.* TLS +GLOBAL +DEFAULT +UND sg1 +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sg2 +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.s new file mode 100644 index 00000000..6c0ec339 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.s @@ -0,0 +1,77 @@ + .data + .align 4096 + .section ".tbss" + .align 4 +bl1: .word 0 +bl2: .word 0 +bl3: .word 0 +bl4: .word 0 +bl5: .word 0 + .text + .align 4096 + .globl fn3 + .type fn3,#function + .proc 04 +fn3: + save %sp, -104, %sp + .hidden _GLOBAL_OFFSET_TABLE_ + sethi %hi(_GLOBAL_OFFSET_TABLE_), %l1 + or %l1, %lo(_GLOBAL_OFFSET_TABLE_), %l1 + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sg1), %o3 + add %o3, %tie_lo10(sg1), %o3 + ld [%l1 + %o3], %o2, %tie_ld(sg1) + add %g7, %o2, %o4, %tie_add(sg1) + nop;nop;nop;nop + + /* direct %g7 access IE against global var */ + sethi %tie_hi22(sg2), %o0 + add %o0, %tie_lo10(sg2), %o0 + ld [%l1 + %o0], %o0, %tie_ld(sg2) + ld [%g7 + %o0], %o0, %tie_add(sg2) + nop;nop;nop;nop + + /* IE against hidden var */ + sethi %tie_hi22(sh1), %o0 + add %o0, %tie_lo10(sh1), %o0 + ld [%l1 + %o0], %o0, %tie_ld(sh1) + add %g7, %o0, %o0, %tie_add(sh1) + nop;nop;nop;nop + + /* direct %g7 access IE against hidden var */ + sethi %tie_hi22(sh2), %o5 + add %o5, %tie_lo10(sh2), %o1 + ld [%l1 + %o1], %o2, %tie_ld(sh2) + stb %o3, [%g7 + %o2], %tie_add(sh2) + nop;nop;nop;nop + + /* IE against local var */ + sethi %tie_hi22(bl1), %o0 + add %o0, %tie_lo10(bl1), %o0 + ld [%l1 + %o0], %o0, %tie_ld(bl1) + add %g7, %o0, %o0, %tie_add(bl1) + nop;nop;nop;nop + + /* direct %g7 access IE against local var */ + sethi %tie_hi22(bl2), %o5 + add %o5, %tie_lo10(bl2), %o1 + ld [%l1 + %o1], %o2, %tie_ld(bl2) + stb %o3, [%g7 + %o2], %tie_add(bl2) + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl3+1), %o2 + xor %o2, %tle_lox10(bl3+1), %o4 + add %g7, %o4, %o0 + nop;nop;nop;nop + + /* LE, hidden var, direct %g7 access */ + sethi %tle_hix22(sh3), %o2 + xor %o2, %tle_lox10(sh3), %o2 + ld [%g7 + %o2], %o2 + nop;nop;nop;nop + + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.sd new file mode 100644 index 00000000..0d1beac8 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic32.sd @@ -0,0 +1,12 @@ +#source: tlssunnopic32.s +#source: tlsnopic.s +#as: --32 +#ld: -shared -melf32_sparc +#objdump: -sj.got +#target: sparc*-*-* + +.*: file format elf32-sparc + +Contents of section \.got: + 12080 0+12000 0+ 0+ 0+ .* + 12090 0+ 0+ 0+ .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.dd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.dd new file mode 100644 index 00000000..af4918c6 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.dd @@ -0,0 +1,88 @@ +#source: tlssunnopic64.s +#source: tlsnopic.s +#as: --64 -Av9 +#ld: -shared -melf64_sparc +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Disassembly of section .text: + +0+1000 <fn3>: + +1000: 9d e3 bf 60 save %sp, -160, %sp + +1004: 23 00 00 00 sethi %hi\(0\), %l1 + +1008: 25 00 00 00 sethi %hi\(0\), %l2 + +100c: a2 14 60 00 mov %l1, %l1 + +1010: a4 14 a0 00 mov %l2, %l2 + +1014: a3 2c 70 20 sllx %l1, 0x20, %l1 + +1018: a2 04 40 12 add %l1, %l2, %l1 + +101c: 01 00 00 00 nop * + +1020: 01 00 00 00 nop * + +1024: 01 00 00 00 nop * + +1028: 01 00 00 00 nop * + +102c: 17 00 00 00 sethi %hi\(0\), %o3 + +1030: 96 02 e0 18 add %o3, 0x18, %o3 ! 18 <.*> + +1034: d4 5c 40 0b ldx \[ %l1 \+ %o3 \], %o2 + +1038: 98 01 c0 0a add %g7, %o2, %o4 + +103c: 01 00 00 00 nop * + +1040: 01 00 00 00 nop * + +1044: 01 00 00 00 nop * + +1048: 01 00 00 00 nop * + +104c: 11 00 00 00 sethi %hi\(0\), %o0 + +1050: 90 02 20 20 add %o0, 0x20, %o0 ! 20 <.*> + +1054: d0 5c 40 08 ldx \[ %l1 \+ %o0 \], %o0 + +1058: d0 01 c0 08 ld \[ %g7 \+ %o0 \], %o0 + +105c: 01 00 00 00 nop * + +1060: 01 00 00 00 nop * + +1064: 01 00 00 00 nop * + +1068: 01 00 00 00 nop * + +106c: 11 00 00 00 sethi %hi\(0\), %o0 + +1070: 90 02 20 28 add %o0, 0x28, %o0 ! 28 <.*> + +1074: d0 5c 40 08 ldx \[ %l1 \+ %o0 \], %o0 + +1078: 90 01 c0 08 add %g7, %o0, %o0 + +107c: 01 00 00 00 nop * + +1080: 01 00 00 00 nop * + +1084: 01 00 00 00 nop * + +1088: 01 00 00 00 nop * + +108c: 1b 00 00 00 sethi %hi\(0\), %o5 + +1090: 92 03 60 30 add %o5, 0x30, %o1 ! 30 <.*> + +1094: d4 5c 40 09 ldx \[ %l1 \+ %o1 \], %o2 + +1098: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \] + +109c: 01 00 00 00 nop * + +10a0: 01 00 00 00 nop * + +10a4: 01 00 00 00 nop * + +10a8: 01 00 00 00 nop * + +10ac: 11 00 00 00 sethi %hi\(0\), %o0 + +10b0: 90 02 20 08 add %o0, 8, %o0 ! 8 <.*> + +10b4: d0 5c 40 08 ldx \[ %l1 \+ %o0 \], %o0 + +10b8: 90 01 c0 08 add %g7, %o0, %o0 + +10bc: 01 00 00 00 nop * + +10c0: 01 00 00 00 nop * + +10c4: 01 00 00 00 nop * + +10c8: 01 00 00 00 nop * + +10cc: 1b 00 00 00 sethi %hi\(0\), %o5 + +10d0: 92 03 60 10 add %o5, 0x10, %o1 ! 10 <.*> + +10d4: d4 5c 40 09 ldx \[ %l1 \+ %o1 \], %o2 + +10d8: d6 29 c0 0a stb %o3, \[ %g7 \+ %o2 \] + +10dc: 01 00 00 00 nop * + +10e0: 01 00 00 00 nop * + +10e4: 01 00 00 00 nop * + +10e8: 01 00 00 00 nop * + +10ec: 15 00 00 00 sethi %hi\(0\), %o2 + +10f0: 98 1a a0 00 xor %o2, 0, %o4 + +10f4: 90 01 c0 0c add %g7, %o4, %o0 + +10f8: 01 00 00 00 nop * + +10fc: 01 00 00 00 nop * + +1100: 01 00 00 00 nop * + +1104: 01 00 00 00 nop * + +1108: 15 00 00 00 sethi %hi\(0\), %o2 + +110c: 94 1a a0 00 xor %o2, 0, %o2 + +1110: d4 01 c0 0a ld \[ %g7 \+ %o2 \], %o2 + +1114: 01 00 00 00 nop * + +1118: 01 00 00 00 nop * + +111c: 01 00 00 00 nop * + +1120: 01 00 00 00 nop * + +1124: 81 cf e0 08 rett %i7 \+ 8 + +1128: 01 00 00 00 nop * +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.rd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.rd new file mode 100644 index 00000000..72555c10 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.rd @@ -0,0 +1,97 @@ +#source: tlssunnopic64.s +#source: tlsnopic.s +#as: --64 -Av9 +#ld: -shared -melf64_sparc +#readelf: -WSsrl +#target: sparc*-*-* + +.* + +Section Headers: + +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0 + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096 + +\[[ 0-9]+\] .tbss +NOBITS +0+102000 0+2000 0+24 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102000 0+2000 0+100 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+102100 0+2100 0+38 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... +Elf file type is DYN \(Shared object file\) +Entry point 0x1000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align + +LOAD .* R E 0x100000 + +LOAD .* RW +0x100000 + +DYNAMIC .* RW +0x8 + +TLS .* 0x0+ 0x0+24 R +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_HH22 +0+102100 +\.got \+ 102100 +[0-9a-f ]+R_SPARC_LM22 +0+102100 +\.got \+ 102100 +[0-9a-f ]+R_SPARC_HM10 +0+102100 +\.got \+ 102100 +[0-9a-f ]+R_SPARC_LO10 +0+102100 +\.got \+ 102100 +[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +9 +[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +9 +[0-9a-f ]+R_SPARC_TLS_LE_HIX22 +1c +[0-9a-f ]+R_SPARC_TLS_LE_LOX10 +1c +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +4 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +14 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +18 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sg1 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+ +sg2 \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +8 * +.* FUNC +GLOBAL +DEFAULT +5 fn3 +.* TLS +GLOBAL +DEFAULT +UND sg1 +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sg2 +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +6 bl1 +.* TLS +LOCAL +DEFAULT +6 bl2 +.* TLS +LOCAL +DEFAULT +6 bl3 +.* TLS +LOCAL +DEFAULT +6 bl4 +.* TLS +LOCAL +DEFAULT +6 bl5 +.* TLS +LOCAL +DEFAULT +6 sh3 +.* TLS +LOCAL +DEFAULT +6 sh4 +.* TLS +LOCAL +DEFAULT +6 sh1 +.* TLS +LOCAL +DEFAULT +6 sh2 +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_ +.* FUNC +GLOBAL +DEFAULT +5 fn3 +.* TLS +GLOBAL +DEFAULT +UND sg1 +.* NOTYPE +GLOBAL +DEFAULT +8 __bss_start +.* TLS +GLOBAL +DEFAULT +UND sg2 +.* NOTYPE +GLOBAL +DEFAULT +8 _edata +.* NOTYPE +GLOBAL +DEFAULT +8 _end diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.s new file mode 100644 index 00000000..3d0a4d3e --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.s @@ -0,0 +1,81 @@ + .data + .align 4096 + .section ".tbss" + .align 4 +bl1: .word 0 +bl2: .word 0 +bl3: .word 0 +bl4: .word 0 +bl5: .word 0 + .text + .align 4096 + .globl fn3 + .type fn3,#function + .proc 04 +fn3: + save %sp, -160, %sp + .hidden _GLOBAL_OFFSET_TABLE_ + sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1 + sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2 + or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1 + or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2 + sllx %l1, 32, %l1 + add %l1, %l2, %l1 + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sg1), %o3 + add %o3, %tie_lo10(sg1), %o3 + ldx [%l1 + %o3], %o2, %tie_ldx(sg1) + add %g7, %o2, %o4, %tie_add(sg1) + nop;nop;nop;nop + + /* direct %g7 access IE against global var */ + sethi %tie_hi22(sg2), %o0 + add %o0, %tie_lo10(sg2), %o0 + ldx [%l1 + %o0], %o0, %tie_ldx(sg2) + lduw [%g7 + %o0], %o0, %tie_add(sg2) + nop;nop;nop;nop + + /* IE against hidden var */ + sethi %tie_hi22(sh1), %o0 + add %o0, %tie_lo10(sh1), %o0 + ldx [%l1 + %o0], %o0, %tie_ldx(sh1) + add %g7, %o0, %o0, %tie_add(sh1) + nop;nop;nop;nop + + /* direct %g7 access IE against hidden var */ + sethi %tie_hi22(sh2), %o5 + add %o5, %tie_lo10(sh2), %o1 + ldx [%l1 + %o1], %o2, %tie_ldx(sh2) + stb %o3, [%g7 + %o2], %tie_add(sh2) + nop;nop;nop;nop + + /* IE against local var */ + sethi %tie_hi22(bl1), %o0 + add %o0, %tie_lo10(bl1), %o0 + ldx [%l1 + %o0], %o0, %tie_ldx(bl1) + add %g7, %o0, %o0, %tie_add(bl1) + nop;nop;nop;nop + + /* direct %g7 access IE against local var */ + sethi %tie_hi22(bl2), %o5 + add %o5, %tie_lo10(bl2), %o1 + ldx [%l1 + %o1], %o2, %tie_ldx(bl2) + stb %o3, [%g7 + %o2], %tie_add(bl2) + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl3+1), %o2 + xor %o2, %tle_lox10(bl3+1), %o4 + add %g7, %o4, %o0 + nop;nop;nop;nop + + /* LE, hidden var, direct %g7 access */ + sethi %tle_hix22(sh3), %o2 + xor %o2, %tle_lox10(sh3), %o2 + ld [%g7 + %o2], %o2 + nop;nop;nop;nop + + return %i7 + 8 + nop diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.sd new file mode 100644 index 00000000..45c77e78 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunnopic64.sd @@ -0,0 +1,14 @@ +#source: tlssunnopic64.s +#source: tlsnopic.s +#as: --64 -Av9 +#ld: -shared -melf64_sparc +#objdump: -sj.got +#target: sparc*-*-* + +.*: file format elf64-sparc + +Contents of section \.got: + 102100 0+ 0+102000 0+ 0+ .* + 102110 0+ 0+ 0+ 0+ .* + 102120 0+ 0+ 0+ 0+ .* + 102130 0+ 0+ .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.dd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.dd new file mode 100644 index 00000000..55897711 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.dd @@ -0,0 +1,220 @@ +#source: tlssunpic32.s +#source: tlspic.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Disassembly of section .text: + +00001000 <fn1-0x8>: + +1000: 81 c3 e0 08 retl * + +1004: ae 03 c0 17 add %o7, %l7, %l7 + +00001008 <fn1>: + +1008: 9d e3 bf 98 save %sp, -104, %sp + +100c: 2f 00 00 44 sethi %hi\(0x11000\), %l7 + +1010: 7f ff ff fc call 1000 <.*> + +1014: ae 05 e0 e8 add %l7, 0xe8, %l7 ! 110e8 <.*> + +1018: 01 00 00 00 nop * + +101c: 01 00 00 00 nop * + +1020: 01 00 00 00 nop * + +1024: 01 00 00 00 nop * + +1028: 23 00 00 00 sethi %hi\(0\), %l1 + +102c: 01 00 00 00 nop * + +1030: a4 04 60 2c add %l1, 0x2c, %l2 + +1034: 01 00 00 00 nop * + +1038: 90 05 c0 12 add %l7, %l2, %o0 + +103c: 01 00 00 00 nop * + +1040: 40 00 44 4d call [0-9a-f]+ <__tls_get_addr@plt> + +1044: 01 00 00 00 nop * + +1048: 01 00 00 00 nop * + +104c: 01 00 00 00 nop * + +1050: 01 00 00 00 nop * + +1054: 01 00 00 00 nop * + +1058: 11 00 00 00 sethi %hi\(0\), %o0 + +105c: 92 02 20 3c add %o0, 0x3c, %o1 ! 3c <.*> + +1060: d0 05 c0 09 ld \[ %l7 \+ %o1 \], %o0 + +1064: 01 00 00 00 nop * + +1068: 90 01 c0 08 add %g7, %o0, %o0 + +106c: 01 00 00 00 nop * + +1070: 01 00 00 00 nop * + +1074: 01 00 00 00 nop * + +1078: 01 00 00 00 nop * + +107c: 19 00 00 00 sethi %hi\(0\), %o4 + +1080: 98 03 20 04 add %o4, 4, %o4 ! 4 <.*> + +1084: 90 05 c0 0c add %l7, %o4, %o0 + +1088: 40 00 44 3b call [0-9a-f]+ <__tls_get_addr@plt> + +108c: 01 00 00 00 nop * + +1090: 01 00 00 00 nop * + +1094: 01 00 00 00 nop * + +1098: 01 00 00 00 nop * + +109c: 01 00 00 00 nop * + +10a0: 11 00 00 00 sethi %hi\(0\), %o0 + +10a4: 90 02 20 0c add %o0, 0xc, %o0 ! c <.*> + +10a8: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0 + +10ac: 01 00 00 00 nop * + +10b0: 90 01 c0 08 add %g7, %o0, %o0 + +10b4: 01 00 00 00 nop * + +10b8: 01 00 00 00 nop * + +10bc: 01 00 00 00 nop * + +10c0: 01 00 00 00 nop * + +10c4: 19 00 00 00 sethi %hi\(0\), %o4 + +10c8: 98 03 20 40 add %o4, 0x40, %o4 ! 40 <.*> + +10cc: 90 05 c0 0c add %l7, %o4, %o0 + +10d0: 40 00 44 29 call [0-9a-f]+ <__tls_get_addr@plt> + +10d4: 01 00 00 00 nop * + +10d8: 01 00 00 00 nop * + +10dc: 01 00 00 00 nop * + +10e0: 01 00 00 00 nop * + +10e4: 01 00 00 00 nop * + +10e8: 11 00 00 00 sethi %hi\(0\), %o0 + +10ec: 90 02 20 48 add %o0, 0x48, %o0 ! 48 <.*> + +10f0: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0 + +10f4: 01 00 00 00 nop * + +10f8: 90 01 c0 08 add %g7, %o0, %o0 + +10fc: 01 00 00 00 nop * + +1100: 01 00 00 00 nop * + +1104: 01 00 00 00 nop * + +1108: 01 00 00 00 nop * + +110c: 19 00 00 00 sethi %hi\(0\), %o4 + +1110: 98 03 20 1c add %o4, 0x1c, %o4 ! 1c <.*> + +1114: 90 05 c0 0c add %l7, %o4, %o0 + +1118: 40 00 44 17 call [0-9a-f]+ <__tls_get_addr@plt> + +111c: 01 00 00 00 nop * + +1120: 01 00 00 00 nop * + +1124: 01 00 00 00 nop * + +1128: 01 00 00 00 nop * + +112c: 01 00 00 00 nop * + +1130: 11 00 00 00 sethi %hi\(0\), %o0 + +1134: 90 02 20 24 add %o0, 0x24, %o0 ! 24 <.*> + +1138: d0 05 c0 08 ld \[ %l7 \+ %o0 \], %o0 + +113c: 01 00 00 00 nop * + +1140: 90 01 c0 08 add %g7, %o0, %o0 + +1144: 01 00 00 00 nop * + +1148: 01 00 00 00 nop * + +114c: 01 00 00 00 nop * + +1150: 01 00 00 00 nop * + +1154: 23 00 00 00 sethi %hi\(0\), %l1 + +1158: 01 00 00 00 nop * + +115c: a4 04 60 14 add %l1, 0x14, %l2 + +1160: 01 00 00 00 nop * + +1164: 90 05 c0 12 add %l7, %l2, %o0 + +1168: 01 00 00 00 nop * + +116c: 40 00 44 02 call [0-9a-f]+ <__tls_get_addr@plt> + +1170: 01 00 00 00 nop * + +1174: 27 00 00 00 sethi %hi\(0\), %l3 + +1178: 01 00 00 00 nop * + +117c: a8 1c e0 20 xor %l3, 0x20, %l4 + +1180: 01 00 00 00 nop * + +1184: aa 02 00 14 add %o0, %l4, %l5 + +1188: 01 00 00 00 nop * + +118c: 25 00 00 00 sethi %hi\(0\), %l2 + +1190: 01 00 00 00 nop * + +1194: a6 1c a0 26 xor %l2, 0x26, %l3 + +1198: 01 00 00 00 nop * + +119c: ec 12 00 13 lduh \[ %o0 \+ %l3 \], %l6 + +11a0: 01 00 00 00 nop * + +11a4: 01 00 00 00 nop * + +11a8: 01 00 00 00 nop * + +11ac: 01 00 00 00 nop * + +11b0: 13 00 00 00 sethi %hi\(0\), %o1 + +11b4: 27 00 00 00 sethi %hi\(0\), %l3 + +11b8: 94 02 60 14 add %o1, 0x14, %o2 + +11bc: 25 00 00 00 sethi %hi\(0\), %l2 + +11c0: 90 05 c0 0a add %l7, %o2, %o0 + +11c4: a8 1c e0 40 xor %l3, 0x40, %l4 + +11c8: 40 00 43 eb call [0-9a-f]+ <__tls_get_addr@plt> + +11cc: a6 1c a0 45 xor %l2, 0x45, %l3 + +11d0: aa 02 00 14 add %o0, %l4, %l5 + +11d4: ec 0a 00 13 ldub \[ %o0 \+ %l3 \], %l6 + +11d8: 01 00 00 00 nop * + +11dc: 01 00 00 00 nop * + +11e0: 01 00 00 00 nop * + +11e4: 01 00 00 00 nop * + +11e8: 13 00 00 00 sethi %hi\(0\), %o1 + +11ec: 27 00 00 00 sethi %hi\(0\), %l3 + +11f0: 94 02 60 14 add %o1, 0x14, %o2 + +11f4: 25 00 00 00 sethi %hi\(0\), %l2 + +11f8: 90 05 c0 0a add %l7, %o2, %o0 + +11fc: a8 1c e0 63 xor %l3, 0x63, %l4 + +1200: 40 00 43 dd call [0-9a-f]+ <__tls_get_addr@plt> + +1204: a6 1c a0 64 xor %l2, 0x64, %l3 + +1208: aa 02 00 14 add %o0, %l4, %l5 + +120c: ec 02 00 13 ld \[ %o0 \+ %l3 \], %l6 + +1210: 01 00 00 00 nop * + +1214: 01 00 00 00 nop * + +1218: 01 00 00 00 nop * + +121c: 01 00 00 00 nop * + +1220: 23 00 00 00 sethi %hi\(0\), %l1 + +1224: 01 00 00 00 nop * + +1228: a4 04 60 3c add %l1, 0x3c, %l2 + +122c: 01 00 00 00 nop * + +1230: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2 + +1234: 01 00 00 00 nop * + +1238: a4 01 c0 12 add %g7, %l2, %l2 + +123c: 01 00 00 00 nop * + +1240: 01 00 00 00 nop * + +1244: 01 00 00 00 nop * + +1248: 01 00 00 00 nop * + +124c: 17 00 00 00 sethi %hi\(0\), %o3 + +1250: 96 02 e0 0c add %o3, 0xc, %o3 ! c <.*> + +1254: d4 05 c0 0b ld \[ %l7 \+ %o3 \], %o2 + +1258: 98 01 c0 0a add %g7, %o2, %o4 + +125c: 01 00 00 00 nop * + +1260: 01 00 00 00 nop * + +1264: 01 00 00 00 nop * + +1268: 01 00 00 00 nop * + +126c: 23 00 00 00 sethi %hi\(0\), %l1 + +1270: a4 04 60 48 add %l1, 0x48, %l2 ! 48 <.*> + +1274: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2 + +1278: a4 01 c0 12 add %g7, %l2, %l2 + +127c: 01 00 00 00 nop * + +1280: 01 00 00 00 nop * + +1284: 01 00 00 00 nop * + +1288: 01 00 00 00 nop * + +128c: 23 00 00 00 sethi %hi\(0\), %l1 + +1290: a4 04 60 24 add %l1, 0x24, %l2 ! 24 <.*> + +1294: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2 + +1298: a4 01 c0 12 add %g7, %l2, %l2 + +129c: 01 00 00 00 nop * + +12a0: 01 00 00 00 nop * + +12a4: 01 00 00 00 nop * + +12a8: 01 00 00 00 nop * + +12ac: 23 00 00 00 sethi %hi\(0\), %l1 + +12b0: a4 04 60 28 add %l1, 0x28, %l2 ! 28 <.*> + +12b4: e4 05 c0 12 ld \[ %l7 \+ %l2 \], %l2 + +12b8: e4 01 c0 12 ld \[ %g7 \+ %l2 \], %l2 + +12bc: 01 00 00 00 nop * + +12c0: 01 00 00 00 nop * + +12c4: 01 00 00 00 nop * + +12c8: 01 00 00 00 nop * + +12cc: 17 00 00 00 sethi %hi\(0\), %o3 + +12d0: 98 02 e0 10 add %o3, 0x10, %o4 ! 10 <.*> + +12d4: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5 + +12d8: e4 29 c0 0d stb %l2, \[ %g7 \+ %o5 \] + +12dc: 01 00 00 00 nop * + +12e0: 01 00 00 00 nop * + +12e4: 01 00 00 00 nop * + +12e8: 01 00 00 00 nop * + +12ec: 17 00 00 00 sethi %hi\(0\), %o3 + +12f0: 98 02 e0 34 add %o3, 0x34, %o4 ! 34 <.*> + +12f4: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5 + +12f8: e4 11 c0 0d lduh \[ %g7 \+ %o5 \], %l2 + +12fc: 01 00 00 00 nop * + +1300: 01 00 00 00 nop * + +1304: 01 00 00 00 nop * + +1308: 01 00 00 00 nop * + +130c: 17 00 00 00 sethi %hi\(0\), %o3 + +1310: 98 02 e0 38 add %o3, 0x38, %o4 ! 38 <.*> + +1314: da 05 c0 0c ld \[ %l7 \+ %o4 \], %o5 + +1318: e4 21 c0 0d st %l2, \[ %g7 \+ %o5 \] + +131c: 01 00 00 00 nop * + +1320: 01 00 00 00 nop * + +1324: 01 00 00 00 nop * + +1328: 01 00 00 00 nop * + +132c: 81 c7 e0 08 ret * + +1330: 81 e8 00 00 restore * +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.rd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.rd new file mode 100644 index 00000000..eab1abe4 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.rd @@ -0,0 +1,137 @@ +#source: tlssunpic32.s +#source: tlspic.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#readelf: -WSsrl +#target: sparc*-*-* + +There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+: + +Section Headers: + +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0 + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .rela.plt +.* + +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096 + +\[[ 0-9]+\] .tdata +PROGBITS +0+12000 0+2000 0+60 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .tbss +NOBITS +0+12060 0+2060 0+20 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+12060 0+2060 0+98 08 +WA +3 +0 +4 + +\[[ 0-9]+\] .got +PROGBITS +0+120f8 0+20f8 0+4c 04 +WA +0 +0 +4 + +\[[ 0-9]+\] .plt +.* + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... + +Elf file type is DYN \(Shared object file\) +Entry point 0x1000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align + +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000 + +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+184 0x0+184 RWE 0x10000 + +DYNAMIC +0x0+2060 0x0+12060 0x0+12060 0x0+98 0x0+98 RW +0x4 + +TLS +0x0+2000 0x0+12000 0x0+12000 0x0+60 0x0+80 R +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries: + Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +24 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +30 +[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0 +[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +64 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +50 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +70 +[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +44 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+10 +sg5 \+ 0 +[0-9a-f ]+R_SPARC_TLS_DTPMOD32 +0+ +sg1 \+ 0 +[0-9a-f ]+R_SPARC_TLS_DTPOFF32 +0+ +sg1 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF32 +0+4 +sg2 \+ 0 + +Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries: + Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_JMP_SLOT +0+ +__tls_get_addr \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +10 * +.* TLS +GLOBAL +DEFAULT +7 sg8 +.* TLS +GLOBAL +DEFAULT +7 sg3 +.* TLS +GLOBAL +DEFAULT +7 sg4 +.* TLS +GLOBAL +DEFAULT +7 sg5 +.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr +.* TLS +GLOBAL +DEFAULT +7 sg1 +.* FUNC +GLOBAL +DEFAULT +6 fn1 +.* NOTYPE +GLOBAL +DEFAULT +11 __bss_start +.* TLS +GLOBAL +DEFAULT +7 sg2 +.* TLS +GLOBAL +DEFAULT +7 sg6 +.* TLS +GLOBAL +DEFAULT +7 sg7 +.* NOTYPE +GLOBAL +DEFAULT +11 _edata +.* NOTYPE +GLOBAL +DEFAULT +11 _end + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* SECTION +LOCAL +DEFAULT +9 * +.* SECTION +LOCAL +DEFAULT +10 * +.* SECTION +LOCAL +DEFAULT +11 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +7 sl1 +.* TLS +LOCAL +DEFAULT +7 sl2 +.* TLS +LOCAL +DEFAULT +7 sl3 +.* TLS +LOCAL +DEFAULT +7 sl4 +.* TLS +LOCAL +DEFAULT +7 sl5 +.* TLS +LOCAL +DEFAULT +7 sl6 +.* TLS +LOCAL +DEFAULT +7 sl7 +.* TLS +LOCAL +DEFAULT +7 sl8 +.* TLS +LOCAL +DEFAULT +8 sH1 +.* TLS +LOCAL +DEFAULT +7 sh3 +.* TLS +LOCAL +DEFAULT +8 sH2 +.* TLS +LOCAL +DEFAULT +8 sH7 +.* TLS +LOCAL +DEFAULT +7 sh7 +.* TLS +LOCAL +DEFAULT +7 sh8 +.* TLS +LOCAL +DEFAULT +8 sH4 +.* TLS +LOCAL +DEFAULT +7 sh4 +.* TLS +LOCAL +DEFAULT +8 sH3 +.* TLS +LOCAL +DEFAULT +7 sh5 +.* TLS +LOCAL +DEFAULT +8 sH5 +.* TLS +LOCAL +DEFAULT +8 sH6 +.* TLS +LOCAL +DEFAULT +8 sH8 +.* TLS +LOCAL +DEFAULT +7 sh1 +.* TLS +LOCAL +DEFAULT +7 sh2 +.* TLS +LOCAL +DEFAULT +7 sh6 +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_ +.* TLS +GLOBAL +DEFAULT +7 sg8 +.* TLS +GLOBAL +DEFAULT +7 sg3 +.* TLS +GLOBAL +DEFAULT +7 sg4 +.* TLS +GLOBAL +DEFAULT +7 sg5 +.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr +.* TLS +GLOBAL +DEFAULT +7 sg1 +.* FUNC +GLOBAL +DEFAULT +6 fn1 +.* NOTYPE +GLOBAL +DEFAULT +11 __bss_start +.* TLS +GLOBAL +DEFAULT +7 sg2 +.* TLS +GLOBAL +DEFAULT +7 sg6 +.* TLS +GLOBAL +DEFAULT +7 sg7 +.* NOTYPE +GLOBAL +DEFAULT +11 _edata +.* NOTYPE +GLOBAL +DEFAULT +11 _end diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.s new file mode 100644 index 00000000..9e8a2357 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.s @@ -0,0 +1,228 @@ + .data + .align 4096 + .section ".tdata", #alloc, #write, #tls + .align 4 + .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 + .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 + .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 +sg1: .word 17 +sg2: .word 18 +sg3: .word 19 +sg4: .word 20 +sg5: .word 21 +sg6: .word 22 +sg7: .word 23 +sg8: .word 24 +sl1: .word 65 +sl2: .word 66 +sl3: .word 67 +sl4: .word 68 +sl5: .word 69 +sl6: .word 70 +sl7: .word 71 +sl8: .word 72 +sh1: .word 257 +sh2: .word 258 +sh3: .word 259 +sh4: .word 260 +sh5: .word 261 +sh6: .word 262 +sh7: .word 263 +sh8: .word 264 + + .text + .align 4096 +.LLGETPC0: + retl + add %o7, %l7, %l7 + + .globl fn1 + .type fn1,#function + .proc 04 +fn1: + save %sp, -104, %sp + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 + call .LLGETPC0 + add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 + nop;nop;nop;nop + + /* GD */ + sethi %tgd_hi22(sg1), %l1 + nop + add %l1, %tgd_lo10(sg1), %l2 + nop + add %l7, %l2, %o0, %tgd_add(sg1) + nop + call __tls_get_addr, %tgd_call(sg1) + nop + nop;nop;nop;nop + + /* GD -> IE because variable is referenced through IE too */ + sethi %tgd_hi22(sg2), %o0 + add %o0, %tgd_lo10(sg2), %o1 + add %l7, %o1, %o0, %tgd_add(sg2) + call __tls_get_addr, %tgd_call(sg2) + nop + nop;nop;nop;nop + + /* GD against local variable */ + sethi %tgd_hi22(sl1), %o4 + add %o4, %tgd_lo10(sl1), %o4 + add %l7, %o4, %o0, %tgd_add(sl1) + call __tls_get_addr, %tgd_call(sl1) + nop + nop;nop;nop;nop + + /* GD -> IE against local variable referenced through IE too */ + sethi %tgd_hi22(sl2), %o0 + add %o0, %tgd_lo10(sl2), %o0 + add %l7, %o0, %o0, %tgd_add(sl2) + call __tls_get_addr, %tgd_call(sl2) + nop + nop;nop;nop;nop + + /* GD against hidden and local variable */ + sethi %tgd_hi22(sh1), %o4 + add %o4, %tgd_lo10(sh1), %o4 + add %l7, %o4, %o0, %tgd_add(sh1) + call __tls_get_addr, %tgd_call(sh1) + nop + nop;nop;nop;nop + + /* GD -> IE against hidden and local variable referenced through + IE too */ + sethi %tgd_hi22(sh2), %o0 + add %o0, %tgd_lo10(sh2), %o0 + add %l7, %o0, %o0, %tgd_add(sh2) + call __tls_get_addr, %tgd_call(sh2) + nop + nop;nop;nop;nop + + /* GD against hidden but not local variable */ + sethi %tgd_hi22(sH1), %o4 + add %o4, %tgd_lo10(sH1), %o4 + add %l7, %o4, %o0, %tgd_add(sH1) + call __tls_get_addr, %tgd_call(sH1) + nop + nop;nop;nop;nop + + /* GD -> IE against hidden but not local variable referenced through + IE too */ + sethi %tgd_hi22(sH2), %o0 + add %o0, %tgd_lo10(sH2), %o0 + add %l7, %o0, %o0, %tgd_add(sH2) + call __tls_get_addr, %tgd_call(sH2) + nop + nop;nop;nop;nop + + /* LD */ + sethi %tldm_hi22(sl1), %l1 + nop + add %l1, %tldm_lo10(sl1), %l2 + nop + add %l7, %l2, %o0, %tldm_add(sl1) + nop + call __tls_get_addr, %tldm_call(sl1) + nop + sethi %tldo_hix22(sl1), %l3 + nop + xor %l3, %tldo_lox10(sl1), %l4 + nop + add %o0, %l4, %l5, %tldo_add(sl1) + nop + sethi %tldo_hix22(sl2 + 2), %l2 + nop + xor %l2, %tldo_lox10(sl2 + 2), %l3 + nop + lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2) + nop;nop;nop;nop + + /* LD against hidden and local variables */ + sethi %tldm_hi22(sh1), %o1 + sethi %tldo_hix22(sh1), %l3 + add %o1, %tldm_lo10(sh1), %o2 + sethi %tldo_hix22(sh2 + 1), %l2 + add %l7, %o2, %o0, %tldm_add(sh1) + xor %l3, %tldo_lox10(sh1), %l4 + call __tls_get_addr, %tldm_call(sh1) + xor %l2, %tldo_lox10(sh2 + 1), %l3 + add %o0, %l4, %l5, %tldo_add(sh1) + ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1) + nop;nop;nop;nop + + /* LD against hidden but not local variables */ + sethi %tldm_hi22(sH1), %o1 + sethi %tldo_hix22(sH1 + 3), %l3 + add %o1, %tldm_lo10(sH1), %o2 + sethi %tldo_hix22(sH2), %l2 + add %l7, %o2, %o0, %tldm_add(sH1) + xor %l3, %tldo_lox10(sH1 + 3), %l4 + call __tls_get_addr, %tldm_call(sH1) + xor %l2, %tldo_lox10(sH2), %l3 + add %o0, %l4, %l5, %tldo_add(sH1 + 3) + ld [%o0 + %l3], %l6, %tldo_add(sH2) + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sg2), %l1 + nop + add %l1, %tie_lo10(sg2), %l2 + nop + ld [%l7 + %l2], %l2, %tie_ld(sg2) + nop + add %g7, %l2, %l2, %tie_add(sg2) + nop;nop;nop;nop + + /* IE against local var */ + sethi %tie_hi22(sl2), %o3 + add %o3, %tie_lo10(sl2), %o3 + ld [%l7 + %o3], %o2, %tie_ld(sl2) + add %g7, %o2, %o4, %tie_add(sl2) + nop;nop;nop;nop + + /* IE against hidden and local var */ + sethi %tie_hi22(sh2), %l1 + add %l1, %tie_lo10(sh2), %l2 + ld [%l7 + %l2], %l2, %tie_ld(sh2) + add %g7, %l2, %l2, %tie_add(sh2) + nop;nop;nop;nop + + /* IE against hidden but not local var */ + sethi %tie_hi22(sH2), %l1 + add %l1, %tie_lo10(sH2), %l2 + ld [%l7 + %l2], %l2, %tie_ld(sH2) + add %g7, %l2, %l2, %tie_add(sH2) + nop;nop;nop;nop + + /* Direct access through %g7 */ + + /* IE against global var */ + sethi %tie_hi22(sg5), %l1 + add %l1, %tie_lo10(sg5), %l2 + ld [%l7 + %l2], %l2, %tie_ld(sg5) + ld [%g7 + %l2], %l2, %tie_add(sg5) + nop;nop;nop;nop + + /* IE against local var */ + sethi %tie_hi22(sl5), %o3 + add %o3, %tie_lo10(sl5), %o4 + ld [%l7 + %o4], %o5, %tie_ld(sl5) + stb %l2, [%g7 + %o5], %tie_add(sl5) + nop;nop;nop;nop + + /* IE against hidden and local var */ + sethi %tie_hi22(sh5), %o3 + add %o3, %tie_lo10(sh5), %o4 + ld [%l7 + %o4], %o5, %tie_ld(sh5) + lduh [%g7 + %o5], %l2, %tie_add(sh5) + nop;nop;nop;nop + + /* IE against hidden but not local var */ + sethi %tie_hi22(sH5), %o3 + add %o3, %tie_lo10(sH5), %o4 + ld [%l7 + %o4], %o5, %tie_ld(sH5) + st %l2, [%g7 + %o5], %tie_add(sH5) + nop;nop;nop;nop + + ret + restore diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.sd new file mode 100644 index 00000000..4aecfd7d --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.sd @@ -0,0 +1,15 @@ +#source: tlssunpic32.s +#source: tlspic.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#objdump: -sj.got +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .got: + 120f8 00012060 00000000 00000020 00000000 .* + 12108 00000000 00000000 00000000 00000000 .* + 12118 00000060 00000000 00000000 00000000 .* + 12128 00000000 00000000 00000000 00000000 .* + 12138 00000000 00000040 00000000 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.td b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.td new file mode 100644 index 00000000..eb4e3445 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic32.td @@ -0,0 +1,16 @@ +#source: tlssunpic32.s +#source: tlspic.s +#as: --32 -K PIC +#ld: -shared -melf32_sparc +#objdump: -sj.tdata +#target: sparc*-*-* + +.*: +file format elf32-sparc + +Contents of section .tdata: + 12000 00000011 00000012 00000013 00000014 .* + 12010 00000015 00000016 00000017 00000018 .* + 12020 00000041 00000042 00000043 00000044 .* + 12030 00000045 00000046 00000047 00000048 .* + 12040 00000101 00000102 00000103 00000104 .* + 12050 00000105 00000106 00000107 00000108 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.dd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.dd new file mode 100644 index 00000000..5e948581 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.dd @@ -0,0 +1,220 @@ +#source: tlssunpic64.s +#source: tlspic.s +#as: --64 -Av9 -K PIC +#ld: -shared -melf64_sparc +#objdump: -drj.text +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Disassembly of section .text: + +0+1000 <fn1-0x8>: + +1000: 81 c3 e0 08 retl * + +1004: ae 03 c0 17 add %o7, %l7, %l7 + +0+1008 <fn1>: + +1008: 9d e3 bf 60 save %sp, -160, %sp + +100c: 2f 00 04 04 sethi %hi\(0x101000\), %l7 + +1010: 7f ff ff fc call 1000 <.*> + +1014: ae 05 e1 80 add %l7, 0x180, %l7 ! 101180 <.*> + +1018: 01 00 00 00 nop * + +101c: 01 00 00 00 nop * + +1020: 01 00 00 00 nop * + +1024: 01 00 00 00 nop * + +1028: 23 00 00 00 sethi %hi\(0\), %l1 + +102c: 01 00 00 00 nop * + +1030: a4 04 60 58 add %l1, 0x58, %l2 + +1034: 01 00 00 00 nop * + +1038: 90 05 c0 12 add %l7, %l2, %o0 + +103c: 01 00 00 00 nop * + +1040: 40 04 04 d0 call [0-9a-f]+ <__tls_get_addr@plt> + +1044: 01 00 00 00 nop * + +1048: 01 00 00 00 nop * + +104c: 01 00 00 00 nop * + +1050: 01 00 00 00 nop * + +1054: 01 00 00 00 nop * + +1058: 11 00 00 00 sethi %hi\(0\), %o0 + +105c: 92 02 20 78 add %o0, 0x78, %o1 ! 78 <.*> + +1060: d0 5d c0 09 ldx \[ %l7 \+ %o1 \], %o0 + +1064: 01 00 00 00 nop * + +1068: 90 01 c0 08 add %g7, %o0, %o0 + +106c: 01 00 00 00 nop * + +1070: 01 00 00 00 nop * + +1074: 01 00 00 00 nop * + +1078: 01 00 00 00 nop * + +107c: 19 00 00 00 sethi %hi\(0\), %o4 + +1080: 98 03 20 08 add %o4, 8, %o4 ! 8 <.*> + +1084: 90 05 c0 0c add %l7, %o4, %o0 + +1088: 40 04 04 be call [0-9a-f]+ <__tls_get_addr@plt> + +108c: 01 00 00 00 nop * + +1090: 01 00 00 00 nop * + +1094: 01 00 00 00 nop * + +1098: 01 00 00 00 nop * + +109c: 01 00 00 00 nop * + +10a0: 11 00 00 00 sethi %hi\(0\), %o0 + +10a4: 90 02 20 18 add %o0, 0x18, %o0 ! 18 <.*> + +10a8: d0 5d c0 08 ldx \[ %l7 \+ %o0 \], %o0 + +10ac: 01 00 00 00 nop * + +10b0: 90 01 c0 08 add %g7, %o0, %o0 + +10b4: 01 00 00 00 nop * + +10b8: 01 00 00 00 nop * + +10bc: 01 00 00 00 nop * + +10c0: 01 00 00 00 nop * + +10c4: 19 00 00 00 sethi %hi\(0\), %o4 + +10c8: 98 03 20 80 add %o4, 0x80, %o4 ! 80 <.*> + +10cc: 90 05 c0 0c add %l7, %o4, %o0 + +10d0: 40 04 04 ac call [0-9a-f]+ <__tls_get_addr@plt> + +10d4: 01 00 00 00 nop * + +10d8: 01 00 00 00 nop * + +10dc: 01 00 00 00 nop * + +10e0: 01 00 00 00 nop * + +10e4: 01 00 00 00 nop * + +10e8: 11 00 00 00 sethi %hi\(0\), %o0 + +10ec: 90 02 20 90 add %o0, 0x90, %o0 ! 90 <.*> + +10f0: d0 5d c0 08 ldx \[ %l7 \+ %o0 \], %o0 + +10f4: 01 00 00 00 nop * + +10f8: 90 01 c0 08 add %g7, %o0, %o0 + +10fc: 01 00 00 00 nop * + +1100: 01 00 00 00 nop * + +1104: 01 00 00 00 nop * + +1108: 01 00 00 00 nop * + +110c: 19 00 00 00 sethi %hi\(0\), %o4 + +1110: 98 03 20 38 add %o4, 0x38, %o4 ! 38 <.*> + +1114: 90 05 c0 0c add %l7, %o4, %o0 + +1118: 40 04 04 9a call [0-9a-f]+ <__tls_get_addr@plt> + +111c: 01 00 00 00 nop * + +1120: 01 00 00 00 nop * + +1124: 01 00 00 00 nop * + +1128: 01 00 00 00 nop * + +112c: 01 00 00 00 nop * + +1130: 11 00 00 00 sethi %hi\(0\), %o0 + +1134: 90 02 20 48 add %o0, 0x48, %o0 ! 48 <.*> + +1138: d0 5d c0 08 ldx \[ %l7 \+ %o0 \], %o0 + +113c: 01 00 00 00 nop * + +1140: 90 01 c0 08 add %g7, %o0, %o0 + +1144: 01 00 00 00 nop * + +1148: 01 00 00 00 nop * + +114c: 01 00 00 00 nop * + +1150: 01 00 00 00 nop * + +1154: 23 00 00 00 sethi %hi\(0\), %l1 + +1158: 01 00 00 00 nop * + +115c: a4 04 60 28 add %l1, 0x28, %l2 + +1160: 01 00 00 00 nop * + +1164: 90 05 c0 12 add %l7, %l2, %o0 + +1168: 01 00 00 00 nop * + +116c: 40 04 04 85 call [0-9a-f]+ <__tls_get_addr@plt> + +1170: 01 00 00 00 nop * + +1174: 27 00 00 00 sethi %hi\(0\), %l3 + +1178: 01 00 00 00 nop * + +117c: a8 1c e0 20 xor %l3, 0x20, %l4 + +1180: 01 00 00 00 nop * + +1184: aa 02 00 14 add %o0, %l4, %l5 + +1188: 01 00 00 00 nop * + +118c: 25 00 00 00 sethi %hi\(0\), %l2 + +1190: 01 00 00 00 nop * + +1194: a6 1c a0 26 xor %l2, 0x26, %l3 + +1198: 01 00 00 00 nop * + +119c: ec 12 00 13 lduh \[ %o0 \+ %l3 \], %l6 + +11a0: 01 00 00 00 nop * + +11a4: 01 00 00 00 nop * + +11a8: 01 00 00 00 nop * + +11ac: 01 00 00 00 nop * + +11b0: 13 00 00 00 sethi %hi\(0\), %o1 + +11b4: 27 00 00 00 sethi %hi\(0\), %l3 + +11b8: 94 02 60 28 add %o1, 0x28, %o2 + +11bc: 25 00 00 00 sethi %hi\(0\), %l2 + +11c0: 90 05 c0 0a add %l7, %o2, %o0 + +11c4: a8 1c e0 40 xor %l3, 0x40, %l4 + +11c8: 40 04 04 6e call [0-9a-f]+ <__tls_get_addr@plt> + +11cc: a6 1c a0 45 xor %l2, 0x45, %l3 + +11d0: ea 5a 00 14 ldx \[ %o0 \+ %l4 \], %l5 + +11d4: ac 02 00 13 add %o0, %l3, %l6 + +11d8: 01 00 00 00 nop * + +11dc: 01 00 00 00 nop * + +11e0: 01 00 00 00 nop * + +11e4: 01 00 00 00 nop * + +11e8: 13 00 00 00 sethi %hi\(0\), %o1 + +11ec: 27 00 00 00 sethi %hi\(0\), %l3 + +11f0: 94 02 60 28 add %o1, 0x28, %o2 + +11f4: 25 00 00 00 sethi %hi\(0\), %l2 + +11f8: 90 05 c0 0a add %l7, %o2, %o0 + +11fc: a8 1c e0 63 xor %l3, 0x63, %l4 + +1200: 40 04 04 60 call [0-9a-f]+ <__tls_get_addr@plt> + +1204: a6 1c a0 64 xor %l2, 0x64, %l3 + +1208: aa 02 00 14 add %o0, %l4, %l5 + +120c: ec 02 00 13 ld \[ %o0 \+ %l3 \], %l6 + +1210: 01 00 00 00 nop * + +1214: 01 00 00 00 nop * + +1218: 01 00 00 00 nop * + +121c: 01 00 00 00 nop * + +1220: 23 00 00 00 sethi %hi\(0\), %l1 + +1224: 01 00 00 00 nop * + +1228: a4 04 60 78 add %l1, 0x78, %l2 + +122c: 01 00 00 00 nop * + +1230: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2 + +1234: 01 00 00 00 nop * + +1238: a4 01 c0 12 add %g7, %l2, %l2 + +123c: 01 00 00 00 nop * + +1240: 01 00 00 00 nop * + +1244: 01 00 00 00 nop * + +1248: 01 00 00 00 nop * + +124c: 17 00 00 00 sethi %hi\(0\), %o3 + +1250: 96 02 e0 18 add %o3, 0x18, %o3 ! 18 <.*> + +1254: d4 5d c0 0b ldx \[ %l7 \+ %o3 \], %o2 + +1258: 98 01 c0 0a add %g7, %o2, %o4 + +125c: 01 00 00 00 nop * + +1260: 01 00 00 00 nop * + +1264: 01 00 00 00 nop * + +1268: 01 00 00 00 nop * + +126c: 23 00 00 00 sethi %hi\(0\), %l1 + +1270: a4 04 60 90 add %l1, 0x90, %l2 ! 90 <.*> + +1274: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2 + +1278: a4 01 c0 12 add %g7, %l2, %l2 + +127c: 01 00 00 00 nop * + +1280: 01 00 00 00 nop * + +1284: 01 00 00 00 nop * + +1288: 01 00 00 00 nop * + +128c: 23 00 00 00 sethi %hi\(0\), %l1 + +1290: a4 04 60 48 add %l1, 0x48, %l2 ! 48 <.*> + +1294: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2 + +1298: a4 01 c0 12 add %g7, %l2, %l2 + +129c: 01 00 00 00 nop * + +12a0: 01 00 00 00 nop * + +12a4: 01 00 00 00 nop * + +12a8: 01 00 00 00 nop * + +12ac: 23 00 00 00 sethi %hi\(0\), %l1 + +12b0: a4 04 60 50 add %l1, 0x50, %l2 ! 50 <.*> + +12b4: e4 5d c0 12 ldx \[ %l7 \+ %l2 \], %l2 + +12b8: e4 59 c0 12 ldx \[ %g7 \+ %l2 \], %l2 + +12bc: 01 00 00 00 nop * + +12c0: 01 00 00 00 nop * + +12c4: 01 00 00 00 nop * + +12c8: 01 00 00 00 nop * + +12cc: 17 00 00 00 sethi %hi\(0\), %o3 + +12d0: 98 02 e0 20 add %o3, 0x20, %o4 ! 20 <.*> + +12d4: da 5d c0 0c ldx \[ %l7 \+ %o4 \], %o5 + +12d8: e4 29 c0 0d stb %l2, \[ %g7 \+ %o5 \] + +12dc: 01 00 00 00 nop * + +12e0: 01 00 00 00 nop * + +12e4: 01 00 00 00 nop * + +12e8: 01 00 00 00 nop * + +12ec: 17 00 00 00 sethi %hi\(0\), %o3 + +12f0: 98 02 e0 68 add %o3, 0x68, %o4 ! 68 <.*> + +12f4: da 5d c0 0c ldx \[ %l7 \+ %o4 \], %o5 + +12f8: e4 71 c0 0d stx %l2, \[ %g7 \+ %o5 \] + +12fc: 01 00 00 00 nop * + +1300: 01 00 00 00 nop * + +1304: 01 00 00 00 nop * + +1308: 01 00 00 00 nop * + +130c: 17 00 00 00 sethi %hi\(0\), %o3 + +1310: 98 02 e0 70 add %o3, 0x70, %o4 ! 70 <.*> + +1314: da 5d c0 0c ldx \[ %l7 \+ %o4 \], %o5 + +1318: e4 21 c0 0d st %l2, \[ %g7 \+ %o5 \] + +131c: 01 00 00 00 nop * + +1320: 01 00 00 00 nop * + +1324: 01 00 00 00 nop * + +1328: 01 00 00 00 nop * + +132c: 81 cf e0 08 rett %i7 \+ 8 + +1330: 01 00 00 00 nop * +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.rd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.rd new file mode 100644 index 00000000..ca26b2df --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.rd @@ -0,0 +1,137 @@ +#source: tlssunpic64.s +#source: tlspic.s +#as: --64 -Av9 -K PIC +#ld: -shared -melf64_sparc +#readelf: -WSsrl +#target: sparc*-*-* + +There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+: + +Section Headers: + +\[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al + +\[[ 0-9]+\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0 + +\[[ 0-9]+\] .hash +.* + +\[[ 0-9]+\] .dynsym +.* + +\[[ 0-9]+\] .dynstr +.* + +\[[ 0-9]+\] .rela.dyn +.* + +\[[ 0-9]+\] .rela.plt +.* + +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096 + +\[[ 0-9]+\] .tdata +PROGBITS +0+102000 0+2000 0+60 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .tbss +NOBITS +0+102060 0+2060 0+20 0+ WAT +0 +0 +4 + +\[[ 0-9]+\] .dynamic +DYNAMIC +0+102060 0+2060 0+130 10 +WA +3 +0 +8 + +\[[ 0-9]+\] .got +PROGBITS +0+102190 0+2190 0+98 08 +WA +0 +0 +8 + +\[[ 0-9]+\] .plt +.* + +\[[ 0-9]+\] .shstrtab +.* + +\[[ 0-9]+\] .symtab +.* + +\[[ 0-9]+\] .strtab +.* +#... + +Elf file type is DYN \(Shared object file\) +Entry point 0x1000 +There are [0-9]+ program headers, starting at offset [0-9]+ + +Program Headers: + +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align + +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x100000 + +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+3a0 0x0+3a0 RWE 0x100000 + +DYNAMIC +0x0+2060 0x0+102060 0x0+102060 0x0+130 0x0+130 RW +0x8 + +TLS +0x0+2000 0x0+102000 0x0+102000 0x0+60 0x0+80 R +0x4 +#... + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +24 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +30 +[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0 +[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +64 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +50 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +70 +[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +44 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+10 +sg5 \+ 0 +[0-9a-f ]+R_SPARC_TLS_DTPMOD64 +0+ +sg1 \+ 0 +[0-9a-f ]+R_SPARC_TLS_DTPOFF64 +0+ +sg1 \+ 0 +[0-9a-f ]+R_SPARC_TLS_TPOFF64 +0+4 +sg2 \+ 0 + +Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +[0-9a-f ]+R_SPARC_JMP_SLOT +0+ +__tls_get_addr \+ 0 + +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +10 * +.* TLS +GLOBAL +DEFAULT +7 sg8 +.* TLS +GLOBAL +DEFAULT +7 sg3 +.* TLS +GLOBAL +DEFAULT +7 sg4 +.* TLS +GLOBAL +DEFAULT +7 sg5 +.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr +.* TLS +GLOBAL +DEFAULT +7 sg1 +.* FUNC +GLOBAL +DEFAULT +6 fn1 +.* NOTYPE +GLOBAL +DEFAULT +11 __bss_start +.* TLS +GLOBAL +DEFAULT +7 sg2 +.* TLS +GLOBAL +DEFAULT +7 sg6 +.* TLS +GLOBAL +DEFAULT +7 sg7 +.* NOTYPE +GLOBAL +DEFAULT +11 _edata +.* NOTYPE +GLOBAL +DEFAULT +11 _end + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +.* NOTYPE +LOCAL +DEFAULT +UND * +.* SECTION +LOCAL +DEFAULT +1 * +.* SECTION +LOCAL +DEFAULT +2 * +.* SECTION +LOCAL +DEFAULT +3 * +.* SECTION +LOCAL +DEFAULT +4 * +.* SECTION +LOCAL +DEFAULT +5 * +.* SECTION +LOCAL +DEFAULT +6 * +.* SECTION +LOCAL +DEFAULT +7 * +.* SECTION +LOCAL +DEFAULT +8 * +.* SECTION +LOCAL +DEFAULT +9 * +.* SECTION +LOCAL +DEFAULT +10 * +.* SECTION +LOCAL +DEFAULT +11 * +.* FILE +LOCAL +DEFAULT +ABS .* +.* TLS +LOCAL +DEFAULT +7 sl1 +.* TLS +LOCAL +DEFAULT +7 sl2 +.* TLS +LOCAL +DEFAULT +7 sl3 +.* TLS +LOCAL +DEFAULT +7 sl4 +.* TLS +LOCAL +DEFAULT +7 sl5 +.* TLS +LOCAL +DEFAULT +7 sl6 +.* TLS +LOCAL +DEFAULT +7 sl7 +.* TLS +LOCAL +DEFAULT +7 sl8 +.* TLS +LOCAL +DEFAULT +8 sH1 +.* TLS +LOCAL +DEFAULT +7 sh3 +.* TLS +LOCAL +DEFAULT +8 sH2 +.* TLS +LOCAL +DEFAULT +8 sH7 +.* TLS +LOCAL +DEFAULT +7 sh7 +.* TLS +LOCAL +DEFAULT +7 sh8 +.* TLS +LOCAL +DEFAULT +8 sH4 +.* TLS +LOCAL +DEFAULT +7 sh4 +.* TLS +LOCAL +DEFAULT +8 sH3 +.* TLS +LOCAL +DEFAULT +7 sh5 +.* TLS +LOCAL +DEFAULT +8 sH5 +.* TLS +LOCAL +DEFAULT +8 sH6 +.* TLS +LOCAL +DEFAULT +8 sH8 +.* TLS +LOCAL +DEFAULT +7 sh1 +.* TLS +LOCAL +DEFAULT +7 sh2 +.* TLS +LOCAL +DEFAULT +7 sh6 +.* FILE +LOCAL +DEFAULT +ABS .* +.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC +.* OBJECT +LOCAL +DEFAULT +ABS _PROCEDURE_LINKAGE_TABLE_ +.* OBJECT +LOCAL +DEFAULT +ABS _GLOBAL_OFFSET_TABLE_ +.* TLS +GLOBAL +DEFAULT +7 sg8 +.* TLS +GLOBAL +DEFAULT +7 sg3 +.* TLS +GLOBAL +DEFAULT +7 sg4 +.* TLS +GLOBAL +DEFAULT +7 sg5 +.* NOTYPE +GLOBAL +DEFAULT +UND __tls_get_addr +.* TLS +GLOBAL +DEFAULT +7 sg1 +.* FUNC +GLOBAL +DEFAULT +6 fn1 +.* NOTYPE +GLOBAL +DEFAULT +11 __bss_start +.* TLS +GLOBAL +DEFAULT +7 sg2 +.* TLS +GLOBAL +DEFAULT +7 sg6 +.* TLS +GLOBAL +DEFAULT +7 sg7 +.* NOTYPE +GLOBAL +DEFAULT +11 _edata +.* NOTYPE +GLOBAL +DEFAULT +11 _end diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.s b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.s new file mode 100644 index 00000000..14e110dd --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.s @@ -0,0 +1,228 @@ + .data + .align 4096 + .section ".tdata", #alloc, #write, #tls + .align 4 + .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 + .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 + .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 +sg1: .word 17 +sg2: .word 18 +sg3: .word 19 +sg4: .word 20 +sg5: .word 21 +sg6: .word 22 +sg7: .word 23 +sg8: .word 24 +sl1: .word 65 +sl2: .word 66 +sl3: .word 67 +sl4: .word 68 +sl5: .word 69 +sl6: .word 70 +sl7: .word 71 +sl8: .word 72 +sh1: .word 257 +sh2: .word 258 +sh3: .word 259 +sh4: .word 260 +sh5: .word 261 +sh6: .word 262 +sh7: .word 263 +sh8: .word 264 + + .text + .align 4096 +.LLGETPC0: + retl + add %o7, %l7, %l7 + + .globl fn1 + .type fn1,#function + .proc 04 +fn1: + save %sp, -160, %sp + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 + call .LLGETPC0 + add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 + nop;nop;nop;nop + + /* GD */ + sethi %tgd_hi22(sg1), %l1 + nop + add %l1, %tgd_lo10(sg1), %l2 + nop + add %l7, %l2, %o0, %tgd_add(sg1) + nop + call __tls_get_addr, %tgd_call(sg1) + nop + nop;nop;nop;nop + + /* GD -> IE because variable is referenced through IE too */ + sethi %tgd_hi22(sg2), %o0 + add %o0, %tgd_lo10(sg2), %o1 + add %l7, %o1, %o0, %tgd_add(sg2) + call __tls_get_addr, %tgd_call(sg2) + nop + nop;nop;nop;nop + + /* GD against local variable */ + sethi %tgd_hi22(sl1), %o4 + add %o4, %tgd_lo10(sl1), %o4 + add %l7, %o4, %o0, %tgd_add(sl1) + call __tls_get_addr, %tgd_call(sl1) + nop + nop;nop;nop;nop + + /* GD -> IE against local variable referenced through IE too */ + sethi %tgd_hi22(sl2), %o0 + add %o0, %tgd_lo10(sl2), %o0 + add %l7, %o0, %o0, %tgd_add(sl2) + call __tls_get_addr, %tgd_call(sl2) + nop + nop;nop;nop;nop + + /* GD against hidden and local variable */ + sethi %tgd_hi22(sh1), %o4 + add %o4, %tgd_lo10(sh1), %o4 + add %l7, %o4, %o0, %tgd_add(sh1) + call __tls_get_addr, %tgd_call(sh1) + nop + nop;nop;nop;nop + + /* GD -> IE against hidden and local variable referenced through + IE too */ + sethi %tgd_hi22(sh2), %o0 + add %o0, %tgd_lo10(sh2), %o0 + add %l7, %o0, %o0, %tgd_add(sh2) + call __tls_get_addr, %tgd_call(sh2) + nop + nop;nop;nop;nop + + /* GD against hidden but not local variable */ + sethi %tgd_hi22(sH1), %o4 + add %o4, %tgd_lo10(sH1), %o4 + add %l7, %o4, %o0, %tgd_add(sH1) + call __tls_get_addr, %tgd_call(sH1) + nop + nop;nop;nop;nop + + /* GD -> IE against hidden but not local variable referenced through + IE too */ + sethi %tgd_hi22(sH2), %o0 + add %o0, %tgd_lo10(sH2), %o0 + add %l7, %o0, %o0, %tgd_add(sH2) + call __tls_get_addr, %tgd_call(sH2) + nop + nop;nop;nop;nop + + /* LD */ + sethi %tldm_hi22(sl1), %l1 + nop + add %l1, %tldm_lo10(sl1), %l2 + nop + add %l7, %l2, %o0, %tldm_add(sl1) + nop + call __tls_get_addr, %tldm_call(sl1) + nop + sethi %tldo_hix22(sl1), %l3 + nop + xor %l3, %tldo_lox10(sl1), %l4 + nop + add %o0, %l4, %l5, %tldo_add(sl1) + nop + sethi %tldo_hix22(sl2 + 2), %l2 + nop + xor %l2, %tldo_lox10(sl2 + 2), %l3 + nop + lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2) + nop;nop;nop;nop + + /* LD against hidden and local variables */ + sethi %tldm_hi22(sh1), %o1 + sethi %tldo_hix22(sh1), %l3 + add %o1, %tldm_lo10(sh1), %o2 + sethi %tldo_hix22(sh2 + 1), %l2 + add %l7, %o2, %o0, %tldm_add(sh1) + xor %l3, %tldo_lox10(sh1), %l4 + call __tls_get_addr, %tldm_call(sh1) + xor %l2, %tldo_lox10(sh2 + 1), %l3 + ldx [%o0 + %l4], %l5, %tldo_add(sh1) + add %o0, %l3, %l6, %tldo_add(sh2 + 1) + nop;nop;nop;nop + + /* LD against hidden but not local variables */ + sethi %tldm_hi22(sH1), %o1 + sethi %tldo_hix22(sH1 + 3), %l3 + add %o1, %tldm_lo10(sH1), %o2 + sethi %tldo_hix22(sH2), %l2 + add %l7, %o2, %o0, %tldm_add(sH1) + xor %l3, %tldo_lox10(sH1 + 3), %l4 + call __tls_get_addr, %tldm_call(sH1) + xor %l2, %tldo_lox10(sH2), %l3 + add %o0, %l4, %l5, %tldo_add(sH1 + 3) + ld [%o0 + %l3], %l6, %tldo_add(sH2) + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sg2), %l1 + nop + add %l1, %tie_lo10(sg2), %l2 + nop + ldx [%l7 + %l2], %l2, %tie_ldx(sg2) + nop + add %g7, %l2, %l2, %tie_add(sg2) + nop;nop;nop;nop + + /* IE against local var */ + sethi %tie_hi22(sl2), %o3 + add %o3, %tie_lo10(sl2), %o3 + ldx [%l7 + %o3], %o2, %tie_ldx(sl2) + add %g7, %o2, %o4, %tie_add(sl2) + nop;nop;nop;nop + + /* IE against hidden and local var */ + sethi %tie_hi22(sh2), %l1 + add %l1, %tie_lo10(sh2), %l2 + ldx [%l7 + %l2], %l2, %tie_ldx(sh2) + add %g7, %l2, %l2, %tie_add(sh2) + nop;nop;nop;nop + + /* IE against hidden but not local var */ + sethi %tie_hi22(sH2), %l1 + add %l1, %tie_lo10(sH2), %l2 + ldx [%l7 + %l2], %l2, %tie_ldx(sH2) + add %g7, %l2, %l2, %tie_add(sH2) + nop;nop;nop;nop + + /* Direct access through %g7 */ + + /* IE against global var */ + sethi %tie_hi22(sg5), %l1 + add %l1, %tie_lo10(sg5), %l2 + ldx [%l7 + %l2], %l2, %tie_ldx(sg5) + ldx [%g7 + %l2], %l2, %tie_add(sg5) + nop;nop;nop;nop + + /* IE against local var */ + sethi %tie_hi22(sl5), %o3 + add %o3, %tie_lo10(sl5), %o4 + ldx [%l7 + %o4], %o5, %tie_ldx(sl5) + stb %l2, [%g7 + %o5], %tie_add(sl5) + nop;nop;nop;nop + + /* IE against hidden and local var */ + sethi %tie_hi22(sh5), %o3 + add %o3, %tie_lo10(sh5), %o4 + ldx [%l7 + %o4], %o5, %tie_ldx(sh5) + stx %l2, [%g7 + %o5], %tie_add(sh5) + nop;nop;nop;nop + + /* IE against hidden but not local var */ + sethi %tie_hi22(sH5), %o3 + add %o3, %tie_lo10(sH5), %o4 + ldx [%l7 + %o4], %o5, %tie_ldx(sH5) + st %l2, [%g7 + %o5], %tie_add(sH5) + nop;nop;nop;nop + + return %i7 + 8 + nop diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.sd b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.sd new file mode 100644 index 00000000..9061c2ef --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.sd @@ -0,0 +1,20 @@ +#source: tlssunpic64.s +#source: tlspic.s +#as: --64 -K PIC +#ld: -shared -melf64_sparc +#objdump: -sj.got +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .got: + 102190 00000000 00102060 00000000 00000000 .* + 1021a0 00000000 00000020 00000000 00000000 .* + 1021b0 00000000 00000000 00000000 00000000 .* + 1021c0 00000000 00000000 00000000 00000000 .* + 1021d0 00000000 00000060 00000000 00000000 .* + 1021e0 00000000 00000000 00000000 00000000 .* + 1021f0 00000000 00000000 00000000 00000000 .* + 102200 00000000 00000000 00000000 00000000 .* + 102210 00000000 00000000 00000000 00000040 .* + 102220 00000000 00000000 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.td b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.td new file mode 100644 index 00000000..1e82d2b4 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/tlssunpic64.td @@ -0,0 +1,16 @@ +#source: tlssunpic64.s +#source: tlspic.s +#as: --64 -K PIC +#ld: -shared -melf64_sparc +#objdump: -sj.tdata +#target: sparc*-*-* + +.*: +file format elf64-sparc + +Contents of section .tdata: + 102000 00000011 00000012 00000013 00000014 .* + 102010 00000015 00000016 00000017 00000018 .* + 102020 00000041 00000042 00000043 00000044 .* + 102030 00000045 00000046 00000047 00000048 .* + 102040 00000101 00000102 00000103 00000104 .* + 102050 00000105 00000106 00000107 00000108 .* diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.dd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.dd new file mode 100644 index 00000000..49dab7bc --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.dd @@ -0,0 +1,45 @@ + +.*: file format .* + +Disassembly of section \.plt: + +00080800 <_PROCEDURE_LINKAGE_TABLE_>: + 80800: c4 05 e0 08 ld \[ %l7 \+ 8 \], %g2 + 80804: 81 c0 80 00 jmp %g2 + 80808: 01 00 00 00 nop + 8080c: 03 00 00 00 sethi %hi\(0\), %g1 + 80810: 82 10 60 0c or %g1, 0xc, %g1 ! c <_PROCEDURE_LINKAGE_TABLE_-0x807f4> + 80814: c2 05 c0 01 ld \[ %l7 \+ %g1 \], %g1 + 80818: 81 c0 40 00 jmp %g1 + 8081c: 01 00 00 00 nop + 80820: 03 00 00 00 sethi %hi\(0\), %g1 + 80824: 10 bf ff f7 b 80800 <_PROCEDURE_LINKAGE_TABLE_> + 80828: 82 10 60 00 mov %g1, %g1 ! 0 <_PROCEDURE_LINKAGE_TABLE_-0x80800> +Disassembly of section \.text: + +00080c00 <foo>: + 80c00: 9d e3 bf 98 save %sp, -104, %sp + 80c04: 2f 00 00 00 sethi %hi\(0\), %l7 + 80c08: ee 05 e0 00 ld \[ %l7 \], %l7 + 80c0c: ee 05 e0 00 ld \[ %l7 \], %l7 + 80c10: 03 00 00 00 sethi %hi\(0\), %g1 + 80c14: 82 10 60 10 or %g1, 0x10, %g1 ! 10 <_PROCEDURE_LINKAGE_TABLE_-0x807f0> + 80c18: c2 05 c0 01 ld \[ %l7 \+ %g1 \], %g1 + 80c1c: c4 00 40 00 ld \[ %g1 \], %g2 + 80c20: 84 00 a0 01 inc %g2 + 80c24: 40 00 00 08 call 80c44 <slocal> + 80c28: c4 20 40 00 st %g2, \[ %g1 \] + 80c2c: 7f ff fe f8 call 8080c <_PROCEDURE_LINKAGE_TABLE_\+0xc> + 80c30: 01 00 00 00 nop + 80c34: 7f ff fe f6 call 8080c <_PROCEDURE_LINKAGE_TABLE_\+0xc> + 80c38: 01 00 00 00 nop + 80c3c: 81 c7 e0 08 ret + 80c40: 81 e8 00 00 restore + +00080c44 <slocal>: + 80c44: 81 c3 e0 08 retl + 80c48: 01 00 00 00 nop + +00080c4c <sglobal>: + 80c4c: 81 c3 e0 08 retl + 80c50: 01 00 00 00 nop diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.nd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.nd new file mode 100644 index 00000000..cbc1c8c4 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.nd @@ -0,0 +1,9 @@ +#... +Symbol table '\.dynsym' .*: +#... +.*: 00090400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_ +#... +Symbol table '\.symtab' .*: +#... +.*: 00090400 * 0 * OBJECT * GLOBAL * DEFAULT * [0-9]+ _GLOBAL_OFFSET_TABLE_ +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.rd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.rd new file mode 100644 index 00000000..36045286 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.rd @@ -0,0 +1,12 @@ + +Relocation section '\.rela\.plt' at offset .* contains 1 entries: + Offset Info Type Sym\.Value Sym\. Name \+ Addend +0009040c .*15 R_SPARC_JMP_SLOT 00000000 sexternal \+ 0 + +Relocation section '\.rela\.dyn' at offset .* contains 5 entries: + Offset Info Type Sym\.Value Sym\. Name \+ Addend +00090800 00000016 R_SPARC_RELATIVE 00080c44 +00080c04 .*09 R_SPARC_HI22 00000000 __GOTT_BASE__ \+ 0 +00080c08 .*0c R_SPARC_LO10 00000000 __GOTT_BASE__ \+ 0 +00080c0c .*0c R_SPARC_LO10 00000000 __GOTT_INDEX__ \+ 0 +00090410 .*14 R_SPARC_GLOB_DAT 00090c00 x \+ 0 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.s b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.s new file mode 100644 index 00000000..e1221a22 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.s @@ -0,0 +1,44 @@ + .text + .globl foo + .type foo, %function +foo: + save %sp, -104, %sp + sethi %hi(__GOTT_BASE__), %l7 + ld [%l7+%lo(__GOTT_BASE__)],%l7 + ld [%l7+%lo(__GOTT_INDEX__)],%l7 + sethi %hi(x), %g1 + or %g1, %lo(x), %g1 + ld [%l7+%g1], %g1 + ld [%g1], %g2 + add %g2, 1, %g2 + + call slocal, 0 + st %g2, [%g1] + + call sexternal, 0 + nop + + call sexternal, 0 + nop + + ret + restore + .size foo, .-foo + + .type slocal, %function +slocal: + retl + nop + .size slocal, .-slocal + + .globl sglobal + .type sglobal, %function +sglobal: + retl + nop + .size sglobal, .-sglobal + + .data + .4byte slocal + + .comm x,4,4 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.td b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.td new file mode 100644 index 00000000..9f223e38 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-lib.td @@ -0,0 +1,3 @@ +#... + 0x0+16 \(TEXTREL\) +0x0 +#pass diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-static.d b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-static.d new file mode 100644 index 00000000..88c0baf1 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1-static.d @@ -0,0 +1,4 @@ +#name: VxWorks executable test 1 (static) +#source: vxworks1.s +#ld: tmpdir/libvxworks1.so -Tvxworks1.ld +#error: Dynamic sections created in non-dynamic link diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.dd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.dd new file mode 100644 index 00000000..16e72fda --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.dd @@ -0,0 +1,52 @@ + +.*: file format .* + +Disassembly of section \.plt: + +00080800 <_PROCEDURE_LINKAGE_TABLE_>: + 80800: 05 00 02 41 sethi %hi\(0x90400\), %g2 + 80800: R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_\+0x8 + 80804: 84 10 a0 08 or %g2, 8, %g2 ! 90408 <_GLOBAL_OFFSET_TABLE_\+0x8> + 80804: R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_\+0x8 + 80808: c4 00 80 00 ld \[ %g2 \], %g2 + 8080c: 81 c0 80 00 jmp %g2 + 80810: 01 00 00 00 nop + 80814: 03 00 02 41 sethi %hi\(0x90400\), %g1 + 80814: R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_\+0xc + 80818: 82 10 60 0c or %g1, 0xc, %g1 ! 9040c <sglobal@plt> + 80818: R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_\+0xc + 8081c: c2 00 40 00 ld \[ %g1 \], %g1 + 80820: 81 c0 40 00 jmp %g1 + 80824: 01 00 00 00 nop + 80828: 03 00 00 00 sethi %hi\(0\), %g1 + 8082c: 10 bf ff f5 b 80800 <_PROCEDURE_LINKAGE_TABLE_> + 80830: 82 10 60 00 mov %g1, %g1 ! 0 <_PROCEDURE_LINKAGE_TABLE_-0x80800> + 80834: 03 00 02 41 sethi %hi\(0x90400\), %g1 + 80834: R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_\+0x10 + 80838: 82 10 60 10 or %g1, 0x10, %g1 ! 90410 <foo@plt> + 80838: R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_\+0x10 + 8083c: c2 00 40 00 ld \[ %g1 \], %g1 + 80840: 81 c0 40 00 jmp %g1 + 80844: 01 00 00 00 nop + 80848: 03 00 00 00 sethi %hi\(0\), %g1 + 8084c: 10 bf ff ed b 80800 <_PROCEDURE_LINKAGE_TABLE_> + 80850: 82 10 60 01 or %g1, 1, %g1 ! 1 <_PROCEDURE_LINKAGE_TABLE_-0x807ff> +Disassembly of section \.text: + +00080c00 <_start>: + 80c00: 9d e3 bf 98 save %sp, -104, %sp + 80c04: 7f ff ff 0c call 80834 <_PROCEDURE_LINKAGE_TABLE_\+0x34> + 80c04: R_SPARC_WDISP30 \.plt\+0x34 + 80c08: 01 00 00 00 nop + 80c0c: 40 00 00 06 call 80c24 <sexternal> + 80c0c: R_SPARC_WDISP30 sexternal + 80c10: 01 00 00 00 nop + 80c14: 7f ff ff 00 call 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14> + 80c14: R_SPARC_WDISP30 \.plt\+0x14 + 80c18: 01 00 00 00 nop + 80c1c: 81 c7 e0 08 ret + 80c20: 81 e8 00 00 restore + +00080c24 <sexternal>: + 80c24: 81 c3 e0 08 retl + 80c28: 01 00 00 00 nop diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.ld b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.ld new file mode 100644 index 00000000..ce750b00 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.ld @@ -0,0 +1,30 @@ +SECTIONS +{ + . = 0x80000; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + + . = ALIGN (0x400); + .rela.dyn : { *(.rela.dyn) } + .rela.plt : { *(.rela.plt) } + + . = ALIGN (0x400); + .plt : { *(.plt) } + + . = ALIGN (0x400); + .text : { *(.text) } + + . = ALIGN (0x10000); + .dynamic : { *(.dynamic) } + + . = ALIGN (0x400); + .got : { *(.got.plt) *(.got) } + + . = ALIGN (0x400); + .data : { *(.data) } + + . = ALIGN (0x400); + .bss : { *(.bss) } +} diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.rd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.rd new file mode 100644 index 00000000..e02146b4 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.rd @@ -0,0 +1,22 @@ + +Relocation section '\.rela\.plt' at offset .* contains 2 entries: + Offset Info Type Sym\.Value Sym\. Name \+ Addend +0009040c .*15 R_SPARC_JMP_SLOT 00080814 sglobal \+ 0 +00090410 .*15 R_SPARC_JMP_SLOT 00080834 foo \+ 0 + +Relocation section '\.rela\.text' at offset .* contains 3 entries: + Offset Info Type Sym\.Value Sym\. Name \+ Addend +00080c04 .*07 R_SPARC_WDISP30 00080800 \.plt \+ 34 +00080c0c .*07 R_SPARC_WDISP30 00080c24 sexternal \+ 0 +00080c14 .*07 R_SPARC_WDISP30 00080800 \.plt \+ 14 + +Relocation section '\.rela\.plt\.unloaded' at offset .* contains 8 entries: + Offset Info Type Sym\.Value Sym\. Name \+ Addend +00080800 .*09 R_SPARC_HI22 00090400 _GLOBAL_OFFSET_TABLE_ \+ 8 +00080804 .*0c R_SPARC_LO10 00090400 _GLOBAL_OFFSET_TABLE_ \+ 8 +00080814 .*09 R_SPARC_HI22 00090400 _GLOBAL_OFFSET_TABLE_ \+ c +00080818 .*0c R_SPARC_LO10 00090400 _GLOBAL_OFFSET_TABLE_ \+ c +0009040c .*03 R_SPARC_32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 28 +00080834 .*09 R_SPARC_HI22 00090400 _GLOBAL_OFFSET_TABLE_ \+ 10 +00080838 .*0c R_SPARC_LO10 00090400 _GLOBAL_OFFSET_TABLE_ \+ 10 +00090410 .*03 R_SPARC_32 00080800 _PROCEDURE_LINKAGE_TAB.* \+ 48 diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.s b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.s new file mode 100644 index 00000000..82106c81 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks1.s @@ -0,0 +1,25 @@ + .text + .globl _start + .type _start, %function +_start: + save %sp, -104, %sp + + call foo, 0 + nop + + call sexternal, 0 + nop + + call sglobal, 0 + nop + + ret + restore + .size _start, .-_start + + .globl sexternal + .type sexternal, %function +sexternal: + retl + nop + .size sexternal, .-sexternal diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks2-static.sd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks2-static.sd new file mode 100644 index 00000000..55fc5296 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks2-static.sd @@ -0,0 +1,9 @@ +#... +Elf file type is EXEC \(Executable file\) +Entry point 0x80000 +#... +Program Headers: + Type .* + LOAD .* 0x00080000 0x00080000 .* R E 0x10000 + +#... diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks2.s b/binutils-2.25/ld/testsuite/ld-sparc/vxworks2.s new file mode 100644 index 00000000..0a883a97 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks2.s @@ -0,0 +1,6 @@ + .globl _start + .type _start, %function +_start: + retl + nop + .end _start diff --git a/binutils-2.25/ld/testsuite/ld-sparc/vxworks2.sd b/binutils-2.25/ld/testsuite/ld-sparc/vxworks2.sd new file mode 100644 index 00000000..08765688 --- /dev/null +++ b/binutils-2.25/ld/testsuite/ld-sparc/vxworks2.sd @@ -0,0 +1,13 @@ +#... +Elf file type is EXEC \(Executable file\) +Entry point 0x80400 +#... +Program Headers: + Type .* + PHDR .* +#... + LOAD .* 0x00080000 0x00080000 .* R E 0x10000 + LOAD .* 0x00090000 0x00090000 .* RW 0x10000 + DYNAMIC .* + +#... |