This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[libitm] Check if GCC uses assembler cfi support
- From: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Richard Henderson <rth at redhat dot com>
- Date: Mon, 07 Apr 2014 13:33:52 +0200
- Subject: [libitm] Check if GCC uses assembler cfi support
- Authentication-results: sourceware.org; auth=none
The Solaris 11.2 x86 assembler is going to gain support for the cfi
directives. To do things right this time, it will create read-only
.eh_frame sections, unlike what gas and gcc currently do. The goal is
to let /bin/ld handle the required merging of read-only and read-write
.eh_frame sections, but that's not there yet and won't make the S11.2
release. For the time being, gcc/configure.ac (gcc_cv_as_cfi_directive)
takes care of that and disables the support, but there's one issue left:
libitm does the cfi directive detection on its own, finds the assembler
support and uses it in config/x86/sjlj.S, which breaks linking the
32-bit libitm.so:
ld: fatal: file .libs/aatree.o; section [15].eh_frame and file .libs/sjlj.o; section [3].eh_frame have incompatibile attributes and cannot be merged into a single output section
collect2: error: ld returned 1 exit status
make[4]: *** [libitm.la] Error 1
To avoid this, libitm and gcc need to agree whether or not to use
assembler cfi support.
The following patch avoid this by checking __GCC_HAVE_DWARF2_CFI_ASM.
Alternatively, one could do away with
config/asmcfi.m4 (GCC_AS_CFI_PSEUDO_OP), and only check for
__GCC_HAVE_DWARF2_CFI_ASM under the assumption that libitm will only be
used in-tree with a matching gcc.
I've avoided changing config/asmcfi.m4 since that's also used by libffi,
which is external to the gcc tree and can be used with non-gcc
compilers.
The patch allowed i386-pc-solaris2.11 bootstraps to finish without
regressions on trunk and 4.8 branch, still need to test 4.7 branch.
Ok for trunk, 4.8 and 4.7 branches once testing completes?
Rainer
2014-04-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/generic/asmcfi.h: Also check for
__GCC_HAVE_DWARF2_CFI_ASM.
# HG changeset patch
# Parent e003a40e0bb68a5019d8492cec81e453514988b0
Check if GCC uses assembler cfi support
diff --git a/libitm/config/generic/asmcfi.h b/libitm/config/generic/asmcfi.h
--- a/libitm/config/generic/asmcfi.h
+++ b/libitm/config/generic/asmcfi.h
@@ -24,7 +24,7 @@
#include "config.h"
-#ifdef HAVE_AS_CFI_PSEUDO_OP
+#if defined(HAVE_AS_CFI_PSEUDO_OP) && defined(__GCC_HAVE_DWARF2_CFI_ASM)
#define cfi_startproc .cfi_startproc
#define cfi_endproc .cfi_endproc
@@ -50,4 +50,4 @@
#define cfi_restore(r)
#define cfi_undefined(r)
-#endif /* HAVE_AS_CFI_PSEUDO_OP */
+#endif /* HAVE_AS_CFI_PSEUDO_OP && __GCC_HAVE_DWARF2_CFI_ASM */
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University