diff options
author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2005-08-17 14:48:11 +0000 |
---|---|---|
committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2005-08-17 14:48:11 +0000 |
commit | 54a7d559374ef72fa59bbe3a56d27ff5ec34d3aa (patch) | |
tree | 1fe7209313f2728c550d3eb75929b4af051fb349 /libc/sysdeps/linux/arm/syscall.c | |
parent | b46868ff8b3d2fb592e3fca4a516695533eae9e5 (diff) | |
download | uClibc-alpine-54a7d559374ef72fa59bbe3a56d27ff5ec34d3aa.tar.bz2 uClibc-alpine-54a7d559374ef72fa59bbe3a56d27ff5ec34d3aa.tar.xz |
Merge/sync with trunk.
Diffstat (limited to 'libc/sysdeps/linux/arm/syscall.c')
-rw-r--r-- | libc/sysdeps/linux/arm/syscall.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/arm/syscall.c b/libc/sysdeps/linux/arm/syscall.c index 9938abe03..195c31c74 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); @@ -47,4 +63,3 @@ long syscall(long sysnum, long a, long b, long c, long d, long e, long f) } return (long) _r0; } - |