Fix relocation bug
Bo Thorsen
bo@suse.de
Wed Feb 28 02:06:00 GMT 2001
This bugfix feels wrong, so I would like some feedback on why it is
necessary and perhaps a better way to fix it.
The problem was that R_X86_64_PC32 relocations were calculated
wrong. Replacing the bfd_elf_generic_reloc with zeros in the howto table
solved it, but it is probably not correct to do this for all entries.
I'll investigate some of the specialized implementations of this entry,
but I would appreciate it if someone could shed some light on the possible
problem here.
2001-02-28 Bo Thorsen <bo@suse.de>
* elf64-x86-64.c (x86_64_elf_howto_table): Replace
bfd_elf_generic_reloc with zero. Fixes a bug in relocations.
Index: elf64-x86-64.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-x86-64.c,v
retrieving revision 1.9
diff -u -r1.9 elf64-x86-64.c
--- elf64-x86-64.c 2001/02/26 07:50:22 1.9
+++ elf64-x86-64.c 2001/02/28 09:53:47
@@ -37,37 +37,37 @@
static reloc_howto_type x86_64_elf_howto_table[] =
{
HOWTO(R_X86_64_NONE, 0, 0, 0, false, 0, complain_overflow_dont,
- bfd_elf_generic_reloc, "R_X86_64_NONE", false, 0x00000000, 0x00000000, false),
+ 0, "R_X86_64_NONE", false, 0x00000000, 0x00000000, false),
HOWTO(R_X86_64_64, 0, 4, 64, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_64", false, MINUS_ONE, MINUS_ONE, false),
+ 0, "R_X86_64_64", false, MINUS_ONE, MINUS_ONE, false),
HOWTO(R_X86_64_PC32, 0, 4, 32, true, 0, complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0xffffffff, 0xffffffff, true),
+ 0, "R_X86_64_PC32", false, 0xffffffff, 0xffffffff, true),
HOWTO(R_X86_64_GOT32, 0, 4, 32, false, 0, complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_GOT32", false, 0xffffffff, 0xffffffff, false),
+ 0, "R_X86_64_GOT32", false, 0xffffffff, 0xffffffff, false),
HOWTO(R_X86_64_PLT32, 0, 4, 32, true, 0, complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_PLT32", false, 0xffffffff, 0xffffffff, true),
+ 0, "R_X86_64_PLT32", false, 0xffffffff, 0xffffffff, true),
HOWTO(R_X86_64_COPY, 0, 4, 32, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_COPY", false, 0xffffffff, 0xffffffff, false),
+ 0, "R_X86_64_COPY", false, 0xffffffff, 0xffffffff, false),
HOWTO(R_X86_64_GLOB_DAT, 0, 4, 64, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_GLOB_DAT", false, MINUS_ONE, MINUS_ONE, false),
+ 0, "R_X86_64_GLOB_DAT", false, MINUS_ONE, MINUS_ONE, false),
HOWTO(R_X86_64_JUMP_SLOT, 0, 4, 64, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_JUMP_SLOT", false, MINUS_ONE, MINUS_ONE, false),
+ 0, "R_X86_64_JUMP_SLOT", false, MINUS_ONE, MINUS_ONE, false),
HOWTO(R_X86_64_RELATIVE, 0, 4, 64, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_RELATIVE", false, MINUS_ONE, MINUS_ONE, false),
+ 0, "R_X86_64_RELATIVE", false, MINUS_ONE, MINUS_ONE, false),
HOWTO(R_X86_64_GOTPCREL, 0, 4, 32, true,0 , complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", false, 0xffffffff, 0xffffffff, true),
+ 0, "R_X86_64_GOTPCREL", false, 0xffffffff, 0xffffffff, true),
HOWTO(R_X86_64_32, 0, 4, 32, false, 0, complain_overflow_unsigned,
- bfd_elf_generic_reloc, "R_X86_64_32", false, 0xffffffff, 0xffffffff, false),
+ 0, "R_X86_64_32", false, 0xffffffff, 0xffffffff, false),
HOWTO(R_X86_64_32S, 0, 4, 32, false, 0, complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_32S", false, 0xffffffff, 0xffffffff, false),
+ 0, "R_X86_64_32S", false, 0xffffffff, 0xffffffff, false),
HOWTO(R_X86_64_16, 0, 1, 16, false, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_16", false, 0xffff, 0xffff, false),
+ 0, "R_X86_64_16", false, 0xffff, 0xffff, false),
HOWTO(R_X86_64_PC16,0, 1, 16, true, 0, complain_overflow_bitfield,
- bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0xffff, 0xffff, true),
+ 0, "R_X86_64_PC16", false, 0xffff, 0xffff, true),
HOWTO(R_X86_64_8, 0, 0, 8, false, 0, complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_8", false, 0xff, 0xff, false),
+ 0, "R_X86_64_8", false, 0xff, 0xff, false),
HOWTO(R_X86_64_PC8, 0, 0, 8, true, 0, complain_overflow_signed,
- bfd_elf_generic_reloc, "R_X86_64_PC8", false, 0xff, 0xff, true)
+ 0, "R_X86_64_PC8", false, 0xff, 0xff, true)
};
/* Map BFD relocs to the x86_64 elf relocs. */
Bo.
--
Bo Thorsen | Lahnsgade 31, st.
Free software developer | 5000 Odense C
SuSE Labs | Denmark
More information about the Binutils
mailing list