py/asmarm: Use __clear_cache on Linux/GCC when creating new asm code.
Comes from https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/caches-and-self-modifying-code This fixes a crash when running MicroPython using qemu-arm.
This commit is contained in:
parent
08075beeb9
commit
62b00dd5d8
|
@ -40,7 +40,11 @@
|
||||||
|
|
||||||
void asm_arm_end_pass(asm_arm_t *as) {
|
void asm_arm_end_pass(asm_arm_t *as) {
|
||||||
if (as->base.pass == MP_ASM_PASS_EMIT) {
|
if (as->base.pass == MP_ASM_PASS_EMIT) {
|
||||||
#ifdef __arm__
|
#if defined(__linux__) && defined(__GNUC__)
|
||||||
|
char *start = mp_asm_base_get_code(&as->base);
|
||||||
|
char *end = start + mp_asm_base_get_code_size(&as->base);
|
||||||
|
__clear_cache(start, end);
|
||||||
|
#elif defined(__arm__)
|
||||||
// flush I- and D-cache
|
// flush I- and D-cache
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"0:"
|
"0:"
|
||||||
|
|
Loading…
Reference in New Issue