aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSandra Loosemore <sandra@codesourcery.com>2019-12-05 16:36:22 -0500
committerSandra Loosemore <sandra@gcc.gnu.org>2019-12-05 16:36:22 -0500
commit38e078da6c4f4e0c21f5973eb9d8f8a87cabbc5e (patch)
tree0223e7bf6a44cc595519d9653bcc9a65dcb3613d
parenta414fd426346558d7a913af3ed82bcc1121fc880 (diff)
downloadgcc-38e078da6c4f4e0c21f5973eb9d8f8a87cabbc5e.zip
gcc-38e078da6c4f4e0c21f5973eb9d8f8a87cabbc5e.tar.gz
gcc-38e078da6c4f4e0c21f5973eb9d8f8a87cabbc5e.tar.bz2
Disable --eh-frame-hdr with -pie or -shared on nios2-linux-gnu.
2019-12-05 Sandra Loosemore <sandra@codesourcery.com> Disable --eh-frame-hdr with -pie or -shared on nios2-linux-gnu. The nios2 ABI doesn't have appropriate relocations to support --eh-frame-hdr with -pie or -shared, so we need to override the default specs that add that link option. Otherwise we get linker warnings about invalid FDE encodings. gcc/ * config/nios2/linux.h (LINK_EH_SPEC): Define. gcc/testsuite/ * g++.target/nios2/hello-pie.C: New. * g++.target/nios2/nios2.exp: New. From-SVN: r279023
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/nios2/linux.h6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.target/nios2/hello-pie.C14
-rw-r--r--gcc/testsuite/g++.target/nios2/nios2.exp34
5 files changed, 63 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab19c52..5c83a06 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2019-12-05 Sandra Loosemore <sandra@codesourcery.com>
+
+ * config/nios2/linux.h (LINK_EH_SPEC): Define.
+
2019-12-05 Jan Hubicka <hubicka@ucw.cz>
* ipa-inline-transform.c (inline_call): Fix maintenatnce of comdat_local
diff --git a/gcc/config/nios2/linux.h b/gcc/config/nios2/linux.h
index 698734a..9936b31 100644
--- a/gcc/config/nios2/linux.h
+++ b/gcc/config/nios2/linux.h
@@ -40,6 +40,12 @@
-dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \
%{static:-static}}"
+/* The nios2 ABI does not have appropriate relocations to support
+ --eh-frame-hdr with PIE, or in shared libraries. */
+#undef LINK_EH_SPEC
+#define LINK_EH_SPEC \
+ "%{!pie: %{!shared: %{!static:--eh-frame-hdr}}} "
+
/* This toolchain implements the ABI for Linux Systems documented in the
Nios II Processor Reference Handbook. */
#define TARGET_LINUX_ABI 1
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6d4c403..3891ee4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-05 Sandra Loosemore <sandra@codesourcery.com>
+
+ * g++.target/nios2/hello-pie.C: New.
+ * g++.target/nios2/nios2.exp: New.
+
2019-12-05 Marek Polacek <polacek@redhat.com>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/testsuite/g++.target/nios2/hello-pie.C b/gcc/testsuite/g++.target/nios2/hello-pie.C
new file mode 100644
index 0000000..ed016f3
--- /dev/null
+++ b/gcc/testsuite/g++.target/nios2/hello-pie.C
@@ -0,0 +1,14 @@
+// { dg-do run { target *-*-linux* } }
+// { dg-options "-pie -fpie" }
+// { dg-output "Hello, pie World" }
+
+// This test used to give an "FDE encoding" error from the linker due to
+// the ABI not having appropriate relocations for PIE.
+
+#include <iostream>
+
+int
+main ()
+{
+ std::cout << "Hello, pie World" << std::endl;
+}
diff --git a/gcc/testsuite/g++.target/nios2/nios2.exp b/gcc/testsuite/g++.target/nios2/nios2.exp
new file mode 100644
index 0000000..a4ff7d0
--- /dev/null
+++ b/gcc/testsuite/g++.target/nios2/nios2.exp
@@ -0,0 +1,34 @@
+# Copyright (C) 2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't a nios2 target.
+if ![istarget nios2*-*-*] then {
+ return
+}
+
+# Load support procs.
+load_lib g++-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" ""
+
+# All done.
+dg-finish