On 1/8/20 12:27 AM, Alex Bennée wrote:
>
> Richard Henderson <[email protected]> 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~