diff options
author | DJ Delorie <dj@redhat.com> | 2013-04-02 23:29:51 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2013-04-02 23:29:51 +0000 |
commit | 1122dc88f5900cef6759b5ab9ead418718ffbb3d (patch) | |
tree | 67fcdb8f67395243984c2da36f60dc6574c754a3 /bfd | |
parent | 2b6759ceee2300e4690f653997cc925cf4abfa48 (diff) | |
download | gdb-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/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-rl78.c | 12 |
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 */ |