diff options
author | Jan Beulich <jbeulich@suse.com> | 2021-05-03 13:25:12 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2021-05-03 13:25:12 +0200 |
commit | 4c398cc06d333fcb04772c04ea18db68587e8a1f (patch) | |
tree | e8f0dcc93460fdf17621e9d37ed13ec6beb9bff2 /bfd/elf64-x86-64.c | |
parent | d389a1a7692d247b6153fc6a98ebc43d7070fc2e (diff) | |
download | gdb-4c398cc06d333fcb04772c04ea18db68587e8a1f.zip gdb-4c398cc06d333fcb04772c04ea18db68587e8a1f.tar.gz gdb-4c398cc06d333fcb04772c04ea18db68587e8a1f.tar.bz2 |
x86: don't request useless overflow checking
Relocations with a bitsize matching the architecture's address width
can't usefully use an overflow checking approach other than "dont" or
"signed": All others involve perhaps complex calculations in
_bfd_relocate_contents() (or, not as severe, in bfd_check_overflow())
without ever finding anything to complain about - because of the address
width masking applied. Avoid this unnecessary overhead and switch all
such reloc types to "dont".
Note that "signed" checking with rela relocations (i.e. x86-64 here) is
only going to be useful if the addend actually got passed to
_bfd_relocate_contents() (and maybe others) instead of bogusly adding in
prior section contents (which apparently is assumed to be zero, and
hence again no overflow would ever be detected). See
https://sourceware.org/pipermail/binutils/2021-April/116164.html.
Diffstat (limited to 'bfd/elf64-x86-64.c')
-rw-r--r-- | bfd/elf64-x86-64.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 840555c..83a749e 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -47,7 +47,7 @@ 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, false), - HOWTO(R_X86_64_64, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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, false), HOWTO(R_X86_64_PC32, 0, 2, 32, true, 0, complain_overflow_signed, @@ -62,13 +62,13 @@ static reloc_howto_type x86_64_elf_howto_table[] = HOWTO(R_X86_64_COPY, 0, 2, 32, false, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_X86_64_COPY", false, 0xffffffff, 0xffffffff, false), - HOWTO(R_X86_64_GLOB_DAT, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), - HOWTO(R_X86_64_JUMP_SLOT, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), - HOWTO(R_X86_64_RELATIVE, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), HOWTO(R_X86_64_GOTPCREL, 0, 2, 32, true, 0, complain_overflow_signed, @@ -88,13 +88,13 @@ static reloc_howto_type x86_64_elf_howto_table[] = bfd_elf_generic_reloc, "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), - HOWTO(R_X86_64_DTPMOD64, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), - HOWTO(R_X86_64_DTPOFF64, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), - HOWTO(R_X86_64_TPOFF64, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), HOWTO(R_X86_64_TLSGD, 0, 2, 32, true, 0, complain_overflow_signed, @@ -112,10 +112,10 @@ static reloc_howto_type x86_64_elf_howto_table[] = 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), - HOWTO(R_X86_64_PC64, 0, 4, 64, true, 0, complain_overflow_bitfield, + 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, true), - HOWTO(R_X86_64_GOTOFF64, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), HOWTO(R_X86_64_GOTPC32, 0, 2, 32, true, 0, complain_overflow_signed, @@ -139,7 +139,7 @@ static reloc_howto_type x86_64_elf_howto_table[] = HOWTO(R_X86_64_SIZE32, 0, 2, 32, false, 0, complain_overflow_unsigned, bfd_elf_generic_reloc, "R_X86_64_SIZE32", false, 0xffffffff, 0xffffffff, false), - HOWTO(R_X86_64_SIZE64, 0, 4, 64, false, 0, complain_overflow_unsigned, + 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, false), HOWTO(R_X86_64_GOTPC32_TLSDESC, 0, 2, 32, true, 0, @@ -151,13 +151,13 @@ static reloc_howto_type x86_64_elf_howto_table[] = "R_X86_64_TLSDESC_CALL", false, 0, 0, false), HOWTO(R_X86_64_TLSDESC, 0, 4, 64, false, 0, - complain_overflow_bitfield, bfd_elf_generic_reloc, + complain_overflow_dont, bfd_elf_generic_reloc, "R_X86_64_TLSDESC", false, MINUS_ONE, MINUS_ONE, false), - HOWTO(R_X86_64_IRELATIVE, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), - HOWTO(R_X86_64_RELATIVE64, 0, 4, 64, false, 0, complain_overflow_bitfield, + 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), HOWTO(R_X86_64_PC32_BND, 0, 2, 32, true, 0, complain_overflow_signed, |