* [PATCH] Handle 6 arguments (+ SYS_name) in syscall(3) on IA-32
@ 2004-10-15 21:08 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2004-10-15 21:08 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Glibc hackers
Hi!
syscall(3) ATM only handles at most 5 argument syscalls on IA-32, while
there are a couple of 6 argument ones. Although we have functions for
all of them now, it is not that expensive to handle it...
2004-10-15 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/i386/sysdep.h (PUSHARGS_6, DOARGS_6,
POPARGS_6, _PUSHARGS_6, _DOARGS_6, _POPARGS_6): Define.
* sysdeps/unix/sysv/linux/i386/syscall.S (syscall): Handle 6 argument
syscalls.
--- libc/sysdeps/unix/sysv/linux/i386/sysdep.h.jj 2004-10-05 09:05:00.000000000 +0200
+++ libc/sysdeps/unix/sysv/linux/i386/sysdep.h 2004-10-15 14:22:59.714897250 +0200
@@ -297,6 +297,13 @@ __i686.get_pc_thunk.reg: \
#define _DOARGS_5(n) movl n(%esp), %edi; _DOARGS_4 (n-4)
#define _POPARGS_5 _POPARGS_4; popl %edi; L(POPDI1):
+#define PUSHARGS_6 _PUSHARGS_6
+#define DOARGS_6 _DOARGS_6 (36)
+#define POPARGS_6 _POPARGS_6
+#define _PUSHARGS_6 pushl %ebp; L(PUSHBP1): _PUSHARGS_5
+#define _DOARGS_6(n) movl n(%esp), %ebp; _DOARGS_5 (n-4)
+#define _POPARGS_6 _POPARGS_5; popl %ebp; L(POPBP1):
+
#else /* !__ASSEMBLER__ */
/* We need some help from the assembler to generate optimal code. We
--- libc/sysdeps/unix/sysv/linux/i386/syscall.S.jj 2002-12-18 12:55:22.000000000 +0100
+++ libc/sysdeps/unix/sysv/linux/i386/syscall.S 2004-10-15 19:41:10.113099618 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1998, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1998, 2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -24,11 +24,11 @@
.text
ENTRY (syscall)
- PUSHARGS_5 /* Save register contents. */
- _DOARGS_5(36) /* Load arguments. */
- movl 16(%esp), %eax /* Load syscall number into %eax. */
+ PUSHARGS_6 /* Save register contents. */
+ _DOARGS_6(44) /* Load arguments. */
+ movl 20(%esp), %eax /* Load syscall number into %eax. */
ENTER_KERNEL /* Do the system call. */
- POPARGS_5 /* Restore register contents. */
+ POPARGS_6 /* Restore register contents. */
cmpl $-4095, %eax /* Check %eax for error. */
jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
L(pseudo_end):
Jakub
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-10-15 21:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-10-15 21:08 [PATCH] Handle 6 arguments (+ SYS_name) in syscall(3) on IA-32 Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).