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>
Mon, 26 Mar 2018 17:54:45 +0000 (10:54 -0700)
commit0b7a4aa6ba5a144b7ce616e80e95d9ff944fec2e
tree151292ce5f093ad8ca846fece8e124f5d5972937
parent4f7ae6f5059924a5acc4490880449d6410dc5c93
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]