Reading through the release notes, I was wondering about the comment
Added a sanity check on GCC version for ARMv6-M, a version below 6 must be used.
Could you clarify the rationale for this?
Thanks
Dave
Moderators: RoccoMarco, lbednarz, utzig, tfAteba, barthess
Added a sanity check on GCC version for ARMv6-M, a version below 6 must be used.
Code: Select all
__attribute__((used))
void *retaddr;
__attribute__((noinline))
void xxxxtest(void) {
retaddr = __builtin_return_address(0);
/* Used for enforcing registers stacking.*/
asm volatile("" : : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "r12");
}
Code: Select all
xxxxtest:
push {r4, r5, r6, r7, lr}
mov r4, fp
mov r7, r10
mov r6, r9
mov r5, r8
mov r2, lr
ldr r3, .L3
push {r4, r5, r6, r7}
str r2, [r3]
pop {r2, r3, r4, r5}
mov r8, r2
mov r9, r3
mov r10, r4
mov fp, r5
pop {r4, r5, r6, r7, pc}
Code: Select all
#ifdef COMPILER_BUG_PRESENT
#warning "Compiler bug present. Activating ugly workaround!"
asm ("xxxxtest:
push {r4, r5, r6, r7, lr}
mov r4, fp
mov r7, r10
mov r6, r9
mov r5, r8
mov r2, lr
ldr r3, .L3
push {r4, r5, r6, r7}
str r2, [r3]
pop {r2, r3, r4, r5}
mov r8, r2
mov r9, r3
mov r10, r4
mov fp, r5
pop {r4, r5, r6, r7, pc}");
#else
// On gcc versions 6 and up some optimization mis-compiles the following code. Above is the
// hand-corrected version.
__attribute__((used))
void *retaddr;
__attribute__((noinline))
void xxxxtest(void) {
retaddr = __builtin_return_address(0);
/* Used for enforcing registers stacking.*/
asm volatile("" : : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"r8", "r9", "r10", "r11", "r12");
#endif
Code: Select all
#define PORT_IRQ_PROLOGUE() \
regarm_t _saved_lr = (regarm_t)__builtin_return_address(0); \
asm volatile("" : : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12")
Code: Select all
8005750: b5f0 push {r4, r5, r6, r7, lr}
8005752: 46de mov lr, fp
8005754: 4657 mov r7, sl
8005756: 464e mov r6, r9
8005758: 4645 mov r5, r8
800575a: 4673 mov r3, lr <---- HERE
800575c: b5e0 push {r5, r6, r7, lr}
Users browsing this forum: No registered users and 9 guests