Disable --eh-frame-hdr with -pie or -shared on nios2-linux-gnu.
authorSandra Loosemore <sandra@codesourcery.com>
Thu, 5 Dec 2019 21:36:22 +0000 (16:36 -0500)
committerSandra Loosemore <sandra@gcc.gnu.org>
Thu, 5 Dec 2019 21:36:22 +0000 (16:36 -0500)
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

gcc/ChangeLog
gcc/config/nios2/linux.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.target/nios2/hello-pie.C [new file with mode: 0644]
gcc/testsuite/g++.target/nios2/nios2.exp [new file with mode: 0644]

index ab19c525fb28cb225b984105c1fe1e82e0776741..5c83a06fd19cc3f5ff40957788b1986eb0c4cb8d 100644 (file)
@@ -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
index 698734add3584fd04a2e8b1463183f9143e2237a..9936b3101d974636383e5d92a065d3da4341f8ab 100644 (file)
       -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
index 6d4c403e129458df00db648e5ca5555ddcc3bbd4..3891ee46fc8229261a73d42d0c62c4af44b7826e 100644 (file)
@@ -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 (file)
index 0000000..ed016f3
--- /dev/null
@@ -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 (file)
index 0000000..a4ff7d0
--- /dev/null
@@ -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