aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRainer Orth <ro@gcc.gnu.org>2018-02-06 18:33:19 +0000
committerRainer Orth <ro@gcc.gnu.org>2018-02-06 18:33:19 +0000
commita836f1425c2a2c9aee6bd46d87e0ea5725951c53 (patch)
treecc6ce18c7857cd09889884a2d5590e655524556f /gcc
parent78be97b8d6d734548d4f9408c8abb8b5dfbabdb5 (diff)
downloadgcc-a836f1425c2a2c9aee6bd46d87e0ea5725951c53.zip
gcc-a836f1425c2a2c9aee6bd46d87e0ea5725951c53.tar.gz
gcc-a836f1425c2a2c9aee6bd46d87e0ea5725951c53.tar.bz2
Fix HAVE_GAS_CFI_DIRECTIVE for x86_64-pc-solaris2.*
* configure.ac (gcc_fn_eh_frame_ro): New function. (gcc_cv_as_cfi_directive): Check both 32 and 64-bit assembler for correct .eh_frame permissions. * configure: Regenerate. From-SVN: r257424
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rwxr-xr-xgcc/configure73
-rw-r--r--gcc/configure.ac73
3 files changed, 89 insertions, 67 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 49f693d..f13481b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,14 @@
+2018-02-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * configure.ac (gcc_fn_eh_frame_ro): New function.
+ (gcc_cv_as_cfi_directive): Check both 32 and 64-bit assembler for
+ correct .eh_frame permissions.
+ * configure: Regenerate.
+
2018-02-06 Andrew Jenner <andrew@codeourcery.com>
- * doc/invoke.texi: Add section for the PowerPC SPE backend. Remove irrelevant options.
+ * doc/invoke.texi: Add section for the PowerPC SPE backend. Remove
+ irrelevant options.
2018-02-06 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
diff --git a/gcc/configure b/gcc/configure
index effc37c..3360209 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -23181,6 +23181,13 @@ $as_echo "#define HAVE_AS_LEB128 0" >>confdefs.h
fi
+# Determine if an .eh_frame section is read-only.
+gcc_fn_eh_frame_ro () {
+ $gcc_cv_as $1 -o conftest.o conftest.s > /dev/null 2>&1 && \
+ $gcc_cv_objdump -h conftest.o 2>/dev/null | \
+ sed -e '/.eh_frame/!d' -e N | grep READONLY > /dev/null
+}
+
# Check if we have assembler support for unwind directives.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for cfi directives" >&5
$as_echo_n "checking assembler for cfi directives... " >&6; }
@@ -23208,41 +23215,41 @@ else
# If the linker used on Solaris (like Sun ld) isn't capable of merging
# read-only and read-write sections, we need to make sure that the
# assembler used emits read-write .eh_frame sections.
- if test "x$gcc_cv_ld_ro_rw_mix" != xread-write; then
- if test "x$gcc_cv_objdump" != x; then
- if $gcc_cv_objdump -h conftest.o 2>/dev/null | \
- sed -e /.eh_frame/!d -e N | grep READONLY > /dev/null; then
- gcc_cv_as_cfi_directive=no
- else
- case "$target" in
- i?86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*)
- # On Solaris/x86, make sure that GCC and assembler agree on using
- # read-only .eh_frame sections for 64-bit.
- if test x$gas = xyes; then
- as_ix86_64_opt="--64"
- else
- as_ix86_64_opt="-xarch=amd64"
- fi
- if $gcc_cv_as $as_ix86_64_opt -o conftest.o conftest.s > /dev/null 2>&1 && \
- $gcc_cv_objdump -h conftest.o 2>/dev/null | \
- sed -e /.eh_frame/!d -e N | \
- grep READONLY > /dev/null; then
- gcc_cv_as_cfi_directive=yes
- else
- gcc_cv_as_cfi_directive=no
- fi
- ;;
- *)
- gcc_cv_as_cfi_directive=yes
- ;;
- esac
- fi
+ if test "x$gcc_cv_ld_ro_rw_mix" = xread-write; then
+ gcc_cv_as_cfi_directive=yes
+ elif test "x$gcc_cv_objdump" = x; then
+ # No objdump, err on the side of caution.
+ gcc_cv_as_cfi_directive=no
+ else
+ if test x$gas = xyes; then
+ as_32_opt="--32"
+ as_64_opt="--64"
else
- # no objdump, err on the side of caution
- gcc_cv_as_cfi_directive=no
+ as_32_opt="-m32"
+ as_64_opt="-m64"
fi
- else
- gcc_cv_as_cfi_directive=yes
+ case "$target" in
+ sparc*-*-solaris2.*)
+ # On Solaris/SPARC, .eh_frame sections should always be read-write.
+ if gcc_fn_eh_frame_ro $as_32_opt \
+ || gcc_fn_eh_frame_ro $as_64_opt; then
+ gcc_cv_as_cfi_directive=no
+ else
+ gcc_cv_as_cfi_directive=yes
+ fi
+ ;;
+ i?86-*-solaris2.* | x86_64-*-solaris2.*)
+ # On Solaris/x86, make sure that GCC and assembler agree on using
+ # read-only .eh_frame sections for 64-bit.
+ if gcc_fn_eh_frame_ro $as_32_opt; then
+ gcc_cv_as_cfi_directive=no
+ elif gcc_fn_eh_frame_ro $as_64_opt; then
+ gcc_cv_as_cfi_directive=yes
+ else
+ gcc_cv_as_cfi_directive=no
+ fi
+ ;;
+ esac
fi
;;
*-*-*)
diff --git a/gcc/configure.ac b/gcc/configure.ac
index f8b0e5a..1019b31 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2754,6 +2754,13 @@ L2:],
[AC_DEFINE(HAVE_AS_LEB128, 0,
[Define if your assembler supports .sleb128 and .uleb128.])])
+# Determine if an .eh_frame section is read-only.
+gcc_fn_eh_frame_ro () {
+ $gcc_cv_as $1 -o conftest.o conftest.s > /dev/null 2>&1 && \
+ $gcc_cv_objdump -h conftest.o 2>/dev/null | \
+ sed -e '/.eh_frame/!d' -e N | grep READONLY > /dev/null
+}
+
# Check if we have assembler support for unwind directives.
gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,
,,
@@ -2769,41 +2776,41 @@ gcc_GAS_CHECK_FEATURE([cfi directives], gcc_cv_as_cfi_directive,
# If the linker used on Solaris (like Sun ld) isn't capable of merging
# read-only and read-write sections, we need to make sure that the
# assembler used emits read-write .eh_frame sections.
- if test "x$gcc_cv_ld_ro_rw_mix" != xread-write; then
- if test "x$gcc_cv_objdump" != x; then
- if $gcc_cv_objdump -h conftest.o 2>/dev/null | \
- sed -e /.eh_frame/!d -e N | grep READONLY > /dev/null; then
- gcc_cv_as_cfi_directive=no
- else
- case "$target" in
- i?86-*-solaris2.1[[0-9]]* | x86_64-*-solaris2.1[[0-9]]*)
- # On Solaris/x86, make sure that GCC and assembler agree on using
- # read-only .eh_frame sections for 64-bit.
- if test x$gas = xyes; then
- as_ix86_64_opt="--64"
- else
- as_ix86_64_opt="-xarch=amd64"
- fi
- if $gcc_cv_as $as_ix86_64_opt -o conftest.o conftest.s > /dev/null 2>&1 && \
- $gcc_cv_objdump -h conftest.o 2>/dev/null | \
- sed -e /.eh_frame/!d -e N | \
- grep READONLY > /dev/null; then
- gcc_cv_as_cfi_directive=yes
- else
- gcc_cv_as_cfi_directive=no
- fi
- ;;
- *)
- gcc_cv_as_cfi_directive=yes
- ;;
- esac
- fi
+ if test "x$gcc_cv_ld_ro_rw_mix" = xread-write; then
+ gcc_cv_as_cfi_directive=yes
+ elif test "x$gcc_cv_objdump" = x; then
+ # No objdump, err on the side of caution.
+ gcc_cv_as_cfi_directive=no
+ else
+ if test x$gas = xyes; then
+ as_32_opt="--32"
+ as_64_opt="--64"
else
- # no objdump, err on the side of caution
- gcc_cv_as_cfi_directive=no
+ as_32_opt="-m32"
+ as_64_opt="-m64"
fi
- else
- gcc_cv_as_cfi_directive=yes
+ case "$target" in
+ sparc*-*-solaris2.*)
+ # On Solaris/SPARC, .eh_frame sections should always be read-write.
+ if gcc_fn_eh_frame_ro $as_32_opt \
+ || gcc_fn_eh_frame_ro $as_64_opt; then
+ gcc_cv_as_cfi_directive=no
+ else
+ gcc_cv_as_cfi_directive=yes
+ fi
+ ;;
+ i?86-*-solaris2.* | x86_64-*-solaris2.*)
+ # On Solaris/x86, make sure that GCC and assembler agree on using
+ # read-only .eh_frame sections for 64-bit.
+ if gcc_fn_eh_frame_ro $as_32_opt; then
+ gcc_cv_as_cfi_directive=no
+ elif gcc_fn_eh_frame_ro $as_64_opt; then
+ gcc_cv_as_cfi_directive=yes
+ else
+ gcc_cv_as_cfi_directive=no
+ fi
+ ;;
+ esac
fi
;;
*-*-*)