update from 961105, second try

This commit is contained in:
Ulrich Drepper 1996-11-07 01:34:35 +00:00
parent 60c74cf07a
commit dd4b8913cd
11 changed files with 150 additions and 88 deletions

View File

@ -1,20 +1,21 @@
/* Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc. /* Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Brendan Kehoe (brendan@zen.org). Contributed by Brendan Kehoe (brendan@zen.org).
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 675 Mass Ave, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Cambridge, MA 02139, USA. */ Boston, MA 02111-1307, USA. */
#include <sysdeps/unix/sysdep.h> #include <sysdeps/unix/sysdep.h>
@ -27,36 +28,24 @@ Cambridge, MA 02139, USA. */
#endif #endif
#ifdef __STDC__ #ifdef __STDC__
#define LEAF(name, framesize) \ #define __LABEL(x) x##:
.globl name; \
.align 3; \
.ent name, 0; \
name##: \
.frame sp, framesize, ra
#else #else
#define LEAF(name, framesize) \ #define __LABEL(x) x/**/:
.globl name; \
.align 3; \
.ent name, 0; \
name/**/: \
.frame sp, framesize, ra
#endif #endif
#ifdef __STDC__ #define LEAF(name, framesize) \
.globl name; \
.align 3; \
.ent name, 0; \
__LABEL(name) \
.frame sp, framesize, ra
#define ENTRY(name) \ #define ENTRY(name) \
.globl name; \ .globl name; \
.align 3; \ .align 3; \
.ent name, 0; \ .ent name, 0; \
name##: \ __LABEL(name) \
.frame sp, 0, ra .frame sp, 0, ra
#else
#define ENTRY(name) \
.globl name; \
.align 3; \
.ent name, 0; \
name/**/: \
.frame sp, 0, ra
#endif
/* Mark the end of function SYM. */ /* Mark the end of function SYM. */
#undef END #undef END
@ -64,16 +53,20 @@ Cambridge, MA 02139, USA. */
/* Note that PSEUDO/PSEUDO_END use label number 1996---do not use a /* Note that PSEUDO/PSEUDO_END use label number 1996---do not use a
label of that number between those two macros! */ label of that number between those two macros! */
#ifdef __STDC__ #ifdef PROF
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
.globl name; \ .globl name; \
.align 3; \ .align 3; \
.ent name,0; \ .ent name,0; \
\ __LABEL(name) \
name##: \ .frame sp, 0, ra; \
.frame sp, 0, ra \ ldgp gp,0(pv); \
.prologue 1; /* yes, we do use gp */ \ .set noat; \
lda AT,_mcount; \
jsr AT,(AT),_mcount; \
.set at; \
.prologue 1; \
ldiq v0, SYS_ify(syscall_name); \ ldiq v0, SYS_ify(syscall_name); \
.set noat; \ .set noat; \
call_pal PAL_callsys; \ call_pal PAL_callsys; \
@ -85,10 +78,9 @@ name##: \
.globl name; \ .globl name; \
.align 3; \ .align 3; \
.ent name,0; \ .ent name,0; \
\ __LABEL(name) \
name/**/: \
.frame sp, 0, ra \ .frame sp, 0, ra \
.prologue 1; /* yes, we do use gp */ \ .prologue 0; \
ldiq v0, SYS_ify(syscall_name); \ ldiq v0, SYS_ify(syscall_name); \
.set noat; \ .set noat; \
call_pal PAL_callsys; \ call_pal PAL_callsys; \
@ -98,13 +90,19 @@ name/**/: \
#endif #endif
#undef PSEUDO_END #undef PSEUDO_END
#ifdef PROF
#define PSEUDO_END(sym) \
1996: \
jmp zero, __syscall_error; \
END(sym)
#else
#define PSEUDO_END(sym) \ #define PSEUDO_END(sym) \
1996: \ 1996: \
br gp, 2f; \ br gp, 2f; \
2: ldgp gp, 0(gp); \ 2: ldgp gp, 0(gp); \
jmp zero, __syscall_error; \ jmp zero, __syscall_error; \
END(sym) END(sym)
#endif
#define r0 v0 #define r0 v0
#define r1 a4 #define r1 a4

View File

@ -38,6 +38,10 @@ __curbrk: .skip 8
.text .text
LEAF(__brk, 0) LEAF(__brk, 0)
ldgp gp, 0(t12) ldgp gp, 0(t12)
#ifdef PROF
lda AT, _mcount
jsr AT, (AT), _mcount
#endif
.prologue 1 .prologue 1
ldiq v0, __NR_brk ldiq v0, __NR_brk

View File

@ -32,6 +32,10 @@ ENTRY(__clone)
/* Save rest of argument registers for varargs-type work. */ /* Save rest of argument registers for varargs-type work. */
stq a4,0(sp) stq a4,0(sp)
stq a5,8(sp) stq a5,8(sp)
#ifdef PROF
lda AT, _mcount
jsr AT, (AT), _mcount
#endif
.prologue 1 .prologue 1
/* Sanity check arguments. */ /* Sanity check arguments. */

View File

@ -22,9 +22,17 @@ Cambridge, MA 02139, USA. */
.text .text
LEAF(__ieee_get_fp_control, 8) LEAF(__ieee_get_fp_control, 16)
lda sp, -8(sp) #ifdef PROF
ldgp gp, 0(pv)
lda sp, -16(sp)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1 .prologue 1
#else
lda sp, -16(sp)
.prologue 0
#endif
mov sp, a1 mov sp, a1
ldi a0, GSI_IEEE_FP_CONTROL ldi a0, GSI_IEEE_FP_CONTROL
@ -33,12 +41,14 @@ LEAF(__ieee_get_fp_control, 8)
bne a3, error bne a3, error
ldq v0, 0(sp) ldq v0, 0(sp)
lda sp, 8(sp) lda sp, 16(sp)
ret ret
error: lda sp, 8(sp) error: lda sp, 16(sp)
#ifndef PROF
br gp, 1f br gp, 1f
1: ldgp gp, 0(gp) 1: ldgp gp, 0(gp)
#endif
jmp zero, __syscall_error jmp zero, __syscall_error
END(__ieee_get_fp_control) END(__ieee_get_fp_control)

View File

@ -20,9 +20,17 @@ Cambridge, MA 02139, USA. */
#define SSI_IEEE_FP_CONTROL 14 #define SSI_IEEE_FP_CONTROL 14
LEAF(__ieee_set_fp_control, 8) LEAF(__ieee_set_fp_control, 16)
lda sp, -8(sp) #ifdef PROF
ldgp gp, 0(sp)
lda sp, -16(sp)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1 .prologue 1
#else
lda sp, -16(sp)
.prologue 0
#endif
stq a0, 0(sp) stq a0, 0(sp)
mov sp, a1 mov sp, a1
@ -30,13 +38,16 @@ LEAF(__ieee_set_fp_control, 8)
ldi v0, __NR_osf_setsysinfo ldi v0, __NR_osf_setsysinfo
call_pal PAL_callsys call_pal PAL_callsys
lda sp, 8(sp) lda sp, 16(sp)
bne a3, error bne a3, error
ret ret
error: br gp, 1f error:
#ifndef PROF
br gp, 1f
1: ldgp gp, 0(gp) 1: ldgp gp, 0(gp)
#endif
jmp zero, __syscall_error jmp zero, __syscall_error
END(__ieee_set_fp_control) END(__ieee_set_fp_control)

View File

@ -24,7 +24,14 @@ Cambridge, MA 02139, USA. */
.text .text
ENTRY(llseek) ENTRY(llseek)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1 .prologue 1
#else
.prologue 0
#endif
sll a1, 32, a1 /* build a 64 bit ofs out of 32 bit operands */ sll a1, 32, a1 /* build a 64 bit ofs out of 32 bit operands */
zap a2, 0xf0, a2 zap a2, 0xf0, a2
@ -40,8 +47,11 @@ ENTRY(llseek)
stq v0, 0(t0) stq v0, 0(t0)
ret ret
error: br gp, 1f error:
#ifndef PROF
br gp, 1f
1: ldgp gp, 0(gp) 1: ldgp gp, 0(gp)
#endif
jmp zero, __syscall_error jmp zero, __syscall_error
END(llseek) END(llseek)

View File

@ -24,7 +24,14 @@ Cambridge, MA 02139, USA. */
.text .text
LEAF(sigsuspend, 0) LEAF(sigsuspend, 0)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1 .prologue 1
#else
.prologue 0
#endif
ldq a0, 0(a0) ldq a0, 0(a0)
ldi v0, __NR_sigsuspend ldi v0, __NR_sigsuspend
@ -32,8 +39,11 @@ LEAF(sigsuspend, 0)
bne a3, error bne a3, error
ret ret
error: br gp, 1f error:
#ifndef PROF
br gp, 1f
1: ldgp gp, 0(gp) 1: ldgp gp, 0(gp)
#endif
jmp zero, __syscall_error jmp zero, __syscall_error
END(sigsuspend) END(sigsuspend)

