diff options
Diffstat (limited to 'libc/sysdeps/linux/arm/syscall.c')
-rw-r--r-- | libc/sysdeps/linux/arm/syscall.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/arm/syscall.c b/libc/sysdeps/linux/arm/syscall.c index 9938abe03..9f1e9928c 100644 --- a/libc/sysdeps/linux/arm/syscall.c +++ b/libc/sysdeps/linux/arm/syscall.c @@ -26,6 +26,7 @@ long syscall(long sysnum, long a, long b, long c, long d, long e, long f) { +#if !defined(__thumb__) register long _r0 asm("r0")=(long)(sysnum); register long _r6 asm("r6")=(long)(f); register long _r5 asm("r5")=(long)(e); @@ -40,6 +41,21 @@ long syscall(long sysnum, long a, long b, long c, long d, long e, long f) "r"(_r2), "r"(_r3), "r"(_r4), "r"(_r5), "r"(_r6) : "memory"); +#else + register long _r7 asm("r7")=(long)(sysnum); + register long _r5 asm("r5")=(long)(f); + register long _r4 asm("r4")=(long)(e); + register long _r3 asm("r3")=(long)(d); + register long _r2 asm("r2")=(long)(c); + register long _r1 asm("r1")=(long)(b); + register long _r0 asm("r0")=(long)(a); + asm volatile( + "swi 0" + : "=r"(_r0) + : "r"(_r0), "r"(_r1), "r"(_r2), "r"(_r3), + "r"(_r4), "r"(_r5), "r"(_r7) + : "memory"); +#endif if(_r0 >=(unsigned long) -4095) { long err = _r0; (*__errno_location())=(-err); |