summaryrefslogtreecommitdiff
path: root/bfd/elf32-bfin.c
diff options
context:
space:
mode:
authorJie Zhang <jie.zhang@analog.com>2006-05-23 05:45:22 +0000
committerJie Zhang <jie.zhang@analog.com>2006-05-23 05:45:22 +0000
commitd37b01a730dd2a4af090bb0c45b96fe2d6ae952c (patch)
treef30ccf29ca2c9514bb7a16242e415584ac772381 /bfd/elf32-bfin.c
parenta6f5cfa0ede4a73c40876e6f72fd1af2e8605d76 (diff)
downloadbinutils-redhat-d37b01a730dd2a4af090bb0c45b96fe2d6ae952c.tar.gz
* elf32-bfin.c (bfinfdpic_relocate_section): Clear reloc for
deteted entries in .eh_frame section.
Diffstat (limited to 'bfd/elf32-bfin.c')
-rw-r--r--bfd/elf32-bfin.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
index 5d6e1e1825..ba6bc62528 100644
--- a/bfd/elf32-bfin.c
+++ b/bfd/elf32-bfin.c
@@ -2435,6 +2435,8 @@ bfinfdpic_relocate_section (bfd * output_bfd,
input_section->output_section)
& (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
{
+ bfd_vma offset;
+
if (_bfinfdpic_osec_readonly_p (output_bfd,
input_section
->output_section))
@@ -2445,15 +2447,23 @@ bfinfdpic_relocate_section (bfd * output_bfd,
name, input_bfd, input_section, rel->r_offset);
return FALSE;
}
- _bfinfdpic_add_dyn_reloc (output_bfd,
- bfinfdpic_gotrel_section (info),
- _bfd_elf_section_offset
- (output_bfd, info,
- input_section, rel->r_offset)
- + input_section
- ->output_section->vma
- + input_section->output_offset,
- r_type, dynindx, addend, picrel);
+ offset = _bfd_elf_section_offset (output_bfd, info,
+ input_section, rel->r_offset);
+ /* Only output a reloc for a not deleted entry. */
+ if (offset >= (bfd_vma) -2)
+ _bfinfdpic_add_dyn_reloc (output_bfd,
+ bfinfdpic_gotrel_section (info),
+ 0,
+ R_unused0,
+ dynindx, addend, picrel);
+ else
+ _bfinfdpic_add_dyn_reloc (output_bfd,
+ bfinfdpic_gotrel_section (info),
+ offset + input_section
+ ->output_section->vma
+ + input_section->output_offset,
+ r_type,
+ dynindx, addend, picrel);
}
else
addend += bfinfdpic_got_section (info)->output_section->vma;