From f02571c5d99d9394c56f7a210def5b2e5bbb60c5 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 24 Oct 2005 11:24:31 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 10 ++++++++++ bfd/elflink.c | 24 +++++++++--------------- bfd/linker.c | 9 +++------ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 231e6daf8ab..fcb1fbc049e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2005-10-24 Alan Modra + + * 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 * elf32-i370.c (i370_elf_fake_sections): Don't set SHF_EXCLUDE on diff --git a/bfd/elflink.c b/bfd/elflink.c index 61676d619f6..e122aea38d6 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 0bfdfb23706..9e6199b835a 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; -- 2.30.2