Gold: Enable safe ICF for shared object on x86-64
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 13 Oct 2020 12:10:24 +0000 (05:10 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 13 Oct 2020 12:10:36 +0000 (05:10 -0700)
commitaac1d94f19492fb6bea7193497bce599952c429d
treea228a103e97cc042b6d2ea5f5171294da08da4cb
parent1fb1d64f4a7c817f91a164dc22d5a22a0e75c1b8
Gold: Enable safe ICF for shared object on x86-64

With

commit 4aebb6312eb5dcd12f2f8420028547584b708907
Author: Rahul Chaudhry <rahulchaudhry@google.com>
Date:   Wed Feb 15 00:37:10 2017 -0800

    Improved support for --icf=safe when used with -pie.

we now check opcode with R_X86_64_PC32 relocation, which tell branches
from other instructions.  We can enable safe ICF for shared object on
x86-64.  Also, global symbols with non-default visibility should be
folded like local symbols.

PR gold/21452
* x86_64.cc (Scan::local_reloc_may_be_function_pointer): Remove
check for shared library.
(Scan::global_reloc_may_be_function_pointer): Remove check for
shared library and symbol visibility.
* testsuite/icf_safe_so_test.cc (bar_static): New function.
(main): Take function address of bar_static and use it.
* testsuite/icf_safe_so_test.sh (arch_specific_safe_fold): Also
check fold on x86-64.  Check bar_static isn't folded.
gold/ChangeLog
gold/testsuite/icf_safe_so_test.cc
gold/testsuite/icf_safe_so_test.sh
gold/x86_64.cc