From d14810a630f88fb15dd3bc3bf78462a2d457c2b1 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 26 Aug 1993 23:31:15 +0000 Subject: [PATCH] entered into RCS --- sysdeps/mips/__longjmp.c | 9 ++-- sysdeps/mips/jmp_buf.h | 4 +- sysdeps/mips/setjmp_aux.c | 6 ++- sysdeps/unix/bsd/ultrix4/mips/sigcontext.h | 8 ++-- sysdeps/unix/mips/sysdep.h | 67 ++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 sysdeps/unix/mips/sysdep.h diff --git a/sysdeps/mips/__longjmp.c b/sysdeps/mips/__longjmp.c index 1828714..5c7eb68 100644 --- a/sysdeps/mips/__longjmp.c +++ b/sysdeps/mips/__longjmp.c @@ -1,5 +1,5 @@ /* Copyright (C) 1992 Free Software Foundation, Inc. - Contributed by Brendan Kehoe (brendan@cs.widener.edu). + 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 @@ -22,6 +22,10 @@ Cambridge, MA 02139, USA. */ #undef __longjmp +#ifndef __GNUC__ + #error This file uses GNU C extensions; you must compile with GCC. +#endif + __NORETURN void DEFUN(__longjmp, (env, val_arg), CONST __jmp_buf env AND int val_arg) @@ -66,7 +70,7 @@ DEFUN(__longjmp, (env, val_arg), CONST __jmp_buf env AND int val_arg) /* Get the PC. */ asm volatile ("lw $31, %0" : : "m" (env[0].__pc)); - /* Give setjmp() 1 if given a 0, or what they gave us if non-zero. */ + /* Give setjmp 1 if given a 0, or what they gave us if non-zero. */ if (val == 0) asm volatile ("li $2, 1"); else @@ -74,6 +78,5 @@ DEFUN(__longjmp, (env, val_arg), CONST __jmp_buf env AND int val_arg) asm volatile ("j $31"); - /* Follow the trend.. */ abort (); } diff --git a/sysdeps/mips/jmp_buf.h b/sysdeps/mips/jmp_buf.h index 661997f..eed47dc 100644 --- a/sysdeps/mips/jmp_buf.h +++ b/sysdeps/mips/jmp_buf.h @@ -1,6 +1,6 @@ /* Define the machine-dependent type `jmp_buf'. Mips version. Copyright (C) 1992, 1993 Free Software Foundation, Inc. - Contributed by Brendan Kehoe (brendan@cygnus.com). + 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 @@ -41,5 +41,7 @@ typedef struct double __fpregs[6]; } __jmp_buf[1]; +#ifdef __USE_MISC /* Offset to the program counter in `jmp_buf'. */ #define JB_PC 0 +#endif diff --git a/sysdeps/mips/setjmp_aux.c b/sysdeps/mips/setjmp_aux.c index e4c9d20..3a3ed20 100644 --- a/sysdeps/mips/setjmp_aux.c +++ b/sysdeps/mips/setjmp_aux.c @@ -1,5 +1,5 @@ /* Copyright (C) 1992 Free Software Foundation, Inc. - Contributed by Brendan Kehoe (brendan@cs.widener.edu). + 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 @@ -19,6 +19,10 @@ Cambridge, MA 02139, USA. */ #include #include +#ifndef __GNUC__ + #error This file uses GNU C extensions; you must compile with GCC. +#endif + /* This function is only called via the assembly language routine __setjmp, which arranges to pass in the stack pointer and the frame pointer. We do things this way because it's difficult to reliably diff --git a/sysdeps/unix/bsd/ultrix4/mips/sigcontext.h b/sysdeps/unix/bsd/ultrix4/mips/sigcontext.h index 60bb312..107d2fc 100644 --- a/sysdeps/unix/bsd/ultrix4/mips/sigcontext.h +++ b/sysdeps/unix/bsd/ultrix4/mips/sigcontext.h @@ -1,5 +1,5 @@ /* Copyright (C) 1992 Free Software Foundation, Inc. - Contributed by Brendan Kehoe (brendan@cs.widener.edu). + 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 @@ -27,7 +27,7 @@ struct sigcontext sigset_t sc_mask; /* Program counter when the signal hit. */ - PTR sc_pc; + __ptr_t sc_pc; /* Registers 0 through 31. */ int sc_regs[32]; @@ -52,9 +52,9 @@ struct sigcontext int sc_cause; /* CPU bad virtual address. */ - PTR sc_badvaddr; + __ptr_t sc_badvaddr; /* CPU board bad physical address. */ - PTR sc_badpaddr; + __ptr_t sc_badpaddr; }; diff --git a/sysdeps/unix/mips/sysdep.h b/sysdeps/unix/mips/sysdep.h new file mode 100644 index 0000000..bbf742b --- /dev/null +++ b/sysdeps/unix/mips/sysdep.h @@ -0,0 +1,67 @@ +/* Copyright (C) 1992 Free Software Foundation, Inc. + 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 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. */ + +#include +#include + +#ifdef __STDC__ +#define ENTRY(name) \ + .globl name; \ + .align 2; \ + name##: +#else +#define ENTRY(name) \ + .globl name; \ + .align 2; \ + name/**/: +#endif + +/* Note that while it's better structurally, going back to call syscall_error + can make things confusing if you're debugging---it looks like it's jumping + backwards into the previous fn. */ +#ifdef __STDC__ +#define PSEUDO(name, syscall_name, args) \ + .set noreorder; \ + .align 2; \ + 99: j syscall_error; \ + nop; \ + ENTRY(name) \ + li v0, SYS_##syscall_name; \ + syscall; \ + bne a3, zero, 99b; \ + nop; \ +syse1: +#else +#define PSEUDO(name, syscall_name, args) \ + .set noreorder; \ + .align 2; \ + 99: j syscall_error; \ + nop; \ + ENTRY(name) \ + li v0, SYS_/**/syscall_name; \ + syscall; \ + bne a3, zero, 99b; \ + nop; \ +syse1: +#endif + +#define ret j ra ; nop +#define r0 v0 +#define r1 v1 +/* The mips move insn is d,s. */ +#define MOVE(x,y) move y , x -- 2.7.4