2011-12-13 Richard Earnshaw <rearnsha@arm.com>
Thomas Klein <th.r.klein@web.de> * arm/crt0.S: Manually set the target architecture when compiling for Thumb1 on EABI targets. Avoid v6-only Thumb-1 MOV instruction.
This commit is contained in:
parent
e480bc80c3
commit
50e970d1b1
@ -1,3 +1,10 @@
|
||||
2011-12-13 Richard Earnshaw <rearnsha@arm.com>
|
||||
Thomas Klein <th.r.klein@web.de>
|
||||
|
||||
* arm/crt0.S: Manually set the target architecture
|
||||
when compiling for Thumb1 on EABI targets.
|
||||
Avoid v6-only Thumb-1 MOV instruction.
|
||||
|
||||
2011-11-28 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* configure.in: Add rl78.
|
||||
|
@ -17,6 +17,30 @@
|
||||
#define _fini __libc_fini_array
|
||||
#endif
|
||||
|
||||
#if defined(__ARM_EABI__) && defined(__thumb__) && !defined(__thumb2__)
|
||||
/* For Thumb1 we need to force the architecture to be sure that we get the
|
||||
correct attributes on the object file; otherwise the assembler will get
|
||||
confused and mark the object as being v6T2. */
|
||||
#if defined(__ARM_ARCH_4T__)
|
||||
.arch armv4t
|
||||
#elif defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
|
||||
/* Nothing in this object requires higher than v5. */
|
||||
.arch armv5t
|
||||
#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
|
||||
|| defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
|
||||
|| defined(__ARM_ARCH_6ZK__)
|
||||
/* Nothing in this object requires higher than v6. */
|
||||
.arch armv6
|
||||
#elif defined(__ARM_ARCH_6M__)
|
||||
#ifdef ARM_RDP_MONITOR
|
||||
/* Object file uses SVC, so mark as v6s-m. */
|
||||
.arch armv6s-m
|
||||
#else
|
||||
.arch armv6-m
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* .text is used instead of .section .text so it works with arm-aout too. */
|
||||
.text
|
||||
.syntax unified
|
||||
@ -250,7 +274,7 @@ __change_mode:
|
||||
|
||||
#ifdef ARM_RDP_MONITOR
|
||||
swi SWI_GetEnv /* sets r0 to point to the command line */
|
||||
mov r1, r0
|
||||
movs r1, r0
|
||||
#else
|
||||
movs r0, #AngelSWI_Reason_GetCmdLine
|
||||
adr r1, .LC30 /* Space for command line */
|
||||
@ -285,7 +309,7 @@ __change_mode:
|
||||
cmp r3, #'\''
|
||||
bne .LC21
|
||||
.LC20:
|
||||
mov r2, r3
|
||||
movs r2, r3
|
||||
b .LC22
|
||||
|
||||
.LC21:
|
||||
@ -326,7 +350,7 @@ __change_mode:
|
||||
mov r1, sp /* point at stacked arg pointers */
|
||||
/* We've now got the stacked args in order reverse the */
|
||||
#ifdef __thumb__
|
||||
mov r2, r0
|
||||
movs r2, r0
|
||||
lsls r2, #2
|
||||
add r2, sp
|
||||
mov r3, sp
|
||||
@ -364,13 +388,13 @@ __change_mode:
|
||||
to create constructors and destructors, and for these
|
||||
targets we need to call the _init function and arrange
|
||||
for _fini to be called at program exit. */
|
||||
mov r4, r0
|
||||
mov r5, r1
|
||||
movs r4, r0
|
||||
movs r5, r1
|
||||
ldr r0, .Lfini
|
||||
bl FUNCTION (atexit)
|
||||
bl FUNCTION (_init)
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
movs r0, r4
|
||||
movs r1, r5
|
||||
#endif
|
||||
bl FUNCTION (main)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user