2001-07-05 H.J. Lu <hjl@gnu.org>

* objcopy.c (filter_symbols): Don't turn undefined symbols
	into local.
This commit is contained in:
H.J. Lu 2001-07-05 07:27:16 +00:00
parent bd780143bd
commit 24e01a3675
2 changed files with 11 additions and 3 deletions

View file

@ -1,3 +1,8 @@
2001-07-05 H.J. Lu <hjl@gnu.org>
* objcopy.c (filter_symbols): Don't turn undefined symbols
into local.
2001-07-03 H.J. Lu <hjl@gnu.org> 2001-07-03 H.J. Lu <hjl@gnu.org>
* doc/Makefile.am (addr2line.1): Use addr2line.pod instead of * doc/Makefile.am (addr2line.1): Use addr2line.pod instead of

View file

@ -723,6 +723,7 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount)
flagword flags = sym->flags; flagword flags = sym->flags;
const char *name = bfd_asymbol_name (sym); const char *name = bfd_asymbol_name (sym);
int keep; int keep;
boolean undefined;
if (redefine_sym_list) if (redefine_sym_list)
{ {
@ -755,10 +756,12 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount)
} }
} }
undefined = bfd_is_und_section (bfd_get_section (sym));
if (remove_leading_char if (remove_leading_char
&& ((flags & BSF_GLOBAL) != 0 && ((flags & BSF_GLOBAL) != 0
|| (flags & BSF_WEAK) != 0 || (flags & BSF_WEAK) != 0
|| bfd_is_und_section (bfd_get_section (sym)) || undefined
|| bfd_is_com_section (bfd_get_section (sym))) || bfd_is_com_section (bfd_get_section (sym)))
&& name[0] == bfd_get_symbol_leading_char (abfd)) && name[0] == bfd_get_symbol_leading_char (abfd))
name = bfd_asymbol_name (sym) = name + 1; name = bfd_asymbol_name (sym) = name + 1;
@ -781,7 +784,7 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount)
keep = 1; keep = 1;
else if ((flags & BSF_GLOBAL) != 0 /* Global symbol. */ else if ((flags & BSF_GLOBAL) != 0 /* Global symbol. */
|| (flags & BSF_WEAK) != 0 || (flags & BSF_WEAK) != 0
|| bfd_is_und_section (bfd_get_section (sym)) || undefined
|| bfd_is_com_section (bfd_get_section (sym))) || bfd_is_com_section (bfd_get_section (sym)))
keep = strip_symbols != STRIP_UNNEEDED; keep = strip_symbols != STRIP_UNNEEDED;
else if ((flags & BSF_DEBUGGING) != 0) /* Debugging symbol. */ else if ((flags & BSF_DEBUGGING) != 0) /* Debugging symbol. */
@ -811,7 +814,7 @@ filter_symbols (abfd, obfd, osyms, isyms, symcount)
sym->flags &=~ BSF_GLOBAL; sym->flags &=~ BSF_GLOBAL;
sym->flags |= BSF_WEAK; sym->flags |= BSF_WEAK;
} }
if (keep && (flags & (BSF_GLOBAL | BSF_WEAK)) if (keep && !undefined && (flags & (BSF_GLOBAL | BSF_WEAK))
&& (is_specified_symbol (name, localize_specific_list) && (is_specified_symbol (name, localize_specific_list)
|| (keepglobal_specific_list != NULL || (keepglobal_specific_list != NULL
&& ! is_specified_symbol (name, keepglobal_specific_list)))) && ! is_specified_symbol (name, keepglobal_specific_list))))