Index: elf32-bfin.c =================================================================== RCS file: /cvsroot/gcc3/binutils/binutils-2.15/bfd/elf32-bfin.c,v retrieving revision 1.35 diff -u -p -r1.35 elf32-bfin.c --- elf32-bfin.c 6 Apr 2006 05:48:02 -0000 1.35 +++ elf32-bfin.c 24 Apr 2006 10:46:44 -0000 @@ -2476,6 +2481,8 @@ bfinfdpic_relocate_section (bfd * output 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)) @@ -2486,15 +2493,23 @@ bfinfdpic_relocate_section (bfd * output 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;