diff options
author | Bob Wilson <bob.wilson@acm.org> | 2007-12-21 23:11:28 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@acm.org> | 2007-12-21 23:11:28 +0000 |
commit | dc96b90a103d5363c3bb298178b6ae3c5124aa19 (patch) | |
tree | bd94fe046cc1536ac8985e37d6c48a81125c6d76 /bfd/elf32-xtensa.c | |
parent | 8d32f93595f28c70f21566384ca1dc8a441297b9 (diff) | |
download | gdb-dc96b90a103d5363c3bb298178b6ae3c5124aa19.zip gdb-dc96b90a103d5363c3bb298178b6ae3c5124aa19.tar.gz gdb-dc96b90a103d5363c3bb298178b6ae3c5124aa19.tar.bz2 |
* elf32-xtensa.c (relax_section): Update DIFF relocations in the
same way as other relocations.
Diffstat (limited to 'bfd/elf32-xtensa.c')
-rw-r--r-- | bfd/elf32-xtensa.c | 42 |
1 files changed, 20 insertions, 22 deletions
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); } } } |