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