OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/gnu-old/binutils-2.18.50/ld/testsuite/ld-x86-64
    from Rev 156 to Rev 816
    Reverse comparison

Rev 156 → Rev 816

/tlspic1.s
0,0 → 1,187
/* Force .data aligned to 4K, so .got very likely gets at 0x102190
(0x60 bytes .tdata and 0x130 bytes .dynamic) */
.data
.balign 4096
.section ".tdata", "awT", @progbits
.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: .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 257
sh2: .long 258
sh3: .long 259
sh4: .long 260
sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
/* Force .text aligned to 4K, so it very likely gets at 0x1000. */
.text
.balign 4096
.globl fn1
.type fn1,@function
fn1:
pushq %rbp
movq %rsp, %rbp
nop;nop;nop;nop
 
/* GD */
.byte 0x66
leaq sg1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE because variable is referenced through IE too */
.byte 0x66
leaq sg2@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD against local variable */
.byte 0x66
leaq sl1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE against local variable referenced through IE too */
.byte 0x66
leaq sl2@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD against hidden and local variable */
.byte 0x66
leaq sh1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE against hidden and local variable referenced through
IE too */
.byte 0x66
leaq sh2@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD against hidden but not local variable */
.byte 0x66
leaq sH1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE against hidden but not local variable referenced through
IE too */
.byte 0x66
leaq sH2@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* LD */
leaq sl1@tlsld(%rip), %rdi
call __tls_get_addr@plt
nop;nop
leaq sl1@dtpoff(%rax), %rdx
nop;nop
leaq 2+sl2@dtpoff(%rax), %r9
nop;nop;nop;nop
 
/* LD against hidden and local variables */
leaq sh1@tlsld(%rip), %rdi
call __tls_get_addr@plt
nop;nop
leaq sh1@dtpoff(%rax), %rdx
nop;nop
leaq sh2@dtpoff+3(%rax), %rcx
nop;nop;nop;nop
 
/* LD against hidden but not local variables */
leaq sH1@tlsld(%rip), %rdi
call __tls_get_addr@plt
nop;nop
leaq sH1@dtpoff(%rax), %r12
nop;nop
leaq sH2@dtpoff+1(%rax), %rcx
nop;nop
 
/* IE against global var */
movq %fs:0, %rcx
nop;nop
addq sg2@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* IE against local var */
movq %fs:0, %r14
nop;nop
addq sl2@gottpoff(%rip), %r14
nop;nop;nop;nop
 
/* IE against hidden and local var */
movq %fs:0, %rcx
nop;nop
addq sh2@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* IE against hidden but not local var */
movq %fs:0, %rcx
nop;nop
addq sH2@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* Direct access through %fs */
 
/* IE against global var */
movq sg5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
 
/* IE against local var */
movq sl5@gottpoff(%rip), %r10
nop;nop
movq %fs:(%r10), %r12
nop;nop;nop;nop
 
/* IE against hidden and local var */
movq sh5@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rdx
nop;nop;nop;nop
 
/* IE against hidden but not local var */
movq sH5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
 
leave
ret
/tlsbin.dd
0,0 → 1,310
#source: tlsbinpic.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drj.text
#target: x86_64-*-*
 
# PT_TLS layout is:
# Offset from Offset from Name
# TCB base TCB end
# 0x00 -0xa0 sg1..sg8
# 0x20 -0x80 sl1..sl8
# 0x40 -0x60 sh1..sh8
# 0x60 -0x40 bg1..bg8
# 0x80 -0x20 bl1..bl8
 
.*: +file format elf64-x86-64
 
Disassembly of section .text:
 
0+401000 <fn2>:
401000: 55[ ]+push %rbp
401001: 48 89 e5[ ]+mov %rsp,%rbp
# GD -> IE because variable is not defined in executable
401004: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
40100b: 00 00 *
40100d: 48 03 05 d4 03 20 00[ ]+add 0x2003d4\(%rip\),%rax +# 6013e8 <.*>
# -> R_X86_64_TPOFF64 sG1
401014: 90[ ]+nop *
401015: 90[ ]+nop *
401016: 90[ ]+nop *
401017: 90[ ]+nop *
# GD -> IE because variable is not defined in executable where
# the variable is referenced through IE too
401018: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
40101f: 00 00 *
401021: 48 03 05 b0 03 20 00[ ]+add 0x2003b0\(%rip\),%rax +# 6013d8 <.*>
# -> R_X86_64_TPOFF64 sG2
401028: 90[ ]+nop *
401029: 90[ ]+nop *
40102a: 90[ ]+nop *
40102b: 90[ ]+nop *
# GD -> LE with global variable defined in executable
40102c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
401033: 00 00 *
401035: 48 8d 80 60 ff ff ff[ ]+lea -0xa0\(%rax\),%rax
# sg1
40103c: 90[ ]+nop *
40103d: 90[ ]+nop *
40103e: 90[ ]+nop *
40103f: 90[ ]+nop *
# GD -> LE with local variable defined in executable
401040: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
401047: 00 00 *
401049: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
# sl1
401050: 90[ ]+nop *
401051: 90[ ]+nop *
401052: 90[ ]+nop *
401053: 90[ ]+nop *
# GD -> LE with hidden variable defined in executable
401054: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
40105b: 00 00 *
40105d: 48 8d 80 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rax
# sh1
401064: 90[ ]+nop *
401065: 90[ ]+nop *
401066: 90[ ]+nop *
401067: 90[ ]+nop *
# LD -> LE
401068: 66 66 66 64 48 8b 04[ ]+mov %fs:0x0,%rax
40106f: 25 00 00 00 00 *
401074: 90[ ]+nop *
401075: 90[ ]+nop *
401076: 48 8d 90 81 ff ff ff[ ]+lea -0x7f\(%rax\),%rdx
# sl1+1
40107d: 90[ ]+nop *
40107e: 90[ ]+nop *
40107f: 4c 8d 88 86 ff ff ff[ ]+lea -0x7a\(%rax\),%r9
# sl2+2
401086: 90[ ]+nop *
401087: 90[ ]+nop *
401088: 90[ ]+nop *
401089: 90[ ]+nop *
# LD -> LE against hidden variables
40108a: 66 66 66 64 48 8b 04[ ]+mov %fs:0x0,%rax
401091: 25 00 00 00 00 *
401096: 90[ ]+nop *
401097: 90[ ]+nop *
401098: 48 8d 90 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rdx
# sh1
40109f: 90[ ]+nop *
4010a0: 90[ ]+nop *
4010a1: 48 8d 88 a7 ff ff ff[ ]+lea -0x59\(%rax\),%rcx
# sh2+3
4010a8: 90[ ]+nop *
4010a9: 90[ ]+nop *
4010aa: 90[ ]+nop *
4010ab: 90[ ]+nop *
# IE against global var
4010ac: 64 4c 8b 0c 25 00 00[ ]+mov %fs:0x0,%r9
4010b3: 00 00 *
4010b5: 90[ ]+nop *
4010b6: 90[ ]+nop *
4010b7: 4c 03 0d 1a 03 20 00[ ]+add 0x20031a\(%rip\),%r9 +# 6013d8 <.*>
# -> R_X86_64_TPOFF64 sG2
4010be: 90[ ]+nop *
4010bf: 90[ ]+nop *
4010c0: 90[ ]+nop *
4010c1: 90[ ]+nop *
# IE -> LE against global var defined in exec
4010c2: 64 4c 8b 14 25 00 00[ ]+mov %fs:0x0,%r10
4010c9: 00 00 *
4010cb: 90[ ]+nop *
4010cc: 90[ ]+nop *
4010cd: 4d 8d 92 60 ff ff ff[ ]+lea -0xa0\(%r10\),%r10
# sg1
4010d4: 90[ ]+nop *
4010d5: 90[ ]+nop *
4010d6: 90[ ]+nop *
4010d7: 90[ ]+nop *
# IE -> LE against local var
4010d8: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
4010df: 00 00 *
4010e1: 90[ ]+nop *
4010e2: 90[ ]+nop *
4010e3: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
# sl1
4010ea: 90[ ]+nop *
4010eb: 90[ ]+nop *
4010ec: 90[ ]+nop *
4010ed: 90[ ]+nop *
# IE -> LE against hidden var
4010ee: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
4010f5: 00 00 *
4010f7: 90[ ]+nop *
4010f8: 90[ ]+nop *
4010f9: 48 8d 89 a0 ff ff ff[ ]+lea -0x60\(%rcx\),%rcx
# sh1
401100: 90[ ]+nop *
401101: 90[ ]+nop *
401102: 90[ ]+nop *
401103: 90[ ]+nop *
# Direct access through %fs
# IE against global var
401104: 48 8b 0d c5 02 20 00[ ]+mov 0x2002c5\(%rip\),%rcx +# 6013d0 <.*>
# -> R_X86_64_TPOFF64 sG5
40110b: 90[ ]+nop *
40110c: 90[ ]+nop *
40110d: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
401111: 90[ ]+nop *
401112: 90[ ]+nop *
401113: 90[ ]+nop *
401114: 90[ ]+nop *
# IE->LE against local var
401115: 49 c7 c3 90 ff ff ff[ ]+mov \$0xf+90,%r11
# sl5
40111c: 90[ ]+nop *
40111d: 90[ ]+nop *
40111e: 64 4d 8b 23[ ]+mov %fs:\(%r11\),%r12
401122: 90[ ]+nop *
401123: 90[ ]+nop *
401124: 90[ ]+nop *
401125: 90[ ]+nop *
# IE->LE against hidden var
401126: 48 c7 c2 b0 ff ff ff[ ]+mov \$0xf+b0,%rdx
40112d: 90[ ]+nop *
40112e: 90[ ]+nop *
40112f: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
# sh5
401133: 90[ ]+nop *
401134: 90[ ]+nop *
401135: 90[ ]+nop *
401136: 90[ ]+nop *
401137: c9[ ]+leaveq *
401138: c3[ ]+retq *
401139: 90[ ]+nop *
40113a: 90[ ]+nop *
40113b: 90[ ]+nop *
 
