diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf32-xtensa.c | 42 |
2 files changed, 25 insertions, 22 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0759d0b..bd61104 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2007-12-21 Bob Wilson <bob.wilson@acm.org> + + * elf32-xtensa.c (relax_section): Update DIFF relocations in the + same way as other relocations. + 2007-12-18 Daniel Jacobowitz <dan@codesourcery.com> * section.c (BFD_FAKE_SECTION): Update. diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index a1c6088..d9f2aa2 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -8240,30 +8240,28 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) pin_contents (sec, contents); } + + /* If the relocation still references a section in the same + input file, modify the relocation directly instead of + adding a "fix" record. */ + if (target_sec->owner == abfd) + { + unsigned r_symndx = ELF32_R_SYM (new_reloc.rela.r_info); + irel->r_info = ELF32_R_INFO (r_symndx, r_type); + irel->r_addend = new_reloc.rela.r_addend; + pin_internal_relocs (sec, internal_relocs); + } else { - /* If the relocation still references a section in the same - input file, modify the relocation directly instead of - adding a "fix" record. */ - if (target_sec->owner == abfd) - { - unsigned r_symndx = ELF32_R_SYM (new_reloc.rela.r_info); - irel->r_info = ELF32_R_INFO (r_symndx, r_type); - irel->r_addend = new_reloc.rela.r_addend; - pin_internal_relocs (sec, internal_relocs); - } - else - { - bfd_vma addend_displacement; - reloc_bfd_fix *fix; - - addend_displacement = - new_reloc.target_offset + new_reloc.virtual_offset; - fix = reloc_bfd_fix_init (sec, source_offset, r_type, - target_sec, - addend_displacement, TRUE); - add_fix (sec, fix); - } + bfd_vma addend_displacement; + reloc_bfd_fix *fix; + + addend_displacement = + new_reloc.target_offset + new_reloc.virtual_offset; + fix = reloc_bfd_fix_init (sec, source_offset, r_type, + target_sec, + addend_displacement, TRUE); + add_fix (sec, fix); } } } |