From f051627fadac5986cb21829c1083a819d4310489 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 18 Dec 2002 11:56:21 +0000 Subject: [PATCH] Update. 2002-12-18 Ulrich Drepper * 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. --- ChangeLog | 11 +++++++++++ nptl/ChangeLog | 3 +++ nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 2 +- sysdeps/unix/sysv/linux/i386/brk.c | 10 +++++----- sysdeps/unix/sysv/linux/i386/mmap.S | 4 ++-- sysdeps/unix/sysv/linux/i386/mmap64.S | 6 +++--- sysdeps/unix/sysv/linux/i386/sigaction.c | 6 +++--- sysdeps/unix/sysv/linux/i386/socket.S | 4 ++-- sysdeps/unix/sysv/linux/i386/syscall.S | 4 ++-- sysdeps/unix/sysv/linux/i386/sysdep.h | 13 +++++++++++-- 10 files changed, 43 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index f9f268f..af82aba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-12-18 Ulrich Drepper + + * 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. + 2002-12-17 Ulrich Drepper * malloc/malloc.c (mALLOPt): Make sure malloc is initialized. diff --git a/nptl/ChangeLog b/nptl/ChangeLog index c8819b2..3356746 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,8 @@ 2002-12-18 Ulrich Drepper + * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Use ENTER_KERNEL + macro instead of using int $0x80 directly. + * sysdeps/pthread/bits/stdio-lock.h: New file. * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S: New file. * sysdeps/unix/sysv/linux/i386/i586/libc-lowlevelmutex.S: New file. diff --git a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h index 82b9ec8..9a3cb04 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h @@ -41,7 +41,7 @@ PUSHARGS_##args \ DOCARGS_##args \ movl $SYS_ify (syscall_name), %eax; \ - int $0x80 \ + ENTER_KERNEL \ POPARGS_##args; \ POPCARGS_##args \ cmpl $-4095, %eax; \ diff --git a/sysdeps/unix/sysv/linux/i386/brk.c b/sysdeps/unix/sysv/linux/i386/brk.c index 09af9b9..950144d 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 c63a49b..ebb21f3 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 df32998..3a03335 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 813c9ba..bfc8b2c 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 53f1be6..a5af6b2 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 355be5a..cd7dc65 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 7bf146e..5275eba 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"); \ -- 2.7.4