/* 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
#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)
/* 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
asm volatile ("j $31");
- /* Follow the trend.. */
abort ();
}
/* 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
double __fpregs[6];
} __jmp_buf[1];
+#ifdef __USE_MISC
/* Offset to the program counter in `jmp_buf'. */
#define JB_PC 0
+#endif
/* 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
#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
/* 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
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];
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;
};
--- /dev/null
+/* 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