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+ +.* |