summaryrefslogtreecommitdiff
path: root/gold/options.cc
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2017-02-15 00:25:29 -0800
committerCary Coutant <ccoutant@gmail.com>2017-12-01 23:46:03 -0800
commit158600eb989bcbc364c6d18259f1cb32ea9dc478 (patch)
tree2e056287d85a96d63be8a078e21c6d32bfa8b7b5 /gold/options.cc
parent0af4ccfc5bc7ded4d87f813e3754486eb5a75349 (diff)
Disallow --incremental with -pie and force -no-pie for incremental tests.
This is a partial fix for the gold testsuite failures documented in PR 21090. The use of -fpie triggers some mov-to-lea optimizations that are not compatible with incremental linking, so those optimizations need to be disabled. We also diagnose the attempt to use -pie with incremental linking, and force -no-pie for the incremental tests in case the build has been configured to have GCC pass -pie all the time. We still have a problem where compiling with -fpie results in some GOT entries even when linking with -no-pie. This combination still causes test failures because we are not updating the GOT entries in an incremental update link. gold/ PR gold/21090 * incremental.cc (Sized_relobj_incr::do_relocate): Fix comment. * options.cc (General_options::finalize): Disallow -pie with incremental linking. * x86_64.cc (Target_x86_64::Scan::local): Don't do mov-to-lea or callq-to-direct optimizations for incremental links. (Target_x86_64::Scan::global): Likewise. (Target_x86_64::Relocate::relocate): Likewise. * testsuite/Makefile.am (incremental_test): Force -no-pie. (incremental_test_2): Likewise. (incremental_test_3): Likewise. (incremental_test_4): Likewise. (incremental_test_5): Likewise. (incremental_test_6): Likewise. (incremental_copy_test): Likewise. (incremental_common_test_1): Likewise. (incremental_comdat_test_1): Likewise. * testsuite/Makefile.in: Regenerate.
Diffstat (limited to 'gold/options.cc')
-rw-r--r--gold/options.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/gold/options.cc b/gold/options.cc
index f54fb9b1cb..21b95e38d8 100644
--- a/gold/options.cc
+++ b/gold/options.cc
@@ -1343,6 +1343,8 @@ General_options::finalize()
gold_fatal(_("incremental linking is not compatible with --plugin"));
if (this->relro())
gold_fatal(_("incremental linking is not compatible with -z relro"));
+ if (this->pie())
+ gold_fatal(_("incremental linking is not compatible with -pie"));
if (this->gc_sections())
{
gold_warning(_("ignoring --gc-sections for an incremental link"));