* elf.c (ignore_section_sym): Correct comment. Don't return

true for absolute section.
	(elf_map_symbols): Move stray comment.  Adjust for above change.
	Don't discard global section symbols.
This commit is contained in:
Alan Modra 2012-05-17 06:29:02 +00:00
parent 61ece53e99
commit 2633a79cc0
2 changed files with 23 additions and 15 deletions

View File

@ -1,3 +1,11 @@
2012-05-17 Maciej W. Rozycki <macro@linux-mips.org>
Alan Modra <amodra@gmail.com>
* elf.c (ignore_section_sym): Correct comment. Don't return
true for absolute section.
(elf_map_symbols): Move stray comment. Adjust for above change.
Don't discard global section symbols.
2012-05-17 Alan Modra <amodra@gmail.com>
* elf32-ppc.c (ppc_elf_finish_dynamic_symbol): Don't make _DYNAMIC,

View File

@ -3243,9 +3243,6 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
return TRUE;
}
/* Map symbol from it's internal number to the external number, moving
all local symbols to be at the head of the list. */
static bfd_boolean
sym_is_global (bfd *abfd, asymbol *sym)
{
@ -3260,7 +3257,7 @@ sym_is_global (bfd *abfd, asymbol *sym)
}
/* Don't output section symbols for sections that are not going to be
output. */
output, or that are duplicates. */
static bfd_boolean
ignore_section_sym (bfd *abfd, asymbol *sym)
@ -3268,9 +3265,13 @@ ignore_section_sym (bfd *abfd, asymbol *sym)
return ((sym->flags & BSF_SECTION_SYM) != 0
&& !(sym->section->owner == abfd
|| (sym->section->output_section->owner == abfd
&& sym->section->output_offset == 0)));
&& sym->section->output_offset == 0)
|| bfd_is_abs_section (sym->section)));
}
/* Map symbol from it's internal number to the external number, moving
all local symbols to be at the head of the list. */
static bfd_boolean
elf_map_symbols (bfd *abfd)
{
@ -3312,7 +3313,8 @@ elf_map_symbols (bfd *abfd)
if ((sym->flags & BSF_SECTION_SYM) != 0
&& sym->value == 0
&& !ignore_section_sym (abfd, sym))
&& !ignore_section_sym (abfd, sym)
&& !bfd_is_abs_section (sym->section))
{
asection *sec = sym->section;
@ -3326,12 +3328,10 @@ elf_map_symbols (bfd *abfd)
/* Classify all of the symbols. */
for (idx = 0; idx < symcount; idx++)
{
if (ignore_section_sym (abfd, syms[idx]))
continue;
if (!sym_is_global (abfd, syms[idx]))
num_locals++;
else
if (sym_is_global (abfd, syms[idx]))
num_globals++;
else if (!ignore_section_sym (abfd, syms[idx]))
num_locals++;
}
/* We will be adding a section symbol for each normal BFD section. Most
@ -3361,12 +3361,12 @@ elf_map_symbols (bfd *abfd)
asymbol *sym = syms[idx];
unsigned int i;
if (ignore_section_sym (abfd, sym))
continue;
if (!sym_is_global (abfd, sym))
if (sym_is_global (abfd, sym))
i = num_locals + num_globals2++;
else if (!ignore_section_sym (abfd, sym))
i = num_locals2++;
else
i = num_locals + num_globals2++;
continue;
new_syms[i] = sym;
sym->udata.i = i + 1;
}