Fix asm constraints in __rmem_thread_start The "fork" pseudo-instruction writes back to x0, so ensure that GCC doesn't rely on it holding its previous value across the asm. This fixes "illegal fetch address exception" reports. Reported-by: Shaked Flur <shaked.flur@cl.cam.ac.uk> Signed-off-by: Will Deacon <will.deacon@arm.com>
diff --git a/rmem.h b/rmem.h index ab66735..226ed28 100644 --- a/rmem.h +++ b/rmem.h
@@ -16,7 +16,7 @@ static inline void __rmem_thread_start(void *fn) { register void *x0 asm("x0") = fn; - asm volatile(".inst 0xd50bb003" :: "r" (x0) : "memory"); + asm volatile(".inst 0xd50bb003" : "+r" (x0) :: "memory"); } #endif /* __RMEM_H */