diff options
author | Alan Modra <amodra@gmail.com> | 2005-10-24 11:24:31 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-10-24 11:24:31 +0000 |
commit | f02571c5d99d9394c56f7a210def5b2e5bbb60c5 (patch) | |
tree | a3b27acaf99ef6d7531ffb38864953188ac026cf /bfd/elflink.c | |
parent | 3e45f319ea0afd7c61f0d425e43eb698e4a6d035 (diff) | |
download | gdb-f02571c5d99d9394c56f7a210def5b2e5bbb60c5.zip gdb-f02571c5d99d9394c56f7a210def5b2e5bbb60c5.tar.gz gdb-f02571c5d99d9394c56f7a210def5b2e5bbb60c5.tar.bz2 |
* 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.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r-- | bfd/elflink.c | 24 |
1 files changed, 9 insertions, 15 deletions
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. */ |