public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* [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).