diff options
author | Jan Beulich <jbeulich@suse.com> | 2021-05-07 12:05:12 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2021-05-07 12:05:12 +0200 |
commit | 17c6c3b99156fe82c1e637e1a5fd9f163ac788c8 (patch) | |
tree | 71c76cc1471f142456595eea8af28d3e1eadb1ee /bfd | |
parent | 98da05bf2698b55b73453480a3fbb92f163d2c7b (diff) | |
download | gdb-17c6c3b99156fe82c1e637e1a5fd9f163ac788c8.zip gdb-17c6c3b99156fe82c1e637e1a5fd9f163ac788c8.tar.gz gdb-17c6c3b99156fe82c1e637e1a5fd9f163ac788c8.tar.bz2 |
x86-64/ELF: clear src_mask for all reloc types
x86-64 uses rela relocations. The comment next to the field's declaration
says "Non-zero values for ELF USE_RELA targets should be viewed with
suspicion ..." And indeed the fields being non-zero causes section
contents to be accumulated into the final relocated values in addition to
the relocations' addends, which is contrary to the ELF spec.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 132 |
2 files changed, 70 insertions, 67 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0b1e3d4..dd517a9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2021-05-07 Jan Beulich <jbeulich@suse.com> + + * elf64-x86-64.c (x86_64_elf_howto_table): Set src_mask fields + to zero. + 2021-05-07 Alan Modra <amodra@gmail.com> * bfd-in2.h: Regenerate. diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 83a749e..d0c994e 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -45,133 +45,131 @@ static reloc_howto_type x86_64_elf_howto_table[] = { HOWTO(R_X86_64_NONE, 0, 3, 0, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_NONE", false, 0x00000000, 0x00000000, + bfd_elf_generic_reloc, "R_X86_64_NONE", false, 0, 0x00000000, false), HOWTO(R_X86_64_64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_64", false, MINUS_ONE, MINUS_ONE, + bfd_elf_generic_reloc, "R_X86_64_64", false, 0, MINUS_ONE, false), HOWTO(R_X86_64_PC32, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_PC32", false, 0, 0xffffffff, true), HOWTO(R_X86_64_GOT32, 0, 2, 32, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOT32", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_GOT32", false, 0, 0xffffffff, false), HOWTO(R_X86_64_PLT32, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_PLT32", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_PLT32", false, 0, 0xffffffff, true), HOWTO(R_X86_64_COPY, 0, 2, 32, false, 0, complain_overflow_bitfield, - bfd_elf_generic_reloc, "R_X86_64_COPY", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_COPY", false, 0, 0xffffffff, false), HOWTO(R_X86_64_GLOB_DAT, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_GLOB_DAT", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_GLOB_DAT", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_JUMP_SLOT, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_JUMP_SLOT", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_JUMP_SLOT", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_RELATIVE, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_RELATIVE", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_RELATIVE", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_GOTPCREL, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", false, 0xffffffff, - 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_GOTPCREL", false, 0, 0xffffffff, + true), HOWTO(R_X86_64_32, 0, 2, 32, false, 0, complain_overflow_unsigned, - bfd_elf_generic_reloc, "R_X86_64_32", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_32", false, 0, 0xffffffff, false), HOWTO(R_X86_64_32S, 0, 2, 32, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_32S", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_32S", false, 0, 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), + bfd_elf_generic_reloc, "R_X86_64_16", false, 0, 0xffff, false), HOWTO(R_X86_64_PC16, 0, 1, 16, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0xffff, 0xffff, true), + bfd_elf_generic_reloc, "R_X86_64_PC16", false, 0, 0xffff, true), HOWTO(R_X86_64_8, 0, 0, 8, false, 0, complain_overflow_bitfield, - bfd_elf_generic_reloc, "R_X86_64_8", false, 0xff, 0xff, false), + bfd_elf_generic_reloc, "R_X86_64_8", false, 0, 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), + bfd_elf_generic_reloc, "R_X86_64_PC8", false, 0, 0xff, true), HOWTO(R_X86_64_DTPMOD64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_DTPMOD64", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_DTPMOD64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_DTPOFF64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_DTPOFF64", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_DTPOFF64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_TPOFF64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_TPOFF64", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_TPOFF64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_TLSGD, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_TLSGD", false, 0xffffffff, - 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_TLSGD", false, 0, 0xffffffff, + true), HOWTO(R_X86_64_TLSLD, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_TLSLD", false, 0xffffffff, - 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_TLSLD", false, 0, 0xffffffff, + true), HOWTO(R_X86_64_DTPOFF32, 0, 2, 32, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_DTPOFF32", false, 0xffffffff, - 0xffffffff, false), + bfd_elf_generic_reloc, "R_X86_64_DTPOFF32", false, 0, 0xffffffff, + false), HOWTO(R_X86_64_GOTTPOFF, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTTPOFF", false, 0xffffffff, - 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_GOTTPOFF", false, 0, 0xffffffff, + true), HOWTO(R_X86_64_TPOFF32, 0, 2, 32, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_TPOFF32", false, 0xffffffff, - 0xffffffff, false), + bfd_elf_generic_reloc, "R_X86_64_TPOFF32", false, 0, 0xffffffff, + false), HOWTO(R_X86_64_PC64, 0, 4, 64, true, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_PC64", false, MINUS_ONE, MINUS_ONE, + bfd_elf_generic_reloc, "R_X86_64_PC64", false, 0, MINUS_ONE, true), HOWTO(R_X86_64_GOTOFF64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_GOTOFF64", - false, MINUS_ONE, MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_GOTOFF64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_GOTPC32, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTPC32", - false, 0xffffffff, 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_GOTPC32", false, 0, 0xffffffff, + true), HOWTO(R_X86_64_GOT64, 0, 4, 64, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOT64", false, MINUS_ONE, MINUS_ONE, + bfd_elf_generic_reloc, "R_X86_64_GOT64", false, 0, MINUS_ONE, false), HOWTO(R_X86_64_GOTPCREL64, 0, 4, 64, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTPCREL64", false, MINUS_ONE, - MINUS_ONE, true), + bfd_elf_generic_reloc, "R_X86_64_GOTPCREL64", false, 0, MINUS_ONE, + true), HOWTO(R_X86_64_GOTPC64, 0, 4, 64, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTPC64", - false, MINUS_ONE, MINUS_ONE, true), + bfd_elf_generic_reloc, "R_X86_64_GOTPC64", false, 0, MINUS_ONE, + true), HOWTO(R_X86_64_GOTPLT64, 0, 4, 64, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTPLT64", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_GOTPLT64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_PLTOFF64, 0, 4, 64, false, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_PLTOFF64", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_PLTOFF64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_SIZE32, 0, 2, 32, false, 0, complain_overflow_unsigned, - bfd_elf_generic_reloc, "R_X86_64_SIZE32", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_SIZE32", false, 0, 0xffffffff, false), HOWTO(R_X86_64_SIZE64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_SIZE64", false, MINUS_ONE, MINUS_ONE, + bfd_elf_generic_reloc, "R_X86_64_SIZE64", false, 0, MINUS_ONE, false), HOWTO(R_X86_64_GOTPC32_TLSDESC, 0, 2, 32, true, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, - "R_X86_64_GOTPC32_TLSDESC", - false, 0xffffffff, 0xffffffff, true), + "R_X86_64_GOTPC32_TLSDESC", false, 0, 0xffffffff, true), HOWTO(R_X86_64_TLSDESC_CALL, 0, 3, 0, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, "R_X86_64_TLSDESC_CALL", false, 0, 0, false), HOWTO(R_X86_64_TLSDESC, 0, 4, 64, false, 0, complain_overflow_dont, bfd_elf_generic_reloc, - "R_X86_64_TLSDESC", - false, MINUS_ONE, MINUS_ONE, false), + "R_X86_64_TLSDESC", false, 0, MINUS_ONE, false), HOWTO(R_X86_64_IRELATIVE, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_RELATIVE64, 0, 4, 64, false, 0, complain_overflow_dont, - bfd_elf_generic_reloc, "R_X86_64_RELATIVE64", false, MINUS_ONE, - MINUS_ONE, false), + bfd_elf_generic_reloc, "R_X86_64_RELATIVE64", false, 0, MINUS_ONE, + false), HOWTO(R_X86_64_PC32_BND, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_PC32_BND", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_PC32_BND", false, 0, 0xffffffff, true), HOWTO(R_X86_64_PLT32_BND, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_PLT32_BND", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_PLT32_BND", false, 0, 0xffffffff, true), HOWTO(R_X86_64_GOTPCRELX, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_GOTPCRELX", false, 0xffffffff, - 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_GOTPCRELX", false, 0, 0xffffffff, + true), HOWTO(R_X86_64_REX_GOTPCRELX, 0, 2, 32, true, 0, complain_overflow_signed, - bfd_elf_generic_reloc, "R_X86_64_REX_GOTPCRELX", false, 0xffffffff, - 0xffffffff, true), + bfd_elf_generic_reloc, "R_X86_64_REX_GOTPCRELX", false, 0, 0xffffffff, + true), /* We have a gap in the reloc numbers here. R_X86_64_standard counts the number up to this point, and @@ -191,7 +189,7 @@ static reloc_howto_type x86_64_elf_howto_table[] = /* Use complain_overflow_bitfield on R_X86_64_32 for x32. */ HOWTO(R_X86_64_32, 0, 2, 32, false, 0, complain_overflow_bitfield, - bfd_elf_generic_reloc, "R_X86_64_32", false, 0xffffffff, 0xffffffff, + bfd_elf_generic_reloc, "R_X86_64_32", false, 0, 0xffffffff, false) }; |