mirror of https://github.com/ARMmbed/mbed-os.git
RTX5: Make rtx_core_ca.h cope with compiler in Thumb mode
Assembler in rtx_core_ca.h is on the whole unified syntax such that it should work fine if assembled as either ARM or Thumb-2. The exception was __get_PSP, which uses STM^, which is only available in ARM state. Flagging for this function was incorrect, except for IAR - it switched assembler state without telling the compiler, meaning that the resulting assembler output could be incorrect, and that the function itself would not be correctly marked as an ARM function - the CPU would enter in Thumb state. Alternative fix would be to switch to System mode, which would work as either ARM or Thumb-2 assembler, like the rest of the file, but this is the minimal change. Fixes #526.pull/9888/head
parent
0ef1620ffb
commit
0adc7dc927
|
|
@ -104,26 +104,26 @@ __STATIC_INLINE uint32_t StackOffsetR0 (uint8_t stack_frame) {
|
||||||
/// Get xPSR Register - emulate M profile: SP_usr - (8*4)
|
/// Get xPSR Register - emulate M profile: SP_usr - (8*4)
|
||||||
/// \return xPSR Register value
|
/// \return xPSR Register value
|
||||||
#if defined(__CC_ARM)
|
#if defined(__CC_ARM)
|
||||||
|
#pragma push
|
||||||
|
#pragma arm
|
||||||
static __asm uint32_t __get_PSP (void) {
|
static __asm uint32_t __get_PSP (void) {
|
||||||
arm
|
|
||||||
sub sp, sp, #4
|
sub sp, sp, #4
|
||||||
stm sp, {sp}^
|
stm sp, {sp}^
|
||||||
pop {r0}
|
pop {r0}
|
||||||
sub r0, r0, #32
|
sub r0, r0, #32
|
||||||
bx lr
|
bx lr
|
||||||
}
|
}
|
||||||
|
#pragma pop
|
||||||
#else
|
#else
|
||||||
#ifdef __ICCARM__
|
#ifdef __ICCARM__
|
||||||
__arm
|
__arm
|
||||||
|
#else
|
||||||
|
__attribute__((target("arm")))
|
||||||
#endif
|
#endif
|
||||||
__STATIC_INLINE uint32_t __get_PSP (void) {
|
__STATIC_INLINE uint32_t __get_PSP (void) {
|
||||||
register uint32_t ret;
|
register uint32_t ret;
|
||||||
|
|
||||||
__ASM volatile (
|
__ASM volatile (
|
||||||
#ifndef __ICCARM__
|
|
||||||
".syntax unified\n\t"
|
|
||||||
".arm\n\t"
|
|
||||||
#endif
|
|
||||||
"sub sp,sp,#4\n\t"
|
"sub sp,sp,#4\n\t"
|
||||||
"stm sp,{sp}^\n\t"
|
"stm sp,{sp}^\n\t"
|
||||||
"pop {%[ret]}\n\t"
|
"pop {%[ret]}\n\t"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue