diff options
author | peter <peter@FreeBSD.org> | 1996-05-05 07:56:21 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1996-05-05 07:56:21 +0000 |
commit | 4b7195c99191637bf59fd4ad626297296bf3610f (patch) | |
tree | bea8a07c70223c0e39939063c6dbbdf8eb9d0f17 | |
parent | 93f1aa601a7bda9bd9b83bf5098c3f05f6edd744 (diff) | |
download | FreeBSD-src-4b7195c99191637bf59fd4ad626297296bf3610f.zip FreeBSD-src-4b7195c99191637bf59fd4ad626297296bf3610f.tar.gz |
Add support to enable libc to be compiled in ELF format. (#ifdef __ELF__)
In a nutshell, this macroizes the local/global symbol scoping rules
that are different in a.out and ELF. It also makes the i386 assembler
stubs conform to i386 PIC calling conventions - the a.out ld.so didn't
object, but the ELF one needs it as it implements PIC jumps via PLT's as
well as calls. The a.out rtld only worked because it was accidently
snooping the grandparent calling function's return address off the stack..
This also affects the libc_r code a little, because of cpp macro nesting.
33 files changed, 340 insertions, 281 deletions
diff --git a/lib/libc/amd64/SYS.h b/lib/libc/amd64/SYS.h index 9e989e5..caea98f 100644 --- a/lib/libc/amd64/SYS.h +++ b/lib/libc/amd64/SYS.h @@ -35,7 +35,7 @@ * * from: @(#)SYS.h 5.5 (Berkeley) 5/7/91 * - * $Id: SYS.h,v 1.2 1994/08/05 01:17:57 wollman Exp $ + * $Id: SYS.h,v 1.3 1996/01/22 00:00:51 julian Exp $ */ #include <sys/syscall.h> @@ -61,28 +61,27 @@ #define PIC_GOTOFF(x) x #endif -#define SYSCALL(x) 2: jmp cerror; ENTRY(x); lea SYS_/**/x,%eax; LCALL(7,0); jb 2b +#define SYSCALL(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); ENTRY(x); lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b #define RSYSCALL(x) SYSCALL(x); ret -#ifdef _THREAD_SAFE /* - * Support for user-space threads which require that some syscalls be - * private to the threaded library. + * For the thread_safe versions, we prepend _thread_sys_ to the function + * name so that the 'C' wrapper can go around the real name. */ -#define PSYSCALL(x) 2: jmp cerror; ENTRY(_thread_sys_/**/x); lea SYS_/**/x,%eax; LCALL(7,0); jb 2b -#else -/* - * The non-threaded library defaults to traditional syscalls where - * the function name matches the syscall name. - */ -#define PSYSCALL(x) SYSCALL(x) +#ifdef _THREAD_SAFE /* in case */ +#define PSYSCALL(x,y) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); ENTRY(y); lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b +#define PRSYSCALL(x,y) PSYSCALL(x,y); ret #endif -#define PRSYSCALL(x) PSYSCALL(x); ret -#define PSEUDO(x,y) ENTRY(x); lea SYS_/**/y, %eax; ; LCALL(7,0); ret -#define CALL(x,y) call _/**/y; addl $4*x,%esp + +#define PSEUDO(x,y) ENTRY(x); lea __CONCAT(SYS_,y), %eax; KERNCALL; ret +#define CALL(x,y) call CNAME(y); addl $4*x,%esp /* gas fucks up offset -- although we don't currently need it, do for BCS */ #define LCALL(x,y) .byte 0x9a ; .long y; .word x -#define ASMSTR .asciz +#ifdef __ELF__ +#define KERNCALL int $0x80 /* Faster */ +#else +#define KERNCALL LCALL(7,0) /* The old way */ +#endif - .globl cerror +#define ASMSTR .asciz diff --git a/lib/libc/amd64/gen/setjmp.S b/lib/libc/amd64/gen/setjmp.S index 89efa92..078b2eb 100644 --- a/lib/libc/amd64/gen/setjmp.S +++ b/lib/libc/amd64/gen/setjmp.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: setjmp.S,v 1.3 1995/01/23 01:27:08 davidg Exp $ + * $Id: setjmp.S,v 1.4 1996/01/22 00:00:53 julian Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id: setjmp.S,v 1.3 1995/01/23 01:27:08 davidg Exp $" + .asciz "$Id: setjmp.S,v 1.4 1996/01/22 00:00:53 julian Exp $" #endif /* LIBC_RCS and not lint */ /* @@ -59,13 +59,15 @@ ENTRY(_thread_sys_setjmp) #else ENTRY(setjmp) #endif + PIC_PROLOGUE pushl $0 #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigblock) + call PIC_PLT(CNAME(_thread_sys_sigblock)) #else - call PIC_PLT(_sigblock) + call PIC_PLT(CNAME(sigblock)) #endif popl %edx + PIC_EPILOGUE movl 4(%esp),%ecx movl 0(%esp),%edx movl %edx, 0(%ecx) @@ -85,13 +87,15 @@ ENTRY(_thread_sys_longjmp) ENTRY(longjmp) #endif movl 4(%esp),%edx + PIC_PROLOGUE pushl 24(%edx) #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigsetmask) + call PIC_PLT(CNAME(_thread_sys_sigsetmask)) #else - call PIC_PLT(_sigsetmask) /* XXX this is not reentrant */ + call PIC_PLT(CNAME(sigsetmask)) /* XXX this is not reentrant */ #endif popl %eax + PIC_EPILOGUE movl 4(%esp),%edx movl 8(%esp),%eax movl 0(%edx),%ecx diff --git a/lib/libc/amd64/gen/sigsetjmp.S b/lib/libc/amd64/gen/sigsetjmp.S index 5cc00f0..1d56f29 100644 --- a/lib/libc/amd64/gen/sigsetjmp.S +++ b/lib/libc/amd64/gen/sigsetjmp.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigsetjmp.S,v 1.5 1996/01/22 00:00:54 julian Exp $ + * $Id: sigsetjmp.S,v 1.6 1996/02/17 12:25:21 peter Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigsetjmp.S,v 1.5 1996/01/22 00:00:54 julian Exp $" + .asciz "$Id: sigsetjmp.S,v 1.6 1996/02/17 12:25:21 peter Exp $" #endif /* LIBC_RCS and not lint */ #include "DEFS.h" @@ -69,13 +69,15 @@ ENTRY(sigsetjmp) movl %eax,32(%ecx) testl %eax,%eax jz 1f + PIC_PROLOGUE pushl $0 #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigblock) + call PIC_PLT(CNAME(_thread_sys_sigblock)) #else - call PIC_PLT(_sigblock) + call PIC_PLT(CNAME(sigblock)) #endif addl $4,%esp + PIC_EPILOGUE movl 4(%esp),%ecx movl %eax,24(%ecx) 1: movl 0(%esp),%edx @@ -97,13 +99,15 @@ ENTRY(siglongjmp) movl 4(%esp),%edx cmpl $0,32(%edx) jz 1f + PIC_PROLOGUE pushl 24(%edx) #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigsetmask) + call PIC_PLT(CNAME(_thread_sys_sigsetmask)) #else - call PIC_PLT(_sigsetmask) + call PIC_PLT(CNAME(sigsetmask)) #endif addl $4,%esp + PIC_EPILOGUE 1: movl 4(%esp),%edx movl 8(%esp),%eax movl 0(%edx),%ecx diff --git a/lib/libc/amd64/sys/brk.S b/lib/libc/amd64/sys/brk.S index c8311bb..1636858 100644 --- a/lib/libc/amd64/sys/brk.S +++ b/lib/libc/amd64/sys/brk.S @@ -33,20 +33,18 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: brk.S,v 1.1 1994/08/05 01:18:39 wollman Exp $ + * $Id: brk.S,v 1.2 1995/01/23 01:29:39 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: brk.S,v 1.2 1995/01/23 01:29:39 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -#define SYS_brk 17 - - .globl curbrk - .globl minbrk + .globl HIDENAME(curbrk) + .globl HIDENAME(minbrk) ENTRY(_brk) jmp ok @@ -54,39 +52,40 @@ ENTRY(brk) #ifdef PIC movl 4(%esp),%eax PIC_PROLOGUE - movl PIC_GOT(curbrk),%edx # set up GOT addressing - movl PIC_GOT(minbrk),%ecx # + movl PIC_GOT(HIDENAME(curbrk)),%edx # set up GOT addressing + movl PIC_GOT(HIDENAME(minbrk)),%ecx # cmpl %eax,(%ecx) PIC_EPILOGUE jl ok movl (%ecx),%eax movl %eax,4(%esp) ok: - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err movl 4(%esp),%eax movl %eax,(%edx) movl $0,%eax ret err: - jmp PIC_PLT(cerror) + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) #else movl 4(%esp),%eax - cmpl %eax,minbrk + cmpl %eax,HIDENAME(minbrk) jl ok - movl minbrk,%eax + movl HIDENAME(minbrk),%eax movl %eax,4(%esp) ok: - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err movl 4(%esp),%eax - movl %eax,curbrk + movl %eax,HIDENAME(curbrk) movl $0,%eax ret err: - jmp cerror + jmp HIDENAME(cerror) #endif diff --git a/lib/libc/amd64/sys/cerror.S b/lib/libc/amd64/sys/cerror.S index 2cbb0f9..926dcd9 100644 --- a/lib/libc/amd64/sys/cerror.S +++ b/lib/libc/amd64/sys/cerror.S @@ -33,28 +33,31 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: cerror.S,v 1.3 1995/01/23 01:29:43 davidg Exp $ + * $Id: cerror.S,v 1.4 1996/01/22 00:00:57 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: cerror.S,v 1.3 1995/01/23 01:29:43 davidg Exp $" + .asciz "$Id: cerror.S,v 1.4 1996/01/22 00:00:57 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" + .globl HIDENAME(cerror) + #ifdef _THREAD_SAFE /* * Threaded version using __error(). */ - .globl ___error - .type ___error,@function -cerror: + .globl CNAME(__error) + .type CNAME(__error),@function +HIDENAME(cerror): pushl %eax #ifdef PIC - call PIC_PLT(___error) + /* The caller must execute the PIC prologue before jumping to cerror. */ + call PIC_PLT(CNAME(__error)) #else - call ___error + call CNAME(__error) #endif popl %ecx movl %ecx,(%eax) @@ -66,15 +69,15 @@ cerror: /* * Non-threaded version using global errno. */ - .globl _errno -cerror: + .globl CNAME(errno) +HIDENAME(cerror): #ifdef PIC - PIC_PROLOGUE - movl PIC_GOT(_errno),%ecx + /* The caller must execute the PIC prologue before jumping to cerror. */ + movl PIC_GOT(CNAME(errno)),%ecx movl %eax,(%ecx) PIC_EPILOGUE #else - movl %eax,_errno + movl %eax,CNAME(errno) #endif movl $-1,%eax movl $-1,%edx diff --git a/lib/libc/amd64/sys/exect.S b/lib/libc/amd64/sys/exect.S index 74a055b..59ce389 100644 --- a/lib/libc/amd64/sys/exect.S +++ b/lib/libc/amd64/sys/exect.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: exect.S,v 1.1 1994/08/05 01:18:42 wollman Exp $ + * $Id: exect.S,v 1.2 1995/01/23 01:29:46 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: exect.S,v 1.2 1995/01/23 01:29:46 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" @@ -51,5 +51,6 @@ ENTRY(exect) orl $ PSL_T,%edx pushl %edx popf - LCALL(7,0) - jmp cerror /* exect(file, argv, env); */ + KERNCALL + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) /* exect(file, argv, env); */ diff --git a/lib/libc/amd64/sys/pipe.S b/lib/libc/amd64/sys/pipe.S index 809445f..0dcf857 100644 --- a/lib/libc/amd64/sys/pipe.S +++ b/lib/libc/amd64/sys/pipe.S @@ -33,17 +33,21 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pipe.S,v 1.2 1995/01/23 01:29:57 davidg Exp $ + * $Id: pipe.S,v 1.3 1996/01/22 00:00:58 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: pipe.S,v 1.2 1995/01/23 01:29:57 davidg Exp $" + .asciz "$Id: pipe.S,v 1.3 1996/01/22 00:00:58 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -PSYSCALL(pipe) +#ifdef _THREAD_SAFE +PSYSCALL(pipe,_thread_sys_pipe) +#else +SYSCALL(pipe) +#endif movl 4(%esp),%ecx movl %eax,(%ecx) movl %edx,4(%ecx) diff --git a/lib/libc/amd64/sys/ptrace.S b/lib/libc/amd64/sys/ptrace.S index e3ac3a5..993c9be 100644 --- a/lib/libc/amd64/sys/ptrace.S +++ b/lib/libc/amd64/sys/ptrace.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ptrace.S,v 1.1 1994/08/05 01:18:47 wollman Exp $ + * $Id: ptrace.S,v 1.2 1995/01/23 01:29:59 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: ptrace.S,v 1.2 1995/01/23 01:29:59 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" @@ -47,15 +47,16 @@ ENTRY(ptrace) xorl %eax,%eax #ifdef PIC PIC_PROLOGUE - movl PIC_GOT(_errno),%edx + movl PIC_GOT(CNAME(errno)),%edx movl %eax,(%edx) PIC_EPILOGUE #else - movl %eax,_errno + movl %eax,CNAME(errno) #endif lea SYS_ptrace,%eax - LCALL(7,0) + KERNCALL jb err ret err: - jmp cerror + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) diff --git a/lib/libc/amd64/sys/sbrk.S b/lib/libc/amd64/sys/sbrk.S index 2d65b59..d5c48ddc 100644 --- a/lib/libc/amd64/sys/sbrk.S +++ b/lib/libc/amd64/sys/sbrk.S @@ -33,64 +33,63 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sbrk.S,v 1.2 1995/01/23 01:30:04 davidg Exp $ + * $Id: sbrk.S,v 1.3 1995/10/04 15:58:57 phk Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sbrk.S,v 1.2 1995/01/23 01:30:04 davidg Exp $" + .asciz "$Id: sbrk.S,v 1.3 1995/10/04 15:58:57 phk Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -#define SYS_brk 17 - - .globl _end - .globl minbrk - .globl curbrk + .globl CNAME(end) + .globl HIDENAME(minbrk) + .globl HIDENAME(curbrk) .data -minbrk: .long _end -curbrk: .long _end +HIDENAME(minbrk): .long CNAME(end) +HIDENAME(curbrk): .long CNAME(end) .text ENTRY(sbrk) #ifdef PIC movl 4(%esp),%ecx PIC_PROLOGUE - movl PIC_GOT(curbrk),%edx + movl PIC_GOT(HIDENAME(curbrk)),%edx movl (%edx),%eax PIC_EPILOGUE testl %ecx,%ecx jz back addl %eax,4(%esp) - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err PIC_PROLOGUE - movl PIC_GOT(curbrk),%edx + movl PIC_GOT(HIDENAME(curbrk)),%edx movl (%edx),%eax addl %ecx,(%edx) PIC_EPILOGUE back: ret err: - jmp PIC_PLT(cerror) + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) #else /* !PIC */ movl 4(%esp),%ecx - movl curbrk,%eax + movl HIDENAME(curbrk),%eax testl %ecx,%ecx jz back addl %eax,4(%esp) - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err - movl curbrk,%eax - addl %ecx,curbrk + movl HIDENAME(curbrk),%eax + addl %ecx,HIDENAME(curbrk) back: ret err: - jmp cerror + jmp HIDENAME(cerror) #endif /* PIC */ diff --git a/lib/libc/amd64/sys/setlogin.S b/lib/libc/amd64/sys/setlogin.S index 96c7886..1ec31b9 100644 --- a/lib/libc/amd64/sys/setlogin.S +++ b/lib/libc/amd64/sys/setlogin.S @@ -33,27 +33,27 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: setlogin.S,v 1.1 1994/08/05 01:18:50 wollman Exp $ + * $Id: setlogin.S,v 1.2 1995/01/23 01:30:06 davidg Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: setlogin.S,v 1.2 1995/01/23 01:30:06 davidg Exp $" #endif /* LIBC_RCS and not lint */ #include "SYS.h" -.globl __logname_valid /* in getlogin() */ +.globl CNAME(_logname_valid) /* in getlogin() */ SYSCALL(setlogin) #ifdef PIC PIC_PROLOGUE pushl %eax - movl PIC_GOT(__logname_valid),%eax + movl PIC_GOT(CNAME(_logname_valid)),%eax movl $0,(%eax) popl %eax PIC_EPILOGUE #else - movl $0,__logname_valid + movl $0,CNAME(_logname_valid) #endif ret /* setlogin(name) */ diff --git a/lib/libc/amd64/sys/sigreturn.S b/lib/libc/amd64/sys/sigreturn.S index 6f3f571..cce518b 100644 --- a/lib/libc/amd64/sys/sigreturn.S +++ b/lib/libc/amd64/sys/sigreturn.S @@ -33,25 +33,24 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigreturn.S,v 1.2 1995/01/23 01:30:16 davidg Exp $ + * $Id: sigreturn.S,v 1.3 1996/01/22 00:01:00 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigreturn.S,v 1.2 1995/01/23 01:30:16 davidg Exp $" + .asciz "$Id: sigreturn.S,v 1.3 1996/01/22 00:01:00 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" /* - * We must preserve the state of the registers as the user has set them up. + * NOTE: If the profiling ENTRY() code ever changes any registers, they + * must be saved. On FreeBSD, this is not the case. */ -#ifdef PROF -#undef ENTRY -#define ENTRY(x) \ - .globl _/**/x; .align 2; _/**/x: pusha ; \ - .data; 1:; .long 0; .text; movl $1b,%eax; call mcount; popa ; nop -#endif /* PROF */ -PSYSCALL(sigreturn) +#ifdef _THREAD_SAFE +PSYSCALL(sigreturn,_thread_sys_sigreturn) +#else +SYSCALL(sigreturn) +#endif ret diff --git a/lib/libc/amd64/sys/vfork.S b/lib/libc/amd64/sys/vfork.S index 341b75c..2b69ca0 100644 --- a/lib/libc/amd64/sys/vfork.S +++ b/lib/libc/amd64/sys/vfork.S @@ -33,14 +33,15 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: Ovfork.S,v 1.2 1995/01/23 01:29:37 davidg Exp $ + * $Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: Ovfork.S,v 1.2 1995/01/23 01:29:37 davidg Exp $" + .asciz "$Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ +#include "DEFS.h" #include "SYS.h" /* @@ -50,14 +51,11 @@ * %eax == pid of child in parent, %eax == pid of parent in child. * */ - .set vfork,66 -.globl _vfork -.type _vfork,@function -_vfork: +ENTRY(vfork) popl %ecx /* my rta into ecx */ - movl $vfork, %eax - LCALL(7,0) + lea SYS_vfork,%eax + KERNCALL jb verror vforkok: cmpl $0,%edx /* child process? */ @@ -67,14 +65,14 @@ vforkok: /* * Threaded version using __error(). */ - .globl ___error - .type ___error,@function + .globl CNAME(__error) + .type CNAME(__error),@function verror: pushl %eax #ifdef PIC - call PIC_PLT(___error) + call PIC_PLT(CNAME(__error)) #else - call ___error + call CNAME(__error) #endif popl %ecx movl %ecx,(%eax) @@ -84,15 +82,15 @@ verror: /* * Non-threaded version using global errno. */ - .globl _errno + .globl CNAME(errno) verror: #ifdef PIC PIC_PROLOGUE - movl PIC_GOT(_errno), %edx + movl PIC_GOT(CNAME(errno)), %edx movl %eax,(%edx) PIC_EPILOGUE #else - movl %eax,_errno + movl %eax,CNAME(errno) #endif movl $-1,%eax #endif /* !_THREAD_SAFE */ diff --git a/lib/libc/gmon/gmon.c b/lib/libc/gmon/gmon.c index 572b7eb..81e36dd 100644 --- a/lib/libc/gmon/gmon.c +++ b/lib/libc/gmon/gmon.c @@ -44,7 +44,11 @@ static char sccsid[] = "@(#)gmon.c 8.1 (Berkeley) 6/4/93"; #include <fcntl.h> #include <unistd.h> +#if defined(__ELF__) +extern char *minbrk asm (".minbrk"); +#else extern char *minbrk asm ("minbrk"); +#endif struct gmonparam _gmonparam = { GMON_PROF_OFF }; diff --git a/lib/libc/i386/DEFS.h b/lib/libc/i386/DEFS.h index 6df18a1..2ec3019 100644 --- a/lib/libc/i386/DEFS.h +++ b/lib/libc/i386/DEFS.h @@ -35,9 +35,27 @@ * * from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90 * - * $Id: DEFS.h,v 1.4 1994/05/03 16:29:13 jkh Exp $ + * $Id: DEFS.h,v 1.2 1994/08/05 01:17:56 wollman Exp $ */ +#include <sys/cdefs.h> + +/* + * CNAME and HIDENAME manage the relationship between symbol names in C + * and the equivalent assembly language names. CNAME is given a name as + * it would be used in a C program. It expands to the equivalent assembly + * language name. HIDENAME is given an assembly-language name, and expands + * to a possibly-modified form that will be invisible to C programs. + */ +#if defined(__ELF__) /* { */ +#define CNAME(csym) csym +#define HIDENAME(asmsym) __CONCAT(.,asmsym) +#else /* } { */ +#define CNAME(csym) __CONCAT(_,csym) +#define HIDENAME(asmsym) asmsym +#endif /* } */ + + /* XXX should use align 4,0x90 for -m486. */ #define _START_ENTRY .align 2,0x90; #if 0 @@ -51,30 +69,30 @@ #ifdef PROF #define ALTENTRY(x) _START_ENTRY \ - .globl _/**/x; .type _/**/x,@function; _/**/x:; \ + .globl CNAME(x); .type CNAME(x),@function; CNAME(x):; \ _MID_ENTRY \ - call mcount; jmp 9f + call HIDENAME(mcount); jmp 9f -#define ENTRY(x) _START_ENTRY \ - .globl _/**/x; .type _/**/x,@function; _/**/x:; \ +#define ENTRY(x) _START_ENTRY \ + .globl CNAME(x); .type CNAME(x),@function; CNAME(x):; \ _MID_ENTRY \ - call mcount; 9: + call HIDENAME(mcount); 9: #define ALTASENTRY(x) _START_ENTRY \ .globl x; .type x,@function; x:; \ _MID_ENTRY \ - call mcount; jmp 9f + call HIDENAME(mcount); jmp 9f #define ASENTRY(x) _START_ENTRY \ .globl x; .type x,@function; x:; \ _MID_ENTRY \ - call mcount; 9: + call HIDENAME(mcount); 9: #else /* !PROF */ -#define ENTRY(x) _START_ENTRY .globl _/**/x; .type _/**/x,@function; \ - _/**/x: +#define ENTRY(x) _START_ENTRY .globl CNAME(x); .type CNAME(x),@function; \ + CNAME(x): #define ALTENTRY(x) ENTRY(x) #define ASENTRY(x) _START_ENTRY .globl x; .type x,@function; x: diff --git a/lib/libc/i386/SYS.h b/lib/libc/i386/SYS.h index 9e989e5..caea98f 100644 --- a/lib/libc/i386/SYS.h +++ b/lib/libc/i386/SYS.h @@ -35,7 +35,7 @@ * * from: @(#)SYS.h 5.5 (Berkeley) 5/7/91 * - * $Id: SYS.h,v 1.2 1994/08/05 01:17:57 wollman Exp $ + * $Id: SYS.h,v 1.3 1996/01/22 00:00:51 julian Exp $ */ #include <sys/syscall.h> @@ -61,28 +61,27 @@ #define PIC_GOTOFF(x) x #endif -#define SYSCALL(x) 2: jmp cerror; ENTRY(x); lea SYS_/**/x,%eax; LCALL(7,0); jb 2b +#define SYSCALL(x) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); ENTRY(x); lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b #define RSYSCALL(x) SYSCALL(x); ret -#ifdef _THREAD_SAFE /* - * Support for user-space threads which require that some syscalls be - * private to the threaded library. + * For the thread_safe versions, we prepend _thread_sys_ to the function + * name so that the 'C' wrapper can go around the real name. */ -#define PSYSCALL(x) 2: jmp cerror; ENTRY(_thread_sys_/**/x); lea SYS_/**/x,%eax; LCALL(7,0); jb 2b -#else -/* - * The non-threaded library defaults to traditional syscalls where - * the function name matches the syscall name. - */ -#define PSYSCALL(x) SYSCALL(x) +#ifdef _THREAD_SAFE /* in case */ +#define PSYSCALL(x,y) 2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); ENTRY(y); lea __CONCAT(SYS_,x),%eax; KERNCALL; jb 2b +#define PRSYSCALL(x,y) PSYSCALL(x,y); ret #endif -#define PRSYSCALL(x) PSYSCALL(x); ret -#define PSEUDO(x,y) ENTRY(x); lea SYS_/**/y, %eax; ; LCALL(7,0); ret -#define CALL(x,y) call _/**/y; addl $4*x,%esp + +#define PSEUDO(x,y) ENTRY(x); lea __CONCAT(SYS_,y), %eax; KERNCALL; ret +#define CALL(x,y) call CNAME(y); addl $4*x,%esp /* gas fucks up offset -- although we don't currently need it, do for BCS */ #define LCALL(x,y) .byte 0x9a ; .long y; .word x -#define ASMSTR .asciz +#ifdef __ELF__ +#define KERNCALL int $0x80 /* Faster */ +#else +#define KERNCALL LCALL(7,0) /* The old way */ +#endif - .globl cerror +#define ASMSTR .asciz diff --git a/lib/libc/i386/gen/modf.S b/lib/libc/i386/gen/modf.S index 35b993a..34a89ed 100644 --- a/lib/libc/i386/gen/modf.S +++ b/lib/libc/i386/gen/modf.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: modf.S,v 1.2 1995/01/23 01:27:05 davidg Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: modf.S,v 1.2 1995/01/23 01:27:05 davidg Exp $" #endif /* LIBC_RCS and not lint */ /* @@ -50,10 +50,10 @@ */ /* With CHOP mode on, frndint behaves as TRUNC does. Useful. */ -.text -.globl _modf -.type _modf,@function -_modf: + +#include "DEFS.h" + +ENTRY(modf) pushl %ebp movl %esp,%ebp subl $16,%esp diff --git a/lib/libc/i386/gen/setjmp.S b/lib/libc/i386/gen/setjmp.S index 89efa92..078b2eb 100644 --- a/lib/libc/i386/gen/setjmp.S +++ b/lib/libc/i386/gen/setjmp.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: setjmp.S,v 1.3 1995/01/23 01:27:08 davidg Exp $ + * $Id: setjmp.S,v 1.4 1996/01/22 00:00:53 julian Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id: setjmp.S,v 1.3 1995/01/23 01:27:08 davidg Exp $" + .asciz "$Id: setjmp.S,v 1.4 1996/01/22 00:00:53 julian Exp $" #endif /* LIBC_RCS and not lint */ /* @@ -59,13 +59,15 @@ ENTRY(_thread_sys_setjmp) #else ENTRY(setjmp) #endif + PIC_PROLOGUE pushl $0 #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigblock) + call PIC_PLT(CNAME(_thread_sys_sigblock)) #else - call PIC_PLT(_sigblock) + call PIC_PLT(CNAME(sigblock)) #endif popl %edx + PIC_EPILOGUE movl 4(%esp),%ecx movl 0(%esp),%edx movl %edx, 0(%ecx) @@ -85,13 +87,15 @@ ENTRY(_thread_sys_longjmp) ENTRY(longjmp) #endif movl 4(%esp),%edx + PIC_PROLOGUE pushl 24(%edx) #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigsetmask) + call PIC_PLT(CNAME(_thread_sys_sigsetmask)) #else - call PIC_PLT(_sigsetmask) /* XXX this is not reentrant */ + call PIC_PLT(CNAME(sigsetmask)) /* XXX this is not reentrant */ #endif popl %eax + PIC_EPILOGUE movl 4(%esp),%edx movl 8(%esp),%eax movl 0(%edx),%ecx diff --git a/lib/libc/i386/gen/sigsetjmp.S b/lib/libc/i386/gen/sigsetjmp.S index 5cc00f0..1d56f29 100644 --- a/lib/libc/i386/gen/sigsetjmp.S +++ b/lib/libc/i386/gen/sigsetjmp.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigsetjmp.S,v 1.5 1996/01/22 00:00:54 julian Exp $ + * $Id: sigsetjmp.S,v 1.6 1996/02/17 12:25:21 peter Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigsetjmp.S,v 1.5 1996/01/22 00:00:54 julian Exp $" + .asciz "$Id: sigsetjmp.S,v 1.6 1996/02/17 12:25:21 peter Exp $" #endif /* LIBC_RCS and not lint */ #include "DEFS.h" @@ -69,13 +69,15 @@ ENTRY(sigsetjmp) movl %eax,32(%ecx) testl %eax,%eax jz 1f + PIC_PROLOGUE pushl $0 #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigblock) + call PIC_PLT(CNAME(_thread_sys_sigblock)) #else - call PIC_PLT(_sigblock) + call PIC_PLT(CNAME(sigblock)) #endif addl $4,%esp + PIC_EPILOGUE movl 4(%esp),%ecx movl %eax,24(%ecx) 1: movl 0(%esp),%edx @@ -97,13 +99,15 @@ ENTRY(siglongjmp) movl 4(%esp),%edx cmpl $0,32(%edx) jz 1f + PIC_PROLOGUE pushl 24(%edx) #ifdef _THREAD_SAFE - call PIC_PLT(__thread_sys_sigsetmask) + call PIC_PLT(CNAME(_thread_sys_sigsetmask)) #else - call PIC_PLT(_sigsetmask) + call PIC_PLT(CNAME(sigsetmask)) #endif addl $4,%esp + PIC_EPILOGUE 1: movl 4(%esp),%edx movl 8(%esp),%eax movl 0(%edx),%ecx diff --git a/lib/libc/i386/sys/Ovfork.S b/lib/libc/i386/sys/Ovfork.S index 341b75c..2b69ca0 100644 --- a/lib/libc/i386/sys/Ovfork.S +++ b/lib/libc/i386/sys/Ovfork.S @@ -33,14 +33,15 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: Ovfork.S,v 1.2 1995/01/23 01:29:37 davidg Exp $ + * $Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: Ovfork.S,v 1.2 1995/01/23 01:29:37 davidg Exp $" + .asciz "$Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ +#include "DEFS.h" #include "SYS.h" /* @@ -50,14 +51,11 @@ * %eax == pid of child in parent, %eax == pid of parent in child. * */ - .set vfork,66 -.globl _vfork -.type _vfork,@function -_vfork: +ENTRY(vfork) popl %ecx /* my rta into ecx */ - movl $vfork, %eax - LCALL(7,0) + lea SYS_vfork,%eax + KERNCALL jb verror vforkok: cmpl $0,%edx /* child process? */ @@ -67,14 +65,14 @@ vforkok: /* * Threaded version using __error(). */ - .globl ___error - .type ___error,@function + .globl CNAME(__error) + .type CNAME(__error),@function verror: pushl %eax #ifdef PIC - call PIC_PLT(___error) + call PIC_PLT(CNAME(__error)) #else - call ___error + call CNAME(__error) #endif popl %ecx movl %ecx,(%eax) @@ -84,15 +82,15 @@ verror: /* * Non-threaded version using global errno. */ - .globl _errno + .globl CNAME(errno) verror: #ifdef PIC PIC_PROLOGUE - movl PIC_GOT(_errno), %edx + movl PIC_GOT(CNAME(errno)), %edx movl %eax,(%edx) PIC_EPILOGUE #else - movl %eax,_errno + movl %eax,CNAME(errno) #endif movl $-1,%eax #endif /* !_THREAD_SAFE */ diff --git a/lib/libc/i386/sys/brk.S b/lib/libc/i386/sys/brk.S index c8311bb..1636858 100644 --- a/lib/libc/i386/sys/brk.S +++ b/lib/libc/i386/sys/brk.S @@ -33,20 +33,18 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: brk.S,v 1.1 1994/08/05 01:18:39 wollman Exp $ + * $Id: brk.S,v 1.2 1995/01/23 01:29:39 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: brk.S,v 1.2 1995/01/23 01:29:39 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -#define SYS_brk 17 - - .globl curbrk - .globl minbrk + .globl HIDENAME(curbrk) + .globl HIDENAME(minbrk) ENTRY(_brk) jmp ok @@ -54,39 +52,40 @@ ENTRY(brk) #ifdef PIC movl 4(%esp),%eax PIC_PROLOGUE - movl PIC_GOT(curbrk),%edx # set up GOT addressing - movl PIC_GOT(minbrk),%ecx # + movl PIC_GOT(HIDENAME(curbrk)),%edx # set up GOT addressing + movl PIC_GOT(HIDENAME(minbrk)),%ecx # cmpl %eax,(%ecx) PIC_EPILOGUE jl ok movl (%ecx),%eax movl %eax,4(%esp) ok: - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err movl 4(%esp),%eax movl %eax,(%edx) movl $0,%eax ret err: - jmp PIC_PLT(cerror) + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) #else movl 4(%esp),%eax - cmpl %eax,minbrk + cmpl %eax,HIDENAME(minbrk) jl ok - movl minbrk,%eax + movl HIDENAME(minbrk),%eax movl %eax,4(%esp) ok: - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err movl 4(%esp),%eax - movl %eax,curbrk + movl %eax,HIDENAME(curbrk) movl $0,%eax ret err: - jmp cerror + jmp HIDENAME(cerror) #endif diff --git a/lib/libc/i386/sys/cerror.S b/lib/libc/i386/sys/cerror.S index 2cbb0f9..926dcd9 100644 --- a/lib/libc/i386/sys/cerror.S +++ b/lib/libc/i386/sys/cerror.S @@ -33,28 +33,31 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: cerror.S,v 1.3 1995/01/23 01:29:43 davidg Exp $ + * $Id: cerror.S,v 1.4 1996/01/22 00:00:57 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: cerror.S,v 1.3 1995/01/23 01:29:43 davidg Exp $" + .asciz "$Id: cerror.S,v 1.4 1996/01/22 00:00:57 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" + .globl HIDENAME(cerror) + #ifdef _THREAD_SAFE /* * Threaded version using __error(). */ - .globl ___error - .type ___error,@function -cerror: + .globl CNAME(__error) + .type CNAME(__error),@function +HIDENAME(cerror): pushl %eax #ifdef PIC - call PIC_PLT(___error) + /* The caller must execute the PIC prologue before jumping to cerror. */ + call PIC_PLT(CNAME(__error)) #else - call ___error + call CNAME(__error) #endif popl %ecx movl %ecx,(%eax) @@ -66,15 +69,15 @@ cerror: /* * Non-threaded version using global errno. */ - .globl _errno -cerror: + .globl CNAME(errno) +HIDENAME(cerror): #ifdef PIC - PIC_PROLOGUE - movl PIC_GOT(_errno),%ecx + /* The caller must execute the PIC prologue before jumping to cerror. */ + movl PIC_GOT(CNAME(errno)),%ecx movl %eax,(%ecx) PIC_EPILOGUE #else - movl %eax,_errno + movl %eax,CNAME(errno) #endif movl $-1,%eax movl $-1,%edx diff --git a/lib/libc/i386/sys/exect.S b/lib/libc/i386/sys/exect.S index 74a055b..59ce389 100644 --- a/lib/libc/i386/sys/exect.S +++ b/lib/libc/i386/sys/exect.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: exect.S,v 1.1 1994/08/05 01:18:42 wollman Exp $ + * $Id: exect.S,v 1.2 1995/01/23 01:29:46 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: exect.S,v 1.2 1995/01/23 01:29:46 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" @@ -51,5 +51,6 @@ ENTRY(exect) orl $ PSL_T,%edx pushl %edx popf - LCALL(7,0) - jmp cerror /* exect(file, argv, env); */ + KERNCALL + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) /* exect(file, argv, env); */ diff --git a/lib/libc/i386/sys/fork.S b/lib/libc/i386/sys/fork.S index 567aa4c..96cb4b6 100644 --- a/lib/libc/i386/sys/fork.S +++ b/lib/libc/i386/sys/fork.S @@ -33,17 +33,21 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: fork.S,v 1.2 1995/01/23 01:29:48 davidg Exp $ + * $Id: fork.S,v 1.3 1996/01/22 00:00:57 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: fork.S,v 1.2 1995/01/23 01:29:48 davidg Exp $" + .asciz "$Id: fork.S,v 1.3 1996/01/22 00:00:57 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -PSYSCALL(fork) +#ifdef _THREAD_SAFE +PSYSCALL(fork,_thread_sys_fork) +#else +SYSCALL(fork) +#endif cmpl $0,%edx /* parent, since %edx == 0 in parent, 1 in child */ je 1f movl $0,%eax diff --git a/lib/libc/i386/sys/pipe.S b/lib/libc/i386/sys/pipe.S index 809445f..0dcf857 100644 --- a/lib/libc/i386/sys/pipe.S +++ b/lib/libc/i386/sys/pipe.S @@ -33,17 +33,21 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: pipe.S,v 1.2 1995/01/23 01:29:57 davidg Exp $ + * $Id: pipe.S,v 1.3 1996/01/22 00:00:58 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: pipe.S,v 1.2 1995/01/23 01:29:57 davidg Exp $" + .asciz "$Id: pipe.S,v 1.3 1996/01/22 00:00:58 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -PSYSCALL(pipe) +#ifdef _THREAD_SAFE +PSYSCALL(pipe,_thread_sys_pipe) +#else +SYSCALL(pipe) +#endif movl 4(%esp),%ecx movl %eax,(%ecx) movl %edx,4(%ecx) diff --git a/lib/libc/i386/sys/ptrace.S b/lib/libc/i386/sys/ptrace.S index e3ac3a5..993c9be 100644 --- a/lib/libc/i386/sys/ptrace.S +++ b/lib/libc/i386/sys/ptrace.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ptrace.S,v 1.1 1994/08/05 01:18:47 wollman Exp $ + * $Id: ptrace.S,v 1.2 1995/01/23 01:29:59 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: ptrace.S,v 1.2 1995/01/23 01:29:59 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" @@ -47,15 +47,16 @@ ENTRY(ptrace) xorl %eax,%eax #ifdef PIC PIC_PROLOGUE - movl PIC_GOT(_errno),%edx + movl PIC_GOT(CNAME(errno)),%edx movl %eax,(%edx) PIC_EPILOGUE #else - movl %eax,_errno + movl %eax,CNAME(errno) #endif lea SYS_ptrace,%eax - LCALL(7,0) + KERNCALL jb err ret err: - jmp cerror + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) diff --git a/lib/libc/i386/sys/rfork.S b/lib/libc/i386/sys/rfork.S index 189d399..c1e85e6 100644 --- a/lib/libc/i386/sys/rfork.S +++ b/lib/libc/i386/sys/rfork.S @@ -33,17 +33,21 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: rfork.S,v 1.1 1996/02/23 19:56:47 peter Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: rfork.S,v 1.1 1996/02/23 19:56:47 peter Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -PSYSCALL(rfork) +#ifdef _THREAD_SAFE +PSYSCALL(rfork,_thread_sys_rfork) +#else +SYSCALL(rfork) +#endif cmpl $0,%edx /* parent, since %edx == 0 in parent, 1 in child */ je 1f movl $0,%eax diff --git a/lib/libc/i386/sys/sbrk.S b/lib/libc/i386/sys/sbrk.S index 2d65b59..d5c48ddc 100644 --- a/lib/libc/i386/sys/sbrk.S +++ b/lib/libc/i386/sys/sbrk.S @@ -33,64 +33,63 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sbrk.S,v 1.2 1995/01/23 01:30:04 davidg Exp $ + * $Id: sbrk.S,v 1.3 1995/10/04 15:58:57 phk Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sbrk.S,v 1.2 1995/01/23 01:30:04 davidg Exp $" + .asciz "$Id: sbrk.S,v 1.3 1995/10/04 15:58:57 phk Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -#define SYS_brk 17 - - .globl _end - .globl minbrk - .globl curbrk + .globl CNAME(end) + .globl HIDENAME(minbrk) + .globl HIDENAME(curbrk) .data -minbrk: .long _end -curbrk: .long _end +HIDENAME(minbrk): .long CNAME(end) +HIDENAME(curbrk): .long CNAME(end) .text ENTRY(sbrk) #ifdef PIC movl 4(%esp),%ecx PIC_PROLOGUE - movl PIC_GOT(curbrk),%edx + movl PIC_GOT(HIDENAME(curbrk)),%edx movl (%edx),%eax PIC_EPILOGUE testl %ecx,%ecx jz back addl %eax,4(%esp) - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err PIC_PROLOGUE - movl PIC_GOT(curbrk),%edx + movl PIC_GOT(HIDENAME(curbrk)),%edx movl (%edx),%eax addl %ecx,(%edx) PIC_EPILOGUE back: ret err: - jmp PIC_PLT(cerror) + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) #else /* !PIC */ movl 4(%esp),%ecx - movl curbrk,%eax + movl HIDENAME(curbrk),%eax testl %ecx,%ecx jz back addl %eax,4(%esp) - lea SYS_brk,%eax - LCALL(7,0) + lea SYS_break,%eax + KERNCALL jb err - movl curbrk,%eax - addl %ecx,curbrk + movl HIDENAME(curbrk),%eax + addl %ecx,HIDENAME(curbrk) back: ret err: - jmp cerror + jmp HIDENAME(cerror) #endif /* PIC */ diff --git a/lib/libc/i386/sys/setlogin.S b/lib/libc/i386/sys/setlogin.S index 96c7886..1ec31b9 100644 --- a/lib/libc/i386/sys/setlogin.S +++ b/lib/libc/i386/sys/setlogin.S @@ -33,27 +33,27 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: setlogin.S,v 1.1 1994/08/05 01:18:50 wollman Exp $ + * $Id: setlogin.S,v 1.2 1995/01/23 01:30:06 davidg Exp $ */ #if defined(LIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: setlogin.S,v 1.2 1995/01/23 01:30:06 davidg Exp $" #endif /* LIBC_RCS and not lint */ #include "SYS.h" -.globl __logname_valid /* in getlogin() */ +.globl CNAME(_logname_valid) /* in getlogin() */ SYSCALL(setlogin) #ifdef PIC PIC_PROLOGUE pushl %eax - movl PIC_GOT(__logname_valid),%eax + movl PIC_GOT(CNAME(_logname_valid)),%eax movl $0,(%eax) popl %eax PIC_EPILOGUE #else - movl $0,__logname_valid + movl $0,CNAME(_logname_valid) #endif ret /* setlogin(name) */ diff --git a/lib/libc/i386/sys/sigpending.S b/lib/libc/i386/sys/sigpending.S index dba82ee..a56c8f7 100644 --- a/lib/libc/i386/sys/sigpending.S +++ b/lib/libc/i386/sys/sigpending.S @@ -33,17 +33,21 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigpending.S,v 1.2 1995/01/23 01:30:08 davidg Exp $ + * $Id: sigpending.S,v 1.3 1996/01/22 00:00:59 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigpending.S,v 1.2 1995/01/23 01:30:08 davidg Exp $" + .asciz "$Id: sigpending.S,v 1.3 1996/01/22 00:00:59 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" -PSYSCALL(sigpending) +#ifdef _THREAD_SAFE +PSYSCALL(sigpending,_thread_sys_sigpending) +#else +SYSCALL(sigpending) +#endif movl 4(%esp),%ecx # fetch pointer to... movl %eax,(%ecx) # store old mask xorl %eax,%eax diff --git a/lib/libc/i386/sys/sigprocmask.S b/lib/libc/i386/sys/sigprocmask.S index 69c50a4..1f48c6b 100644 --- a/lib/libc/i386/sys/sigprocmask.S +++ b/lib/libc/i386/sys/sigprocmask.S @@ -33,18 +33,19 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigprocmask.S,v 1.2 1995/01/23 01:30:11 davidg Exp $ + * $Id: sigprocmask.S,v 1.3 1996/01/22 00:00:59 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigprocmask.S,v 1.2 1995/01/23 01:30:11 davidg Exp $" + .asciz "$Id: sigprocmask.S,v 1.3 1996/01/22 00:00:59 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" err: - jmp cerror + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) #ifdef _THREAD_SAFE ENTRY(_thread_sys_sigprocmask) @@ -59,8 +60,8 @@ ENTRY(sigprocmask) jmp 2f 1: movl (%ecx),%ecx # fetch indirect ... movl %ecx,8(%esp) # to new mask arg -2: movl $ SYS_sigprocmask , %eax - LCALL(0x7,0) +2: lea SYS_sigprocmask,%eax + KERNCALL jb err movl 12(%esp),%ecx # fetch old mask requested cmpl $0,%ecx # test if old mask requested diff --git a/lib/libc/i386/sys/sigreturn.S b/lib/libc/i386/sys/sigreturn.S index 6f3f571..cce518b 100644 --- a/lib/libc/i386/sys/sigreturn.S +++ b/lib/libc/i386/sys/sigreturn.S @@ -33,25 +33,24 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigreturn.S,v 1.2 1995/01/23 01:30:16 davidg Exp $ + * $Id: sigreturn.S,v 1.3 1996/01/22 00:01:00 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigreturn.S,v 1.2 1995/01/23 01:30:16 davidg Exp $" + .asciz "$Id: sigreturn.S,v 1.3 1996/01/22 00:01:00 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" /* - * We must preserve the state of the registers as the user has set them up. + * NOTE: If the profiling ENTRY() code ever changes any registers, they + * must be saved. On FreeBSD, this is not the case. */ -#ifdef PROF -#undef ENTRY -#define ENTRY(x) \ - .globl _/**/x; .align 2; _/**/x: pusha ; \ - .data; 1:; .long 0; .text; movl $1b,%eax; call mcount; popa ; nop -#endif /* PROF */ -PSYSCALL(sigreturn) +#ifdef _THREAD_SAFE +PSYSCALL(sigreturn,_thread_sys_sigreturn) +#else +SYSCALL(sigreturn) +#endif ret diff --git a/lib/libc/i386/sys/sigsuspend.S b/lib/libc/i386/sys/sigsuspend.S index 4d70ea6..3d64e48 100644 --- a/lib/libc/i386/sys/sigsuspend.S +++ b/lib/libc/i386/sys/sigsuspend.S @@ -33,18 +33,19 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sigsuspend.S,v 1.2 1995/01/23 01:30:20 davidg Exp $ + * $Id: sigsuspend.S,v 1.3 1996/01/22 00:01:01 julian Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id: sigsuspend.S,v 1.2 1995/01/23 01:30:20 davidg Exp $" + .asciz "$Id: sigsuspend.S,v 1.3 1996/01/22 00:01:01 julian Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" err: - jmp cerror + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) #ifdef _THREAD_SAFE ENTRY(_thread_sys_sigsuspend) @@ -54,8 +55,8 @@ ENTRY(sigsuspend) movl 4(%esp),%eax # fetch mask arg movl (%eax),%eax # indirect to mask arg movl %eax,4(%esp) - movl $ SYS_sigsuspend ,%eax - LCALL(0x7,0) + lea SYS_sigsuspend,%eax + KERNCALL jb err xorl %eax,%eax # shouldn t happen ret diff --git a/lib/libc/i386/sys/syscall.S b/lib/libc/i386/sys/syscall.S index 8fcbec9..ccc1b93 100644 --- a/lib/libc/i386/sys/syscall.S +++ b/lib/libc/i386/sys/syscall.S @@ -33,12 +33,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: syscall.S,v 1.1 1994/08/05 01:18:55 wollman Exp $ + * $Id: syscall.S,v 1.2 1995/01/23 01:30:24 davidg Exp $ */ #if defined(SYSLIBC_RCS) && !defined(lint) .text - .asciz "$Id$" + .asciz "$Id: syscall.S,v 1.2 1995/01/23 01:30:24 davidg Exp $" #endif /* SYSLIBC_RCS and not lint */ #include "SYS.h" @@ -47,10 +47,11 @@ ENTRY(syscall) pop %ecx /* rta */ pop %eax /* syscall number */ push %ecx - LCALL(7,0) + KERNCALL push %ecx /* need to push a word to keep stack frame intact upon return; the word must be the return address. */ jb 1f ret 1: - jmp cerror + PIC_PROLOGUE + jmp PIC_PLT(HIDENAME(cerror)) |