home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Headers / ansi / hppa / setjmp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-20  |  1.5 KB  |  66 lines

  1. /* Copyright (c) 1992 NeXT Computer, Inc.  All rights reserved.
  2.  *
  3.  *    File:    setjmp.h
  4.  *
  5.  *    Declaration of setjmp routines and data structures.
  6.  */
  7. #ifndef _ANSI_HPPA_SETJMP_H
  8. #define _ANSI_HPPA_SETJMP_H
  9.  
  10. #import <bsd/hppa/signal.h>
  11.  
  12. struct _jmp_buf {
  13.     /* Kernel state preserved by setjmp/longjmp. */
  14.     struct sigcontext    sigcontext;
  15.  
  16.     /* Callee-saved registers preserved by setjmp/longjmp (r3 - r18). */
  17.     unsigned long csr[16];
  18.  
  19.     /* gb (cthread state, doesn't really need to be saved */
  20.     unsigned long gb;
  21.  
  22.     /* return pointer. */
  23.     unsigned long rp;
  24.  
  25.     /* return value (used by longjmp) */
  26.     unsigned long rval;
  27.  
  28.     /* setjmp vs. _setjmp (setjmp == 1, _setjmp == 0) */
  29.     unsigned was_setjmp;
  30.  
  31.     /* Stack pointer. */
  32.     unsigned long sp;
  33.  
  34.     /* Magic number for sanity check. */
  35.     unsigned long magic;
  36.     /* Floating point status & control register */
  37.     double fpscr[4] __attribute__((aligned(8)));
  38.  
  39.     /* Callee-saved floating point registers (fr12 - fr21). */
  40.     double fpr[10] __attribute__((aligned(8)));
  41.  
  42. };
  43.  
  44. /* Magic number used to verify jmp_buf validity. */
  45.  
  46. #define    _JMP_BUF_MAGICNUM    0xfadedfad
  47.  
  48. /* ANSI X3.159-1989 requires `jmp_buf' to be an array type. */
  49.  
  50. typedef    struct _jmp_buf jmp_buf[1];
  51.  
  52. /* ANSI X3.159-1989 requires `setjmp.h' to define the macro `setjmp'. */
  53. #ifdef __STDC__
  54. #ifndef setjmp
  55. #define setjmp(env) setjmp(env)
  56. #endif  /*setjmp */
  57. #endif  /* __STDC__ */
  58.  
  59. /* External routines. */
  60.  
  61. extern int setjmp(jmp_buf env);
  62.  
  63. extern void longjmp(jmp_buf env, int val);
  64.  
  65. #endif /* _ANSI_HPPA_SETJMP_H */
  66.