about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/i386
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-10-26 03:59:27 +0000
committerRoland McGrath <roland@gnu.org>1995-10-26 03:59:27 +0000
commitc14e4c326d6b916112d03994105ddd3389515954 (patch)
treea6eacdb0d006783dd21626b55c4b37d98905329a /sysdeps/unix/sysv/linux/i386
parentf44f9c33dff32b1f9f257ec855bbb7261c028039 (diff)
downloadglibc-c14e4c326d6b916112d03994105ddd3389515954.tar.gz
glibc-c14e4c326d6b916112d03994105ddd3389515954.tar.xz
glibc-c14e4c326d6b916112d03994105ddd3389515954.zip
* hurd/hurdstartup.c (_hurd_startup): Use new
	exec_startup_get_info RPC from exec_startup.defs
	in place of old exec_startup from exec.defs.  Remove kludge to
	guess user entry and phdr locations, since the new RPC gives us
	that info.

	* sysdeps/generic/_strerror.c: Undo last change.
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386')
-rw-r--r--sysdeps/unix/sysv/linux/i386/brk.S2
-rw-r--r--sysdeps/unix/sysv/linux/i386/mmap.S3
-rw-r--r--sysdeps/unix/sysv/linux/i386/sbrk.S4
-rw-r--r--sysdeps/unix/sysv/linux/i386/socket.S3
-rw-r--r--sysdeps/unix/sysv/linux/i386/syscall.S14
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h8
-rw-r--r--sysdeps/unix/sysv/linux/i386/xmknod.S7
-rw-r--r--sysdeps/unix/sysv/linux/i386/xstat.S9
8 files changed, 24 insertions, 26 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/brk.S b/sysdeps/unix/sysv/linux/i386/brk.S
index ef2f55db97..2a9a2bcd24 100644
--- a/sysdeps/unix/sysv/linux/i386/brk.S
+++ b/sysdeps/unix/sysv/linux/i386/brk.S
@@ -32,8 +32,8 @@ C_LABEL(__curbrk)
 #endif
 
 .text
-.globl C_SYMBOL_NAME(syscall_error)
 
+	SYSCALL_ERROR_HANDLER
 ENTRY (__brk)
 	movl %ebx, %edx
 	movl $SYS_ify(brk), %eax
diff --git a/sysdeps/unix/sysv/linux/i386/mmap.S b/sysdeps/unix/sysv/linux/i386/mmap.S
index 96ea870846..1d1d628ad5 100644
--- a/sysdeps/unix/sysv/linux/i386/mmap.S
+++ b/sysdeps/unix/sysv/linux/i386/mmap.S
@@ -18,7 +18,8 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER
 
 ENTRY (__mmap)
 
diff --git a/sysdeps/unix/sysv/linux/i386/sbrk.S b/sysdeps/unix/sysv/linux/i386/sbrk.S
index 7a0e940cfe..e38e88f64d 100644
--- a/sysdeps/unix/sysv/linux/i386/sbrk.S
+++ b/sysdeps/unix/sysv/linux/i386/sbrk.S
@@ -22,7 +22,7 @@ Cambridge, MA 02139, USA.  */
 .globl C_SYMBOL_NAME(__curbrk)
 
 .text
-.globl C_SYMBOL_NAME(syscall_error)
+	SYSCALL_ERROR_HANDLER
 
 ENTRY (__sbrk)
 
@@ -53,7 +53,7 @@ ENTRY (__sbrk)
 	movl C_SYMBOL_NAME(__curbrk), %ebx
 	movl %ebx, %eax
 #endif
-	
+
 	addl 4(%esp), %ebx
 	cmpl %ebx, %eax
 	je .L2
diff --git a/sysdeps/unix/sysv/linux/i386/socket.S b/sysdeps/unix/sysv/linux/i386/socket.S
index 3d3a67213b..b2e6b2603f 100644
--- a/sysdeps/unix/sysv/linux/i386/socket.S
+++ b/sysdeps/unix/sysv/linux/i386/socket.S
@@ -22,7 +22,8 @@ Cambridge, MA 02139, USA.  */
 #define P(a, b) P2(a, b)
 #define P2(a, b) a##b
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER
 
 /* The socket-oriented system calls are handled unusally in Linux.
    They are all gated through the single `socketcall' system call number.
diff --git a/sysdeps/unix/sysv/linux/i386/syscall.S b/sysdeps/unix/sysv/linux/i386/syscall.S
index 6e6aa5d3c8..52eb48a9ae 100644
--- a/sysdeps/unix/sysv/linux/i386/syscall.S
+++ b/sysdeps/unix/sysv/linux/i386/syscall.S
@@ -18,14 +18,14 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER	/* Define error handler for PIC.  */
 ENTRY (syscall)
