upload android base code part8
This commit is contained in:
parent
841ae54672
commit
5425409085
57075 changed files with 9846578 additions and 0 deletions
|
@ -0,0 +1,99 @@
|
|||
# Test literal coaslescing for Xtensa targets.
|
||||
# By David Heine, Tensilica, Inc.
|
||||
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# 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.
|
||||
|
||||
if ![istarget "xtensa*-*-*"] {
|
||||
return
|
||||
}
|
||||
|
||||
set testname "COALESCE"
|
||||
|
||||
set OBJDUMPFLAGS "-dr"
|
||||
|
||||
#
|
||||
# default_ld_objdump
|
||||
# run objdump on a file
|
||||
#
|
||||
proc default_ld_objdump { objdump object outputfile } {
|
||||
global OBJDUMPFLAGS
|
||||
global objdump_output
|
||||
global host_triplet
|
||||
|
||||
if {[which $objdump] == 0} then {
|
||||
perror "$objdump does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
if ![info exists OBJDUMPFLAGS] { set OBJDUMPFLAGS "" }
|
||||
|
||||
verbose -log "$objdump $OBJDUMPFLAGS $object >$outputfile"
|
||||
|
||||
catch "exec $objdump $OBJDUMPFLAGS $object >$outputfile" exec_output
|
||||
set exec_output [prune_warnings $exec_output]
|
||||
if [string match "" $exec_output] then {
|
||||
return 1
|
||||
} else {
|
||||
verbose -log "$exec_output"
|
||||
perror "$object: objdump failed"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ![ld_assemble $as $srcdir/$subdir/coalesce1.s tmpdir/coalesce1.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
if ![ld_assemble $as $srcdir/$subdir/coalesce2.s tmpdir/coalesce2.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
|
||||
set object "tmpdir/coalesce"
|
||||
set outputfile "$object.txt"
|
||||
|
||||
if ![ld_simple_link $ld $object "-T $srcdir/$subdir/coalesce.t tmpdir/coalesce1.o tmpdir/coalesce2.o"] {
|
||||
verbose -log "failure in ld"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
if ![default_ld_objdump $objdump $object $outputfile ] {
|
||||
verbose -log "failure in objdump"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
set file [open $outputfile r]
|
||||
set found 0
|
||||
|
||||
while { [gets $file line] != -1 } {
|
||||
# verbose "$line" 2
|
||||
if [regexp "^0000000c <main>:" $line] {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
close $file
|
||||
if $found {
|
||||
pass $testname
|
||||
} else {
|
||||
fail $testname
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
SECTIONS
|
||||
{
|
||||
.text 0x00000000 : {
|
||||
*(.literal .text)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
.global foo
|
||||
.data
|
||||
.global g_name
|
||||
.align 4
|
||||
g_name:
|
||||
.word 0xffffffff
|
||||
.text
|
||||
.global main
|
||||
.align 4
|
||||
main:
|
||||
entry a5,16
|
||||
movi a5,20000
|
||||
movi a6,g_name
|
||||
call8 foo
|
||||
ret
|
|
@ -0,0 +1,10 @@
|
|||
.text
|
||||
.global foo
|
||||
.global g_name
|
||||
.align 4
|
||||
foo:
|
||||
entry a5,16
|
||||
movi a5,20000
|
||||
movi a6,g_name
|
||||
movi a7,50000
|
||||
ret
|
|
@ -0,0 +1,45 @@
|
|||
# Test DIFF* relocation signedness and overflow checking
|
||||
# By Max Filippov, Cadence Design Systems, Inc.
|
||||
# Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# 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.
|
||||
|
||||
if ![istarget "xtensa*-*-*"] {
|
||||
return
|
||||
}
|
||||
|
||||
set testname "DIFF_OVERFLOW"
|
||||
|
||||
if ![ld_assemble $as "--text-section-literals $srcdir/$subdir/diff_overflow1.s" tmpdir/diff_overflow1.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
if ![ld_assemble $as "--text-section-literals $srcdir/$subdir/diff_overflow2.s" tmpdir/diff_overflow2.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
|
||||
set object "tmpdir/diff_overflow"
|
||||
|
||||
if ![ld_simple_link $ld $object "tmpdir/diff_overflow1.o tmpdir/diff_overflow2.o"] {
|
||||
verbose -log "failure in ld"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
pass $testname
|
|
@ -0,0 +1,27 @@
|
|||
.section .text.f0,"axG",@progbits,f0,comdat
|
||||
.literal_position
|
||||
.literal .L0, 0
|
||||
.align 4
|
||||
f0:
|
||||
entry a1, 32
|
||||
l32r a2, .L0
|
||||
retw
|
||||
|
||||
.section .text
|
||||
.literal_position
|
||||
.global _start
|
||||
_start:
|
||||
entry a1, 32
|
||||
retw
|
||||
|
||||
.section .text.f1,"axG",@progbits,f1,comdat
|
||||
.literal_position
|
||||
.literal .L1, 0
|
||||
.literal .L2, 0
|
||||
.align 4
|
||||
.global f1
|
||||
f1:
|
||||
entry a1, 32
|
||||
l32r a2, .L1
|
||||
l32r a3, .L2
|
||||
retw
|
|
@ -0,0 +1,22 @@
|
|||
.section .text.f1,"axG",@progbits,f1,comdat
|
||||
.literal_position
|
||||
.literal .L5, 0
|
||||
.align 4
|
||||
f4:
|
||||
entry a1, 32
|
||||
.Lf4:
|
||||
l32r a2, .L5
|
||||
l32r a2, .L5
|
||||
nop
|
||||
nop
|
||||
retw
|
||||
|
||||
.section .text
|
||||
f5:
|
||||
entry a1, 32
|
||||
.Lf5:
|
||||
retw
|
||||
|
||||
.section .debug_frame,"",@progbits
|
||||
.byte .Lf4 - f4
|
||||
.byte .Lf5 - f5
|
|
@ -0,0 +1,113 @@
|
|||
# Test Xtensa longcall optimization.
|
||||
# By David Heine, Tensilica, Inc.
|
||||
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# 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.
|
||||
|
||||
if ![istarget "xtensa*-*-*"] {
|
||||
return
|
||||
}
|
||||
|
||||
set testname "LCALL"
|
||||
|
||||
set OBJDUMPFLAGS "-dr"
|
||||
|
||||
#
|
||||
# default_ld_objdump
|
||||
# run objdump on a file
|
||||
#
|
||||
proc default_ld_objdump { objdump object outputfile } {
|
||||
global OBJDUMPFLAGS
|
||||
global objdump_output
|
||||
global host_triplet
|
||||
|
||||
if {[which $objdump] == 0} then {
|
||||
perror "$objdump does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
if ![info exists OBJDUMPFLAGS] { set OBJDUMPFLAGS "" }
|
||||
|
||||
verbose -log "$objdump $OBJDUMPFLAGS $object >$outputfile"
|
||||
|
||||
catch "exec $objdump $OBJDUMPFLAGS $object >$outputfile" exec_output
|
||||
set exec_output [prune_warnings $exec_output]
|
||||
if [string match "" $exec_output] then {
|
||||
return 1
|
||||
} else {
|
||||
verbose -log "$exec_output"
|
||||
perror "$object: objdump failed"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ![ld_assemble $as $srcdir/$subdir/lcall1.s tmpdir/lcall1.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
if ![ld_assemble $as $srcdir/$subdir/lcall2.s tmpdir/lcall2.o] {
|
||||
unresolved $testname
|
||||
return
|
||||
}
|
||||
|
||||
set object "tmpdir/lcall"
|
||||
set outputfile "$object.txt"
|
||||
|
||||
if ![ld_simple_link $ld $object "-T $srcdir/$subdir/lcall.t tmpdir/lcall1.o tmpdir/lcall2.o"] {
|
||||
verbose -log "failure in ld"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
if ![default_ld_objdump $objdump $object $outputfile ] {
|
||||
verbose -log "failure in objdump"
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
set file [open $outputfile r]
|
||||
while { [gets $file line] != -1 } {
|
||||
# verbose "$line" 2
|
||||
if [regexp "l32r" $line] {
|
||||
verbose -log "Found an l32r in the linked object"
|
||||
verbose -log "$line"
|
||||
fail $testname
|
||||
}
|
||||
}
|
||||
close $file
|
||||
pass $testname
|
||||
|
||||
|
||||
set testname "LCALL2"
|
||||
set file [open $outputfile r]
|
||||
set found 0
|
||||
|
||||
while { [gets $file line] != -1 } {
|
||||
# verbose "$line" 2
|
||||
if [regexp "^00000004 <label1>:" $line] {
|
||||
set found 1
|
||||
}
|
||||
}
|
||||
close $file
|
||||
if $found {
|
||||
pass $testname
|
||||
} else {
|
||||
fail $testname
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
SECTIONS
|
||||
{
|
||||
.text 0x00000000 : {
|
||||
*(.literal .text)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
.global foo
|
||||
.text
|
||||
.align 4
|
||||
label1:
|
||||
.literal .Lunused, 0xffffffff
|
||||
entry a5,16
|
||||
.begin longcalls
|
||||
call4 foo
|
||||
.end longcalls
|
||||
nop
|
|
@ -0,0 +1,6 @@
|
|||
.global foo
|
||||
.align 4
|
||||
foo:
|
||||
entry a5,16
|
||||
nop
|
||||
ret
|
|
@ -0,0 +1,65 @@
|
|||
#source: tlsbin.s
|
||||
#as:
|
||||
#ld: -melf32xtensa
|
||||
#objdump: -drj.text --start-address=0x400238
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
.*: +file format elf32-xtensa-.e
|
||||
|
||||
Disassembly of section \.text:
|
||||
|
||||
0+400238 <_start>:
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+entry a1, 32
|
||||
# GD -> IE because variable is not defined in executable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 4001ec <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD -> IE because variable is not defined in executable where
|
||||
# the variable is referenced through IE too
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 4001f4 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD -> LE with global variable defined in executable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 4001fc <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD -> LE with local variable defined in executable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 400204 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD -> LE with hidden variable defined in executable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 40020c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# LD -> LE
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+nop.*
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+nop.*
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a10
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 400218 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 40021c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
|
||||
# LD -> LE against hidden variables
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 400220 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 400224 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
|
||||
#
|
||||
# IE against global var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a2
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a3, 400228 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a3, a3, a2
|
||||
# IE -> LE against global var defined in exec
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a4
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a5, 40022c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a5, a5, a4
|
||||
# IE -> LE against local var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a6
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a7, 400230 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a7, a7, a6
|
||||
# IE -> LE against hidden var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a9, 400234 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a9, a9, a8
|
||||
#
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+retw.*
|
|
@ -0,0 +1,118 @@
|
|||
#source: tlsbin.s
|
||||
#as:
|
||||
#ld: -melf32xtensa
|
||||
#readelf: -WSsrl
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
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+ 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-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX +0 +0 +4
|
||||
+\[[ 0-9]+\] .got.loc +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +4
|
||||
+\[[ 0-9]+\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WAT +0 +0 +4
|
||||
+\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +4 +0 +4
|
||||
+\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +4
|
||||
+\[[ 0-9]+\] .xt.lit +PROGBITS +0+ .*
|
||||
+\[[ 0-9]+\] .xt.prop +PROGBITS +0+ .*
|
||||
+\[[ 0-9]+\] .xtensa.info +NOTE +0+ .*
|
||||
+\[[ 0-9]+\] .shstrtab +.*
|
||||
+\[[ 0-9]+\] .symtab +.*
|
||||
+\[[ 0-9]+\] .strtab +.*
|
||||
Key to Flags:
|
||||
.*
|
||||
.*
|
||||
.*
|
||||
|
||||
Elf file type is EXEC \(Executable file\)
|
||||
Entry point 0x[0-9a-f]+
|
||||
There are [0-9]+ program headers, starting at offset [0-9]+
|
||||
|
||||
Program Headers:
|
||||
+Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
|
||||
+PHDR.*
|
||||
+INTERP.*
|
||||
.*Requesting program interpreter.*
|
||||
+LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x1000
|
||||
+LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x1000
|
||||
+DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x4
|
||||
+TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
|
||||
|
||||
Section to Segment mapping:
|
||||
+Segment Sections...
|
||||
+00 *
|
||||
+01 +.interp *
|
||||
+02 +.interp .hash .dynsym .dynstr .rela.dyn .text .got.loc *
|
||||
+03 +.tdata .dynamic .got *
|
||||
+04 +.dynamic *
|
||||
+05 +.tdata *
|
||||
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 3 entries:
|
||||
+Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+ +sG1 \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+ +sG2 \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+ +sG2 \+ 0
|
||||
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
||||
+[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
|
||||
+[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
|
||||
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
|
||||
+[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
|
||||
+[0-9]+: 0+[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
|
||||
|
||||
Symbol table '\.symtab' contains [0-9]+ entries:
|
||||
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
||||
+[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl1
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl2
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl3
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl4
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl5
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl6
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl7
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +LOCAL +DEFAULT +8 sl8
|
||||
+[0-9]+: 0+ +0 +TLS +LOCAL +DEFAULT +8 _TLS_MODULE_BASE_
|
||||
+[0-9]+: [0-9a-f]+ +0 +OBJECT +LOCAL +DEFAULT +9 _DYNAMIC
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg8
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg3
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh3
|
||||
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG2
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg4
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg5
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh7
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh8
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg1
|
||||
+[0-9]+: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +6 _start
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh4
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh5
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg2
|
||||
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +UND sG1
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh1
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg6
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +DEFAULT +8 sg7
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh2
|
||||
+[0-9]+: [0-9a-f]+ +0 +TLS +GLOBAL +HIDDEN +8 sh6
|
|
@ -0,0 +1,98 @@
|
|||
.section ".tdata", "awT", @progbits
|
||||
.global sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
|
||||
.global sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.align 4
|
||||
sg1: .long 17
|
||||
sg2: .long 18
|
||||
sg3: .long 19
|
||||
sg4: .long 20
|
||||
sg5: .long 21
|
||||
sg6: .long 22
|
||||
sg7: .long 23
|
||||
sg8: .long 24
|
||||
sl1: .long 65
|
||||
sl2: .long 66
|
||||
sl3: .long 67
|
||||
sl4: .long 68
|
||||
sl5: .long 69
|
||||
sl6: .long 70
|
||||
sl7: .long 71
|
||||
sl8: .long 72
|
||||
sh1: .long 157
|
||||
sh2: .long 158
|
||||
sh3: .long 159
|
||||
sh4: .long 160
|
||||
sh5: .long 161
|
||||
sh6: .long 162
|
||||
sh7: .long 163
|
||||
sh8: .long 164
|
||||
|
||||
.text
|
||||
.global _start
|
||||
.type _start, @function
|
||||
_start:
|
||||
entry sp, 32
|
||||
|
||||
/* GD -> IE because variable is not defined in executable */
|
||||
movi a8, sG1@tlsfunc
|
||||
movi a10, sG1@tlsarg
|
||||
callx8.tls a8, sG1@tlscall
|
||||
|
||||
/* GD -> IE because variable is not defined in executable where
|
||||
the variable is referenced through IE too */
|
||||
movi a8, sG2@tlsfunc
|
||||
movi a10, sG2@tlsarg
|
||||
callx8.tls a8, sG2@tlscall
|
||||
|
||||
/* GD -> LE with global variable defined in executable */
|
||||
movi a8, sg1@tlsfunc
|
||||
movi a10, sg1@tlsarg
|
||||
callx8.tls a8, sg1@tlscall
|
||||
|
||||
/* GD -> LE with local variable defined in executable */
|
||||
movi a8, sl1@tlsfunc
|
||||
movi a10, sl1@tlsarg
|
||||
callx8.tls a8, sl1@tlscall
|
||||
|
||||
/* GD -> LE with hidden variable defined in executable */
|
||||
movi a8, sh1@tlsfunc
|
||||
movi a10, sh1@tlsarg
|
||||
callx8.tls a8, sh1@tlscall
|
||||
|
||||
/* LD -> LE */
|
||||
movi a8, _TLS_MODULE_BASE_@tlsfunc
|
||||
movi a10, _TLS_MODULE_BASE_@tlsarg
|
||||
callx8.tls a8, _TLS_MODULE_BASE_@tlscall
|
||||
movi a12, 1+sl1@dtpoff
|
||||
add a12, a12, a10
|
||||
movi a13, sl2@dtpoff+2
|
||||
add a13, a13, a10
|
||||
|
||||
/* LD -> LE against hidden variables */
|
||||
movi a12, sh1@dtpoff
|
||||
add a12, a12, a10
|
||||
movi a13, 3+sh2@dtpoff
|
||||
add a13, a13, a10
|
||||
|
||||
/* IE against global var */
|
||||
rur a2, THREADPTR
|
||||
movi a3, sG2@tpoff
|
||||
add a3, a3, a2
|
||||
|
||||
/* IE -> LE against global var defined in exec */
|
||||
rur a4, THREADPTR
|
||||
movi a5, sg1@tpoff
|
||||
add a5, a5, a4
|
||||
|
||||
/* IE -> LE against local var */
|
||||
rur a6, THREADPTR
|
||||
movi a7, sl1@tpoff
|
||||
add a7, a7, a6
|
||||
|
||||
/* IE -> LE against hidden var */
|
||||
rur a8, THREADPTR
|
||||
movi a9, sh1@tpoff
|
||||
add a9, a9, a8
|
||||
|
||||
retw
|
|
@ -0,0 +1,14 @@
|
|||
#source: tlsbin.s
|
||||
#as:
|
||||
#ld: -melf32xtensa
|
||||
#objdump: -sj.text --stop-address=0x400238
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
.*: +file format elf32-xtensa-.e
|
||||
|
||||
Contents of section .text:
|
||||
*[0-9a-f]+ 0+ 0+ 0+ 0+ .*
|
||||
*[0-9a-f]+ 0+ 0*080* 0+ 0*280* .*
|
||||
*[0-9a-f]+ 0+ 0*480* 0+ 0*080* .*
|
||||
*[0-9a-f]+ 0*290* 0*2e0* 0*480* 0*4f0* .*
|
||||
*[0-9a-f]+ 0+ 0*080* 0*280* 0*480* .*
|
|
@ -0,0 +1,14 @@
|
|||
#source: tlsbin.s
|
||||
#ld: -melf32xtensa
|
||||
#objdump: -sj.tdata
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
.*: +file format elf32-xtensa-.e
|
||||
|
||||
Contents of section .tdata:
|
||||
*[0-9a-f]+ 0*110* 0*120* 0*130* 0*140* .*
|
||||
*[0-9a-f]+ 0*150* 0*160* 0*170* 0*180* .*
|
||||
*[0-9a-f]+ 0*410* 0*420* 0*430* 0*440* .*
|
||||
*[0-9a-f]+ 0*450* 0*460* 0*470* 0*480* .*
|
||||
*[0-9a-f]+ 0*9d0* 0*9e0* 0*9f0* 0*a00* .*
|
||||
*[0-9a-f]+ 0*a10* 0*a20* 0*a30* 0*a40* .*
|
|
@ -0,0 +1,18 @@
|
|||
.section ".tdata", "awT", @progbits
|
||||
.global sG1, sG2, sG3, sG4, sG5, sG6, sG7, sG8
|
||||
sG1: .long 513
|
||||
sG2: .long 514
|
||||
sG3: .long 515
|
||||
sG4: .long 516
|
||||
sG5: .long 517
|
||||
sG6: .long 518
|
||||
sG7: .long 519
|
||||
sG8: .long 520
|
||||
|
||||
.text
|
||||
/* Dummy. */
|
||||
.global __tls_get_addr
|
||||
.type __tls_get_addr, @function
|
||||
__tls_get_addr:
|
||||
entry sp, 16
|
||||
retw
|
|
@ -0,0 +1,81 @@
|
|||
#source: tlspic1.s
|
||||
#source: tlspic2.s
|
||||
#as:
|
||||
#ld: -shared -melf32xtensa
|
||||
#objdump: -drj.text --start-address=0x350
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
.*: +file format elf32-xtensa-.e
|
||||
|
||||
Disassembly of section \.text:
|
||||
|
||||
0+350 <_start>:
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+entry a1, 32
|
||||
# GD
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 2e0 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2e4 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
|
||||
# GD -> IE because variable is referenced through IE too
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2ec <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD against local variable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 2f0 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2f4 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
|
||||
# GD -> IE against local variable referenced through IE too
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 2fc <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD against hidden and local variable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 300 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 304 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
|
||||
# GD -> IE against hidden and local variable referenced through IE too
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 30c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# GD against hidden but not local variable
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 310 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 314 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
|
||||
# GD -> IE against hidden but not local variable referenced through IE too
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 31c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a10, a10, a8
|
||||
# LD
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a8, 320 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a10, 324 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+callx8 a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 328 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 32c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
|
||||
# LD against hidden and local variables
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 330 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 334 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
|
||||
# LD against hidden but not local variables
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a12, 338 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a12, a12, a10
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a13, 33c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a13, a13, a10
|
||||
# IE against global var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a2
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a3, 340 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a3, a3, a2
|
||||
# IE against local var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a4
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a5, 344 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a5, a5, a4
|
||||
# IE against hidden and local var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a6
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a7, 348 <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a7, a7, a6
|
||||
# IE against hidden but not local var
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+rur.threadptr a8
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+l32r a9, 34c <.*>
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+add.* a9, a9, a8
|
||||
#
|
||||
[0-9a-f]+: [0-9a-f]+[ ]+retw.*
|
|
@ -0,0 +1,142 @@
|
|||
#source: tlspic1.s
|
||||
#source: tlspic2.s
|
||||
#as:
|
||||
#ld: -shared -melf32xtensa
|
||||
#readelf: -WSsrl
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
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+ 00 +0 +0 +0
|
||||
+\[[ 0-9]+\] .hash +.*
|
||||
+\[[ 0-9]+\] .dynsym +.*
|
||||
+\[[ 0-9]+\] .dynstr +.*
|
||||
+\[[ 0-9]+\] .rela.dyn +.*
|
||||
+\[[ 0-9]+\] .text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX +0 +0 +4
|
||||
+\[[ 0-9]+\] .got.loc +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +4
|
||||
+\[[ 0-9]+\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WAT +0 +0 +4
|
||||
+\[[ 0-9]+\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WAT +0 +0 +4
|
||||
+\[[ 0-9]+\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +3 +0 +4
|
||||
+\[[ 0-9]+\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +4
|
||||
+\[[ 0-9]+\] .xt.lit +PROGBITS +0+ .*
|
||||
+\[[ 0-9]+\] .xt.prop +PROGBITS +0+ .*
|
||||
+\[[ 0-9]+\] .xtensa.info +NOTE +0+ .*
|
||||
+\[[ 0-9]+\] .shstrtab +.*
|
||||
+\[[ 0-9]+\] .symtab +.*
|
||||
+\[[ 0-9]+\] .strtab +.*
|
||||
Key to Flags:
|
||||
.*
|
||||
.*
|
||||
.*
|
||||
|
||||
Elf file type is DYN \(Shared object file\)
|
||||
Entry point 0x[0-9a-f]+
|
||||
There are [0-9]+ program headers, starting at offset [0-9]+
|
||||
|
||||
Program Headers:
|
||||
+Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
|
||||
+LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x1000
|
||||
+LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x1000
|
||||
+DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x4
|
||||
+TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
|
||||
|
||||
Section to Segment mapping:
|
||||
+Segment Sections...
|
||||
+00 +.hash .dynsym .dynstr .rela.dyn .text .got.loc *
|
||||
+01 +.tdata .dynamic .got *
|
||||
+02 +.dynamic *
|
||||
+03 +.tdata .tbss *
|
||||
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
|
||||
+Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+ +sg1 \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+ +sg1 \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+4 +sg2 \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+4 +sg2 \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+20
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+20
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+24
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+40
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+40
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+44
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+60
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+60
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+64
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_FN +0+
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLSDESC_ARG +0+
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+24
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+44
|
||||
[0-9a-f]+ +[0-9a-f]+ R_XTENSA_TLS_TPOFF +0+64
|
||||
|
||||
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
||||
+[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
|
||||
+[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
|
||||
+[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
|
||||
+[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
|
||||
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
|
||||
+[0-9]+: 0+350 +0 +FUNC +GLOBAL +DEFAULT +5 _start
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
|
||||
+[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
|
||||
+[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
|
||||
+[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
|
||||
|
||||
Symbol table '\.symtab' contains [0-9]+ entries:
|
||||
+Num: +Value +Size +Type +Bind +Vis +Ndx +Name
|
||||
+[0-9]+: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +1 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +2 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +3 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +4 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +6 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +7 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +8 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +9 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +10 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +11 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +12 *
|
||||
+[0-9]+: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +13 *
|
||||
+[0-9]+: 0+20 +0 +TLS +LOCAL +DEFAULT +7 sl1
|
||||
+[0-9]+: 0+24 +0 +TLS +LOCAL +DEFAULT +7 sl2
|
||||
+[0-9]+: 0+28 +0 +TLS +LOCAL +DEFAULT +7 sl3
|
||||
+[0-9]+: 0+2c +0 +TLS +LOCAL +DEFAULT +7 sl4
|
||||
+[0-9]+: 0+30 +0 +TLS +LOCAL +DEFAULT +7 sl5
|
||||
+[0-9]+: 0+34 +0 +TLS +LOCAL +DEFAULT +7 sl6
|
||||
+[0-9]+: 0+38 +0 +TLS +LOCAL +DEFAULT +7 sl7
|
||||
+[0-9]+: 0+3c +0 +TLS +LOCAL +DEFAULT +7 sl8
|
||||
+[0-9]+: 0+60 +0 +TLS +LOCAL +DEFAULT +8 sH1
|
||||
+[0-9]+: 0+ +0 +TLS +LOCAL +DEFAULT +7 _TLS_MODULE_BASE_
|
||||
+[0-9]+: 0+144c +0 +OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
|
||||
+[0-9]+: 0+48 +0 +TLS +LOCAL +DEFAULT +7 sh3
|
||||
+[0-9]+: 0+64 +0 +TLS +LOCAL +DEFAULT +8 sH2
|
||||
+[0-9]+: 0+78 +0 +TLS +LOCAL +DEFAULT +8 sH7
|
||||
+[0-9]+: 0+58 +0 +TLS +LOCAL +DEFAULT +7 sh7
|
||||
+[0-9]+: 0+5c +0 +TLS +LOCAL +DEFAULT +7 sh8
|
||||
+[0-9]+: 0+6c +0 +TLS +LOCAL +DEFAULT +8 sH4
|
||||
+[0-9]+: 0+4c +0 +TLS +LOCAL +DEFAULT +7 sh4
|
||||
+[0-9]+: 0+68 +0 +TLS +LOCAL +DEFAULT +8 sH3
|
||||
+[0-9]+: 0+50 +0 +TLS +LOCAL +DEFAULT +7 sh5
|
||||
+[0-9]+: 0+70 +0 +TLS +LOCAL +DEFAULT +8 sH5
|
||||
+[0-9]+: 0+74 +0 +TLS +LOCAL +DEFAULT +8 sH6
|
||||
+[0-9]+: 0+7c +0 +TLS +LOCAL +DEFAULT +8 sH8
|
||||
+[0-9]+: 0+40 +0 +TLS +LOCAL +DEFAULT +7 sh1
|
||||
+[0-9]+: 0+44 +0 +TLS +LOCAL +DEFAULT +7 sh2
|
||||
+[0-9]+: 0+54 +0 +TLS +LOCAL +DEFAULT +7 sh6
|
||||
+[0-9]+: 0+1c +0 +TLS +GLOBAL +DEFAULT +7 sg8
|
||||
+[0-9]+: 0+8 +0 +TLS +GLOBAL +DEFAULT +7 sg3
|
||||
+[0-9]+: 0+c +0 +TLS +GLOBAL +DEFAULT +7 sg4
|
||||
+[0-9]+: 0+10 +0 +TLS +GLOBAL +DEFAULT +7 sg5
|
||||
+[0-9]+: 0+ +0 +TLS +GLOBAL +DEFAULT +7 sg1
|
||||
+[0-9]+: 0+350 +0 +FUNC +GLOBAL +DEFAULT +5 _start
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS __bss_start
|
||||
+[0-9]+: 0+4 +0 +TLS +GLOBAL +DEFAULT +7 sg2
|
||||
+[0-9]+: 0+14 +0 +TLS +GLOBAL +DEFAULT +7 sg6
|
||||
+[0-9]+: 0+18 +0 +TLS +GLOBAL +DEFAULT +7 sg7
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _edata
|
||||
+[0-9]+: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +ABS _end
|
|
@ -0,0 +1,17 @@
|
|||
#source: tlspic1.s
|
||||
#source: tlspic2.s
|
||||
#as:
|
||||
#ld: -shared -melf32xtensa
|
||||
#objdump: -sj.text --stop-address=0x350
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
.*: +file format elf32-xtensa-.e
|
||||
|
||||
Contents of section .text:
|
||||
0+2e0 0+ 0+ 0+ 0+ .*
|
||||
0+2f0 0+ 0+ 0+ 0+ .*
|
||||
0+300 0+ 0+ 0+ 0+ .*
|
||||
0+310 0+ 0+ 0+ 0+ .*
|
||||
0+320 0+ 0+ 0*200* 0*260* .*
|
||||
0+330 0*400* 0*470* 0*600* 0*650* .*
|
||||
0+340 0+ 0+ 0+ 0+ .*
|
|
@ -0,0 +1,16 @@
|
|||
#source: tlspic1.s
|
||||
#source: tlspic2.s
|
||||
#as:
|
||||
#ld: -shared -melf32xtensa
|
||||
#objdump: -sj.tdata
|
||||
#target: xtensa*-*-linux*
|
||||
|
||||
.*: +file format elf32-xtensa-.e
|
||||
|
||||
Contents of section .tdata:
|
||||
*[0-9a-f]+ 0*110* 0*120* 0*130* 0*140* .*
|
||||
*[0-9a-f]+ 0*150* 0*160* 0*170* 0*180* .*
|
||||
*[0-9a-f]+ 0*410* 0*420* 0*430* 0*440* .*
|
||||
*[0-9a-f]+ 0*450* 0*460* 0*470* 0*480* .*
|
||||
*[0-9a-f]+ 0*9d0* 0*9e0* 0*9f0* 0*a00* .*
|
||||
*[0-9a-f]+ 0*a10* 0*a20* 0*a30* 0*a40* .*
|
|
@ -0,0 +1,120 @@
|
|||
.section ".tdata", "awT", @progbits
|
||||
.global sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
|
||||
.global sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
|
||||
.align 4
|
||||
sg1: .long 17
|
||||
sg2: .long 18
|
||||
sg3: .long 19
|
||||
sg4: .long 20
|
||||
sg5: .long 21
|
||||
sg6: .long 22
|
||||
sg7: .long 23
|
||||
sg8: .long 24
|
||||
sl1: .long 65
|
||||
sl2: .long 66
|
||||
sl3: .long 67
|
||||
sl4: .long 68
|
||||
sl5: .long 69
|
||||
sl6: .long 70
|
||||
sl7: .long 71
|
||||
sl8: .long 72
|
||||
sh1: .long 157
|
||||
sh2: .long 158
|
||||
sh3: .long 159
|
||||
sh4: .long 160
|
||||
sh5: .long 161
|
||||
sh6: .long 162
|
||||
sh7: .long 163
|
||||
sh8: .long 164
|
||||
|
||||
.text
|
||||
.global _start
|
||||
.type _start, @function
|
||||
_start:
|
||||
entry sp, 32
|
||||
|
||||
/* GD */
|
||||
movi a8, sg1@tlsfunc
|
||||
movi a10, sg1@tlsarg
|
||||
callx8.tls a8, sg1@tlscall
|
||||
|
||||
/* GD -> IE because variable is referenced through IE too */
|
||||
movi a8, sg2@tlsfunc
|
||||
movi a10, sg2@tlsarg
|
||||
callx8.tls a8, sg2@tlscall
|
||||
|
||||
/* GD against local variable */
|
||||
movi a8, sl1@tlsfunc
|
||||
movi a10, sl1@tlsarg
|
||||
callx8.tls a8, sl1@tlscall
|
||||
|
||||
/* GD -> IE against local variable referenced through IE too */
|
||||
movi a8, sl2@tlsfunc
|
||||
movi a10, sl2@tlsarg
|
||||
callx8.tls a8, sl2@tlscall
|
||||
|
||||
/* GD against hidden and local variable */
|
||||
movi a8, sh1@tlsfunc
|
||||
movi a10, sh1@tlsarg
|
||||
callx8.tls a8, sh1@tlscall
|
||||
|
||||
/* GD -> IE against hidden and local variable referenced through
|
||||
IE too */
|
||||
movi a8, sh2@tlsfunc
|
||||
movi a10, sh2@tlsarg
|
||||
callx8.tls a8, sh2@tlscall
|
||||
|
||||
/* GD against hidden but not local variable */
|
||||
movi a8, sH1@tlsfunc
|
||||
movi a10, sH1@tlsarg
|
||||
callx8.tls a8, sH1@tlscall
|
||||
|
||||
/* GD -> IE against hidden but not local variable referenced through
|
||||
IE too */
|
||||
movi a8, sH2@tlsfunc
|
||||
movi a10, sH2@tlsarg
|
||||
callx8.tls a8, sH2@tlscall
|
||||
|
||||
/* LD */
|
||||
movi a8, _TLS_MODULE_BASE_@tlsfunc
|
||||
movi a10, _TLS_MODULE_BASE_@tlsarg
|
||||
callx8.tls a8, _TLS_MODULE_BASE_@tlscall
|
||||
movi a12, sl1@dtpoff
|
||||
add a12, a12, a10
|
||||
movi a13, 2+sl2@dtpoff
|
||||
add a13, a13, a10
|
||||
|
||||
/* LD against hidden and local variables */
|
||||
movi a12, sh1@dtpoff
|
||||
add a12, a12, a10
|
||||
movi a13, sh2@dtpoff+3
|
||||
add a13, a13, a10
|
||||
|
||||
/* LD against hidden but not local variables */
|
||||
movi a12, sH1@dtpoff
|
||||
add a12, a12, a10
|
||||
movi a13, sH2@dtpoff+1
|
||||
add a13, a13, a10
|
||||
|
||||
/* IE against global var */
|
||||
rur a2, THREADPTR
|
||||
movi a3, sg2@tpoff
|
||||
add a3, a3, a2
|
||||
|
||||
/* IE against local var */
|
||||
rur a4, THREADPTR
|
||||
movi a5, sl2@tpoff
|
||||
add a5, a5, a4
|
||||
|
||||
/* IE against hidden and local var */
|
||||
rur a6, THREADPTR
|
||||
movi a7, sh2@tpoff
|
||||
add a7, a7, a6
|
||||
|
||||
/* IE against hidden but not local var */
|
||||
rur a8, THREADPTR
|
||||
movi a9, sH2@tpoff
|
||||
add a9, a9, a8
|
||||
|
||||
retw
|
|
@ -0,0 +1,12 @@
|
|||
.section ".tbss", "awT", @nobits
|
||||
.global sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
|
||||
.hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
|
||||
.align 4
|
||||
sH1: .space 4
|
||||
sH2: .space 4
|
||||
sH3: .space 4
|
||||
sH4: .space 4
|
||||
sH5: .space 4
|
||||
sH6: .space 4
|
||||
sH7: .space 4
|
||||
sH8: .space 4
|
|
@ -0,0 +1,54 @@
|
|||
# Expect script for ld-xtensa tests
|
||||
# Copyright (C) 2008-2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
if { !([istarget "xtensa*-*-linux*"]) } {
|
||||
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 xtensatests {
|
||||
{"TLS -shared transitions"
|
||||
"-shared -melf32xtensa" "" "" {tlspic1.s tlspic2.s}
|
||||
{{readelf -WSsrl tlspic.rd}
|
||||
{objdump "-drj.text --start-address=0x350" tlspic.dd}
|
||||
{objdump "-sj.text --stop-address=0x350" tlspic.sd}
|
||||
{objdump -sj.tdata tlspic.td}}
|
||||
"libtlspic.so"}
|
||||
{"Helper shared library" "-shared -melf32xtensa" ""
|
||||
"" {tlslib.s} {} "libtlslib.so"}
|
||||
{"TLS exec transitions"
|
||||
"-melf32xtensa tmpdir/libtlslib.so" "" "" {tlsbin.s}
|
||||
{{readelf -WSsrl tlsbin.rd}
|
||||
{objdump "-drj.text --start-address=0x400238" tlsbin.dd}
|
||||
{objdump "-sj.text --stop-address=0x400238" tlsbin.sd}
|
||||
{objdump -sj.tdata tlsbin.td}}
|
||||
"tlsbin"}
|
||||
}
|
||||
|
||||
run_ld_link_tests $xtensatests
|
Loading…
Add table
Add a link
Reference in a new issue