diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a005887256..90d90d258f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-10-01 Jakub Jelinek + + * elf32-i386.c (elf_i386_relocate_section): Fix + movl foo@indntpoff, %eax IE->LE transition. + 2002-10-01 Jakub Jelinek * elf64-x86-64.c (elf64_x86_64_relocate_section): Change TLSGD diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 6bd277e636..87e1e76646 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2625,7 +2625,7 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section, if (val == 0xa1) { /* movl foo, %eax. */ - bfd_put_8 (output_bfd, 0xb8, contents + rel->r_offset - 2); + bfd_put_8 (output_bfd, 0xb8, contents + rel->r_offset - 1); } else if (type == 0x8b) { diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 1e91d598dd..d9b35f6eed 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2002-10-01 Jakub Jelinek + + * ld-i386/i386.exp: Add tlsindntpoff test. + * ld-i386/tlsindntpoff.s: New test. + * ld-i386/tlsindntpoff.dd: New test. + 2002-10-01 Jakub Jelinek * ld-x86-64/tlspic1.s: Change TLSGD sequences. diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 795efc218d..846847e2b4 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -55,6 +55,8 @@ set i386tests { {"TLS in debug sections" "-melf_i386" "--32" {tlsg.s} {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"} + {"TLS @indntpoff with %eax" "-melf_i386" "--32" {tlsindntpoff.s} + {{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"} {"Reloc section order" "-shared -melf_i386" "--32" {reloc.s} {{objdump -hw reloc.d}} "reloc.so"} } diff --git a/ld/testsuite/ld-i386/tlsindntpoff.dd b/ld/testsuite/ld-i386/tlsindntpoff.dd new file mode 100644 index 0000000000..db20de1d93 --- /dev/null +++ b/ld/testsuite/ld-i386/tlsindntpoff.dd @@ -0,0 +1,16 @@ +#source: tlsindntpoff.s +#as: --32 +#ld: -melf_i386 +#objdump: -drj.text +#target: i?86-*-* + +.*: +file format elf32-i386 + +Disassembly of section .text: + +[0-9a-f]+000 <_start>: + [0-9a-f]+000: 39 d8[ ]+cmp %ebx,%eax + [0-9a-f]+002: 73 08[ ]+jae [0-9a-f]+00c <_start\+0xc> + [0-9a-f]+004: b8 fc ff ff ff[ ]+mov \$0xfffffffc,%eax + [0-9a-f]+009: 65 8b 00[ ]+mov %gs:\(%eax\),%eax + [0-9a-f]+00c: c3[ ]+ret * diff --git a/ld/testsuite/ld-i386/tlsindntpoff.s b/ld/testsuite/ld-i386/tlsindntpoff.s new file mode 100644 index 0000000000..4bc93f6327 --- /dev/null +++ b/ld/testsuite/ld-i386/tlsindntpoff.s @@ -0,0 +1,19 @@ + /* Force .got aligned to 4K, so it very likely gets at 0x804a100 + (0x60 bytes .tdata and 0xa0 bytes .dynamic) */ + .data + .balign 4096 + .section ".tdata", "awT", @progbits + .globl foo +foo: .long 27 + + /* Force .text aligned to 4K, so it very likely gets at 0x8049000. */ + .text + .balign 4096 + .globl _start + .type _start,@function +_start: + cmp %ebx, %eax + jae 1f + movl foo@indntpoff, %eax + movl %gs:(%eax), %eax +1: ret