0+40113c <_start>:
40113c: 55[ ]+push %rbp
40113d: 48 89 e5[ ]+mov %rsp,%rbp
# IE against global var
401140: 64 4c 8b 1c 25 00 00[ ]+mov %fs:0x0,%r11
401147: 00 00 *
401149: 90[ ]+nop *
40114a: 90[ ]+nop *
40114b: 4c 03 1d 8e 02 20 00[ ]+add 0x20028e\(%rip\),%r11 +# 6013e0 <.*>
# -> R_X86_64_TPOFF64 sG6
401152: 90[ ]+nop *
401153: 90[ ]+nop *
401154: 90[ ]+nop *
401155: 90[ ]+nop *
# IE -> LE against global var defined in exec
401156: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
40115d: 00 00 *
40115f: 90[ ]+nop *
401160: 90[ ]+nop *
401161: 48 8d 92 d4 ff ff ff[ ]+lea -0x2c\(%rdx\),%rdx
# bg6
401168: 90[ ]+nop *
401169: 90[ ]+nop *
40116a: 90[ ]+nop *
40116b: 90[ ]+nop *
# IE -> LE against local var
40116c: 64 4c 8b 24 25 00 00[ ]+mov %fs:0x0,%r12
401173: 00 00 *
401175: 90[ ]+nop *
401176: 90[ ]+nop *
401177: 49 81 c4 f4 ff ff ff[ ]+add \$0xf+f4,%r12
# bl6
40117e: 90[ ]+nop *
40117f: 90[ ]+nop *
401180: 90[ ]+nop *
401181: 90[ ]+nop *
# direct %fs access IE -> LE against local var
401182: 48 c7 c2 fc ff ff ff[ ]+mov \$0xf+fc,%rdx
# bl8
401189: 90[ ]+nop *
40118a: 90[ ]+nop *
40118b: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
40118f: 90[ ]+nop *
401190: 90[ ]+nop *
401191: 90[ ]+nop *
401192: 90[ ]+nop *
# IE -> LE against hidden but not local var
401193: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
40119a: 00 00 *
40119c: 90[ ]+nop *
40119d: 90[ ]+nop *
40119e: 48 8d 92 b4 ff ff ff[ ]+lea -0x4c\(%rdx\),%rdx
# sh6
4011a5: 90[ ]+nop *
4011a6: 90[ ]+nop *
4011a7: 90[ ]+nop *
4011a8: 90[ ]+nop *
# direct %fs access IE -> LE against hidden but not local var
4011a9: 48 c7 c2 bc ff ff ff[ ]+mov \$0xf+bc,%rdx
# sh8
4011b0: 90[ ]+nop *
4011b1: 90[ ]+nop *
4011b2: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
4011b6: 90[ ]+nop *
4011b7: 90[ ]+nop *
4011b8: 90[ ]+nop *
4011b9: 90[ ]+nop *
# LE, global var defined in exec
4011ba: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
4011c1: 00 00 *
4011c3: 90[ ]+nop *
4011c4: 90[ ]+nop *
4011c5: 48 8d 90 64 ff ff ff[ ]+lea -0x9c\(%rax\),%rdx
# sg2
4011cc: 90[ ]+nop *
4011cd: 90[ ]+nop *
4011ce: 90[ ]+nop *
4011cf: 90[ ]+nop *
# LE, local var, non-canonical sequence
4011d0: 49 c7 c1 e6 ff ff ff[ ]+mov \$0xf+e6,%r9
# bl2+2
4011d7: 90[ ]+nop *
4011d8: 90[ ]+nop *
4011d9: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
4011e0: 00 00 *
4011e2: 90[ ]+nop *
4011e3: 90[ ]+nop *
4011e4: 4c 01 ca[ ]+add %r9,%rdx
4011e7: 90[ ]+nop *
4011e8: 90[ ]+nop *
4011e9: 90[ ]+nop *
4011ea: 90[ ]+nop *
# LE, hidden var defined in exec, non-canonical sequence
4011eb: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
4011f2: 00 00 *
4011f4: 90[ ]+nop *
4011f5: 90[ ]+nop *
4011f6: 48 81 c2 a5 ff ff ff[ ]+add \$0xf+a5,%rdx
# sh2+1
4011fd: 90[ ]+nop *
4011fe: 90[ ]+nop *
4011ff: 90[ ]+nop *
401200: 90[ ]+nop *
# Direct %fs access
# LE, global var defined in exec
401201: 64 48 8b 04 25 68 ff[ ]+mov %fs:0xf+68,%rax
401208: ff ff *
# sg3
40120a: 90[ ]+nop *
40120b: 90[ ]+nop *
40120c: 90[ ]+nop *
40120d: 90[ ]+nop *
# LE, local var
40120e: 64 4c 8b 14 25 eb ff[ ]+mov %fs:0xf+eb,%r10
401215: ff ff *
# bl3+3
401217: 90[ ]+nop *
401218: 90[ ]+nop *
401219: 90[ ]+nop *
40121a: 90[ ]+nop *
# LE, hidden var defined in exec
40121b: 64 48 8b 14 25 a9 ff[ ]+mov %fs:0xf+a9,%rdx
401222: ff ff *
# sh3+1
401224: 90[ ]+nop *
401225: 90[ ]+nop *
401226: 90[ ]+nop *
401227: 90[ ]+nop *
401228: c9[ ]+leaveq *
401229: c3[ ]+retq *
/tlsgd2.d
0,0 → 1,4
#name: TLS GD->IE transition check
#as: --64
#ld: -melf_x86_64
#error: .*TLS transition from R_X86_64_TLSGD to R_X86_64_GOTTPOFF against `foo'.*failed.*
/tlspic2.s
0,0 → 1,11
.section ".tbss", "awT", @nobits
.globl sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
.hidden sH1, sH2, sH3, sH4, sH5, sH6, sH7, sH8
sH1: .space 4
sH2: .space 4
sH3: .space 4
sH4: .space 4
sH5: .space 4
sH6: .space 4
sH7: .space 4
sH8: .space 4
/tlsgd3.d
0,0 → 1,4
#name: TLS GD->LE transition check
#as: --64
#ld: -melf_x86_64
#error: .*TLS transition from R_X86_64_TLSGD to R_X86_64_TPOFF32 against `a local symbol'.*failed.*
/tlsgd1.dd
0,0 → 1,14
#source: tlsgd1.s
#as: --64
#ld: -melf_x86_64 tmpdir/tlsgd1
#objdump: -drw
#target: x86_64-*-linux*
 
.*: +file format .*
 
Disassembly of section .text:
 
[a-f0-9]+ <_start>:
[ ]*[a-f0-9]+: 64 48 8b 04 25 00 00 00 00 mov %fs:0x0,%rax
[ ]*[a-f0-9]+: 48 8d 80 fc ff ff ff lea -0x4\(%rax\),%rax
#pass
/tlsdesc.dd
0,0 → 1,200
#source: tlsdesc.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drj.text
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Disassembly of section .text:
 
