svn commit: trunk/uClibc/libc/sysdeps/linux/arm/bits
aldot at uclibc.org
aldot at uclibc.org
Thu Jul 17 15:52:49 UTC 2008
Author: aldot
Date: 2008-07-17 08:52:43 -0700 (Thu, 17 Jul 2008)
New Revision: 22867
Log:
- pull fix for unwinding from the NPTL branch (Johannes Stezenbach)
Repair C89 compliance and severe whitespace-defects while at it.
Modified:
trunk/uClibc/libc/sysdeps/linux/arm/bits/syscalls.h
Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/arm/bits/syscalls.h
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/arm/bits/syscalls.h 2008-07-17 15:13:31 UTC (rev 22866)
+++ trunk/uClibc/libc/sysdeps/linux/arm/bits/syscalls.h 2008-07-17 15:52:43 UTC (rev 22867)
@@ -137,17 +137,21 @@
(int) __sys_result; })
#endif
#else /* !defined(__thumb__) */
-
+/* We can't use push/pop inside the asm because that breaks
+ unwinding (ie. thread cancellation).
+ */
#define INTERNAL_SYSCALL(name, err, nr, args...) \
({ unsigned int __sys_result; \
{ \
+ int _sys_buf[2]; \
register int _a1 __asm__ ("a1"); \
+ register int *_v3 __asm__ ("v3") = _sys_buf; \
+ *_v3 = (int) (SYS_ify(name)); \
LOAD_ARGS_##nr (args) \
- register int _v3 __asm__ ("v3") = (int) (SYS_ify(name)); \
- __asm__ __volatile__ ("push {r7}\n" \
- "\tmov r7, v3\n" \
- "\tswi 0 @ syscall " #name "\n" \
- "\tpop {r7}" \
+ __asm__ __volatile__ ("str r7, [v3, #4]\n" \
+ "\tldr r7, [v3]\n" \
+ "\tswi 0 @ syscall " #name "\n" \
+ "\tldr r7, [v3, #4]" \
: "=r" (_a1) \
: "r" (_v3) ASM_ARGS_##nr \
: "memory"); \
More information about the uClibc-cvs
mailing list