about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/i386
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-18 11:56:21 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-18 11:56:21 +0000
commitf051627fadac5986cb21829c1083a819d4310489 (patch)
treef6d0a6c8fa57b4fd523c58bd184beb7a3ebd6459 /sysdeps/unix/sysv/linux/i386
parentd7913e0e256e842a3ff43b1a0854b351f585645d (diff)
downloadglibc-f051627fadac5986cb21829c1083a819d4310489.tar.gz
glibc-f051627fadac5986cb21829c1083a819d4310489.tar.xz
glibc-f051627fadac5986cb21829c1083a819d4310489.zip
Update.
2002-12-18  Ulrich Drepper  <drepper@redhat.com>

	* sysdeps/unix/sysv/linux/i386/sysdep.h: Define ENTER_KERNEL macro.
	Use it instead of directly int $0x80.
	* sysdeps/unix/sysv/linux/i386/brk.c: Use ENTER_KERNEL.
	* sysdeps/unix/sysv/linux/i386/mmap64.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/mmap.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/syscall.S: Likewise.
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386')
-rw-r--r--sysdeps/unix/sysv/linux/i386/brk.c10
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap64.S6
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigaction.c6
-rw-r--r--sysdeps/unix/sysv/linux/i386/socket.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/syscall.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h13
7 files changed, 28 insertions, 19 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/brk.c b/sysdeps/unix/sysv/linux/i386/brk.c
index 09af9b9f7e..950144d41a 100644
--- a/sysdeps/unix/sysv/linux/i386/brk.c
+++ b/sysdeps/unix/sysv/linux/i386/brk.c
@@ -1,5 +1,5 @@
 /* brk system call for Linux/i386.
-   Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 2000, 2002 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
@@ -36,10 +36,10 @@ __brk (void *addr)
 {
   void *__unbounded newbrk, *__unbounded scratch;
 
-  asm ("movl %%ebx, %1\n"	/* Save %ebx in scratch register.  */
-       "movl %3, %%ebx\n"	/* Put ADDR in %ebx to be syscall arg.  */
-       "int $0x80 # %2\n"	/* Perform the system call.  */
-       "movl %1, %%ebx\n"	/* Restore %ebx from scratch register.  */
+  asm ("movl %%ebx, %1\n\t"	/* Save %ebx in scratch register.  */
+       "movl %3, %%ebx\n\t"	/* Put ADDR in %ebx to be syscall arg.  */
+       ENTER_KERNEL "\n\t"	/* Perform the system call.  */
+       "movl %1, %%ebx"		/* Restore %ebx from scratch register.  */
        : "=a" (newbrk), "=r" (scratch)
        : "0" (SYS_ify (brk)), "g" (__ptrvalue (addr)));
 
diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S
index c63a49bcd4..ebb21f3d32 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995,96,97,98,99,2000,2002 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
@@ -50,7 +50,7 @@ ENTRY (__mmap)
 	movl $SYS_ify(mmap2), %eax	/* System call number in %eax.  */
 
 	/* Do the system call trap.  */
-	int $0x80
+	ENTER_KERNEL
 L(skip):
 	/* Restore registers.  */
 	popl %edi
diff --git a/sysdeps/unix/sysv/linux/i386/mmap64.S b/sysdeps/unix/sysv/linux/i386/mmap64.S
index df32998134..3a03335814 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap64.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap64.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995,96,97,98,99,2000,2002 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
@@ -65,7 +65,7 @@ ENTRY (BP_SYM (__mmap64))
 
 	/* Do the system call trap.  */
 L(do_syscall):
-	int $0x80
+	ENTER_KERNEL
 
 	/* Restore registers.  */
 	popl %edi
@@ -110,7 +110,7 @@ L(einval):
 	lea ADDR-SVRSP(%esp), %ebx	/* Address of args is 1st arg.  */
 
 	/* Do the system call trap.  */
-	int $0x80
+	ENTER_KERNEL
 
 	/* Restore registers.  */
 	movl %edx, %ebx
diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c
index 813c9bab77..bfc8b2c2e2 100644
--- a/sysdeps/unix/sysv/linux/i386/sigaction.c
+++ b/sysdeps/unix/sysv/linux/i386/sigaction.c
@@ -131,9 +131,9 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
       k_newact.sa_restorer = &restore;
     }
 
