aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h53
1 files changed, 41 insertions, 12 deletions
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index 6189b7b..3fdec5d 100644
--- a/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/linuxthreads/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@@ -39,12 +39,12 @@
L(pseudo_cancel): \
CENABLE \
SAVE_OLDTYPE_##args \
- PUSHARGS_##args \
+ PUSHCARGS_##args \
DOCARGS_##args \
movl $SYS_ify (syscall_name), %eax; \
int $0x80 \
- POPARGS_##args; \
- POPCARGS_##args \
+ POPCARGS_##args; \
+ POPSTATE_##args \
cmpl $-4095, %eax; \
jae SYSCALL_ERROR_LABEL; \
L(pseudo_end):
@@ -56,12 +56,41 @@
# define SAVE_OLDTYPE_4 SAVE_OLDTYPE_2
# define SAVE_OLDTYPE_5 SAVE_OLDTYPE_2
-# define DOCARGS_0 DOARGS_0
-# define DOCARGS_1 DOARGS_1
+# define PUSHCARGS_0 /* No arguments to push. */
+# define DOCARGS_0 /* No arguments to frob. */
+# define POPCARGS_0 /* No arguments to pop. */
+# define _PUSHCARGS_0 /* No arguments to push. */
+# define _POPCARGS_0 /* No arguments to pop. */
+
+# define PUSHCARGS_1 movl %ebx, %edx; PUSHCARGS_0
+# define DOCARGS_1 _DOARGS_1 (4)
+# define POPCARGS_1 POPCARGS_0; movl %edx, %ebx
+# define _PUSHCARGS_1 pushl %ebx; L(PUSHBX2): _PUSHCARGS_0
+# define _POPCARGS_1 _POPCARGS_0; popl %ebx; L(POPBX2):
+
+# define PUSHCARGS_2 PUSHCARGS_1
# define DOCARGS_2 _DOARGS_2 (12)
+# define POPCARGS_2 POPCARGS_1
+# define _PUSHCARGS_2 _PUSHCARGS_1
+# define _POPCARGS_2 _POPCARGS_1
+
+# define PUSHCARGS_3 _PUSHCARGS_2
# define DOCARGS_3 _DOARGS_3 (20)
+# define POPCARGS_3 _POPCARGS_3
+# define _PUSHCARGS_3 _PUSHCARGS_2
+# define _POPCARGS_3 _POPCARGS_2
+
+# define PUSHCARGS_4 _PUSHCARGS_4
# define DOCARGS_4 _DOARGS_4 (28)
+# define POPCARGS_4 _POPCARGS_4
+# define _PUSHCARGS_4 pushl %esi; L(PUSHSI2): _PUSHCARGS_3
+# define _POPCARGS_4 _POPCARGS_3; popl %esi; L(POPSI2):
+
+# define PUSHCARGS_5 _PUSHCARGS_5
# define DOCARGS_5 _DOARGS_5 (36)
+# define POPCARGS_5 _POPCARGS_5
+# define _PUSHCARGS_5 pushl %edi; L(PUSHDI2): _PUSHCARGS_4
+# define _POPCARGS_5 _POPCARGS_4; popl %edi; L(POPDI2):
# ifdef IS_IN_libpthread
# define CENABLE call __pthread_enable_asynccancel;
@@ -70,12 +99,12 @@
# define CENABLE call __libc_enable_asynccancel;
# define CDISABLE call __libc_disable_asynccancel
# endif
-# define POPCARGS_0 pushl %eax; movl %ecx, %eax; CDISABLE; popl %eax;
-# define POPCARGS_1 POPCARGS_0
-# define POPCARGS_2 xchgl (%esp), %eax; CDISABLE; popl %eax;
-# define POPCARGS_3 POPCARGS_2
-# define POPCARGS_4 POPCARGS_2
-# define POPCARGS_5 POPCARGS_2
+# define POPSTATE_0 pushl %eax; movl %ecx, %eax; CDISABLE; popl %eax;
+# define POPSTATE_1 POPSTATE_0
+# define POPSTATE_2 xchgl (%esp), %eax; CDISABLE; popl %eax;
+# define POPSTATE_3 POPSTATE_2
+# define POPSTATE_4 POPSTATE_2
+# define POPSTATE_5 POPSTATE_2
#if !defined NOT_IN_libc
# define __local_multiple_threads __libc_multiple_threads