summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorGunther Nikl <gnikl@justmail.de>2020-05-12 12:18:09 +0100
committerNick Clifton <nickc@redhat.com>2020-05-12 12:18:09 +0100
commit533f049e00492f00803c633fbd87a3f985000b22 (patch)
treee32999403bd7c1fc88f7fd79e090fa426d96566b /bfd
parentb4991d292edd84c16bd2050bd071198ceae764fe (diff)
downloadbinutils-gdb-533f049e00492f00803c633fbd87a3f985000b22.tar.gz
[PATCH] bfd: Fix 64-bit relocation handling for a.out
* aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported relocation size.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/aoutx.h20
2 files changed, 21 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 78527378867..34932e777f9 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-12 Gunther Nikl <gnikl@justmail.de>
+
+ * aoutx.h (NAME (aout, swap_std_reloc_out)): Reject an unsupported
+ relocation size.
+
2020-05-11 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (xlate_pcrel_opt): Handle lxvp and stxvp.
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index d5457461ab0..9ffb3fe8610 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -1946,10 +1946,22 @@ NAME (aout, swap_std_reloc_out) (bfd *abfd,
BFD_ASSERT (g->howto != NULL);
- if (bfd_get_reloc_size (g->howto) != 8)
- r_length = g->howto->size; /* Size as a power of two. */
- else
- r_length = 3;
+ switch (bfd_get_reloc_size (g->howto))
+ {
+ default:
+ _bfd_error_handler (_("%pB: unsupported AOUT relocation size: %d"),
+ abfd, bfd_get_reloc_size (g->howto));
+ bfd_set_error (bfd_error_bad_value);
+ return;
+ case 1:
+ case 2:
+ case 4:
+ r_length = g->howto->size; /* Size as a power of two. */
+ break;
+ case 8:
+ r_length = 3;
+ break;
+ }
r_pcrel = (int) g->howto->pc_relative; /* Relative to PC? */
/* XXX This relies on relocs coming from a.out files. */