OSDN Git Service

nptl:arm: add a wrapper for .cfi_sections pseudo-ops
authorCarmelo Amoroso <carmelo.amoroso@st.com>
Mon, 7 Feb 2011 17:03:36 +0000 (18:03 +0100)
committerCarmelo Amoroso <carmelo.amoroso@st.com>
Fri, 25 Feb 2011 08:58:13 +0000 (09:58 +0100)
ARM disables by default the support for ASM CFI directives.
Anyway using an old version of binutils that does not support some new
pseudo-op, the build fails as below:

  AS libpthread/nptl/sysdeps/unix/sysv/linux/close.oS
libpthread/nptl/sysdeps/unix/sysv/linux/close.S: Assembler messages:
libpthread/nptl/sysdeps/unix/sysv/linux/close.S:9: Error: unknown pseudo-op: `.cfi_sections'

The problem is that the .cfi_sections pseudo should be wrapped by a macro
that expands to nothing when the CFI is off.

Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
CC: Khem Ray <ray.khem@gmail.com>
libc/sysdeps/linux/common/sysdep.h
libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c

index a7ec954..156e571 100644 (file)
@@ -51,6 +51,7 @@
 
 /* Macros to generate eh_frame unwind information.  */
 # ifdef HAVE_ASM_CFI_DIRECTIVES
+#  define cfi_sections(sect...)        .cfi_sections sect
 #  define cfi_startproc                        .cfi_startproc
 #  define cfi_endproc                  .cfi_endproc
 #  define cfi_def_cfa(reg, off)                .cfi_def_cfa reg, off
@@ -71,6 +72,7 @@
 #  define cfi_lsda(enc, exp)           .cfi_lsda enc, exp
 
 # else
+#  define cfi_sections(sect...)
 #  define cfi_startproc
 #  define cfi_endproc
 #  define cfi_def_cfa(reg, off)
@@ -95,6 +97,8 @@
 # ifdef HAVE_ASM_CFI_DIRECTIVES
 #  define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name)
 #  define CFI_STRINGIFY2(Name) #Name
+#  define CFI_SECTIONS(sect...) \
+   ".cfi_sections " CFI_STRINGIFY(sect)
 #  define CFI_STARTPROC        ".cfi_startproc"
 #  define CFI_ENDPROC  ".cfi_endproc"
 #  define CFI_DEF_CFA(reg, off)        \
 #  define CFI_LSDA(enc, exp) \
    ".cfi_lsda " CFI_STRINGIFY(enc) "," CFI_STRINGIFY(exp)
 # else
+#  define CFI_SECTIONS(sect...)
 #  define CFI_STARTPROC
 #  define CFI_ENDPROC
 #  define CFI_DEF_CFA(reg, off)
index 7ac9ca1..f0e5f6b 100644 (file)
@@ -36,7 +36,7 @@
   .type __##syscall_name##_nocancel,%function;                         \
   .globl __##syscall_name##_nocancel;                                  \
   __##syscall_name##_nocancel:                                         \
-    .cfi_sections .debug_frame;                                                \
+    cfi_sections(.debug_frame);                                                \
     cfi_startproc;                                                     \
     DO_CALL (syscall_name, args);                                      \
     PSEUDO_RET;                                                                \
index e35374d..1525015 100644 (file)
@@ -65,7 +65,7 @@ __asm__ (
 "      .globl  _Unwind_Resume\n"
 "      .type   _Unwind_Resume, %function\n"
 "_Unwind_Resume:\n"
-"      .cfi_sections .debug_frame\n"
+"      " CFI_SECTIONS (.debug_frame) "\n"
 "      " CFI_STARTPROC "\n"
 "      stmfd   sp!, {r4, r5, r6, lr}\n"
 "      " CFI_ADJUST_CFA_OFFSET (16)" \n"