entered into RCS
authorRoland McGrath <roland@gnu.org>
Thu, 26 Aug 1993 23:31:15 +0000 (23:31 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 26 Aug 1993 23:31:15 +0000 (23:31 +0000)
sysdeps/mips/__longjmp.c
sysdeps/mips/jmp_buf.h
sysdeps/mips/setjmp_aux.c
sysdeps/unix/bsd/ultrix4/mips/sigcontext.h
sysdeps/unix/mips/sysdep.h [new file with mode: 0644]

index 1828714..5c7eb68 100644 (file)
@@ -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 ();
 }
index 661997f..eed47dc 100644 (file)
@@ -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
index e4c9d20..3a3ed20 100644 (file)
@@ -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 <ansidecl.h>
 #include <setjmp.h>
 
+#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
index 60bb312..107d2fc 100644 (file)
@@ -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 (file)
index 0000000..bbf742b
--- /dev/null
@@ -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 <sysdeps/unix/sysdep.h>
+#include <regdef.h>
+
+#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