6eaa7fb59b
We can generate i386 TLS code sequences for general and local dynamic models without PLT, which uses indirect call via GOT: call *___tls_get_addr@GOT(%reg) where EBX register isn't required as GOT base, instead of direct call: call ___tls_get_addr[@PLT] which requires EBX register as GOT base. Since direct call is 4-byte long and indirect call, is 5-byte long, the extra one byte must be handled properly. For general dynamic model, 7-byte lea instruction before call instruction is replaced by 6-byte one to make room for indirect call. For local dynamic model, we simply use 5-byte indirect call. TLS linker optimization is updated to recognize new instruction patterns. For local dynamic model to local exec model transition, we generate a 6-byte lea instruction as nop, instead of a 1-byte nop plus a 4-byte lea instruction. Since linker may convert call ___tls_get_addr[@PLT] to addr32 call ____tls_get_addr when producing static executable, both patterns are recognized. bfd/ * elf64-i386.c (elf_i386_link_hash_entry): Add tls_get_addr. (elf_i386_link_hash_newfunc): Initialize tls_get_addr to 2. (elf_i386_check_tls_transition): Check indirect call and direct call with the addr32 prefix for general and local dynamic models. Set the tls_get_addr feild. (elf_i386_convert_load_reloc): Always use addr32 prefix for indirect ___tls_get_addr call via GOT. (elf_i386_relocate_section): Handle GD->LE, GD->IE and LD->LE transitions with indirect call and direct call with the addr32 prefix. ld/ * testsuite/ld-i386/i386.exp: Run libtlspic2.so, tlsbin2, tlsgd3, tlsld2, tlsgd4, tlspie3a, tlspie3b and tlspie3c. * testsuite/ld-i386/pass.out: New file. * testsuite/ld-i386/tls-def1.c: Likewise. * testsuite/ld-i386/tls-gd1.S: Likewise. * testsuite/ld-i386/tls-ld1.S: Likewise. * testsuite/ld-i386/tls-main1.c: Likewise. * testsuite/ld-i386/tls.exp: Likewise. * testsuite/ld-i386/tlsbin2-nacl.rd: Likewise. * testsuite/ld-i386/tlsbin2.dd: Likewise. * testsuite/ld-i386/tlsbin2.rd: Likewise. * testsuite/ld-i386/tlsbin2.sd: Likewise. * testsuite/ld-i386/tlsbin2.td: Likewise. * testsuite/ld-i386/tlsbinpic2.s: Likewise. * testsuite/ld-i386/tlsgd3.dd: Likewise. * testsuite/ld-i386/tlsgd3.s: Likewise. * testsuite/ld-i386/tlsgd4.d: Likewise. * testsuite/ld-i386/tlsgd4.s: Likewise. * testsuite/ld-i386/tlsld2.s: Likewise. * testsuite/ld-i386/tlspic2-nacl.rd: Likewise. * testsuite/ld-i386/tlspic2.dd: Likewise. * testsuite/ld-i386/tlspic2.rd: Likewise. * testsuite/ld-i386/tlspic2.sd: Likewise. * testsuite/ld-i386/tlspic2.td: Likewise. * testsuite/ld-i386/tlspic3.s: Likewise. * testsuite/ld-i386/tlspie3.s: Likewise. * testsuite/ld-i386/tlspie3a.d: Likewise. * testsuite/ld-i386/tlspie3b.d: Likewise. * testsuite/ld-i386/tlspie3c.d: Likewise.
405 lines
14 KiB
Text
405 lines
14 KiB
Text
#source: tlspic3.s
|
|
#source: tlspic2.s
|
|
#as: --32
|
|
#ld: -shared -melf_i386 --no-ld-generated-unwind-info
|
|
#objdump: -drj.text
|
|
#target: i?86-*-*
|
|
|
|
.*: +file format elf32-i386.*
|
|
|
|
Disassembly of section .text:
|
|
|
|
[0-9a-f]+ <fn1>:
|
|
+[0-9a-f]+: 55[ ]+push %ebp
|
|
+[0-9a-f]+: 89 e5[ ]+mov %esp,%ebp
|
|
+[0-9a-f]+: 53[ ]+push %ebx
|
|
+[0-9a-f]+: 50[ ]+push %eax
|
|
+[0-9a-f]+: e8 00 00 00 00[ ]+call [0-9a-f]+ <.*>
|
|
+[0-9a-f]+: 5b[ ]+pop %ebx
|
|
+[0-9a-f]+: 81 c3 ([0-9a-f]{2} ){4}[ ]+add \$0x[0-9a-f]+,%ebx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# GD
|
|
+[0-9a-f]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_DTPMOD32 sg1
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%ebx\)
|
|
# ->R_386_GLOB_DAT ___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 because variable is referenced through @gottpoff too
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ecx\),%eax
|
|
# ->R_386_TLS_TPOFF32 sg2
|
|
+[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 @gotntpoff too
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%edx\),%eax
|
|
# ->R_386_TLS_TPOFF sg3
|
|
+[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 @gottpoff and
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%edi\),%eax
|
|
# ->R_386_TLS_TPOFF32 sg4
|
|
+[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]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%esi\),%eax
|
|
# ->R_386_TLS_DTPMOD32
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%esi\)
|
|
# ->R_386_GLOB_DAT ___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 against local variable referenced through @gottpoff too
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebp\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[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 @gotntpoff
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[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 @gottpoff and
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[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]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_DTPMOD32
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%ebx\)
|
|
# ->R_386_GLOB_DAT ___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 against hidden and local variable referenced through @gottpoff too
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[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 @gotntpoff too
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[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 @gottpoff and @gotntpoff too
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[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]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_DTPMOD32
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%ebx\)
|
|
# ->R_386_GLOB_DAT ___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 against hidden but not local variable referenced through
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[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
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[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
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# LD
|
|
+[0-9a-f]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_DTPMOD32
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%ebx\)
|
|
# ->R_386_GLOB_DAT ___tls_get_addr
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8d 90 20 00 00 00[ ]+lea 0x20\(%eax\),%edx
|
|
# sl1
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8d 88 26 00 00 00[ ]+lea 0x26\(%eax\),%ecx
|
|
# sl2+2
|
|
+[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]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%ecx\),%eax
|
|
# ->R_386_TLS_DTPMOD32
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%ecx\)
|
|
# ->R_386_GLOB_DAT ___tls_get_addr
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8d 90 40 00 00 00[ ]+lea 0x40\(%eax\),%edx
|
|
# sh1
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8d 88 47 00 00 00[ ]+lea 0x47\(%eax\),%ecx
|
|
# sh2+3
|
|
+[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]+: 8d ([0-9a-f]{2} ){5}[ ]+lea -0x[0-9a-f]+\(%edx\),%eax
|
|
# ->R_386_TLS_DTPMOD32
|
|
+[0-9a-f]+: ff ([0-9a-f]{2} ){5}[ ]+call \*-0x[0-9a-f]+\(%edx\)
|
|
# ->R_386_GLOB_DAT ___tls_get_addr
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8d 90 60 00 00 00[ ]+lea 0x60\(%eax\),%edx
|
|
# sH1
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8d 88 65 00 00 00[ ]+lea 0x65\(%eax\),%ecx
|
|
# sH2+1
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against global var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF32 sg2
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against global var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32 sg4
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against global var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF sg3
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against global var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF sg4
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against local var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF32 [0xdcffffff]
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against local var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against local var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against local var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against hidden and local var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF32
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against hidden and local var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against hidden and local var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against hidden and local var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against hidden but not local var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF32
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gottpoff IE against hidden but not local var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 2b ([0-9a-f]{2} ){5}[ ]+sub -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF32
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against hidden but not local var
|
|
+[0-9a-f]+: 65 8b 0d 00 00 00 00[ ]+mov %gs:0x0,%ecx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against hidden but not local var
|
|
+[0-9a-f]+: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 03 ([0-9a-f]{2} ){5}[ ]+add -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# Direct access through %gs
|
|
# @gotntpoff IE against global var
|
|
+[0-9a-f]+: 8b ([0-9a-f]{2} ){5}[ ]+mov -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF sg5
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against local var
|
|
+[0-9a-f]+: 8b ([0-9a-f]{2} ){5}[ ]+mov -0x[0-9a-f]+\(%ebx\),%eax
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 65 8b 10[ ]+mov %gs:\(%eax\),%edx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against hidden and local var
|
|
+[0-9a-f]+: 8b ([0-9a-f]{2} ){5}[ ]+mov -0x[0-9a-f]+\(%ebx\),%edx
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 65 8b 12[ ]+mov %gs:\(%edx\),%edx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
# @gotntpoff IE against hidden but not local var
|
|
+[0-9a-f]+: 8b ([0-9a-f]{2} ){5}[ ]+mov -0x[0-9a-f]+\(%ebx\),%ecx
|
|
# ->R_386_TLS_TPOFF
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 65 8b 11[ ]+mov %gs:\(%ecx\),%edx
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 90[ ]+nop *
|
|
+[0-9a-f]+: 8b 5d fc[ ]+mov -0x4\(%ebp\),%ebx
|
|
+[0-9a-f]+: c9[ ]+leave *
|
|
+[0-9a-f]+: c3[ ]+ret *
|