mirror of git://sourceware.org/git/glibc.git
ARM: Macroize assembly use of EABI unwind directives.
This commit is contained in:
parent
ccdad15df5
commit
7214d558d3
|
@ -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>
|
2013-03-26 Mans Rullgard <mans@mansr.com>
|
||||||
|
|
||||||
* sysdeps/arm/preconfigure.in: Use "test" instead of [ ].
|
* sysdeps/arm/preconfigure.in: Use "test" instead of [ ].
|
||||||
|
|
|
@ -29,13 +29,13 @@
|
||||||
.global _dl_tlsdesc_return
|
.global _dl_tlsdesc_return
|
||||||
.type _dl_tlsdesc_return,#function
|
.type _dl_tlsdesc_return,#function
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
.fnstart
|
eabi_fnstart
|
||||||
.align 2
|
.align 2
|
||||||
_dl_tlsdesc_return:
|
_dl_tlsdesc_return:
|
||||||
sfi_breg r0, \
|
sfi_breg r0, \
|
||||||
ldr r0, [\B]
|
ldr r0, [\B]
|
||||||
BX (lr)
|
BX (lr)
|
||||||
.fnend
|
eabi_fnend
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.size _dl_tlsdesc_return, .-_dl_tlsdesc_return
|
.size _dl_tlsdesc_return, .-_dl_tlsdesc_return
|
||||||
|
|
||||||
|
@ -43,14 +43,14 @@ _dl_tlsdesc_return:
|
||||||
.global _dl_tlsdesc_undefweak
|
.global _dl_tlsdesc_undefweak
|
||||||
.type _dl_tlsdesc_undefweak,#function
|
.type _dl_tlsdesc_undefweak,#function
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
.fnstart
|
eabi_fnstart
|
||||||
.align 2
|
.align 2
|
||||||
_dl_tlsdesc_undefweak:
|
_dl_tlsdesc_undefweak:
|
||||||
GET_TLS (r1)
|
GET_TLS (r1)
|
||||||
rsb r0, r0, #0
|
rsb r0, r0, #0
|
||||||
BX (lr)
|
BX (lr)
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.fnend
|
eabi_fnend
|
||||||
.size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak
|
.size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak
|
||||||
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
|
@ -80,12 +80,12 @@ _dl_tlsdesc_dynamic(struct tlsdesc *tdp)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
.fnstart
|
eabi_fnstart
|
||||||
.align 2
|
.align 2
|
||||||
_dl_tlsdesc_dynamic:
|
_dl_tlsdesc_dynamic:
|
||||||
/* Our calling convention is to clobber r0, r1 and the processor
|
/* Our calling convention is to clobber r0, r1 and the processor
|
||||||
flags. All others that are modified must be saved */
|
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}
|
push {r2,r3,r4,lr}
|
||||||
cfi_adjust_cfa_offset (16)
|
cfi_adjust_cfa_offset (16)
|
||||||
cfi_rel_offset (r2,0)
|
cfi_rel_offset (r2,0)
|
||||||
|
@ -135,7 +135,7 @@ _dl_tlsdesc_dynamic:
|
||||||
#else
|
#else
|
||||||
pop {r2,r3,r4, pc}
|
pop {r2,r3,r4, pc}
|
||||||
#endif
|
#endif
|
||||||
.fnend
|
eabi_fnend
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
|
.size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
|
||||||
#endif /* SHARED */
|
#endif /* SHARED */
|
||||||
|
@ -145,7 +145,7 @@ _dl_tlsdesc_dynamic:
|
||||||
.global _dl_tlsdesc_lazy_resolver
|
.global _dl_tlsdesc_lazy_resolver
|
||||||
.type _dl_tlsdesc_lazy_resolver,#function
|
.type _dl_tlsdesc_lazy_resolver,#function
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
.fnstart
|
eabi_fnstart
|
||||||
.align 2
|
.align 2
|
||||||
_dl_tlsdesc_lazy_resolver:
|
_dl_tlsdesc_lazy_resolver:
|
||||||
/* r0 points at the tlsdesc,
|
/* r0 points at the tlsdesc,
|
||||||
|
@ -155,10 +155,10 @@ _dl_tlsdesc_lazy_resolver:
|
||||||
We push the remaining call-clobbered registers here, and also
|
We push the remaining call-clobbered registers here, and also
|
||||||
R1 -- to keep the stack correctly aligned. */
|
R1 -- to keep the stack correctly aligned. */
|
||||||
/* Tell the unwinder that r2 has already been pushed. */
|
/* Tell the unwinder that r2 has already been pushed. */
|
||||||
.save {r2}
|
eabi_save ({r2})
|
||||||
cfi_adjust_cfa_offset (4)
|
cfi_adjust_cfa_offset (4)
|
||||||
cfi_rel_offset (r2, 0)
|
cfi_rel_offset (r2, 0)
|
||||||
.save {r0,r1,r3,ip,lr}
|
eabi_save ({r0,r1,r3,ip,lr})
|
||||||
push {r0, r1, r3, ip, lr}
|
push {r0, r1, r3, ip, lr}
|
||||||
cfi_adjust_cfa_offset (20)
|
cfi_adjust_cfa_offset (20)
|
||||||
cfi_rel_offset (r0, 0)
|
cfi_rel_offset (r0, 0)
|
||||||
|
@ -180,7 +180,7 @@ _dl_tlsdesc_lazy_resolver:
|
||||||
sfi_breg r0, \
|
sfi_breg r0, \
|
||||||
ldr r1, [\B, #4]
|
ldr r1, [\B, #4]
|
||||||
BX (r1)
|
BX (r1)
|
||||||
.fnend
|
eabi_fnend
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.size _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver
|
.size _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver
|
||||||
|
|
||||||
|
@ -190,14 +190,14 @@ _dl_tlsdesc_lazy_resolver:
|
||||||
.global _dl_tlsdesc_resolve_hold
|
.global _dl_tlsdesc_resolve_hold
|
||||||
.type _dl_tlsdesc_resolve_hold,#function
|
.type _dl_tlsdesc_resolve_hold,#function
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
.fnstart
|
eabi_fnstart
|
||||||
.align 2
|
.align 2
|
||||||
_dl_tlsdesc_resolve_hold:
|
_dl_tlsdesc_resolve_hold:
|
||||||
/* Tell the unwinder that r2 has already been pushed. */
|
/* Tell the unwinder that r2 has already been pushed. */
|
||||||
.save {r2}
|
eabi_save ({r2})
|
||||||
cfi_adjust_cfa_offset (4)
|
cfi_adjust_cfa_offset (4)
|
||||||
cfi_rel_offset (r2, 0)
|
cfi_rel_offset (r2, 0)
|
||||||
.save {r0,r1,r3,ip,lr}
|
eabi_save ({r0,r1,r3,ip,lr})
|
||||||
push {r0, r1, r3, ip, lr}
|
push {r0, r1, r3, ip, lr}
|
||||||
cfi_adjust_cfa_offset (20)
|
cfi_adjust_cfa_offset (20)
|
||||||
cfi_rel_offset (r0, 0)
|
cfi_rel_offset (r0, 0)
|
||||||
|
@ -220,6 +220,6 @@ _dl_tlsdesc_resolve_hold:
|
||||||
sfi_breg r0, \
|
sfi_breg r0, \
|
||||||
ldr r1, [\B, #4]
|
ldr r1, [\B, #4]
|
||||||
BX (r1)
|
BX (r1)
|
||||||
.fnend
|
eabi_fnend
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold
|
.size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold
|
||||||
|
|
|
@ -257,6 +257,15 @@
|
||||||
|
|
||||||
# endif
|
# 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__ */
|
#endif /* __ASSEMBLER__ */
|
||||||
|
|
||||||
/* This number is the offset from the pc at the current location. */
|
/* This number is the offset from the pc at the current location. */
|
||||||
|
|
Loading…
Reference in New Issue