+2006-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf32-i386.c (elf_i386_relocate_section): Use xchg %ax,%ax
+ instead of 2 nops.
+ * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
+ (elf64_x86_64_plt0_entry): Use nopl 0(%rax) instead of 4 nops.
+
2006-06-29 Jakub Jelinek <jakub@redhat.com>
PR ld/2513
val = bfd_get_8 (input_bfd, contents + roff + 1);
BFD_ASSERT (val == 0x10);
- /* Now modify the instruction as appropriate. */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* Now modify the instruction as appropriate. Use
+ xchg %ax,%ax instead of 2 nops. */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
continue;
}
/* Now modify the instruction as appropriate. */
if (tls_type != GOT_TLS_IE_NEG)
{
- /* nop; nop */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* xchg %ax,%ax */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
}
else
{
0xff, 0x35, 8, 0, 0, 0, /* pushq GOT+8(%rip) */
0xff, 0x25, 16, 0, 0, 0, /* jmpq *GOT+16(%rip) */
- 0x90, 0x90, 0x90, 0x90 /* pad out to 16 bytes with nops. */
+ 0x0f, 0x1f, 0x40, 0x00 /* nopl 0(%rax) */
};
/* Subsequent entries in a procedure linkage table look like this. */
val = bfd_get_8 (input_bfd, contents + roff + 1);
BFD_ASSERT (val == 0x10);
- /* Now modify the instruction as appropriate. */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* Now modify the instruction as appropriate. Use
+ xchg %ax,%ax instead of 2 nops. */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
continue;
}
val = bfd_get_8 (input_bfd, contents + roff + 1);
BFD_ASSERT (val == 0x10);
- /* Now modify the instruction as appropriate. */
- bfd_put_8 (output_bfd, 0x90, contents + roff);
+ /* Now modify the instruction as appropriate. Use
+ xchg %ax,%ax instead of 2 nops. */
+ bfd_put_8 (output_bfd, 0x66, contents + roff);
bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
continue;
+2006-06-30 H.J. Lu <hongjiu.lu@intel.com>
+
+ * ld-i386/tlsbindesc.dd: Updated to expect xchg %ax,%ax instead
+ of 2 nops.
+ * ld-i386/tlsdesc.dd: Likewise.
+ * ld-i386/tlsgdesc.dd: Likewise.
+ * ld-x86-64/tlsbindesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.dd: Likewise.
+ * ld-x86-64/tlsdesc.pd: Likewise.
+ * ld-x86-64/tlsgdesc.dd: Likewise.
+
2006-06-29 Jakub Jelinek <jakub@redhat.com>
PR ld/2513
# the variable is referenced through @gotntpoff too
[0-9a-f]+: 8b 83 dc ff ff ff[ ]+mov 0xffffffdc\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# the variable is referenced through @gottpoff and @gotntpoff too
[0-9a-f]+: 8b 83 f0 ff ff ff[ ]+mov 0xfffffff0\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sG4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8d 05 00 f0 ff ff[ ]+lea 0xfffff000,%eax
# sg1
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8d 05 20 f0 ff ff[ ]+lea 0xfffff020,%eax
# sl1
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8d 05 40 f0 ff ff[ ]+lea 0xfffff040,%eax
# sh1
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [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]+: 8d 05 00 f0 ff ff[ ]+lea 0xfffff000,%eax
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 8d 90 20 f0 ff ff[ ]+lea 0xfffff020\(%eax\),%edx
[0-9a-f]+: 90[ ]+nop *
# LD -> LE against hidden variables
[0-9a-f]+: 8d 05 00 f0 ff ff[ ]+lea 0xfffff000,%eax
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 8d 90 40 f0 ff ff[ ]+lea 0xfffff040\(%eax\),%edx
# GD -> IE because variable is referenced through @gotntpoff too
[0-9a-f]+: 8b 83 c4 ff ff ff[ ]+mov 0xffffffc4\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 d4 ff ff ff[ ]+mov 0xffffffd4\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sg4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 b4 ff ff ff[ ]+mov 0xffffffb4\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sl3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 bc ff ff ff[ ]+mov 0xffffffbc\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sl4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 c8 ff ff ff[ ]+mov 0xffffffc8\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sh3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 e8 ff ff ff[ ]+mov 0xffffffe8\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sh4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 ec ff ff ff[ ]+mov 0xffffffec\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sH3
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 e0 ff ff ff[ ]+mov 0xffffffe0\(%ebx\),%eax
# ->R_386_TLS_TPOFF32 sH4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 8b 83 f0 ff ff ff[ ]+mov 0xfffffff0\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG4
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [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]+: 8b 83 e4 ff ff ff[ ]+mov 0xffffffe4\(%ebx\),%eax
# ->R_386_TLS_TPOFF sG5
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# GD -> IE because variable is not defined in executable
[0-9a-f]+: 48 8b 05 65 03 20 00[ ]+mov 2098021\(%rip\),%rax +# 601370 <.*>
# -> R_X86_64_TPOFF64 sG1
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
[0-9a-f]+: 90[ ]+nop *
# the variable is referenced through IE too
[0-9a-f]+: 48 8b 05 48 03 20 00[ ]+mov 2097992\(%rip\),%rax +# 601360 <.*>
# -> R_X86_64_TPOFF64 sG2
- [0-9a-f]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 66 90[ ]+xchg %ax,%ax
[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]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [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]+: 90[ ]+nop *
- [0-9a-f]+: 90[ ]+nop *
+ [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 0xf+81\(%rax\),%rdx
# GD -> IE because variable is referenced through IE too
+[0-9a-f]+: 48 8b 05 1c 03 20 00[ ]+mov 2097948\(%rip\),%rax +# 201338 <.*>
# -> R_X86_64_TPOFF64 sg2
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[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 2097874\(%rip\),%rax +# 201308 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x24
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[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 2097904\(%rip\),%rax +# 201340 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x44
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[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 2097838\(%rip\),%rax +# 201318 <.*>
# -> R_X86_64_TPOFF64 *ABS*+0x64
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
0000000000000470 <.*@plt-0x10>:
470: ff 35 e2 0e 20 00 pushq 2100962\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
476: ff 25 e4 0e 20 00 jmpq \*2100964\(%rip\) # 201360 <_GLOBAL_OFFSET_TABLE_\+0x10>
- 47c: 90 nop *
- 47d: 90 nop *
- 47e: 90 nop *
- 47f: 90 nop *
+ 47c: 0f 1f 40 00 nopl 0x0\(%rax\)
0000000000000480 <.*@plt>:
480: ff 35 d2 0e 20 00 pushq 2100946\(%rip\) # 201358 <_GLOBAL_OFFSET_TABLE_\+0x8>
486: ff 25 bc 0e 20 00 jmpq \*2100924\(%rip\) # 201348 <_DYNAMIC\+0x190>
- 48c: 90 nop *
- 48d: 90 nop *
- 48e: 90 nop *
- 48f: 90 nop *
+ 48c: 0f 1f 40 00 nopl 0x0\(%rax\)
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 48 8b 05 e7 01 20 00[ ]+mov 2097639\(%rip\),%rax +# 200660 <.*>
# -> R_X86_64_TPOFF64 sG3
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[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 2097658\(%rip\),%rax +# 200680 <.*>
# -> R_X86_64_TPOFF64 sG4
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[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]+: 48 8b 05 ad 01 20 00[ ]+mov 2097581\(%rip\),%rax +# 200668 <.*>
# -> R_X86_64_TPOFF64 sG5
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[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 2097600\(%rip\),%rax +# 200688 <.*>
# -> R_X86_64_TPOFF64 sG6
- +[0-9a-f]+: 90[ ]+nop *
- +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 66 90[ ]+xchg %ax,%ax
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *
+[0-9a-f]+: 90[ ]+nop *