On 1/8/20 12:27 AM, Alex Bennée wrote: > > Richard Henderson <richard.hender...@linaro.org> writes: > >> On 12/21/19 12:22 AM, Alex Bennée wrote: >>> +#if defined(__arm__) >>> + register uintptr_t t asm("r0") = type; >>> + register uintptr_t a0 asm("r1") = arg0; >>> + asm("svc 0xab" >>> + : "=r" (t) >>> + : "r" (t), "r" (a0)); >> >> This is the #ifdef __thumb__ svc code. Are you enforcing that with >> command-line arguments? > > No it is dealing with aarch64 vs 32 bit and the __arm__ is a compiler > symbol.
I know that. But you're obviously assuming that the arm compiler is defaulting to thumb mode, not arm mode, otherwise this doesn't work. You need to test #ifdef __arm__ # ifdef __thumb__ # define SVC "svc 0xab" # else # define SVC "svc 0x123456" # endif register ... asm(SVC : ...); #else // aarch64 #endif And run the compiler with -mthumb and -marm to test both. r~