From f855931bbd914039754674f6f582a7236583f62b Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 25 Aug 2004 14:35:58 +0000 Subject: * elf32-i386.c (elf_i386_relocate_section): Zero section contents for R_386_32 and R_386_PC32 relocs against symbols defined in discarded sections. --- bfd/ChangeLog | 8 +++++++- bfd/elf32-i386.c | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a0a9fc4..dbe1df9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,9 +1,15 @@ +2004-08-25 Alan Modra + + * elf32-i386.c (elf_i386_relocate_section): Zero section contents + for R_386_32 and R_386_PC32 relocs against symbols defined in + discarded sections. + 2004-08-25 Dmitry Diky * reloc.c (BFD_RELOC_MSP430_2X_PCREL,BFD_RELOC_MSP430_RL_PCREL): Add new relocations. * bfd-in2.h: Regenerate. - * libbfd.h: Regenerate.. + * libbfd.h: Regenerate. * elf32-msp430.c: Clean-up code. (elf_msp430_howto_table): Add new relocation entries. (bfd_elf32_bfd_reloc_type_lookup): New relocation handlers. diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 5eb34ab..855b985 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2319,8 +2319,19 @@ elf_i386_relocate_section (bfd *output_bfd, /* r_symndx will be zero only for relocs against symbols from removed linkonce sections, or sections discarded by a linker script. */ - if (r_symndx == 0 - || (input_section->flags & SEC_ALLOC) == 0) + if (r_symndx == 0) + { + /* Zero the section contents. eh_frame generated by old + versions of gcc isn't edited by elf-eh-frame.c, so + FDEs for discarded linkonce functions might remain. + Putting zeros here will zero such FDE's address range. + This is a hint to unwinders and other consumers of + exception handling info that the FDE is invalid. */ + bfd_put_32 (input_bfd, 0, contents + rel->r_offset); + continue; + } + + if ((input_section->flags & SEC_ALLOC) == 0) break; if ((info->shared -- cgit v1.1