0+[0-9a-f]+ <fn1>:
+[0-9a-f]+: 55[ ]+push %rbp
+[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD
+[0-9a-f]+: 48 8d 05 89 03 20 00[ ]+lea 0x200389\(%rip\),%rax +# 201398 <.*>
# -> R_X86_64_TLSDESC sg1
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is referenced through IE too
+[0-9a-f]+: 48 8b 05 1c 03 20 00[ ]+mov 0x20031c\(%rip\),%rax +# 201338 <.*>
# -> R_X86_64_TPOFF64 sg2
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD against local variable
+[0-9a-f]+: 48 8d 05 3f 03 20 00[ ]+lea 0x20033f\(%rip\),%rax +# 201368 <.*>
# -> R_X86_64_TLSDESC [0 0x2000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE against local variable referenced through IE too
+[0-9a-f]+: 48 8b 05 d2 02 20 00[ ]+mov 0x2002d2\(%rip\),%rax +# 201308 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD against hidden and local variable
+[0-9a-f]+: 48 8d 05 65 03 20 00[ ]+lea 0x200365\(%rip\),%rax +# 2013a8 <.*>
# -> R_X86_64_TLSDESC [0 0x4000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE against hidden and local variable referenced through IE too
+[0-9a-f]+: 48 8b 05 f0 02 20 00[ ]+mov 0x2002f0\(%rip\),%rax +# 201340 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD against hidden but not local variable
+[0-9a-f]+: 48 8d 05 1b 03 20 00[ ]+lea 0x20031b\(%rip\),%rax +# 201378 <.*>
# -> R_X86_64_TLSDESC [0 0x6000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE against hidden but not local variable referenced through IE too
+[0-9a-f]+: 48 8b 05 ae 02 20 00[ ]+mov 0x2002ae\(%rip\),%rax +# 201318 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# LD
+[0-9a-f]+: 48 8d 05 11 03 20 00[ ]+lea 0x200311\(%rip\),%rax +# 201388 <.*>
# -> R_X86_64_TLSDESC [0 0x000000000000000]
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8d 90 20 00 00 00[ ]+lea 0x20\(%rax\),%rdx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 4c 8d 88 26 00 00 00[ ]+lea 0x26\(%rax\),%r9
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# LD against hidden and local variables
+[0-9a-f]+: 48 8d 90 40 00 00 00[ ]+lea 0x40\(%rax\),%rdx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8d 88 47 00 00 00[ ]+lea 0x47\(%rax\),%rcx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# LD against hidden but not local variables
+[0-9a-f]+: 4c 8d a0 60 00 00 00[ ]+lea 0x60\(%rax\),%r12
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8d 88 65 00 00 00[ ]+lea 0x65\(%rax\),%rcx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against global var
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 71 02 20 00[ ]+add 0x200271\(%rip\),%rcx +# 201338 <.*>
# -> R_X86_64_TPOFF64 sg2
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against local var
+[0-9a-f]+: 64 4c 8b 34 25 00 00[ ]+mov %fs:0x0,%r14
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 4c 03 35 2b 02 20 00[ ]+add 0x20022b\(%rip\),%r14 +# 201308 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against hidden and local var
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 4d 02 20 00[ ]+add 0x20024d\(%rip\),%rcx +# 201340 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against hidden but not local var
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 0f 02 20 00[ ]+add 0x20020f\(%rip\),%rcx +# 201318 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# Direct access through %fs
# IE against global var
+[0-9a-f]+: 48 8b 0d 0c 02 20 00[ ]+mov 0x20020c\(%rip\),%rcx +# 201320 <.*>
# -> R_X86_64_TPOFF64 sg5
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against local var
+[0-9a-f]+: 4c 8b 15 eb 01 20 00[ ]+mov 0x2001eb\(%rip\),%r10 +# 201310 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x30
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 4d 8b 22[ ]+mov %fs:\(%r10\),%r12
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against hidden and local var
+[0-9a-f]+: 48 8b 15 f2 01 20 00[ ]+mov 0x2001f2\(%rip\),%rdx +# 201328 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x50
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE against hidden but not local var
+[0-9a-f]+: 48 8b 0d e9 01 20 00[ ]+mov 0x2001e9\(%rip\),%rcx +# 201330 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x70
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: c9[ ]+leaveq *
+[0-9a-f]+: c3[ ]+retq *
+[0-9a-f]+: 90[ ]+nop *
/abs.d
0,0 → 1,10
#name: Absolute non-overflowing relocs
#source: ../ld-i386/abs.s
#source: ../ld-i386/zero.s
#ld:
#objdump: -rs
 
.*: file format .*
 
Contents of section \.text:
[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
/tlsie1.dd
0,0 → 1,16
#source: tlsie1.s
#as: --64
#ld: -melf_x86_64 tmpdir/tlsie1
#objdump: -drw
#target: x86_64-*-linux*
 
.*: +file format .*
 
Disassembly of section .text:
 
[a-f0-9]+ <_start>:
[ ]*[a-f0-9]+: 48 c7 c0 fc ff ff ff mov \$0xfffffffffffffffc,%rax
[ ]*[a-f0-9]+: 48 8d 80 fc ff ff ff lea -0x4\(%rax\),%rax
[ ]*[a-f0-9]+: 49 c7 c4 fc ff ff ff mov \$0xfffffffffffffffc,%r12
[ ]*[a-f0-9]+: 49 81 c4 fc ff ff ff add \$0xfffffffffffffffc,%r12
#pass
/tlsbinpic.s
0,0 → 1,146
/* Force .data aligned to 4K, so that .got very likely gets at
0x5021a0 (0x60 bytes .tdata and 0x140 bytes .dynamic) */
.data
.balign 4096
.section ".tdata", "awT", @progbits
.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: .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 257
sh2: .long 258
sh3: .long 259
sh4: .long 260
sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
/* Force .text aligned to 4K, so it very likely gets at 0x401000. */
.text
.balign 4096
.globl fn2
.type fn2,@function
fn2:
pushq %rbp
movq %rsp, %rbp
 
/* GD -> IE because variable is not defined in executable */
.byte 0x66
leaq sG1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE because variable is not defined in executable where
the variable is referenced through IE too */
.byte 0x66
leaq sG2@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> LE with global variable defined in executable */
.byte 0x66
leaq sg1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> LE with local variable defined in executable */
.byte 0x66
leaq sl1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> LE with hidden variable defined in executable */
.byte 0x66
leaq sh1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* LD -> LE */
leaq sl1@tlsld(%rip), %rdi
call __tls_get_addr@plt
nop;nop
leaq 1+sl1@dtpoff(%rax), %rdx
nop;nop
leaq sl2@dtpoff+2(%rax), %r9
nop;nop;nop;nop
 
/* LD -> LE against hidden variables */
leaq sh1@tlsld(%rip), %rdi
call __tls_get_addr@plt
nop;nop
leaq sh1@dtpoff(%rax), %rdx
nop;nop
leaq 3+sh2@dtpoff(%rax), %rcx
nop;nop;nop;nop
 
/* IE against global var */
movq %fs:0, %r9
nop;nop
addq sG2@gottpoff(%rip), %r9
nop;nop;nop;nop
 
/* IE -> LE against global var defined in exec */
movq %fs:0, %r10
nop;nop
addq sg1@gottpoff(%rip), %r10
nop;nop;nop;nop
 
/* IE -> LE against local var */
movq %fs:0, %rax
nop;nop
addq sl1@gottpoff(%rip), %rax
nop;nop;nop;nop
 
/* IE -> LE against hidden var */
movq %fs:0, %rcx
nop;nop
addq sh1@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* Direct access through %fs */
 
/* IE against global var */
movq sG5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
 
/* IE->LE against local var */
movq sl5@gottpoff(%rip), %r11
nop;nop
movq %fs:(%r11), %r12
nop;nop;nop;nop
 
/* IE->LE against hidden var */
movq sh5@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rdx
nop;nop;nop;nop
 
leave
ret
/protected1.d
0,0 → 1,3
#as: --64
#ld: -shared -melf_x86_64
#error: .*relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object
/protected2.d
0,0 → 1,16
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drw
 
.*: +file format .*
 
 
Disassembly of section .text:
 
0+[a-f0-9]+ <foo>:
[ ]*[a-f0-9]+: c3 retq
 
0+[a-f0-9]+ <bar>:
[ ]*[a-f0-9]+: e8 fa ff ff ff callq [a-f0-9]+ <foo>
[ ]*[a-f0-9]+: c3 retq
#pass
/hidden1.d
0,0 → 1,3
#as: --64
#ld: -shared -melf_x86_64
#error: .*relocation R_X86_64_PC32 against undefined hidden symbol `foo' can not be used when making a shared object
/protected3.d
0,0 → 1,13
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drw
 
.*: +file format .*
 
 
Disassembly of section .text:
 
0+[a-f0-9]+ <bar>:
[ ]*[a-f0-9]+: 8b 05 ce 00 20 00 mov 0x[a-f0-9]+\(%rip\),%eax # [a-f0-9]+ <foo>
[ ]*[a-f0-9]+: c3 retq
#pass
/tlsgd1.s
0,0 → 1,15
.text
.globl _start
_start:
.byte 0x66
leaq foo@TLSGD(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr
.globl foo
.section .tdata,"awT",@progbits
.align 4
.type foo, @object
.size foo, 4
foo:
.long 100
/hidden2.d
0,0 → 1,13
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drw
 
.*: +file format .*
 
 
Disassembly of section .text:
 
[a-f0-9]+ <bar>:
[ ]*[a-f0-9]+: e8 33 fe ff ff callq 0 <bar-0x[a-f0-9]+>
[ ]*[a-f0-9]+: c3 retq
#pass
/tlsbindesc.sd
0,0 → 1,12
#source: tlsbindesc.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.got
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .got:
601358 00000000 00000000 00000000 00000000 .*
601368 00000000 00000000 00000000 00000000 .*
/tlsbin.rd
0,0 → 1,147
#source: tlsbinpic.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#readelf: -WSsrl
#target: x86_64-*-*
 
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+ 00 +0 +0 +0
+\[[ 0-9]+\] .interp +.*
+\[[ 0-9]+\] .hash +.*
+\[[ 0-9]+\] .dynsym +.*
+\[[ 0-9]+\] .dynstr +.*
+\[[ 0-9]+\] .rela.dyn +.*
+\[[ 0-9]+\] .rela.plt +.*
+\[[ 0-9]+\] .plt +.*
+\[[ 0-9]+\] .text +PROGBITS +0+401000 0+1000 0+22a 00 +AX +0 +0 +4096
+\[[ 0-9]+\] .tdata +PROGBITS +0+60122a 0+122a 0+60 00 WAT +0 +0 +1
+\[[ 0-9]+\] .tbss +NOBITS +0+60128a 0+128a 0+40 00 WAT +0 +0 +1
+\[[ 0-9]+\] .dynamic +DYNAMIC +0+601290 0+1290 0+140 10 +WA +4 +0 +8
+\[[ 0-9]+\] .got +PROGBITS +0+6013d0 0+13d0 0+20 08 +WA +0 +0 +8
+\[[ 0-9]+\] .got.plt +PROGBITS +0+6013f0 0+13f0 0+20 08 +WA +0 +0 +8
+\[[ 0-9]+\] .shstrtab +.*
+\[[ 0-9]+\] .symtab +.*
+\[[ 0-9]+\] .strtab +.*
Key to Flags:
.*
.*
.*
 
Elf file type is EXEC \(Executable file\)
Entry point 0x40113c
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 +0x0+ 0x0+400000 0x0+400000 0x0+122a 0x0+122a R E 0x200000
LOAD +0x0+122a 0x0+60122a 0x0+60122a 0x0+1e6 0x0+1e6 RW 0x200000
DYNAMIC +0x0+1290 0x0+601290 0x0+601290 0x0+140 0x0+140 RW 0x8
TLS +0x0+122a 0x0+60122a 0x0+60122a 0x0+60 0x0+a0 R +0x1
 
Section to Segment mapping:
Segment Sections...
00 *
01 +.interp *
02 +.interp .hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
03 +.tdata .dynamic .got .got.plt *
04 +.dynamic *
05 +.tdata .tbss *
 
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_X86_64_TPOFF64 +0+ sG5 \+ 0
[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG2 \+ 0
[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG6 \+ 0
[0-9a-f ]+R_X86_64_TPOFF64 +0+ sG1 \+ 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_X86_64_JUMP_SLOT[0-9a-f ]+__tls_get_addr \+ 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 ABS __bss_start
.* TLS +GLOBAL DEFAULT UND sG6
.* TLS +GLOBAL DEFAULT UND sG1
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _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 *
.* SECTION LOCAL DEFAULT +12 *
.* SECTION LOCAL DEFAULT +13 *
.* TLS +LOCAL DEFAULT +9 sl1
.* TLS +LOCAL DEFAULT +9 sl2
.* TLS +LOCAL DEFAULT +9 sl3
.* TLS +LOCAL DEFAULT +9 sl4
.* TLS +LOCAL DEFAULT +9 sl5
.* TLS +LOCAL DEFAULT +9 sl6
.* TLS +LOCAL DEFAULT +9 sl7
.* TLS +LOCAL DEFAULT +9 sl8
.* TLS +LOCAL DEFAULT +10 bl1
.* TLS +LOCAL DEFAULT +10 bl2
.* TLS +LOCAL DEFAULT +10 bl3
.* TLS +LOCAL DEFAULT +10 bl4
.* TLS +LOCAL DEFAULT +10 bl5
.* TLS +LOCAL DEFAULT +10 bl6
.* TLS +LOCAL DEFAULT +10 bl7
.* TLS +LOCAL DEFAULT +10 bl8
.* OBJECT LOCAL HIDDEN +11 _DYNAMIC
.* OBJECT LOCAL HIDDEN +13 _GLOBAL_OFFSET_TABLE_
.* TLS +GLOBAL DEFAULT +9 sg8
.* TLS +GLOBAL DEFAULT +10 bg8
.* TLS +GLOBAL DEFAULT +10 bg6
.* TLS +GLOBAL DEFAULT UND sG5
.* TLS +GLOBAL DEFAULT +10 bg3
.* TLS +GLOBAL DEFAULT +9 sg3
.* TLS +GLOBAL HIDDEN +9 sh3
.* TLS +GLOBAL DEFAULT UND sG2
.* TLS +GLOBAL DEFAULT +9 sg4
.* TLS +GLOBAL DEFAULT +9 sg5
.* TLS +GLOBAL DEFAULT +10 bg5
.* FUNC +GLOBAL DEFAULT UND __tls_get_addr
.* TLS +GLOBAL HIDDEN +9 sh7
.* TLS +GLOBAL HIDDEN +9 sh8
.* TLS +GLOBAL DEFAULT +9 sg1
.* FUNC +GLOBAL DEFAULT +8 _start
.* TLS +GLOBAL HIDDEN +9 sh4
.* TLS +GLOBAL DEFAULT +10 bg7
.* TLS +GLOBAL HIDDEN +9 sh5
.* NOTYPE GLOBAL DEFAULT ABS __bss_start
.* TLS +GLOBAL DEFAULT UND sG6
.* FUNC +GLOBAL DEFAULT +8 fn2
.* TLS +GLOBAL DEFAULT +9 sg2
.* TLS +GLOBAL DEFAULT UND sG1
.* TLS +GLOBAL HIDDEN +9 sh1
.* TLS +GLOBAL DEFAULT +9 sg6
.* TLS +GLOBAL DEFAULT +9 sg7
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
.* TLS +GLOBAL HIDDEN +9 sh2
.* TLS +GLOBAL HIDDEN +9 sh6
.* TLS +GLOBAL DEFAULT +10 bg2
.* TLS +GLOBAL DEFAULT +10 bg1
.* TLS +GLOBAL DEFAULT +10 bg4
/tlsgd2.s
0,0 → 1,5
.text
.globl _start
_start:
leaq foo@TLSGD(%rip), %rdi
call __tls_get_addr
/hidden3.d
0,0 → 1,3
#as: --64
#ld: -shared -melf_x86_64
#error: .*relocation R_X86_64_PC32 against undefined hidden symbol `foo' can not be used when making a shared object
/tlsgd3.s
0,0 → 1,11
.text
.globl _start
_start:
leaq foo@TLSGD(%rip), %rdi
call __tls_get_addr
.section .tdata,"awT",@progbits
.align 4
.type foo, @object
.size foo, 4
foo:
.long 100
/tlsbin.td
0,0 → 1,16
#source: tlsbinpic.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.tdata
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .tdata:
60122a 11000000 12000000 13000000 14000000 .*
60123a 15000000 16000000 17000000 18000000 .*
60124a 41000000 42000000 43000000 44000000 .*
60125a 45000000 46000000 47000000 48000000 .*
60126a 01010000 02010000 03010000 04010000 .*
60127a 05010000 06010000 07010000 08010000 .*
/tlspic.sd
0,0 → 1,19
#source: tlspic1.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.got
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .got:
201340 00000000 00000000 20000000 00000000 .*
201350 00000000 00000000 00000000 00000000 .*
201360 00000000 00000000 00000000 00000000 .*
201370 00000000 00000000 60000000 00000000 .*
201380 00000000 00000000 00000000 00000000 .*
201390 00000000 00000000 00000000 00000000 .*
2013a0 00000000 00000000 00000000 00000000 .*
2013b0 00000000 00000000 00000000 00000000 .*
2013c0 40000000 00000000 00000000 00000000 .*
/tlsdesc.pd
0,0 → 1,20
#source: tlsdesc.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drj.plt
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Disassembly of section .plt:
 
[0-9a-f]+ <.*@plt-0x10>:
[0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
[0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201360 <_GLOBAL_OFFSET_TABLE_\+0x10>
[0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
[0-9a-f]+ <.*@plt>:
[0-9a-f]+: ff 35 .. .. 20 00 pushq .*\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
[0-9a-f]+: ff 25 .. .. 20 00 jmpq \*.*\(%rip\) # 201348 <_DYNAMIC\+0x190>
[0-9a-f]+: 0f 1f 40 00 nopl 0x0\(%rax\)
 
/tlsld1.s
0,0 → 1,12
.text
.globl _start
_start:
leaq foo@TLSLD(%rip), %rdi
call __tls_get_addr
.globl foo
.section .tdata,"awT",@progbits
.align 4
.type foo, @object
.size foo, 4
foo:
.long 100
/tlsdesc.rd
0,0 → 1,160
#source: tlsdesc.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#readelf: -WSsrld
#target: x86_64-*-*
 
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+ 00 +0 +0 +0
+\[[ 0-9]+\] .hash +.*
+\[[ 0-9]+\] .dynsym +.*
+\[[ 0-9]+\] .dynstr +.*
+\[[ 0-9]+\] .rela.dyn +.*
+\[[ 0-9]+\] .rela.plt +.*
+\[[ 0-9]+\] .plt +PROGBITS +0+450 0+450 0+20 10 +AX +0 +0 +4
+\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+154 00 +AX +0 +0 4096
+\[[ 0-9]+\] .tdata +PROGBITS +0+201154 0+1154 0+60 00 WAT +0 +0 +1
+\[[ 0-9]+\] .tbss +NOBITS +0+2011b4 0+11b4 0+20 00 WAT +0 +0 +1
+\[[ 0-9]+\] .dynamic +DYNAMIC +0+2011b8 0+11b8 0+150 10 +WA +3 +0 +8
+\[[ 0-9]+\] .got +PROGBITS +0+201308 0+1308 0+48 08 +WA +0 +0 +8
+\[[ 0-9]+\] .got.plt +PROGBITS +0+201350 0+1350 0+68 08 +WA +0 +0 +8
+\[[ 0-9]+\] .shstrtab +.*
+\[[ 0-9]+\] .symtab +.*
+\[[ 0-9]+\] .strtab +.*
Key to Flags:
.*
.*
.*
 
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+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x200000
LOAD +0x0+1154 0x0+201154 0x0+201154 0x0+264 0x0+264 RW +0x200000
DYNAMIC +0x0+11b8 0x0+2011b8 0x0+2011b8 0x0+150 0x0+150 RW +0x8
TLS +0x0+1154 0x0+201154 0x0+201154 0x0+60 0x0+80 R +0x1
 
Section to Segment mapping:
Segment Sections...
00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
01 +.tdata .dynamic .got .got.plt *
02 +.dynamic *
03 +.tdata .tbss *
 
Dynamic section at offset 0x[0-9a-f]+ contains 16 entries:
+Tag +Type +Name/Value
0x[0-9a-f]+ +\(HASH\).*
0x[0-9a-f]+ +\(STRTAB\).*
0x[0-9a-f]+ +\(SYMTAB\).*
0x[0-9a-f]+ +\(STRSZ\).*
0x[0-9a-f]+ +\(SYMENT\).*
0x[0-9a-f]+ +\(PLTGOT\).*
0x[0-9a-f]+ +\(PLTRELSZ\).*
0x[0-9a-f]+ +\(PLTREL\).*
0x[0-9a-f]+ +\(JMPREL\).*
0x[0-9a-f]+ +\(TLSDESC_PLT\) +0x460
0x[0-9a-f]+ +\(TLSDESC_GOT\) +0x201348
0x[0-9a-f]+ +\(RELA\).*
0x[0-9a-f]+ +\(RELASZ\).*
0x[0-9a-f]+ +\(RELAENT\).*
0x[0-9a-f]+ +\(FLAGS\).*
0x[0-9a-f]+ +\(NULL\).*
 
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
0+201308 [0-9a-f]+ R_X86_64_TPOFF64 +0+24
0+201310 [0-9a-f]+ R_X86_64_TPOFF64 +0+30
0+201318 [0-9a-f]+ R_X86_64_TPOFF64 +0+64
0+201328 [0-9a-f]+ R_X86_64_TPOFF64 +0+50
0+201330 [0-9a-f]+ R_X86_64_TPOFF64 +0+70
0+201340 [0-9a-f]+ R_X86_64_TPOFF64 +0+44
0+201320 [0-9a-f]+ R_X86_64_TPOFF64 +0+10 sg5 \+ 0
0+201338 [0-9a-f]+ R_X86_64_TPOFF64 +0+4 sg2 \+ 0
 
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 5 entries:
+Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
0+201398 [0-9a-f]+ R_X86_64_TLSDESC +0+ sg1 \+ 0
0+201368 [0-9a-f]+ R_X86_64_TLSDESC +0+20
0+2013a8 [0-9a-f]+ R_X86_64_TLSDESC +0+40
0+201378 [0-9a-f]+ R_X86_64_TLSDESC +0+60
0+201388 [0-9a-f]+ R_X86_64_TLSDESC +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-9a-f]+ +0 SECTION LOCAL DEFAULT +7 *
+[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +8 *
+[0-9]+: 0+1c +0 TLS +GLOBAL DEFAULT +8 sg8
+[0-9]+: 0+8 +0 TLS +GLOBAL DEFAULT +8 sg3
+[0-9]+: 0+c +0 TLS +GLOBAL DEFAULT +8 sg4
+[0-9]+: 0+10 +0 TLS +GLOBAL DEFAULT +8 sg5
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT +8 sg1
+[0-9]+: 0+1000 +0 FUNC +GLOBAL DEFAULT +7 fn1
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+[0-9]+: 0+4 +0 TLS +GLOBAL DEFAULT +8 sg2
+[0-9]+: 0+14 +0 TLS +GLOBAL DEFAULT +8 sg6
+[0-9]+: 0+18 +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
 
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+20 +0 TLS +LOCAL DEFAULT +8 sl1
+[0-9]+: 0+24 +0 TLS +LOCAL DEFAULT +8 sl2
+[0-9]+: 0+28 +0 TLS +LOCAL DEFAULT +8 sl3
+[0-9]+: 0+2c +0 TLS +LOCAL DEFAULT +8 sl4
+[0-9]+: 0+30 +0 TLS +LOCAL DEFAULT +8 sl5
+[0-9]+: 0+34 +0 TLS +LOCAL DEFAULT +8 sl6
+[0-9]+: 0+38 +0 TLS +LOCAL DEFAULT +8 sl7
+[0-9]+: 0+3c +0 TLS +LOCAL DEFAULT +8 sl8
+[0-9]+: 0+60 +0 TLS +LOCAL HIDDEN +9 sH1
+[0-9]+: 0+ +0 TLS +LOCAL HIDDEN +8 _TLS_MODULE_BASE_
+[0-9]+: 0+2011b8 +0 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+[0-9]+: 0+48 +0 TLS +LOCAL HIDDEN +8 sh3
+[0-9]+: 0+64 +0 TLS +LOCAL HIDDEN +9 sH2
+[0-9]+: 0+78 +0 TLS +LOCAL HIDDEN +9 sH7
+[0-9]+: 0+58 +0 TLS +LOCAL HIDDEN +8 sh7
+[0-9]+: 0+5c +0 TLS +LOCAL HIDDEN +8 sh8
+[0-9]+: 0+6c +0 TLS +LOCAL HIDDEN +9 sH4
+[0-9]+: 0+4c +0 TLS +LOCAL HIDDEN +8 sh4
+[0-9]+: 0+68 +0 TLS +LOCAL HIDDEN +9 sH3
+[0-9]+: 0+50 +0 TLS +LOCAL HIDDEN +8 sh5
+[0-9]+: 0+70 +0 TLS +LOCAL HIDDEN +9 sH5
+[0-9]+: 0+74 +0 TLS +LOCAL HIDDEN +9 sH6
+[0-9]+: 0+7c +0 TLS +LOCAL HIDDEN +9 sH8
+[0-9]+: 0+40 +0 TLS +LOCAL HIDDEN +8 sh1
+[0-9]+: 0+201350 +0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+[0-9]+: 0+44 +0 TLS +LOCAL HIDDEN +8 sh2
+[0-9]+: 0+54 +0 TLS +LOCAL HIDDEN +8 sh6
+[0-9]+: 0+1c +0 TLS +GLOBAL DEFAULT +8 sg8
+[0-9]+: 0+8 +0 TLS +GLOBAL DEFAULT +8 sg3
+[0-9]+: 0+c +0 TLS +GLOBAL DEFAULT +8 sg4
+[0-9]+: 0+10 +0 TLS +GLOBAL DEFAULT +8 sg5
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT +8 sg1
+[0-9]+: 0+1000 +0 FUNC +GLOBAL DEFAULT +7 fn1
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+[0-9]+: 0+4 +0 TLS +GLOBAL DEFAULT +8 sg2
+[0-9]+: 0+14 +0 TLS +GLOBAL DEFAULT +8 sg6
+[0-9]+: 0+18 +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
/tlsdesc.td
0,0 → 1,16
#source: tlsdesc.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.tdata
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .tdata:
201154 11000000 12000000 13000000 14000000 .*
201164 15000000 16000000 17000000 18000000 .*
201174 41000000 42000000 43000000 44000000 .*
201184 45000000 46000000 47000000 48000000 .*
201194 01010000 02010000 03010000 04010000 .*
2011a4 05010000 06010000 07010000 08010000 .*
/protected1.s
0,0 → 1,13
.text
.globl foo
.protected foo
.type foo, @function
foo:
ret
.size foo, .-foo
.globl bar
.type bar, @function
bar:
leaq foo(%rip), %rax
ret
.size bar, .-bar
/protected2.s
0,0 → 1,13
.text
.globl foo
.protected foo
.type foo, @function
foo:
ret
.size foo, .-foo
.globl bar
.type bar, @function
bar:
call foo
ret
.size bar, .-bar
/protected3.s
0,0 → 1,15
.protected foo
.globl foo
.data
.align 4
.type foo, @object
.size foo, 4
foo:
.long 1
.text
.globl bar
.type bar, @function
bar:
movl foo(%rip), %eax
ret
.size bar, .-bar
/hidden1.s
0,0 → 1,9
.text
.globl bar
.type bar, @function
bar:
leaq foo(%rip), %rax
ret
.size bar, .-bar
.weak foo
.hidden foo
/hidden2.s
0,0 → 1,9
.text
.globl bar
.type bar, @function
bar:
call foo
ret
.size bar, .-bar
.weak foo
.hidden foo
/hidden3.s
0,0 → 1,8
.text
.globl bar
.type bar, @function
bar:
leaq foo(%rip), %rax
ret
.size bar, .-bar
.hidden foo
/pcrel8.d
0,0 → 1,4
#name: PCREL8 overflow
#source: ../ld-i386/pcrel8.s
#ld:
#error: .*relocation truncated to fit: R_X86_64_PC8 .*
/tlsbindesc.dd
0,0 → 1,301
#source: tlsbindesc.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drj.text
#target: x86_64-*-*
 
# PT_TLS layout is:
# Offset from Offset from Name
# TCB base TCB end
# 0x00 -0xa0 sg1..sg8
# 0x20 -0x80 sl1..sl8
# 0x40 -0x60 sh1..sh8
# 0x60 -0x40 bg1..bg8
# 0x80 -0x20 bl1..bl8
 
.*: +file format elf64-x86-64
 
Disassembly of section .text:
 
0+401000 <fn2>:
[0-9a-f]+: 55[ ]+push %rbp
[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
# GD -> IE because variable is not defined in executable
[0-9a-f]+: 48 8b 05 65 03 20 00[ ]+mov 0x200365\(%rip\),%rax +# 601370 <.*>
# -> R_X86_64_TPOFF64 sG1
[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is not defined in executable where
# the variable is referenced through IE too
[0-9a-f]+: 48 8b 05 48 03 20 00[ ]+mov 0x200348\(%rip\),%rax +# 601360 <.*>
# -> R_X86_64_TPOFF64 sG2
[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> LE with global variable defined in executable
[0-9a-f]+: 48 c7 c0 60 ff ff ff[ ]+mov \$0xf+60,%rax
# sg1
[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> LE with local variable defined in executable
[0-9a-f]+: 48 c7 c0 80 ff ff ff[ ]+mov \$0xf+80,%rax
# sl1
[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> LE with hidden variable defined in executable
[0-9a-f]+: 48 c7 c0 a0 ff ff ff[ ]+mov \$0xf+a0,%rax
# sh1
[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LD -> LE
[0-9a-f]+: 48 c7 c0 60 ff ff ff[ ]+mov \$0xf+60,%rax
[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 90 81 ff ff ff[ ]+lea -0x7f\(%rax\),%rdx
# sl1+1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 4c 8d 88 86 ff ff ff[ ]+lea -0x7a\(%rax\),%r9
# sl2+2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LD -> LE against hidden variables
[0-9a-f]+: 48 8d 90 a0 ff ff ff[ ]+lea -0x60\(%rax\),%rdx
# sh1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 88 a7 ff ff ff[ ]+lea -0x59\(%rax\),%rcx
# sh2+3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE against global var
[0-9a-f]+: 64 4c 8b 0c 25 00 00[ ]+mov %fs:0x0,%r9
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 4c 03 0d d6 02 20 00[ ]+add 0x2002d6\(%rip\),%r9 +# 601360 <.*>
# -> R_X86_64_TPOFF64 sG2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE -> LE against global var defined in exec
[0-9a-f]+: 64 4c 8b 14 25 00 00[ ]+mov %fs:0x0,%r10
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 4d 8d 92 60 ff ff ff[ ]+lea -0xa0\(%r10\),%r10
# sg1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE -> LE against local var
[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 80 80 ff ff ff[ ]+lea -0x80\(%rax\),%rax
# sl1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE -> LE against hidden var
[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 89 a0 ff ff ff[ ]+lea -0x60\(%rcx\),%rcx
# sh1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# Direct access through %fs
# IE against global var
[0-9a-f]+: 48 8b 0d 81 02 20 00[ ]+mov 0x200281\(%rip\),%rcx +# 601358 <.*>
# -> R_X86_64_TPOFF64 sG5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE->LE against local var
[0-9a-f]+: 49 c7 c3 90 ff ff ff[ ]+mov \$0xf+90,%r11
# sl5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 64 4d 8b 23[ ]+mov %fs:\(%r11\),%r12
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE->LE against hidden var
[0-9a-f]+: 48 c7 c2 b0 ff ff ff[ ]+mov \$0xf+b0,%rdx
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
# sh5
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: c9[ ]+leaveq *
[0-9a-f]+: c3[ ]+retq *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
 
[0-9a-f]+ <_start>:
[0-9a-f]+: 55[ ]+push %rbp
[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
# IE against global var
[0-9a-f]+: 64 4c 8b 1c 25 00 00[ ]+mov %fs:0x0,%r11
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 4c 03 1d 4a 02 20 00[ ]+add 0x20024a\(%rip\),%r11 +# 601368 <.*>
# -> R_X86_64_TPOFF64 sG6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE -> LE against global var defined in exec
[0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 92 d4 ff ff ff[ ]+lea -0x2c\(%rdx\),%rdx
# bg6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE -> LE against local var
[0-9a-f]+: 64 4c 8b 24 25 00 00[ ]+mov %fs:0x0,%r12
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 49 81 c4 f4 ff ff ff[ ]+add \$0xf+f4,%r12
# bl6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# direct %fs access IE -> LE against local var
[0-9a-f]+: 48 c7 c2 fc ff ff ff[ ]+mov \$0xf+fc,%rdx
# bl8
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# IE -> LE against hidden but not local var
[0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 92 b4 ff ff ff[ ]+lea -0x4c\(%rdx\),%rdx
# sh6
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# direct %fs access IE -> LE against hidden but not local var
[0-9a-f]+: 48 c7 c2 bc ff ff ff[ ]+mov \$0xf+bc,%rdx
# sh8
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 64 48 8b 02[ ]+mov %fs:\(%rdx\),%rax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LE, global var defined in exec
[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 8d 90 64 ff ff ff[ ]+lea -0x9c\(%rax\),%rdx
# sg2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LE, local var, non-canonical sequence
[0-9a-f]+: 49 c7 c1 e6 ff ff ff[ ]+mov \$0xf+e6,%r9
# bl2+2
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 4c 01 ca[ ]+add %r9,%rdx
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LE, hidden var defined in exec, non-canonical sequence
[0-9a-f]+: 64 48 8b 14 25 00 00[ ]+mov %fs:0x0,%rdx
[0-9a-f]+: 00 00 *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 48 81 c2 a5 ff ff ff[ ]+add \$0xf+a5,%rdx
# sh2+1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# Direct %fs access
# LE, global var defined in exec
[0-9a-f]+: 64 48 8b 04 25 68 ff[ ]+mov %fs:0xf+68,%rax
[0-9a-f]+: ff ff *
# sg3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LE, local var
[0-9a-f]+: 64 4c 8b 14 25 eb ff[ ]+mov %fs:0xf+eb,%r10
[0-9a-f]+: ff ff *
# bl3+3
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# LE, hidden var defined in exec
[0-9a-f]+: 64 48 8b 14 25 a9 ff[ ]+mov %fs:0xf+a9,%rdx
[0-9a-f]+: ff ff *
# sh3+1
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: c9[ ]+leaveq *
[0-9a-f]+: c3[ ]+retq *
/line.exp
0,0 → 1,57
# Test that the linker reports undefined symbol line number correctly.
#
# Copyright 2007 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 "x86_64-*-elf*"]
|| [istarget "x86_64-*-linux*"]) } {
return
}
 
set testline "undefined line"
 
if ![ld_assemble $as "--64 $srcdir/$subdir/undefined.s" tmpdir/undefined.o] {
verbose "Unable to assemble test file!" 1
unresolved $testline
return
}
 
remote_file host delete "tmpdir/undefined"
 
# Using -e start prevents the SunOS linker from trying to build a
# shared library.
send_log "$ld -e start -melf_x86_64 -o tmpdir/undefined tmpdir/undefined.o\n"
set exec_output [run_host_cmd "$ld" "-e start -melf_x86_64 -o tmpdir/undefined tmpdir/undefined.o"]
 
send_log "$exec_output\n"
verbose "$exec_output"
 
proc checkund { string testname } {
global exec_output
 
if [string match "*$string*" $exec_output] {
pass $testname
} else {
fail $testname
}
}
 
set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"
 
checkund $ml $testline
/tlsie2.d
0,0 → 1,4
#name: TLS IE->LE transition check
#as: --64
#ld: -melf_x86_64
#error: .*TLS transition from R_X86_64_GOTTPOFF to R_X86_64_TPOFF32 against `foo'.*failed.*
/tlspic.dd
0,0 → 1,230
#source: tlspic1.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drj.text
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Disassembly of section .text:
 
0+1000 <fn1>:
+1000: 55[ ]+push %rbp
+1001: 48 89 e5[ ]+mov %rsp,%rbp
+1004: 90[ ]+nop *
+1005: 90[ ]+nop *
+1006: 90[ ]+nop *
+1007: 90[ ]+nop *
# GD
+1008: 66 48 8d 3d 80 03 20[ ]+lea 0x200380\(%rip\),%rdi +# 201390 <.*>
+100f: 00 *
# -> R_X86_64_DTPMOD64 sg1
+1010: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+1017: [0-9a-f ]+
+1018: 90[ ]+nop *
+1019: 90[ ]+nop *
+101a: 90[ ]+nop *
+101b: 90[ ]+nop *
# GD -> IE because variable is referenced through IE too
+101c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+1023: 00 00 *
+1025: 48 03 05 84 03 20 00[ ]+add 0x200384\(%rip\),%rax +# 2013b0 <.*>
# -> R_X86_64_TPOFF64 sg2
+102c: 90[ ]+nop *
+102d: 90[ ]+nop *
+102e: 90[ ]+nop *
+102f: 90[ ]+nop *
# GD against local variable
+1030: 66 48 8d 3d 08 03 20[ ]+lea 0x200308\(%rip\),%rdi +# 201340 <.*>
+1037: 00 *
# -> R_X86_64_DTPMOD64 [0 0x2000000000000000]
+1038: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+103f: [0-9a-f ]+
+1040: 90[ ]+nop *
+1041: 90[ ]+nop *
+1042: 90[ ]+nop *
+1043: 90[ ]+nop *
# GD -> IE against local variable referenced through IE too
+1044: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+104b: 00 00 *
+104d: 48 03 05 fc 02 20 00[ ]+add 0x2002fc\(%rip\),%rax +# 201350 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+1054: 90[ ]+nop *
+1055: 90[ ]+nop *
+1056: 90[ ]+nop *
+1057: 90[ ]+nop *
# GD against hidden and local variable
+1058: 66 48 8d 3d 58 03 20[ ]+lea 0x200358\(%rip\),%rdi +# 2013b8 <.*>
+105f: 00 *
# -> R_X86_64_DTPMOD64 [0 0x4000000000000000]
+1060: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+1067: [0-9a-f ]+
+1068: 90[ ]+nop *
+1069: 90[ ]+nop *
+106a: 90[ ]+nop *
+106b: 90[ ]+nop *
# GD -> IE against hidden and local variable referenced through IE too
+106c: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+1073: 00 00 *
+1075: 48 03 05 4c 03 20 00[ ]+add 0x20034c\(%rip\),%rax +# 2013c8 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+107c: 90[ ]+nop *
+107d: 90[ ]+nop *
+107e: 90[ ]+nop *
+107f: 90[ ]+nop *
# GD against hidden but not local variable
+1080: 66 48 8d 3d e8 02 20[ ]+lea 0x2002e8\(%rip\),%rdi +# 201370 <.*>
+1087: 00 *
# -> R_X86_64_DTPMOD64 [0 0x6000000000000000]
+1088: 66 66 48 e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+108f: [0-9a-f ]+
+1090: 90[ ]+nop *
+1091: 90[ ]+nop *
+1092: 90[ ]+nop *
+1093: 90[ ]+nop *
# GD -> IE against hidden but not local variable referenced through IE too
+1094: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+109b: 00 00 *
+109d: 48 03 05 dc 02 20 00[ ]+add 0x2002dc\(%rip\),%rax +# 201380 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+10a4: 90[ ]+nop *
+10a5: 90[ ]+nop *
+10a6: 90[ ]+nop *
+10a7: 90[ ]+nop *
# LD
+10a8: 48 8d 3d b1 02 20 00[ ]+lea 0x2002b1\(%rip\),%rdi +# 201360 <.*>
# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+10af: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+10b4: 90[ ]+nop *
+10b5: 90[ ]+nop *
+10b6: 48 8d 90 20 00 00 00[ ]+lea 0x20\(%rax\),%rdx
+10bd: 90[ ]+nop *
+10be: 90[ ]+nop *
+10bf: 4c 8d 88 26 00 00 00[ ]+lea 0x26\(%rax\),%r9
+10c6: 90[ ]+nop *
+10c7: 90[ ]+nop *
+10c8: 90[ ]+nop *
+10c9: 90[ ]+nop *
# LD against hidden and local variables
+10ca: 48 8d 3d 8f 02 20 00[ ]+lea 0x20028f\(%rip\),%rdi +# 201360 <.*>
# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+10d1: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+10d6: 90[ ]+nop *
+10d7: 90[ ]+nop *
+10d8: 48 8d 90 40 00 00 00[ ]+lea 0x40\(%rax\),%rdx
+10df: 90[ ]+nop *
+10e0: 90[ ]+nop *
+10e1: 48 8d 88 47 00 00 00[ ]+lea 0x47\(%rax\),%rcx
+10e8: 90[ ]+nop *
+10e9: 90[ ]+nop *
+10ea: 90[ ]+nop *
+10eb: 90[ ]+nop *
# LD against hidden but not local variables
+10ec: 48 8d 3d 6d 02 20 00[ ]+lea 0x20026d\(%rip\),%rdi +# 201360 <.*>
# -> R_X86_64_DTPMOD64 [0 0x000000000000000]
+10f3: e8 [0-9a-f ]+callq [0-9a-f]+ <.*>
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+10f8: 90[ ]+nop *
+10f9: 90[ ]+nop *
+10fa: 4c 8d a0 60 00 00 00[ ]+lea 0x60\(%rax\),%r12
+1101: 90[ ]+nop *
+1102: 90[ ]+nop *
+1103: 48 8d 88 65 00 00 00[ ]+lea 0x65\(%rax\),%rcx
+110a: 90[ ]+nop *
+110b: 90[ ]+nop *
# IE against global var
+110c: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+1113: 00 00 *
+1115: 90[ ]+nop *
+1116: 90[ ]+nop *
+1117: 48 03 0d 92 02 20 00[ ]+add 0x200292\(%rip\),%rcx +# 2013b0 <.*>
# -> R_X86_64_TPOFF64 sg2
+111e: 90[ ]+nop *
+111f: 90[ ]+nop *
+1120: 90[ ]+nop *
+1121: 90[ ]+nop *
# IE against local var
+1122: 64 4c 8b 34 25 00 00[ ]+mov %fs:0x0,%r14
+1129: 00 00 *
+112b: 90[ ]+nop *
+112c: 90[ ]+nop *
+112d: 4c 03 35 1c 02 20 00[ ]+add 0x20021c\(%rip\),%r14 +# 201350 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
+1134: 90[ ]+nop *
+1135: 90[ ]+nop *
+1136: 90[ ]+nop *
+1137: 90[ ]+nop *
# IE against hidden and local var
+1138: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+113f: 00 00 *
+1141: 90[ ]+nop *
+1142: 90[ ]+nop *
+1143: 48 03 0d 7e 02 20 00[ ]+add 0x20027e\(%rip\),%rcx +# 2013c8 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
+114a: 90[ ]+nop *
+114b: 90[ ]+nop *
+114c: 90[ ]+nop *
+114d: 90[ ]+nop *
# IE against hidden but not local var
+114e: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+1155: 00 00 *
+1157: 90[ ]+nop *
+1158: 90[ ]+nop *
+1159: 48 03 0d 20 02 20 00[ ]+add 0x200220\(%rip\),%rcx +# 201380 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
+1160: 90[ ]+nop *
+1161: 90[ ]+nop *
+1162: 90[ ]+nop *
+1163: 90[ ]+nop *
# Direct access through %fs
# IE against global var
+1164: 48 8b 0d 1d 02 20 00[ ]+mov 0x20021d\(%rip\),%rcx +# 201388 <.*>
# -> R_X86_64_TPOFF64 sg5
+116b: 90[ ]+nop *
+116c: 90[ ]+nop *
+116d: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+1171: 90[ ]+nop *
+1172: 90[ ]+nop *
+1173: 90[ ]+nop *
+1174: 90[ ]+nop *
# IE against local var
+1175: 4c 8b 15 dc 01 20 00[ ]+mov 0x2001dc\(%rip\),%r10 +# 201358 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x30
+117c: 90[ ]+nop *
+117d: 90[ ]+nop *
+117e: 64 4d 8b 22[ ]+mov %fs:\(%r10\),%r12
+1182: 90[ ]+nop *
+1183: 90[ ]+nop *
+1184: 90[ ]+nop *
+1185: 90[ ]+nop *
# IE against hidden and local var
+1186: 48 8b 15 13 02 20 00[ ]+mov 0x200213\(%rip\),%rdx +# 2013a0 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x50
+118d: 90[ ]+nop *
+118e: 90[ ]+nop *
+118f: 64 48 8b 12[ ]+mov %fs:\(%rdx\),%rdx
+1193: 90[ ]+nop *
+1194: 90[ ]+nop *
+1195: 90[ ]+nop *
+1196: 90[ ]+nop *
# IE against hidden but not local var
+1197: 48 8b 0d 0a 02 20 00[ ]+mov 0x20020a\(%rip\),%rcx +# 2013a8 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x70
+119e: 90[ ]+nop *
+119f: 90[ ]+nop *
+11a0: 64 48 8b 11[ ]+mov %fs:\(%rcx\),%rdx
+11a4: 90[ ]+nop *
+11a5: 90[ ]+nop *
+11a6: 90[ ]+nop *
+11a7: 90[ ]+nop *
+11a8: c9[ ]+leaveq *
+11a9: c3[ ]+retq *
+11aa: 90[ ]+nop *
+11ab: 90[ ]+nop *
/tlsie3.d
0,0 → 1,4
#name: TLS IE->LE transition check (%r12)
#as: --64
#ld: -melf_x86_64
#error: .*TLS transition from R_X86_64_GOTTPOFF to R_X86_64_TPOFF32 against `foo'.*failed.*
/tlsld1.dd
0,0 → 1,13
#source: tlsld1.s
#as: --64
#ld: -melf_x86_64 tmpdir/tlsld1
#objdump: -drw
#target: x86_64-*-linux*
 
.*: +file format .*
 
Disassembly of section .text:
 
[a-f0-9]+ <_start>:
[ ]*[a-f0-9]+: 66 66 66 64 48 8b 04 25 00 00 00 00 mov %fs:0x0,%rax
#pass
/tlslib.s
0,0 → 1,18
.section ".tdata", "awT", @progbits
.globl 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. */
.globl __tls_get_addr
.type __tls_get_addr,@function
__tls_get_addr:
movq %rdi, %rax
ret
/tlsbindesc.s
0,0 → 1,128
/* Force .data aligned to 4K, so that .got very likely gets at
0x5021a0 (0x60 bytes .tdata and 0x140 bytes .dynamic) */
.data
.balign 4096
.section ".tdata", "awT", @progbits
.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: .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 257
sh2: .long 258
sh3: .long 259
sh4: .long 260
sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
/* Force .text aligned to 4K, so it very likely gets at 0x401000. */
.text
.balign 4096
.globl fn2
.type fn2,@function
fn2:
pushq %rbp
movq %rsp, %rbp
 
/* GD -> IE because variable is not defined in executable */
leaq sG1@tlsdesc(%rip), %rax
call *sG1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE because variable is not defined in executable where
the variable is referenced through IE too */
leaq sG2@tlsdesc(%rip), %rax
call *sG2@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> LE with global variable defined in executable */
leaq sg1@tlsdesc(%rip), %rax
call *sg1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> LE with local variable defined in executable */
leaq sl1@tlsdesc(%rip), %rax
call *sl1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> LE with hidden variable defined in executable */
leaq sh1@tlsdesc(%rip), %rax
call *sh1@tlscall(%rax)
nop;nop;nop;nop
 
/* LD -> LE */
leaq _TLS_MODULE_BASE_@tlsdesc(%rip), %rax
call *_TLS_MODULE_BASE_@tlscall(%rax)
nop;nop
leaq 1+sl1@dtpoff(%rax), %rdx
nop;nop
leaq sl2@dtpoff+2(%rax), %r9
nop;nop;nop;nop
 
/* LD -> LE against hidden variables */
leaq sh1@dtpoff(%rax), %rdx
nop;nop
leaq 3+sh2@dtpoff(%rax), %rcx
nop;nop;nop;nop
 
/* IE against global var */
movq %fs:0, %r9
nop;nop
addq sG2@gottpoff(%rip), %r9
nop;nop;nop;nop
 
/* IE -> LE against global var defined in exec */
movq %fs:0, %r10
nop;nop
addq sg1@gottpoff(%rip), %r10
nop;nop;nop;nop
 
/* IE -> LE against local var */
movq %fs:0, %rax
nop;nop
addq sl1@gottpoff(%rip), %rax
nop;nop;nop;nop
 
/* IE -> LE against hidden var */
movq %fs:0, %rcx
nop;nop
addq sh1@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* Direct access through %fs */
 
/* IE against global var */
movq sG5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
 
/* IE->LE against local var */
movq sl5@gottpoff(%rip), %r11
nop;nop
movq %fs:(%r11), %r12
nop;nop;nop;nop
 
/* IE->LE against hidden var */
movq sh5@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rdx
nop;nop;nop;nop
 
leave
ret
/tlsbin.s
0,0 → 1,97
.section ".tbss", "awT", @nobits
.globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8
bg1: .space 4
bg2: .space 4
bg3: .space 4
bg4: .space 4
bg5: .space 4
bg6: .space 4
bg7: .space 4
bg8: .space 4
bl1: .space 4
bl2: .space 4
bl3: .space 4
bl4: .space 4
bl5: .space 4
bl6: .space 4
bl7: .space 4
bl8: .space 4
.text
.globl _start
.type _start,@function
_start:
pushq %rbp
movq %rsp, %rbp
 
/* IE against global var */
movq %fs:0, %r11
nop;nop
addq sG6@gottpoff(%rip), %r11
nop;nop;nop;nop
 
/* IE -> LE against global var defined in exec */
movq %fs:0, %rdx
nop;nop
addq bg6@gottpoff(%rip), %rdx
nop;nop;nop;nop
 
/* IE -> LE against local var */
movq %fs:0, %r12
nop;nop
addq bl6@gottpoff(%rip), %r12
nop;nop;nop;nop
 
/* direct %fs access IE -> LE against local var */
movq bl8@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rax
nop;nop;nop;nop
 
/* IE -> LE against hidden but not local var */
movq %fs:0, %rdx
nop;nop
addq sh6@gottpoff(%rip), %rdx
nop;nop;nop;nop
 
/* direct %fs access IE -> LE against hidden but not local var */
movq sh8@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rax
nop;nop;nop;nop
 
/* LE, global var defined in exec */
movq %fs:0, %rax
nop;nop
leaq sg2@tpoff(%rax), %rdx
nop;nop;nop;nop
 
/* LE, local var, non-canonical sequence */
movq $2+bl2@tpoff, %r9
nop;nop
movq %fs:0, %rdx
nop;nop
addq %r9, %rdx
nop;nop;nop;nop
 
/* LE, hidden var defined in exec, non-canonical sequence */
movq %fs:0, %rdx
nop;nop
addq $sh2@tpoff+1, %rdx
nop;nop;nop;nop
 
/* Direct %fs access */
 
/* LE, global var defined in exec */
movq %fs:sg3@tpoff, %rax
nop;nop;nop;nop
 
/* LE, local var */
movq %fs:bl3@tpoff+3, %r10
nop;nop;nop;nop
 
/* LE, hidden var defined in exec */
movq %fs:1+sh3@tpoff, %rdx
nop;nop;nop;nop
 
leave
ret
/tlsbindesc.rd
0,0 → 1,138
#source: tlsbindesc.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#readelf: -WSsrl
#target: x86_64-*-*
 
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+ 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+401000 0+1000 0+1f6 00 +AX +0 +0 +4096
+\[[ 0-9]+\] .tdata +PROGBITS +0+6011f6 0+11f6 0+60 00 WAT +0 +0 +1
+\[[ 0-9]+\] .tbss +NOBITS +0+601256 0+1256 0+40 00 WAT +0 +0 +1
+\[[ 0-9]+\] .dynamic +DYNAMIC +0+601258 0+1258 0+100 10 +WA +4 +0 +8
+\[[ 0-9]+\] .got +PROGBITS +0+601358 0+1358 0+20 08 +WA +0 +0 +8
+\[[ 0-9]+\] .got.plt +PROGBITS +0+601378 0+1378 0+18 08 +WA +0 +0 +8
+\[[ 0-9]+\] .shstrtab +.*
+\[[ 0-9]+\] .symtab +.*
+\[[ 0-9]+\] .strtab +.*
Key to Flags:
.*
.*
.*
 
Elf file type is EXEC \(Executable file\)
Entry point 0x401108
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 +0x0+ 0x0+400000 0x0+400000 0x0+11f6 0x0+11f6 R E 0x200000
LOAD +0x0+11f6 0x0+6011f6 0x0+6011f6 0x0+19a 0x0+19a RW 0x200000
DYNAMIC +0x0+1258 0x0+601258 0x0+601258 0x0+100 0x0+100 RW 0x8
TLS +0x0+11f6 0x0+6011f6 0x0+6011f6 0x0+60 0x0+a0 R +0x1
 
Section to Segment mapping:
Segment Sections...
00 *
01 +.interp *
02 +.interp .hash .dynsym .dynstr .rela.dyn .text *
03 +.tdata .dynamic .got .got.plt *
04 +.dynamic *
05 +.tdata .tbss *
 
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
0+601358 0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
0+601360 0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
0+601368 0+400000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
0+601370 0+500000012 R_X86_64_TPOFF64 +0+ sG1 \+ 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 sG5
+[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 sG6
+[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+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+80 +0 TLS +LOCAL DEFAULT +8 bl1
+[0-9]+: 0+84 +0 TLS +LOCAL DEFAULT +8 bl2
+[0-9]+: 0+88 +0 TLS +LOCAL DEFAULT +8 bl3
+[0-9]+: 0+8c +0 TLS +LOCAL DEFAULT +8 bl4
+[0-9]+: 0+90 +0 TLS +LOCAL DEFAULT +8 bl5
+[0-9]+: 0+94 +0 TLS +LOCAL DEFAULT +8 bl6
+[0-9]+: 0+98 +0 TLS +LOCAL DEFAULT +8 bl7
+[0-9]+: 0+9c +0 TLS +LOCAL DEFAULT +8 bl8
+[0-9]+: 0+0 +0 TLS +LOCAL HIDDEN +7 _TLS_MODULE_BASE_
+[0-9]+: 0+601258 +0 OBJECT LOCAL HIDDEN 9 _DYNAMIC
+[0-9]+: 0+601378 +0 OBJECT LOCAL HIDDEN 11 _GLOBAL_OFFSET_TABLE_
+[0-9]+: 0+1c +0 TLS +GLOBAL DEFAULT +7 sg8
+[0-9]+: 0+7c +0 TLS +GLOBAL DEFAULT +8 bg8
+[0-9]+: 0+74 +0 TLS +GLOBAL DEFAULT +8 bg6
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG5
+[0-9]+: 0+68 +0 TLS +GLOBAL DEFAULT +8 bg3
+[0-9]+: 0+8 +0 TLS +GLOBAL DEFAULT +7 sg3
+[0-9]+: 0+48 +0 TLS +GLOBAL HIDDEN +7 sh3
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG2
+[0-9]+: 0+c +0 TLS +GLOBAL DEFAULT +7 sg4
+[0-9]+: 0+10 +0 TLS +GLOBAL DEFAULT +7 sg5
+[0-9]+: 0+70 +0 TLS +GLOBAL DEFAULT +8 bg5
+[0-9]+: 0+58 +0 TLS +GLOBAL HIDDEN +7 sh7
+[0-9]+: 0+5c +0 TLS +GLOBAL HIDDEN +7 sh8
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT +7 sg1
+[0-9]+: 0+401108 +0 FUNC +GLOBAL DEFAULT +6 _start
+[0-9]+: 0+4c +0 TLS +GLOBAL HIDDEN +7 sh4
+[0-9]+: 0+78 +0 TLS +GLOBAL DEFAULT +8 bg7
+[0-9]+: 0+50 +0 TLS +GLOBAL HIDDEN +7 sh5
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG6
+[0-9]+: 0+401000 +0 FUNC +GLOBAL DEFAULT +6 fn2
+[0-9]+: 0+4 +0 TLS +GLOBAL DEFAULT +7 sg2
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG1
+[0-9]+: 0+40 +0 TLS +GLOBAL HIDDEN +7 sh1
+[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-9]+: 0+44 +0 TLS +GLOBAL HIDDEN +7 sh2
+[0-9]+: 0+54 +0 TLS +GLOBAL HIDDEN +7 sh6
+[0-9]+: 0+64 +0 TLS +GLOBAL DEFAULT +8 bg2
+[0-9]+: 0+60 +0 TLS +GLOBAL DEFAULT +8 bg1
+[0-9]+: 0+6c +0 TLS +GLOBAL DEFAULT +8 bg4
/pcrel16.d
0,0 → 1,15
#name: PCREL16 overflow
#source: ../ld-i386/pcrel16.s
#ld: -Ttext 0x0
#objdump: -drj.text -m i8086
 
.*: +file format elf64-x86-64
 
Disassembly of section .text:
 
0+ <_start>:
...
420: cd 42[ ]+int \$0x42
422: ca 02 00[ ]+lret \$0x2
...
f065: e9 b8 13[ ]+jmp 420 <_start\+0x420>
/tlsgdesc.dd
0,0 → 1,163
#source: tlsgdesc.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -drj.text
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Disassembly of section .text:
 
0+[0-9a-f]+ <fc1>:
+[0-9a-f]+: 55[ ]+push %rbp
+[0-9a-f]+: 48 89 e5[ ]+mov %rsp,%rbp
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 5e 02 20 00[ ]+add 0x20025e\(%rip\),%rcx +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 68 02 20 00[ ]+add 0x200268\(%rip\),%rcx +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD, gd first
+[0-9a-f]+: 66 48 8d 3d 6c 02 20[ ]+lea 0x20026c\(%rip\),%rdi +# 200690 <.*>
+[0-9a-f]+: 00 *
# -> R_X86_64_DTPMOD64 sG1
+[0-9a-f]+: 66 66 48 e8 9c ff ff[ ]+callq [0-9a-f]+ <.*>
+[0-9a-f]+: ff[ ]+
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8d 05 a1 02 20 00[ ]+lea 0x2002a1\(%rip\),%rax +# 2006d8 <.*>
# -> R_X86_64_TLSDESC sG1
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD, desc first
+[0-9a-f]+: 48 8d 05 84 02 20 00[ ]+lea 0x200284\(%rip\),%rax +# 2006c8 <.*>
# -> R_X86_64_TLSDESC sG2
+[0-9a-f]+: ff 10[ ]+callq \*\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 66 48 8d 3d 1e 02 20[ ]+lea 0x20021e\(%rip\),%rdi +# 200670 <.*>
+[0-9a-f]+: 00 *
# -> R_X86_64_DTPMOD64 sG2
+[0-9a-f]+: 66 66 48 e8 6e ff ff[ ]+callq [0-9a-f]+ <.*>
+[0-9a-f]+: ff[ ]+
# -> R_X86_64_JUMP_SLOT __tls_get_addr
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE, gd first, after IE use
+[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 48 03 05 f2 01 20 00[ ]+add 0x2001f2\(%rip\),%rax +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8b 05 e7 01 20 00[ ]+mov 0x2001e7\(%rip\),%rax +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE, desc first, after IE use
+[0-9a-f]+: 48 8b 05 fa 01 20 00[ ]+mov 0x2001fa\(%rip\),%rax +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 48 03 05 e4 01 20 00[ ]+add 0x2001e4\(%rip\),%rax +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE, gd first, before IE use
+[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 48 03 05 b8 01 20 00[ ]+add 0x2001b8\(%rip\),%rax +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8b 05 ad 01 20 00[ ]+mov 0x2001ad\(%rip\),%rax +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# GD -> IE, desc first, before IE use
+[0-9a-f]+: 48 8b 05 c0 01 20 00[ ]+mov 0x2001c0\(%rip\),%rax +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
+[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 64 48 8b 04 25 00 00[ ]+mov %fs:0x0,%rax
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 48 03 05 aa 01 20 00[ ]+add 0x2001aa\(%rip\),%rax +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 74 01 20 00[ ]+add 0x200174\(%rip\),%rcx +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
# IE
+[0-9a-f]+: 64 48 8b 0c 25 00 00[ ]+mov %fs:0x0,%rcx
+[0-9a-f]+: 00 00 *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 03 0d 7e 01 20 00[ ]+add 0x20017e\(%rip\),%rcx +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: c9[ ]+leaveq *
+[0-9a-f]+: c3[ ]+retq *
/tlsbindesc.td
0,0 → 1,16
#source: tlsbindesc.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.tdata
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .tdata:
6011f6 11000000 12000000 13000000 14000000 .*
601206 15000000 16000000 17000000 18000000 .*
601216 41000000 42000000 43000000 44000000 .*
601226 45000000 46000000 47000000 48000000 .*
601236 01010000 02010000 03010000 04010000 .*
601246 05010000 06010000 07010000 08010000 .*
/tlsbin.sd
0,0 → 1,12
#source: tlsbinpic.s
#source: tlsbin.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.got
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .got:
6013d0 00000000 00000000 00000000 00000000 .*
6013e0 00000000 00000000 00000000 00000000 .*
/tlsdesc.s
0,0 → 1,157
/* Force .data aligned to 4K, so .got very likely gets at 0x102190
(0x60 bytes .tdata and 0x130 bytes .dynamic) */
.data
.balign 4096
.section ".tdata", "awT", @progbits
.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: .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 257
sh2: .long 258
sh3: .long 259
sh4: .long 260
sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
/* Force .text aligned to 4K, so it very likely gets at 0x1000. */
.text
.balign 4096
.globl fn1
.type fn1,@function
fn1:
pushq %rbp
movq %rsp, %rbp
nop;nop;nop;nop
 
/* GD */
leaq sg1@tlsdesc(%rip), %rax
call *sg1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE because variable is referenced through IE too */
leaq sg2@tlsdesc(%rip), %rax
call *sg2@tlscall(%rax)
nop;nop;nop;nop
 
/* GD against local variable */
leaq sl1@tlsdesc(%rip), %rax
call *sl1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE against local variable referenced through IE too */
leaq sl2@tlsdesc(%rip), %rax
call *sl2@tlscall(%rax)
nop;nop;nop;nop
 
/* GD against hidden and local variable */
leaq sh1@tlsdesc(%rip), %rax
call *sh1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE against hidden and local variable referenced through
IE too */
leaq sh2@tlsdesc(%rip), %rax
call *sh2@tlscall(%rax)
nop;nop;nop;nop
 
/* GD against hidden but not local variable */
leaq sH1@tlsdesc(%rip), %rax
call *sH1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE against hidden but not local variable referenced through
IE too */
leaq sH2@tlsdesc(%rip), %rax
call *sH2@tlscall(%rax)
nop;nop;nop;nop
 
/* LD */
leaq _TLS_MODULE_BASE_@tlsdesc(%rip), %rax
call *_TLS_MODULE_BASE_@tlscall(%rax)
nop;nop
leaq sl1@dtpoff(%rax), %rdx
nop;nop
leaq 2+sl2@dtpoff(%rax), %r9
nop;nop;nop;nop
 
/* LD against hidden and local variables */
leaq sh1@dtpoff(%rax), %rdx
nop;nop
leaq sh2@dtpoff+3(%rax), %rcx
nop;nop;nop;nop
 
/* LD against hidden but not local variables */
leaq sH1@dtpoff(%rax), %r12
nop;nop
leaq sH2@dtpoff+1(%rax), %rcx
nop;nop
 
/* IE against global var */
movq %fs:0, %rcx
nop;nop
addq sg2@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* IE against local var */
movq %fs:0, %r14
nop;nop
addq sl2@gottpoff(%rip), %r14
nop;nop;nop;nop
 
/* IE against hidden and local var */
movq %fs:0, %rcx
nop;nop
addq sh2@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* IE against hidden but not local var */
movq %fs:0, %rcx
nop;nop
addq sH2@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* Direct access through %fs */
 
/* IE against global var */
movq sg5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
 
/* IE against local var */
movq sl5@gottpoff(%rip), %r10
nop;nop
movq %fs:(%r10), %r12
nop;nop;nop;nop
 
/* IE against hidden and local var */
movq sh5@gottpoff(%rip), %rdx
nop;nop
movq %fs:(%rdx), %rdx
nop;nop;nop;nop
 
/* IE against hidden but not local var */
movq sH5@gottpoff(%rip), %rcx
nop;nop
movq %fs:(%rcx), %rdx
nop;nop;nop;nop
 
leave
ret
/tlsie1.s
0,0 → 1,14
.text
.globl _start
_start:
movq foo@GOTTPOFF(%rip), %rax
addq foo@GOTTPOFF(%rip), %rax
movq foo@GOTTPOFF(%rip), %r12
addq foo@GOTTPOFF(%rip), %r12
.globl foo
.section .tdata,"awT",@progbits
.align 4
.type foo, @object
.size foo, 4
foo:
.long 100
/tlspic.rd
0,0 → 1,144
#source: tlspic1.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#readelf: -WSsrl
#target: x86_64-*-*
 
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+ 00 +0 +0 +0
+\[[ 0-9]+\] .hash +.*
+\[[ 0-9]+\] .dynsym +.*
+\[[ 0-9]+\] .dynstr +.*
+\[[ 0-9]+\] .rela.dyn +.*
+\[[ 0-9]+\] .rela.plt +.*
+\[[ 0-9]+\] .plt +.*
+\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+1ac 00 +AX +0 +0 4096
+\[[ 0-9]+\] .tdata +PROGBITS +0+2011ac 0+11ac 0+60 00 WAT +0 +0 +1
+\[[ 0-9]+\] .tbss +NOBITS +0+20120c 0+120c 0+20 00 WAT +0 +0 +1
+\[[ 0-9]+\] .dynamic +DYNAMIC +0+201210 0+1210 0+130 10 +WA +3 +0 +8
+\[[ 0-9]+\] .got +PROGBITS +0+201340 0+1340 0+90 08 +WA +0 +0 +8
+\[[ 0-9]+\] .got.plt +PROGBITS +0+2013d0 0+13d0 0+20 08 +WA +0 +0 +8
+\[[ 0-9]+\] .shstrtab +.*
+\[[ 0-9]+\] .symtab +.*
+\[[ 0-9]+\] .strtab +.*
Key to Flags:
.*
.*
.*
 
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+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x200000
LOAD +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+244 0x0+244 RW +0x200000
DYNAMIC +0x0+1210 0x0+201210 0x0+201210 0x0+130 0x0+130 RW +0x8
TLS +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+60 0x0+80 R +0x1
 
Section to Segment mapping:
Segment Sections...
00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
01 +.tdata .dynamic .got .got.plt *
02 +.dynamic *
03 +.tdata .tbss *
 
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_X86_64_DTPMOD64 +0+
[0-9a-f ]+R_X86_64_TPOFF64 +0+24
[0-9a-f ]+R_X86_64_TPOFF64 +0+30
[0-9a-f ]+R_X86_64_DTPMOD64 +0+
[0-9a-f ]+R_X86_64_DTPMOD64 +0+
[0-9a-f ]+R_X86_64_TPOFF64 +0+64
[0-9a-f ]+R_X86_64_TPOFF64 +0+50
[0-9a-f ]+R_X86_64_TPOFF64 +0+70
[0-9a-f ]+R_X86_64_DTPMOD64 +0+
[0-9a-f ]+R_X86_64_TPOFF64 +0+44
[0-9a-f ]+R_X86_64_TPOFF64 +0+10 sg5 \+ 0
[0-9a-f ]+R_X86_64_DTPMOD64 +0+ sg1 \+ 0
[0-9a-f ]+R_X86_64_DTPOFF64 +0+ sg1 \+ 0
[0-9a-f ]+R_X86_64_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_X86_64_JUMP_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 +7 *
.* SECTION LOCAL DEFAULT +8 *
.* TLS +GLOBAL DEFAULT +8 sg8
.* TLS +GLOBAL DEFAULT +8 sg3
.* TLS +GLOBAL DEFAULT +8 sg4
.* TLS +GLOBAL DEFAULT +8 sg5
.* NOTYPE GLOBAL DEFAULT UND __tls_get_addr
.* TLS +GLOBAL DEFAULT +8 sg1
.* FUNC +GLOBAL DEFAULT +7 fn1
.* NOTYPE GLOBAL DEFAULT ABS __bss_start
.* TLS +GLOBAL DEFAULT +8 sg2
.* TLS +GLOBAL DEFAULT +8 sg6
.* TLS +GLOBAL DEFAULT +8 sg7
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _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 *
.* SECTION LOCAL DEFAULT +12 *
.* TLS +LOCAL DEFAULT +8 sl1
.* TLS +LOCAL DEFAULT +8 sl2
.* TLS +LOCAL DEFAULT +8 sl3
.* TLS +LOCAL DEFAULT +8 sl4
.* TLS +LOCAL DEFAULT +8 sl5
.* TLS +LOCAL DEFAULT +8 sl6
.* TLS +LOCAL DEFAULT +8 sl7
.* TLS +LOCAL DEFAULT +8 sl8
.* TLS +LOCAL HIDDEN +9 sH1
.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
.* TLS +LOCAL HIDDEN +8 sh3
.* TLS +LOCAL HIDDEN +9 sH2
.* TLS +LOCAL HIDDEN +9 sH7
.* TLS +LOCAL HIDDEN +8 sh7
.* TLS +LOCAL HIDDEN +8 sh8
.* TLS +LOCAL HIDDEN +9 sH4
.* TLS +LOCAL HIDDEN +8 sh4
.* TLS +LOCAL HIDDEN +9 sH3
.* TLS +LOCAL HIDDEN +8 sh5
.* TLS +LOCAL HIDDEN +9 sH5
.* TLS +LOCAL HIDDEN +9 sH6
.* TLS +LOCAL HIDDEN +9 sH8
.* TLS +LOCAL HIDDEN +8 sh1
.* OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
.* TLS +LOCAL HIDDEN +8 sh2
.* TLS +LOCAL HIDDEN +8 sh6
.* TLS +GLOBAL DEFAULT +8 sg8
.* TLS +GLOBAL DEFAULT +8 sg3
.* TLS +GLOBAL DEFAULT +8 sg4
.* TLS +GLOBAL DEFAULT +8 sg5
.* NOTYPE GLOBAL DEFAULT UND __tls_get_addr
.* TLS +GLOBAL DEFAULT +8 sg1
.* FUNC +GLOBAL DEFAULT +7 fn1
.* NOTYPE GLOBAL DEFAULT ABS __bss_start
.* TLS +GLOBAL DEFAULT +8 sg2
.* TLS +GLOBAL DEFAULT +8 sg6
.* TLS +GLOBAL DEFAULT +8 sg7
.* NOTYPE GLOBAL DEFAULT ABS _edata
.* NOTYPE GLOBAL DEFAULT ABS _end
/undefined.s
0,0 → 1,154
.file "undefined.c"
.section .debug_abbrev,"",@progbits
.Ldebug_abbrev0:
.section .debug_info,"",@progbits
.Ldebug_info0:
.section .debug_line,"",@progbits
.Ldebug_line0:
.text
.Ltext0:
.p2align 4,,15
.globl function
.type function, @function
function:
.LFB2:
.file 1 "undefined.c"
.loc 1 8 0
.loc 1 9 0
xorl %eax, %eax
jmp this_function_is_not_defined
.LFE2:
.size function, .-function
.section .debug_frame,"",@progbits
.Lframe0:
.long .LECIE0-.LSCIE0
.LSCIE0:
.long 0xffffffff
.byte 0x1
.string ""
.uleb128 0x1
.sleb128 -8
.byte 0x10
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE0:
.LSFDE0:
.long .LEFDE0-.LASFDE0
.LASFDE0:
.long .Lframe0
.quad .LFB2
.quad .LFE2-.LFB2
.align 8
.LEFDE0:
.text
.Letext0:
.section .debug_info
.long 0x4c
.value 0x2
.long .Ldebug_abbrev0
.byte 0x8
.uleb128 0x1
.long .Ldebug_line0
.quad .Letext0
.quad .Ltext0
.long .LASF0
.byte 0x1
.long .LASF1
.uleb128 0x2
.byte 0x1
.long .LASF2
.byte 0x1
.byte 0x8
.long 0x48
.quad .LFB2
.quad .LFE2
.byte 0x2
.byte 0x77
.sleb128 8
.uleb128 0x3
.string "int"
.byte 0x4
.byte 0x5
.byte 0x0
.section .debug_abbrev
.uleb128 0x1
.uleb128 0x11
.byte 0x1
.uleb128 0x10
.uleb128 0x6
.uleb128 0x12
.uleb128 0x1
.uleb128 0x11
.uleb128 0x1
.uleb128 0x25
.uleb128 0xe
.uleb128 0x13
.uleb128 0xb
.uleb128 0x3
.uleb128 0xe
.byte 0x0
.byte 0x0
.uleb128 0x2
.uleb128 0x2e
.byte 0x0
.uleb128 0x3f
.uleb128 0xc
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x40
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0x3
.uleb128 0x24
.byte 0x0
.uleb128 0x3
.uleb128 0x8
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3e
.uleb128 0xb
.byte 0x0
.byte 0x0
.byte 0x0
.section .debug_pubnames,"",@progbits
.long 0x1b
.value 0x2
.long .Ldebug_info0
.long 0x50
.long 0x29
.string "function"
.long 0x0
.section .debug_aranges,"",@progbits
.long 0x2c
.value 0x2
.long .Ldebug_info0
.byte 0x8
.byte 0x0
.value 0x0
.value 0x0
.quad .Ltext0
.quad .Letext0-.Ltext0
.quad 0x0
.quad 0x0
.section .debug_str,"MS",@progbits,1
.LASF0:
.string "GNU C 3.4.6"
.LASF1:
.string "undefined.c"
.LASF2:
.string "function"
/tlsie2.s
0,0 → 1,12
.text
.globl _start
_start:
leaq foo@GOTTPOFF(%rip), %rax
movq (%rax), %rax
.globl foo
.section .tdata,"awT",@progbits
.align 4
.type foo, @object
.size foo, 4
foo:
.long 100
/tlsie3.s
0,0 → 1,12
.text
.globl _start
_start:
leaq foo@GOTTPOFF(%rip), %r12
movq (%r12), %r12
.globl foo
.section .tdata,"awT",@progbits
.align 4
.type foo, @object
.size foo, 4
foo:
.long 100
/tlspic.td
0,0 → 1,16
#source: tlspic1.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -sj.tdata
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .tdata:
2011ac 11000000 12000000 13000000 14000000 .*
2011bc 15000000 16000000 17000000 18000000 .*
2011cc 41000000 42000000 43000000 44000000 .*
2011dc 45000000 46000000 47000000 48000000 .*
2011ec 01010000 02010000 03010000 04010000 .*
2011fc 05010000 06010000 07010000 08010000 .*
/tlsdesc.sd
0,0 → 1,23
#source: tlsdesc.s
#source: tlspic2.s
#as: --64
#ld: -shared -melf_x86_64
#objdump: -s -j.got -j.got.plt
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section \.got:
201308 00000000 00000000 00000000 00000000 .*
201318 00000000 00000000 00000000 00000000 .*
201328 00000000 00000000 00000000 00000000 .*
201338 00000000 00000000 00000000 00000000 .*
201348 00000000 00000000 .*
Contents of section \.got\.plt:
201350 b8112000 00000000 00000000 00000000 .*
201360 00000000 00000000 00000000 00000000 .*
201370 00000000 00000000 00000000 00000000 .*
201380 00000000 00000000 00000000 00000000 .*
201390 00000000 00000000 00000000 00000000 .*
2013a0 00000000 00000000 00000000 00000000 .*
2013b0 00000000 00000000 .*
/x86-64.exp
0,0 → 1,94
# Expect script for ld-x86_64 tests
# Copyright (C) 2002, 2005, 2006, 2007 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 x86_64 linking; all types of relocs. This tests the assembler and
# tools like objdump as well as the linker.
 
if { !([istarget "x86_64-*-elf*"]
|| [istarget "x86_64-*-linux*"]) } {
return
}
 
# List contains test-items with 3 items followed by 2 lists:
# 0:name 1:ld options 2:assembler options
# 3:filenames of assembler files 4: action and options. 5: 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 x86_64tests {
{"TLS -fpic -shared transitions" "-shared -melf_x86_64"
"--64" {tlspic1.s tlspic2.s}
{{readelf -WSsrl tlspic.rd} {objdump -drj.text tlspic.dd}
{objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
"libtlspic.so"}
{"TLS descriptor -fpic -shared transitions" "-shared -melf_x86_64"
"--64" {tlsdesc.s tlspic2.s}
{{readelf -WSsrld tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
{objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}
{objdump -drj.plt tlsdesc.pd}} "libtlsdesc.so"}
{"Helper shared library" "-shared -melf_x86_64"
"--64" {tlslib.s} {} "libtlslib.so"}
{"TLS -fpic and -fno-pic exec transitions"
"-melf_x86_64 tmpdir/libtlslib.so" "--64" {tlsbinpic.s tlsbin.s}
{{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
{objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
"tlsbin"}
{"TLS descriptor -fpic and -fno-pic exec transitions"
"-melf_x86_64 tmpdir/libtlslib.so" "--64" {tlsbindesc.s tlsbin.s}
{{readelf -WSsrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
{objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
"tlsbindesc"}
{"TLS with global dynamic and descriptors"
"-shared -melf_x86_64" "--64" {tlsgdesc.s}
{{readelf -WSsrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
"libtlsgdesc.so"}
{"TLS in debug sections" "-melf_x86_64"
"--64" {tlsg.s}
{{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
{"TLS GD->LE transition" "-melf_x86_64"
"--64" {tlsgd1.s}
{{objdump -dwr tlsgd1.dd}} "tlsgd1"}
{"TLS LD->LE transition" "-melf_x86_64"
"--64" {tlsld1.s}
{{objdump -dwr tlsld1.dd}} "tlsld1"}
{"TLS IE->LE transition" "-melf_x86_64"
"--64" {tlsie1.s}
{{objdump -dwr tlsie1.dd}} "tlsie1"}
}
 
run_ld_link_tests $x86_64tests
 
run_dump_test "abs"
run_dump_test "pcrel8"
run_dump_test "pcrel16"
run_dump_test "tlsgd2"
run_dump_test "tlsgd3"
run_dump_test "tlsie2"
run_dump_test "tlsie3"
run_dump_test "hidden1"
run_dump_test "hidden2"
run_dump_test "hidden3"
run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
/tlsgdesc.s
0,0 → 1,106
.text
.globl fc1
.type fc1,@function
fc1:
pushq %rbp
movq %rsp, %rbp
nop;nop;nop;nop
 
/* IE against global var. */
movq %fs:0, %rcx
nop;nop
addq sG3@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* IE against global var. */
movq %fs:0, %rcx
nop;nop
addq sG4@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* GD, gd first. */
.byte 0x66
leaq sG1@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
leaq sG1@tlsdesc(%rip), %rax
call *sG1@tlscall(%rax)
nop;nop;nop;nop
 
/* GD, desc first. */
leaq sG2@tlsdesc(%rip), %rax
call *sG2@tlscall(%rax)
nop;nop;nop;nop
 
.byte 0x66
leaq sG2@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE, gd first, after IE use. */
.byte 0x66
leaq sG3@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
leaq sG3@tlsdesc(%rip), %rax
call *sG3@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE, desc first, after IE use. */
leaq sG4@tlsdesc(%rip), %rax
call *sG4@tlscall(%rax)
nop;nop;nop;nop
 
.byte 0x66
leaq sG4@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* GD -> IE, gd first, before IE use. */
.byte 0x66
leaq sG5@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
leaq sG5@tlsdesc(%rip), %rax
call *sG5@tlscall(%rax)
nop;nop;nop;nop
 
/* GD -> IE, desc first, before IE use. */
leaq sG6@tlsdesc(%rip), %rax
call *sG6@tlscall(%rax)
nop;nop;nop;nop
 
.byte 0x66
leaq sG6@tlsgd(%rip), %rdi
.word 0x6666
rex64
call __tls_get_addr@plt
nop;nop;nop;nop
 
/* IE against global var. */
movq %fs:0, %rcx
nop;nop
addq sG5@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
/* IE against global var. */
movq %fs:0, %rcx
nop;nop
addq sG6@gottpoff(%rip), %rcx
nop;nop;nop;nop
 
leave
ret
/tlsg.s
0,0 → 1,12
.section .tbss,"awT",@nobits
.align 4
.skip 24
.type a,@object
.size a,4
a:
.zero 4
.text
.globl _start
_start:
.section .debug_foobar
.long a@dtpoff, 0
/tlsgdesc.rd
0,0 → 1,104
#source: tlsgdesc.s
#as: --64
#ld: -shared -melf64_x86_64
#readelf: -WSsrl
#target: x86_64-*-*
 
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]+\] \.plt +.*
+\[[ 0-9]+\] \.text +.*
+\[[ 0-9]+\] \.dynamic +.*
+\[[ 0-9]+\] \.got +.*
+\[[ 0-9]+\] \.got.plt +.*
+\[[ 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.*
LOAD.*
DYNAMIC.*
 
Section to Segment mapping:
Segment Sections...
00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
01 +.dynamic .got .got.plt *
02 +.dynamic *
 
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
[0-9a-f]+ 0+200000012 R_X86_64_TPOFF64 +0+ sG3 \+ 0
[0-9a-f]+ 0+300000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
[0-9a-f]+ 0+400000010 R_X86_64_DTPMOD64 +0+ sG2 \+ 0
[0-9a-f]+ 0+400000011 R_X86_64_DTPOFF64 +0+ sG2 \+ 0
[0-9a-f]+ 0+500000012 R_X86_64_TPOFF64 +0+ sG4 \+ 0
[0-9a-f]+ 0+800000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
[0-9a-f]+ 0+a00000010 R_X86_64_DTPMOD64 +0+ sG1 \+ 0
[0-9a-f]+ 0+a00000011 R_X86_64_DTPOFF64 +0+ sG1 \+ 0
 
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 3 entries:
+Offset +Info +Type +Symbol's Value Symbol's Name \+ Addend
[0-9a-f]+ 0+600000007 R_X86_64_JUMP_SLOT +0+ __tls_get_addr \+ 0
[0-9a-f]+ 0+a00000024 R_X86_64_TLSDESC +0+ sG1 \+ 0
[0-9a-f]+ 0+400000024 R_X86_64_TLSDESC +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-9a-f]+ +0 SECTION LOCAL DEFAULT +7 *
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG3
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG5
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG2
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG4
+[0-9]+: 0+ +0 NOTYPE GLOBAL DEFAULT UND __tls_get_addr
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG6
+[0-9]+: [0-9a-f]+ +0 FUNC +GLOBAL DEFAULT +7 fc1
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG1
+[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 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG3
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG5
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG2
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG4
+[0-9]+: 0+ +0 NOTYPE GLOBAL DEFAULT UND __tls_get_addr
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG6
+[0-9]+: [0-9a-f]+ +0 FUNC +GLOBAL DEFAULT +7 fc1
+[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT UND sG1
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS _edata
+[0-9]+: [0-9a-f]+ +0 NOTYPE GLOBAL DEFAULT ABS _end
/tlsg.sd
0,0 → 1,10
#source: tlsg.s
#as: --64
#ld: -melf_x86_64
#objdump: -sj.debug_foobar
#target: x86_64-*-*
 
.*: +file format elf64-x86-64
 
Contents of section .debug_foobar:
0+ 18000000 0+ +.*

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.