Skip to content

Commit b8f4e59

Browse files
committed
cpu/cortexm_common: fix address validity check for Cortex-M0 and recent gcc
1 parent 7fdd0c9 commit b8f4e59

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

cpu/cortexm_common/cortexm_init.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,15 @@ bool cpu_check_address(volatile const char *address)
127127

128128
/* R5 will be set to 0 by HardFault handler */
129129
/* to indicate HardFault has occured */
130-
register uint32_t result __asm("r5") = 1;
130+
register bool result __asm("r5") = 1; /* set default return value */
131+
register uint32_t sign1 __asm("r1") = 0xDEADF00D; /* set magic number */
132+
register uint32_t sign2 __asm("r2") = 0xCAFEBABE; /* 2nd magic to be sure */
133+
uint32_t scratch;
131134

132135
__asm__ volatile (
133-
"ldr r1, =0xDEADF00D \n" /* set magic number */
134-
"ldr r2, =0xCAFEBABE \n" /* 2nd magic to be sure */
135-
"ldrb r3, [r0] \n" /* probe address */
136+
"ldrb %[scratch], [%[address]] \n" /* probe address */
137+
:"=r"(result),[scratch]"=l"(scratch)
138+
:[address]"l"(address),"r"(result),"r"(sign1), "r"(sign2)
136139
);
137140

138141
return result;

0 commit comments

Comments
 (0)