From: Alan Modra Date: Sun, 24 Jan 2021 02:09:07 +0000 (+1030) Subject: PR27228, .reloc wrong symbol emitted for undefined local symbol X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=68fcee4fa753f6488c9f90610da2f5a5a95d5a1f;p=binutils-gdb.git PR27228, .reloc wrong symbol emitted for undefined local symbol Local symbols are of course supposed to be defined by their object file, but in other cases a local symbol is promoted to global by gas if undefined and referenced. This patch stops gas wrongly replacing a local undefined symbol with the undefined section symbol, resulting in a .reloc undefined local symbol being emitted as global. PR 27228 * write.c (resolve_reloc_expr_symbols): Don't assume local symbol is defined. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 74185318b17..4ac29870e63 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2021-01-24 Alan Modra + + PR 27228 + * write.c (resolve_reloc_expr_symbols): Don't assume local symbol + is defined. + 2021-01-21 Alan Modra PR 27221 diff --git a/gas/write.c b/gas/write.c index 75ba971eb4b..95922bb25a0 100644 --- a/gas/write.c +++ b/gas/write.c @@ -737,7 +737,9 @@ resolve_reloc_expr_symbols (void) prevent the offset from overflowing the relocated field, unless it has enough bits to cover the whole address space. */ - if (S_IS_LOCAL (sym) && !symbol_section_p (sym) + if (S_IS_LOCAL (sym) + && S_IS_DEFINED (sym) + && !symbol_section_p (sym) && (sec->use_rela_p || (howto->partial_inplace && (!howto->pc_relative