/* 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).
-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
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ 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
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-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
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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 not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <sysdeps/unix/sysdep.h>
#endif
#ifdef __STDC__
-#define LEAF(name, framesize) \
- .globl name; \
- .align 3; \
- .ent name, 0; \
- name##: \
- .frame sp, framesize, ra
+#define __LABEL(x) x##:
#else
+#define __LABEL(x) x/**/:
+#endif
+
#define LEAF(name, framesize) \
.globl name; \
.align 3; \
.ent name, 0; \
- name/**/: \
+ __LABEL(name) \
.frame sp, framesize, ra
-#endif
-#ifdef __STDC__
-#define ENTRY(name) \
- .globl name; \
- .align 3; \
- .ent name, 0; \
- name##: \
- .frame sp, 0, ra
-#else
#define ENTRY(name) \
.globl name; \
.align 3; \
.ent name, 0; \
- name/**/: \
+ __LABEL(name) \
.frame sp, 0, ra
-#endif
/* Mark the end of function SYM. */
#undef END
/* Note that PSEUDO/PSEUDO_END use label number 1996---do not use a
label of that number between those two macros! */
-
-#ifdef __STDC__
+
+#ifdef PROF
#define PSEUDO(name, syscall_name, args) \
.globl name; \
.align 3; \
.ent name,0; \
- \
-name##: \
- .frame sp, 0, ra \
- .prologue 1; /* yes, we do use gp */ \
+__LABEL(name) \
+ .frame sp, 0, ra; \
+ ldgp gp,0(pv); \
+ .set noat; \
+ lda AT,_mcount; \
+ jsr AT,(AT),_mcount; \
+ .set at; \
+ .prologue 1; \
ldiq v0, SYS_ify(syscall_name); \
.set noat; \
call_pal PAL_callsys; \
.globl name; \
.align 3; \
.ent name,0; \
- \
-name/**/: \
+__LABEL(name) \
.frame sp, 0, ra \
- .prologue 1; /* yes, we do use gp */ \
+ .prologue 0; \
ldiq v0, SYS_ify(syscall_name); \
.set noat; \
call_pal PAL_callsys; \
#endif
#undef PSEUDO_END
-
+#ifdef PROF
+#define PSEUDO_END(sym) \
+1996: \
+ jmp zero, __syscall_error; \
+ END(sym)
+#else
#define PSEUDO_END(sym) \
1996: \
br gp, 2f; \
2: ldgp gp, 0(gp); \
jmp zero, __syscall_error; \
END(sym)
+#endif
#define r0 v0
#define r1 a4
.text
LEAF(__brk, 0)
ldgp gp, 0(t12)
+#ifdef PROF
+ lda AT, _mcount
+ jsr AT, (AT), _mcount
+#endif
.prologue 1
ldiq v0, __NR_brk
/* Save rest of argument registers for varargs-type work. */
stq a4,0(sp)
stq a5,8(sp)
+#ifdef PROF
+ lda AT, _mcount
+ jsr AT, (AT), _mcount
+#endif
.prologue 1
/* Sanity check arguments. */
.text
-LEAF(__ieee_get_fp_control, 8)
- lda sp, -8(sp)
+LEAF(__ieee_get_fp_control, 16)
+#ifdef PROF
+ ldgp gp, 0(pv)
+ lda sp, -16(sp)
+ lda AT, _mcount
+ jsr AT, (AT), _mcount
.prologue 1
+#else
+ lda sp, -16(sp)
+ .prologue 0
+#endif
mov sp, a1
ldi a0, GSI_IEEE_FP_CONTROL
bne a3, error
ldq v0, 0(sp)
- lda sp, 8(sp)
+ lda sp, 16(sp)
ret
-error: lda sp, 8(sp)
+error: lda sp, 16(sp)
+#ifndef PROF
br gp, 1f
1: ldgp gp, 0(gp)
+#endif
jmp zero, __syscall_error
END(__ieee_get_fp_control)
#define SSI_IEEE_FP_CONTROL 14
-LEAF(__ieee_set_fp_control, 8)
- lda sp, -8(sp)
+LEAF(__ieee_set_fp_control, 16)
+#ifdef PROF
+ ldgp gp, 0(sp)
+ lda sp, -16(sp)
+ lda AT, _mcount
+ jsr AT, (AT), _mcount
.prologue 1
+#else
+ lda sp, -16(sp)
+ .prologue 0
+#endif
stq a0, 0(sp)
mov sp, a1
ldi v0, __NR_osf_setsysinfo
call_pal PAL_callsys
- lda sp, 8(sp)
+ lda sp, 16(sp)
bne a3, error
ret
-error: br gp, 1f
+error:
+#ifndef PROF
+ br gp, 1f
1: ldgp gp, 0(gp)
+#endif
jmp zero, __syscall_error
END(__ieee_set_fp_control)
.text
ENTRY(llseek)
+#ifdef PROF
+ ldgp gp, 0(pv)
+ lda AT, _mcount
+ jsr AT, (AT), _mcount
.prologue 1
+#else
+ .prologue 0
+#endif
sll a1, 32, a1 /* build a 64 bit ofs out of 32 bit operands */
zap a2, 0xf0, a2
stq v0, 0(t0)
ret
-error: br gp, 1f
+error:
+#ifndef PROF
+ br gp, 1f
1: ldgp gp, 0(gp)
+#endif
jmp zero, __syscall_error
END(llseek)
.text
LEAF(sigsuspend, 0)
+#ifdef PROF
+ ldgp gp, 0(pv)
+ lda AT, _mcount
+ jsr AT, (AT), _mcount
.prologue 1
+#else
+ .prologue 0
+#endif
ldq a0, 0(a0)
ldi v0, __NR_sigsuspend
bne a3, error
ret
-error: br gp, 1f
+error:
+#ifndef PROF
+ br gp, 1f
1: ldgp gp, 0(gp)
+#endif
jmp zero, __syscall_error
END(sigsuspend)
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 a1, a0 /* arg1-arg5 -> a0-a4 */
mov a2, a1
bne a3, error
ret
-error: br gp, 2f
+error:
+#ifndef PROF
+ br gp, 2f
2: ldgp gp, 0(gp)
+#endif
jmp zero, __syscall_error
weak_alias(__syscall, syscall)
/* 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
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ 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
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-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
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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 not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <sysdep.h>
/* 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
ENTRY (syscall)
_DOARGS_5 (24) /* Frob arguments. */
trap &0 /* Do the system call. */
UNDOARGS_5 /* Unfrob arguments. */
- moveq.l &-128, %d1
+ moveq.l &-4096, %d1
cmp.l %d1, %d0 /* Check %d0 for error. */
jcc syscall_error /* Jump to error handler if negative. */
rts /* Return to caller. */
/* 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
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ 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
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-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
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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 not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <sysdep.h>
END (__syscall_error)
#endif /* PIC */
-ENTRY (__errno_location)
+ .weak __errno_location
+ .type __errno_location,@function
+ .align 4
+__errno_location:
+ CALL_MCOUNT
#ifdef PIC
move.l (%pc, errno@GOTPC), %a0
#else
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
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.
- We allow for a bit of room for development and treat -128 to -1 as
- error values. */
+ number. Linus said he will make sure the no syscall returns a value
+ in -1 .. -4095 as a valid result so we can savely test with -4096. */
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \
- moveq.l &-128, %d1; \
+ moveq.l &-4096, %d1; \
cmp.l %d1, %d0; \
jcc syscall_error