diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2019-12-05 16:36:22 -0500 |
---|---|---|
committer | Sandra Loosemore <sandra@gcc.gnu.org> | 2019-12-05 16:36:22 -0500 |
commit | 38e078da6c4f4e0c21f5973eb9d8f8a87cabbc5e (patch) | |
tree | 0223e7bf6a44cc595519d9653bcc9a65dcb3613d | |
parent | a414fd426346558d7a913af3ed82bcc1121fc880 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/nios2/linux.h | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.target/nios2/hello-pie.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.target/nios2/nios2.exp | 34 |
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 |