ARM: Macroize assembly use of EABI unwind directives.
authorRoland McGrath <roland@hack.frob.com>
Fri, 19 Apr 2013 18:33:01 +0000 (11:33 -0700)
committerRoland McGrath <roland@hack.frob.com>
Fri, 19 Apr 2013 18:33:01 +0000 (11:33 -0700)
ports/ChangeLog.arm
ports/sysdeps/arm/dl-tlsdesc.S
ports/sysdeps/arm/sysdep.h

index 355d980..9bd3aad 100644 (file)
@@ -1,3 +1,10 @@
+2013-04-19  Roland McGrath  <roland@hack.frob.com>
+
+       * sysdeps/arm/sysdep.h
+       (eabi_fnstart, eabi_fnend, eabi_save, eabi_cantunwind, eabi_pad):
+       New macros.
+       * sysdeps/arm/dl-tlsdesc.S: Use them.
+
 2013-03-26  Mans Rullgard  <mans@mansr.com>
 
        * sysdeps/arm/preconfigure.in: Use "test" instead of [ ].
index 7203c06..94f6801 100644 (file)
        .global _dl_tlsdesc_return
        .type   _dl_tlsdesc_return,#function
        cfi_startproc
-       .fnstart
+       eabi_fnstart
        .align 2
 _dl_tlsdesc_return:
        sfi_breg r0, \
        ldr     r0, [\B]
        BX      (lr)
-       .fnend
+       eabi_fnend
        cfi_endproc
        .size   _dl_tlsdesc_return, .-_dl_tlsdesc_return
 
@@ -43,14 +43,14 @@ _dl_tlsdesc_return:
        .global _dl_tlsdesc_undefweak
        .type   _dl_tlsdesc_undefweak,#function
        cfi_startproc
-       .fnstart
+       eabi_fnstart
        .align 2
 _dl_tlsdesc_undefweak:
        GET_TLS (r1)
        rsb     r0, r0, #0
        BX      (lr)
        cfi_endproc
-       .fnend
+       eabi_fnend
        .size   _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak
 
 #ifdef SHARED
@@ -80,12 +80,12 @@ _dl_tlsdesc_dynamic(struct tlsdesc *tdp)
 
 */
        cfi_startproc
-       .fnstart
+       eabi_fnstart
        .align 2
 _dl_tlsdesc_dynamic:
        /* Our calling convention is to clobber r0, r1 and the processor
           flags.  All others that are modified must be saved */
-       .save   {r2,r3,r4,lr}
+       eabi_save ({r2,r3,r4,lr})
        push    {r2,r3,r4,lr}
        cfi_adjust_cfa_offset (16)
        cfi_rel_offset (r2,0)
@@ -135,7 +135,7 @@ _dl_tlsdesc_dynamic:
 #else
        pop     {r2,r3,r4, pc}
 #endif
-       .fnend
+       eabi_fnend
        cfi_endproc
        .size   _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
 #endif /* SHARED */
@@ -145,7 +145,7 @@ _dl_tlsdesc_dynamic:
        .global _dl_tlsdesc_lazy_resolver
        .type   _dl_tlsdesc_lazy_resolver,#function
        cfi_startproc
-       .fnstart
+       eabi_fnstart
        .align 2
 _dl_tlsdesc_lazy_resolver:
        /* r0 points at the tlsdesc,
@@ -155,10 +155,10 @@ _dl_tlsdesc_lazy_resolver:
          We push the remaining call-clobbered registers here, and also
          R1 -- to keep the stack correctly aligned.  */
        /* Tell the unwinder that r2 has already been pushed.  */
-       .save   {r2}
+       eabi_save ({r2})
        cfi_adjust_cfa_offset (4)
        cfi_rel_offset (r2, 0)
-       .save   {r0,r1,r3,ip,lr}
+       eabi_save ({r0,r1,r3,ip,lr})
        push    {r0, r1, r3, ip, lr}
        cfi_adjust_cfa_offset (20)
        cfi_rel_offset (r0, 0)
@@ -180,7 +180,7 @@ _dl_tlsdesc_lazy_resolver:
        sfi_breg r0, \
        ldr     r1, [\B, #4]
        BX      (r1)
-       .fnend
+       eabi_fnend
        cfi_endproc
        .size   _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver
 
@@ -190,14 +190,14 @@ _dl_tlsdesc_lazy_resolver:
        .global _dl_tlsdesc_resolve_hold
        .type   _dl_tlsdesc_resolve_hold,#function
        cfi_startproc
-       .fnstart
+       eabi_fnstart
        .align 2
 _dl_tlsdesc_resolve_hold:
        /* Tell the unwinder that r2 has already been pushed.  */
-       .save   {r2}
+       eabi_save ({r2})
        cfi_adjust_cfa_offset (4)
        cfi_rel_offset (r2, 0)
-       .save   {r0,r1,r3,ip,lr}
+       eabi_save ({r0,r1,r3,ip,lr})
        push    {r0, r1, r3, ip, lr}
        cfi_adjust_cfa_offset (20)
        cfi_rel_offset (r0, 0)
@@ -220,6 +220,6 @@ _dl_tlsdesc_resolve_hold:
        sfi_breg r0, \
        ldr     r1, [\B, #4]
        BX      (r1)
-       .fnend
+       eabi_fnend
        cfi_endproc
        .size   _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold
index 83df7eb..5501597 100644 (file)
 
 # endif
 
+/* These are the directives used for EABI unwind info.
+   Wrap them in macros so another configuration's sysdep.h
+   file can define them away if it doesn't use EABI unwind info.  */
+# define eabi_fnstart          .fnstart
+# define eabi_fnend            .fnend
+# define eabi_save(...)                .save __VA_ARGS__
+# define eabi_cantunwind       .cantunwind
+# define eabi_pad(n)           .pad n
+
 #endif /* __ASSEMBLER__ */
 
 /* This number is the offset from the pc at the current location.  */