* arm/arm.h (HAVE_CALL_INDIRECT): Define.
* arm/crt0.S (indirect_call): New macro. Encodes indirect function calls. Does not use blx for pre-armv5 targets.
This commit is contained in:
parent
8a91ddb367
commit
29deef8805
|
@ -1,3 +1,9 @@
|
|||
2011-09-29 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
* arm/arm.h (HAVE_CALL_INDIRECT): Define.
|
||||
* arm/crt0.S (indirect_call): New macro. Encodes indirect
|
||||
function calls. Does not use blx for pre-armv5 targets.
|
||||
|
||||
2011-08-19 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* iq2000/sim.ld (.gcc_except_table): Include .gcc_except_table.foo
|
||||
|
|
|
@ -50,4 +50,13 @@
|
|||
# define THUMB_V7M_V6M
|
||||
#endif
|
||||
|
||||
/* Defined if this target supports the BLX Rm instruction. */
|
||||
#if !defined(__ARM_ARCH_2__) \
|
||||
&& !defined(__ARM_ARCH_3__) \
|
||||
&& !defined(__ARM_ARCH_3M__) \
|
||||
&& !defined(__ARM_ARCH_4__) \
|
||||
&& !defined(__ARM_ARCH_4T__)
|
||||
# define HAVE_CALL_INDIRECT
|
||||
#endif
|
||||
|
||||
#endif /* _LIBGLOSS_ARM_H */
|
||||
|
|
|
@ -34,6 +34,16 @@
|
|||
\name:
|
||||
.endm
|
||||
#endif
|
||||
|
||||
.macro indirect_call reg
|
||||
#ifdef HAVE_CALL_INDIRECT
|
||||
blx \reg
|
||||
#else
|
||||
mov lr, pc
|
||||
mov pc, \reg
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.align 0
|
||||
|
||||
FUNC_START _mainCRTStartup
|
||||
|
@ -213,22 +223,12 @@ __change_mode:
|
|||
ldr r3, .Lhwinit
|
||||
cmp r3, #0
|
||||
beq .LC24
|
||||
#if defined(__thumb__) || defined(__thumb2__)
|
||||
blx r3
|
||||
#else
|
||||
mov lr, pc
|
||||
mov pc, r3
|
||||
#endif
|
||||
indirect_call r3
|
||||
.LC24:
|
||||
ldr r3, .Lswinit
|
||||
cmp r3, #0
|
||||
beq .LC25
|
||||
#if defined(__thumb__) || defined(__thumb2__)
|
||||
blx r3
|
||||
#else
|
||||
mov lr, pc
|
||||
mov pc, r3
|
||||
#endif
|
||||
indirect_call r3
|
||||
|
||||
.LC25:
|
||||
movs r0, #0 /* no arguments */
|
||||
|
|
Loading…
Reference in New Issue