diff options
-rw-r--r-- | bfd/ChangeLog | 10 | ||||
-rw-r--r-- | bfd/elflink.c | 24 | ||||
-rw-r--r-- | bfd/linker.c | 9 |
3 files changed, 22 insertions, 21 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 231e6da..fcb1fbc 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,15 @@ 2005-10-24 Alan Modra <amodra@bigpond.net.au> + * elflink.c (elf_link_input_bfd): Don't use linker_mark and + SEC_EXCLUDE to test for sections dropped from output. Instead, + use bfd_section_removed_from_list on normal sections. Don't + attempt to handle symbols with unknown reserved section indices. + * linker.c (_bfd_generic_link_output_symbols): Don't use + linker_mark to test for symbols belonging to dropped sections. + Do allow absolute symbols. + +2005-10-24 Alan Modra <amodra@bigpond.net.au> + * elf32-i370.c (i370_elf_fake_sections): Don't set SHF_EXCLUDE on group sections. diff --git a/bfd/elflink.c b/bfd/elflink.c index 61676d6..e122aea 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -6827,8 +6827,10 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) isec = bfd_com_section_ptr; else { - /* Who knows? */ - isec = NULL; + /* Don't attempt to output symbols with st_shnx in the + reserved range other than SHN_ABS and SHN_COMMON. */ + *ppsection = NULL; + continue; } *ppsection = isec; @@ -6859,20 +6861,12 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) continue; /* If this symbol is defined in a section which we are - discarding, we don't need to keep it, but note that - linker_mark is only reliable for sections that have contents. - For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE - as well as linker_mark. */ - if ((isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) + discarding, we don't need to keep it. */ + if (isym->st_shndx != SHN_UNDEF + && (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) && (isec == NULL - || (! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0) - || (! finfo->info->relocatable - && (isec->flags & SEC_EXCLUDE) != 0))) - continue; - - /* If the section is not in the output BFD's section list, it is not - being output. */ - if (bfd_section_removed_from_list (output_bfd, isec->output_section)) + || bfd_section_removed_from_list (output_bfd, + isec->output_section))) continue; /* Get the name of the symbol. */ diff --git a/bfd/linker.c b/bfd/linker.c index 0bfdfb2..9e6199b 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -2364,12 +2364,9 @@ _bfd_generic_link_output_symbols (bfd *output_bfd, /* If this symbol is in a section which is not being included in the output file, then we don't want to output the - symbol. .bss and similar sections won't have the linker_mark - field set. We also check if its output section has been - removed from the output file. */ - if (((sym->section->flags & SEC_HAS_CONTENTS) != 0 - && ! sym->section->linker_mark) - || bfd_section_removed_from_list (output_bfd, + symbol. */ + if (!bfd_is_abs_section (sym->section) + && bfd_section_removed_from_list (output_bfd, sym->section->output_section)) output = FALSE; |