From: Sandra Loosemore Date: Thu, 5 Dec 2019 21:36:22 +0000 (-0500) Subject: Disable --eh-frame-hdr with -pie or -shared on nios2-linux-gnu. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=38e078da6c4f4e0c21f5973eb9d8f8a87cabbc5e;p=gcc.git Disable --eh-frame-hdr with -pie or -shared on nios2-linux-gnu. 2019-12-05 Sandra Loosemore 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ab19c525fb2..5c83a06fd19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2019-12-05 Sandra Loosemore + + * config/nios2/linux.h (LINK_EH_SPEC): Define. + 2019-12-05 Jan Hubicka * 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 698734add35..9936b3101d9 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 6d4c403e129..3891ee46fc8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-12-05 Sandra Loosemore + + * g++.target/nios2/hello-pie.C: New. + * g++.target/nios2/nios2.exp: New. + 2019-12-05 Marek Polacek Jakub Jelinek 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 00000000000..ed016f3daca --- /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 + +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 00000000000..a4ff7d04ac8 --- /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 +# . + +# 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