diff options
author | Alan Modra <amodra@gmail.com> | 2021-01-24 12:39:07 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-01-24 16:19:53 +1030 |
commit | 1aaad1d55d784670f112954fdecbd0261bfdffd7 (patch) | |
tree | 5e45c1277c6736dfc886b0f8db4c9c7441a6d213 /gas/write.c | |
parent | DWARF-5: Fix parsing DWARF-5 line number tables (diff) | |
download | binutils-gdb-1aaad1d55d784670f112954fdecbd0261bfdffd7.tar.gz binutils-gdb-1aaad1d55d784670f112954fdecbd0261bfdffd7.tar.bz2 binutils-gdb-1aaad1d55d784670f112954fdecbd0261bfdffd7.zip |
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.
(cherry picked from commit 68fcee4fa753f6488c9f90610da2f5a5a95d5a1f)
Diffstat (limited to 'gas/write.c')
-rw-r--r-- | gas/write.c | 4 |
1 files changed, 3 insertions, 1 deletions
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 |