diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2011-02-07 18:03:36 +0100 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2011-02-25 09:58:13 +0100 |
commit | be88a80858ea4febcc621f87166fbf4c1753e513 (patch) | |
tree | d0e5d21a0a214f24fd7a0be7704fa718e0b097a3 | |
parent | 7a583ea370974998b4584595b9a4088fc070df1f (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.h | 5 | ||||
-rw-r--r-- | libpthread/nptl/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 2 | ||||
-rw-r--r-- | libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c | 2 |
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" |