mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-21 04:42:53 +08:00
36938cabf0
"Unambiguous" is is in particular taking as reference the assembler, which also accepts certain insns - despite them allowing for varying operand size, and hence in principle being ambiguous - without any suffix. For example, from the very beginning of the life of x86-64 I had trouble understanding why a plain and simple RET had to be printed as RETQ. In case someone really used the 16-bit form, RETW disambiguates the two quite fine.
164 lines
5.6 KiB
Plaintext
164 lines
5.6 KiB
Plaintext
#source: tlsgdesc.s
|
|
#as: --64
|
|
#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
|
|
#objdump: -drj.text -Mintel64
|
|
#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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*>
|
|
+[0-9a-f]+: [0-9a-f]{2} *
|
|
# -> R_X86_64_DTPMOD64 sG1
|
|
+[0-9a-f]+: 66 66 48 e8 ([0-9a-f]{2} ){3}[ ]+data16 data16 rex\.W call [0-9a-f]+ <__tls_get_addr@plt>
|
|
+[0-9a-f]+: [0-9a-f]{2} *
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> R_X86_64_TLSDESC sG1
|
|
+[0-9a-f]+: ff 10[ ]+call \*\(%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 ([0-9a-f]{2} ){4}[ ]+lea 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> R_X86_64_TLSDESC sG2
|
|
+[0-9a-f]+: ff 10[ ]+call \*\(%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 ([0-9a-f]{2} ){3}[ ]+data16 lea 0x[0-9a-f]+\(%rip\),%rdi +# [0-9a-f]+ <.*>
|
|
+[0-9a-f]+: [0-9a-f]{2} *
|
|
# -> R_X86_64_DTPMOD64 sG2
|
|
+[0-9a-f]+: 66 66 48 e8 ([0-9a-f]{2} ){3}[ ]+data16 data16 rex\.W call [0-9a-f]+ <__tls_get_addr@plt>
|
|
+[0-9a-f]+: [0-9a-f]{2} *
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+mov 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rax +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*>
|
|
# -> 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 ([0-9a-f]{2} ){4}[ ]+add 0x[0-9a-f]+\(%rip\),%rcx +# [0-9a-f]+ <.*>
|
|
# -> 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[ ]+leave *
|
|
+[0-9a-f]+: c3[ ]+ret *
|