diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 1999-06-03 19:12:54 +0000 |
---|---|---|
committer | Joern Rennecke <joern.rennecke@embecosm.com> | 1999-06-03 19:12:54 +0000 |
commit | 06e1ba78a095ad4a09894bbd1efd83c79ab3e2fe (patch) | |
tree | a9cd5437fba0cba8b3d165b4ce4bebeac3d15c28 | |
parent | 084aa3aa9f448323ca9af578ae1d405f82717410 (diff) | |
download | gdb-06e1ba78a095ad4a09894bbd1efd83c79ab3e2fe.zip gdb-06e1ba78a095ad4a09894bbd1efd83c79ab3e2fe.tar.gz gdb-06e1ba78a095ad4a09894bbd1efd83c79ab3e2fe.tar.bz2 |
* elf32-sh.c (sh_elf_relax_delete_bytes): Fix setting of
start / stop for recalculating of r_addend of R_SH_SWITCH*.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf32-sh.c | 12 |
2 files changed, 11 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0cfee3d..a5d2065 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +Fri Jun 4 03:10:49 1999 J"orn Rennecke <amylaar@cygnus.co.uk> + + * elf32-sh.c (sh_elf_relax_delete_bytes): Fix setting of + start / stop for recalculating of r_addend of R_SH_SWITCH*. + Fri Jun 4 02:53:13 1999 J"orn Rennecke <amylaar@cygnus.co.uk> * elf32-sh.c (sh_elf_relax_delete_bytes): Handle R_SH_SWITCH32 diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index b3670d0..0779e8a 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -1161,13 +1161,15 @@ sh_elf_relax_delete_bytes (abfd, sec, addr, count) case R_SH_SWITCH32: /* These relocs types represent .word L2-L1 - The r_offset field holds the difference between the reloc + The r_addend field holds the difference between the reloc address and L1. That is the start of the reloc, and adding in the contents gives us the top. We must adjust - both the r_offset field and the section contents. */ + both the r_offset field and the section contents. + N.B. in gas / coff bfd, the elf bfd r_addend is called r_offset, + and the elf bfd r_offset is called r_vaddr. */ - start = irel->r_offset; - stop = (bfd_vma) ((bfd_signed_vma) start - (long) irel->r_addend); + stop = irel->r_offset; + start = (bfd_vma) ((bfd_signed_vma) stop - (long) irel->r_addend); if (start > addr && start < toaddr @@ -1178,8 +1180,6 @@ sh_elf_relax_delete_bytes (abfd, sec, addr, count) && (start <= addr || start >= toaddr)) irel->r_addend -= count; - start = stop; - if (ELF32_R_TYPE (irel->r_info) == (int) R_SH_SWITCH16) voff = bfd_get_signed_16 (abfd, contents + nraddr); else if (ELF32_R_TYPE (irel->r_info) == (int) R_SH_SWITCH8) |