-  asm volatile ("pushl %%ebx\n"
-		"movl %2, %%ebx\n"
-		"int $0x80\n"
+  asm volatile ("pushl %%ebx\n\t"
+		"movl %2, %%ebx\n\t"
+		ENTER_KERNEL_STR "\n\t"
 		"popl %%ebx"
 		: "=a" (result)
 		: "0" (SYS_ify (sigaction)), "mr" (sig),
diff --git a/sysdeps/unix/sysv/linux/i386/socket.S b/sysdeps/unix/sysv/linux/i386/socket.S
index 53f1be61ea..a5af6b2907 100644
--- a/sysdeps/unix/sysv/linux/i386/socket.S
+++ b/sysdeps/unix/sysv/linux/i386/socket.S
@@ -57,7 +57,7 @@ ENTRY (__socket)
 	lea 4(%esp), %ecx		/* Address of args is 2nd arg.  */
 
         /* Do the system call trap.  */
-	int $0x80
+	ENTER_KERNEL
 
 	/* Restore registers.  */
 	movl %edx, %ebx
@@ -89,7 +89,7 @@ L(pseudo_end):
 	lea 8(%esp), %ecx		/* Address of args is 2nd arg.  */
 
         /* Do the system call trap.  */
-	int $0x80
+	ENTER_KERNEL
 
 	/* Restore registers.  */
 	movl %edx, %ebx
diff --git a/sysdeps/unix/sysv/linux/i386/syscall.S b/sysdeps/unix/sysv/linux/i386/syscall.S
index 355be5a58a..cd7dc65a5f 100644
--- a/sysdeps/unix/sysv/linux/i386/syscall.S
+++ b/sysdeps/unix/sysv/linux/i386/syscall.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1998, 2002 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
@@ -27,7 +27,7 @@ ENTRY (syscall)
 	PUSHARGS_5		/* Save register contents.  */
 	_DOARGS_5(36)		/* Load arguments.  */
 	movl 16(%esp), %eax	/* Load syscall number into %eax.  */
-	int $0x80		/* Do the system call.  */
+	ENTER_KERNEL		/* Do the system call.  */
 	POPARGS_5		/* Restore register contents.  */
 	cmpl $-4095, %eax	/* Check %eax for error.  */
 	jae SYSCALL_ERROR_LABEL	/* Jump to error handler if error.  */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 7bf146e8be..5275ebaf57 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -159,6 +159,11 @@ __i686.get_pc_thunk.reg:						      \
 # endif	/* _LIBC_REENTRANT */
 #endif	/* PIC */
 
+
+/* The original calling convention for system calls on Linux/i386 is
+   to use int $0x80.  */
+#define ENTER_KERNEL int $0x80
+
 /* Linux takes system call arguments in registers:
 
 	syscall number	%eax	     call-clobbered
@@ -208,7 +213,7 @@ __i686.get_pc_thunk.reg:						      \
     PUSHARGS_##args							      \
     DOARGS_##args							      \
     movl $SYS_ify (syscall_name), %eax;					      \
-    int $0x80								      \
+    ENTER_KERNEL							      \
     POPARGS_##args
 
 #define PUSHARGS_0	/* No arguments to push.  */
@@ -255,6 +260,10 @@ __i686.get_pc_thunk.reg:						      \
 
 #else	/* !__ASSEMBLER__ */
 
+/* The original calling convention for system calls on Linux/i386 is
+   to use int $0x80.  */
+#define ENTER_KERNEL "int $0x80"
+
 /* We need some help from the assembler to generate optimal code.  We
    define some macros here which later will be used.  */
 asm (".L__X'%ebx = 1\n\t"
@@ -315,7 +324,7 @@ asm (".L__X'%ebx = 1\n\t"
     asm volatile (							      \
     LOADARGS_##nr							      \
     "movl %1, %%eax\n\t"						      \
-    "int $0x80\n\t"							      \
+    ENTER_KERNEL "\n\t"						      \
     RESTOREARGS_##nr							      \
     : "=a" (resultvar)							      \
     : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc");		      \