]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
Fix case where IR file provides symbol visibility but replacement file does not.
authorCary Coutant <ccoutant@gmail.com>
Fri, 23 Mar 2018 16:03:34 +0000 (09:03 -0700)
committerCary Coutant <ccoutant@gmail.com>
Wed, 28 Mar 2018 16:15:04 +0000 (09:15 -0700)
commit330b90b5ffbbc20c5de6ae6c7f60c40fab2e7a4f
treeffc1b116cede61436900e7d1b17d07f0631455ec
parent99181ccac0fc7d82e7dabb05dc7466e91f1645d3
Fix case where IR file provides symbol visibility but replacement file does not.

In PR 22868, two IR files provide conflicting visibility for a symbol.
When a def with PROTECTED visibility is seen after a def with DEFAULT
visibility, gold does not override the visibility. Later, if the
replacement object define the symbol with DEFAULT visibility, the symbol
remains DEFAULT. This was caused by a recent change to allow multiply-defined
absolute symbols, combined with the fact that the plugin framework was using
SHN_ABS as the section index for placeholder symbols. The solution is to
use a real (but arbitrary) section index.

gold/
PR gold/22868
* plugin.cc (Sized_pluginobj::do_add_symbols): Use a real section
index instead of SHN_ABS for defined symbols.
* testsuite/Makefile.am (plugin_pr22868): New test case.
* testsuite/Makefile.in: Regenerate
* testsuite/plugin_pr22868.sh: New test script.
* testsuite/plugin_pr22868_a.c: New source file.
* testsuite/plugin_pr22868_b.c: New source file.
gold/ChangeLog
gold/plugin.cc
gold/testsuite/Makefile.am
gold/testsuite/Makefile.in
gold/testsuite/plugin_pr22868.sh [new file with mode: 0755]
gold/testsuite/plugin_pr22868_a.c [new file with mode: 0644]
gold/testsuite/plugin_pr22868_b.c [new file with mode: 0644]