aboutsummaryrefslogtreecommitdiff
path: root/bfd/elflink.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-10-24 11:24:31 +0000
committerAlan Modra <amodra@gmail.com>2005-10-24 11:24:31 +0000
commitf02571c5d99d9394c56f7a210def5b2e5bbb60c5 (patch)
treea3b27acaf99ef6d7531ffb38864953188ac026cf /bfd/elflink.c
parent3e45f319ea0afd7c61f0d425e43eb698e4a6d035 (diff)
downloadgdb-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.c24
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. */