aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2013-04-02 23:29:51 +0000
committerDJ Delorie <dj@redhat.com>2013-04-02 23:29:51 +0000
commit1122dc88f5900cef6759b5ab9ead418718ffbb3d (patch)
tree67fcdb8f67395243984c2da36f60dc6574c754a3 /bfd
parent2b6759ceee2300e4690f653997cc925cf4abfa48 (diff)
downloadgdb-1122dc88f5900cef6759b5ab9ead418718ffbb3d.zip
gdb-1122dc88f5900cef6759b5ab9ead418718ffbb3d.tar.gz
gdb-1122dc88f5900cef6759b5ab9ead418718ffbb3d.tar.bz2
* elf32-rl78.c (GET_RELOC): Assert that there are relocs to get.
(rl78_elf_relax_section): Only fetch the next reloc if there is one expected.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-rl78.c12
2 files changed, 17 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ddb4577..d854fd0 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2013-04-02 DJ Delorie <dj@redhat.com>
+
+ * elf32-rl78.c (GET_RELOC): Assert that there are relocs to get.
+ (rl78_elf_relax_section): Only fetch the next reloc if there is
+ one expected.
+
2013-03-30 Alan Modra <amodra@gmail.com>
PR ld/15323
diff --git a/bfd/elf32-rl78.c b/bfd/elf32-rl78.c
index 2130311..11d1ecc 100644
--- a/bfd/elf32-rl78.c
+++ b/bfd/elf32-rl78.c
@@ -2193,6 +2193,7 @@ rl78_elf_relax_section
+ srel->r_offset;
#define GET_RELOC \
+ BFD_ASSERT (nrelocs > 0); \
symval = OFFSET_FOR_RELOC (srel, &srel, &scale); \
pcrel = symval - pc + srel->r_addend; \
nrelocs --;
@@ -2233,7 +2234,13 @@ rl78_elf_relax_section
if (irel->r_addend & RL78_RELAXA_BRA)
{
- GET_RELOC;
+ /* SKIP opcodes that skip non-branches will have a relax tag
+ but no corresponding symbol to relax against; we just
+ skip those. */
+ if (irel->r_addend & RL78_RELAXA_RNUM)
+ {
+ GET_RELOC;
+ }
switch (insn[0])
{
@@ -2302,6 +2309,9 @@ rl78_elf_relax_section
/* For SKIP/BR, we change the BR opcode and delete the
SKIP. That way, we don't have to find and change the
relocation for the BR. */
+ /* Note that, for the case where we're skipping some
+ other insn, we have no "other" reloc but that's safe
+ here anyway. */
switch (insn[1])
{
case 0xc8: /* SKC */