summaryrefslogtreecommitdiff
path: root/gcc/configure.in
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-05-14 18:45:10 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-05-14 18:45:10 -0700
commitc64688ae797cb3ed06f9403cd20cfc51e0b6276a (patch)
tree50bd83db98d2cce1d8acec334cafab9afd6aedf9 /gcc/configure.in
parente8b073c1bd1c589eb6c92da2db2ce00e932d04d4 (diff)
downloadgcc-c64688ae797cb3ed06f9403cd20cfc51e0b6276a.tar.gz
configure.in (gcc_cv_as_eh_frame): New test.
* configure.in (gcc_cv_as_eh_frame): New test. * config.in, configure: Rebuild. * gcc.c (init_spec): Honor USE_AS_TRADITIONAL_FORMAT. From-SVN: r42092
Diffstat (limited to 'gcc/configure.in')
-rw-r--r--gcc/configure.in71
1 files changed, 71 insertions, 0 deletions
diff --git a/gcc/configure.in b/gcc/configure.in
index 8b4d9927a6b..313a3f504f1 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -1410,6 +1410,77 @@ if test x"$gcc_cv_as_leb128" = xyes; then
fi
AC_MSG_RESULT($gcc_cv_as_leb128)
+AC_MSG_CHECKING(assembler eh_frame optimization)
+gcc_cv_as_eh_frame=no
+if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
+ if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_eh_frame="yes"
+ fi
+elif test x$gcc_cv_as != x; then
+ # Check if this is GAS.
+ as_ver=`$gcc_cv_as --version 2>/dev/null | head -1`
+ if echo "$as_ver" | grep GNU > /dev/null; then
+ # Versions up to and including 2.11.0 may mis-optimize
+ # .eh_frame data. Try something.
+ cat > conftest.s <<EOF
+ .text
+.LFB1:
+ .4byte 0
+.L1:
+ .4byte 0
+.LFE1:
+ .section .eh_frame,"aw",@progbits
+__FRAME_BEGIN__:
+ .4byte .LECIE1-.LSCIE1
+.LSCIE1:
+ .4byte 0x0
+ .byte 0x1
+ .ascii "z\0"
+ .byte 0x1
+ .byte 0x78
+ .byte 0x1a
+ .byte 0x0
+ .byte 0x4
+ .4byte 1
+ .p2align 1
+.LECIE1:
+.LSFDE1:
+ .4byte .LEFDE1-.LASFDE1
+.LASFDE1:
+ .4byte .LASFDE1-__FRAME_BEGIN__
+ .4byte .LFB1
+ .4byte .LFE1-.LFB1
+ .byte 0x4
+ .4byte .LFE1-.LFB1
+ .byte 0x4
+ .4byte .L1-.LFB1
+.LEFDE1:
+EOF
+ cat > conftest.exp <<EOF
+ 0000 10000000 00000000 017a0001 781a0004 .........z..x...
+ 0010 01000000 12000000 18000000 00000000 ................
+ 0020 08000000 04080000 0044 .........D
+EOF
+ # If the assembler didn't choke, and we can objdump,
+ # and we got the correct data, then succeed.
+ if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \
+ && objdump -s -j .eh_frame conftest.o 2>/dev/null \
+ | tail -3 > conftest.got \
+ && cmp conftest.exp conftest.got > /dev/null 2>&1
+ then
+ gcc_cv_as_eh_frame="yes"
+ else
+ gcc_cv_as_eh_frame="bad"
+ if $gcc_cv_as -o conftest.o --traditional-format /dev/null; then
+ AC_DEFINE(USE_AS_TRADITIONAL_FORMAT, 1,
+ [Define if your assembler mis-optimizes .eh_frame data.])
+ fi
+ fi
+ fi
+ rm -f conftest.*
+fi
+AC_MSG_RESULT($gcc_cv_as_eh_frame)
+
case "$target" in
sparc*-*-*)
AC_CACHE_CHECK([assembler .register pseudo-op support],