-	popl %ecx		/* Pop return address into %ecx.  */
-	popl %eax		/* Pop syscall number into %eax.  */
-	pushl %ecx		/* Push back return address.  */
-	DO_CALL (5)		/* Frob the args and do the system call.  */
-	movl (%esp), %ecx
-	pushl %ecx
+	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.  */
+	POPARGS_5		/* Restore register contents.  */
 	testl %eax, %eax	/* Check %eax for error.  */
 	jl JUMPTARGET(syscall_error) /* Jump to error handler if negative.  */
 	ret			/* Return to caller.  */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 7bd910e534..f6da272c75 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -44,8 +44,7 @@ Cambridge, MA 02139, USA.  */
   .text;								      \
   SYSCALL_ERROR_HANDLER							      \
   ENTRY (name)								      \
-    movl $SYS_ify (syscall_name), %eax;					      \
-    DO_CALL (args);							      \
+    DO_CALL (args, syscall_name);					      \
     testl %eax, %eax;							      \
     jl syscall_error;
 
@@ -62,7 +61,7 @@ syscall_error:								      \
   movl errno@GOT(%ecx), %ecx;						      \
   movl %eax, (%ecx);							      \
   movl $-1, %eax;							      \
-  ret
+  ret;
 #endif
 
 /* We define our own ENTRY macro because the alignment should be 16 for
@@ -119,9 +118,10 @@ syscall_error:								      \
    i386 and i486 processors though.  */
 
 #undef	DO_CALL
-#define DO_CALL(args)					      		      \
+#define DO_CALL(args, syscall_name)			      		      \
     PUSHARGS_##args							      \
     DOARGS_##args							      \
+    movl $SYS_ify (syscall_name), %eax;					      \
     int $0x80								      \
     POPARGS_##args
 
diff --git a/sysdeps/unix/sysv/linux/i386/xmknod.S b/sysdeps/unix/sysv/linux/i386/xmknod.S
index fde3165d01..10778bdceb 100644
--- a/sysdeps/unix/sysv/linux/i386/xmknod.S
+++ b/sysdeps/unix/sysv/linux/i386/xmknod.S
@@ -19,21 +19,20 @@ Cambridge, MA 02139, USA.  */
 #include <sysdep.h>
 #include <errnos.h>
 
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER	/* Error handler for PIC.  */
 ENTRY (__xmknod)
 	popl %ecx		/* Pop return address into %eax.  */
 	popl %edx		/* Pop version number into %edx.  */
 	pushl %ecx		/* Push back the return address.  */
 
-	movl $SYS_ify(mknod), %eax
-			/* Load syscall number for prev_stat in %eax.  */
 	cmpl $1, %edx		/* Version 1 xstat call?  */
 	je .L1			/* Yes, do syscall.  */
 
 	movl $-EINVAL, %eax	/* Load error code into %eax.  */
 	jmp .L2
 
-.L1:	DO_CALL (3)		/* Do the syscall.   */
+.L1:	DO_CALL (3, mknod)	/* Do the syscall.   */
 
 	movl (%esp), %ecx
 	testl %eax, %eax	/* Check for error.  */
diff --git a/sysdeps/unix/sysv/linux/i386/xstat.S b/sysdeps/unix/sysv/linux/i386/xstat.S
index 34822beda6..58c5f558c4 100644
--- a/sysdeps/unix/sysv/linux/i386/xstat.S
+++ b/sysdeps/unix/sysv/linux/i386/xstat.S
@@ -19,23 +19,20 @@ Cambridge, MA 02139, USA.  */
 #include <sysdep.h>
 #include <errnos.h>
 
-#define SYS_expand(name) SYS_ify(name)
-
-.globl syscall_error
+	.text
+	SYSCALL_ERROR_HANDLER	/* Error handler for PIC.  */
 ENTRY (__xstat)
 	popl %ecx		/* Pop return address into %eax.  */
 	popl %edx		/* Pop version number into %edx.  */
 	pushl %ecx		/* Push back the return address.  */
 
-	movl $SYS_expand(stat), %eax
-			/* Load syscall number for prev_stat in %eax.  */
 	cmpl $1, %edx		/* Version 1 xstat call?  */
 	je .L1			/* Yes, do syscall.  */
 
 	movl $-EINVAL, %eax	/* Load error code into %eax.  */
 	jmp .L2
 
-.L1:	DO_CALL (2)		/* Do the syscall.   */
+.L1:	DO_CALL (2, stat)	/* Do the syscall.   */
 
 	movl (%esp), %ecx
 	testl %eax, %eax	/* Check for error.  */