mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-28 06:20:30 +00:00
Turn a weak symbol into an external symbol for a non-shared, non-relocatable
link.
This commit is contained in:
parent
289c596cac
commit
e42026815e
@ -1,3 +1,15 @@
|
||||
2000-07-03 Mark Elbrecht <snowball3@bigfoot.com>
|
||||
|
||||
* cofflink.c (_bfd_coff_write_global_sym): Turn a weak symbol into
|
||||
an external symbol for a non-shared, non-relocatable link.
|
||||
|
||||
2000-07-03 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
(IS_EXTERNAL): New macro: Return true if the symbol is an external
|
||||
symbol.
|
||||
(IS_WEAK_EXTERNAL): New macro: Return true if the symbol is a weak
|
||||
external symbol.
|
||||
|
||||
2000-07-03 Kazu Hirata <kazu@hxi.com>
|
||||
|
||||
* reloc16.c: Fix formatting.
|
||||
|
@ -40,6 +40,15 @@ static int process_embedded_commands
|
||||
PARAMS ((bfd *, struct bfd_link_info *, bfd *));
|
||||
static void mark_relocs PARAMS ((struct coff_final_link_info *, bfd *));
|
||||
|
||||
/* Return true if SYM is a weak, external symbol. */
|
||||
#define IS_WEAK_EXTERNAL(abfd, sym) \
|
||||
((sym).n_sclass == C_WEAKEXT \
|
||||
|| (obj_pe (abfd) && (sym).n_sclass == C_NT_WEAK))
|
||||
|
||||
/* Return true if SYM is an external symbol. */
|
||||
#define IS_EXTERNAL(abfd, sym) \
|
||||
((sym).n_sclass == C_EXT || IS_WEAK_EXTERNAL (abfd, sym))
|
||||
|
||||
/* Define macros so that the ISFCN, et. al., macros work correctly.
|
||||
These macros are defined in include/coff/internal.h in terms of
|
||||
N_TMASK, etc. These definitions require a user to define local
|
||||
@ -395,8 +404,7 @@ coff_link_add_symbols (abfd, info)
|
||||
break;
|
||||
}
|
||||
|
||||
if (sym.n_sclass == C_WEAKEXT
|
||||
|| (obj_pe (abfd) && sym.n_sclass == C_NT_WEAK))
|
||||
if (IS_WEAK_EXTERNAL (abfd, sym))
|
||||
flags = BSF_WEAK;
|
||||
|
||||
addit = true;
|
||||
@ -1833,12 +1841,8 @@ _bfd_coff_link_input_bfd (finfo, input_bfd)
|
||||
}
|
||||
|
||||
/* If doing task linking, convert normal global function symbols to
|
||||
static functions. */
|
||||
|
||||
if (finfo->info->task_link
|
||||
&& (isym.n_sclass == C_EXT
|
||||
|| isym.n_sclass == C_WEAKEXT
|
||||
|| (obj_pe (input_bfd) && isym.n_sclass == C_NT_WEAK)))
|
||||
static functions. */
|
||||
if (finfo->info->task_link && IS_EXTERNAL (input_bfd, isym))
|
||||
isym.n_sclass = C_STAT;
|
||||
|
||||
/* Output the symbol. */
|
||||
@ -2548,18 +2552,23 @@ _bfd_coff_write_global_sym (h, data)
|
||||
/* If doing task linking and this is the pass where we convert
|
||||
defined globals to statics, then do that conversion now. If the
|
||||
symbol is not being converted, just ignore it and it will be
|
||||
output during a later pass. */
|
||||
output during a later pass. */
|
||||
if (finfo->global_to_static)
|
||||
{
|
||||
if (isym.n_sclass != C_EXT
|
||||
&& isym.n_sclass != C_WEAKEXT
|
||||
&& (! obj_pe (output_bfd) || isym.n_sclass != C_NT_WEAK))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (! IS_EXTERNAL (output_bfd, isym))
|
||||
return true;
|
||||
|
||||
isym.n_sclass = C_STAT;
|
||||
}
|
||||
|
||||
/* When a weak symbol is not overriden by a strong one,
|
||||
turn it into an external symbol when not building a
|
||||
shared or relocateable object. */
|
||||
if (! finfo->info->shared
|
||||
&& ! finfo->info->relocateable
|
||||
&& IS_WEAK_EXTERNAL (finfo->output_bfd, isym))
|
||||
isym.n_sclass = C_EXT;
|
||||
|
||||
isym.n_numaux = h->numaux;
|
||||
|
||||
bfd_coff_swap_sym_out (output_bfd, (PTR) &isym, (PTR) finfo->outsyms);
|
||||
|
Loading…
Reference in New Issue
Block a user