View File

@ -42,6 +42,15 @@ Cambridge, MA 02139, USA. */
LEAF(__syscall, 0) LEAF(__syscall, 0)
#ifdef PROF
ldgp gp, 0(pv)
lda AT, _mcount
jsr AT, (AT), _mcount
.prologue 1
#else
.prologue 0
#endif
mov a0, v0 /* Syscall number -> v0 */ mov a0, v0 /* Syscall number -> v0 */
mov a1, a0 /* arg1-arg5 -> a0-a4 */ mov a1, a0 /* arg1-arg5 -> a0-a4 */
mov a2, a1 mov a2, a1
@ -53,8 +62,11 @@ LEAF(__syscall, 0)
bne a3, error bne a3, error
ret ret
error: br gp, 2f error:
#ifndef PROF
br gp, 2f
2: ldgp gp, 0(gp) 2: ldgp gp, 0(gp)
#endif
jmp zero, __syscall_error jmp zero, __syscall_error
weak_alias(__syscall, syscall) weak_alias(__syscall, syscall)

View File

@ -1,25 +1,25 @@
/* Copyright (C) 1996 Free Software Foundation, Inc. /* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 675 Mass Ave, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Cambridge, MA 02139, USA. */ Boston, MA 02111-1307, USA. */
#include <sysdep.h> #include <sysdep.h>
/* Please consult the file sysdeps/unix/sysv/linux/m68k/sysdep.h for /* Please consult the file sysdeps/unix/sysv/linux/m68k/sysdep.h for
more information about the value -128 used below.*/ more information about the value -4096 used below.*/
.text .text
ENTRY (syscall) ENTRY (syscall)
@ -27,7 +27,7 @@ ENTRY (syscall)
_DOARGS_5 (24) /* Frob arguments. */ _DOARGS_5 (24) /* Frob arguments. */
trap &0 /* Do the system call. */ trap &0 /* Do the system call. */
UNDOARGS_5 /* Unfrob arguments. */ UNDOARGS_5 /* Unfrob arguments. */
moveq.l &-128, %d1 moveq.l &-4096, %d1
cmp.l %d1, %d0 /* Check %d0 for error. */ cmp.l %d1, %d0 /* Check %d0 for error. */
jcc syscall_error /* Jump to error handler if negative. */ jcc syscall_error /* Jump to error handler if negative. */
rts /* Return to caller. */ rts /* Return to caller. */

View File

@ -1,20 +1,20 @@
/* Copyright (C) 1996 Free Software Foundation, Inc. /* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 675 Mass Ave, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Cambridge, MA 02139, USA. */ Boston, MA 02111-1307, USA. */
#include <sysdep.h> #include <sysdep.h>
@ -62,7 +62,11 @@ __syscall_error:
END (__syscall_error) END (__syscall_error)
#endif /* PIC */ #endif /* PIC */
ENTRY (__errno_location) .weak __errno_location
.type __errno_location,@function
.align 4
__errno_location:
CALL_MCOUNT
#ifdef PIC #ifdef PIC
move.l (%pc, errno@GOTPC), %a0 move.l (%pc, errno@GOTPC), %a0
#else #else

View File

@ -74,14 +74,13 @@ Cambridge, MA 02139, USA. */
even if the call succeeded. E.g., the `lseek' system call might return even if the call succeeded. E.g., the `lseek' system call might return
a large offset. Therefore we must not anymore test for < 0, but test a large offset. Therefore we must not anymore test for < 0, but test
for a real error by making sure the value in %d0 is a real error for a real error by making sure the value in %d0 is a real error
number. For now (as of 2.1.1) 122 is the largest defined error number. number. Linus said he will make sure the no syscall returns a value
We allow for a bit of room for development and treat -128 to -1 as in -1 .. -4095 as a valid result so we can savely test with -4096. */
error values. */
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
.text; \ .text; \
ENTRY (name) \ ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \ DO_CALL (&SYS_ify (syscall_name), args); \
moveq.l &-128, %d1; \ moveq.l &-4096, %d1; \
cmp.l %d1, %d0; \ cmp.l %d1, %d0; \
jcc syscall_error jcc syscall_error