summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2011-02-07 18:03:36 +0100
committerCarmelo Amoroso <carmelo.amoroso@st.com>2011-02-25 09:58:13 +0100
commitbe88a80858ea4febcc621f87166fbf4c1753e513 (patch)
treed0e5d21a0a214f24fd7a0be7704fa718e0b097a3
parent7a583ea370974998b4584595b9a4088fc070df1f (diff)
nptl:arm: add a wrapper for .cfi_sections pseudo-ops
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>
-rw-r--r--libc/sysdeps/linux/common/sysdep.h5
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h2
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c2
3 files changed, 7 insertions, 2 deletions
diff --git a/libc/sysdeps/linux/common/sysdep.h b/libc/sysdeps/linux/common/sysdep.h
index a7ec95480..156e5711a 100644
--- a/libc/sysdeps/linux/common/sysdep.h
+++ b/libc/sysdeps/linux/common/sysdep.h
@@ -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) \
@@ -128,6 +132,7 @@
# 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)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
index 7ac9ca1e9..f0e5f6b37 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
@@ -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; \
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c
index e35374d34..15250157c 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c
@@ -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"