summaryrefslogtreecommitdiffstats
path: root/private/crt32/h/setjmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/crt32/h/setjmp.h')
-rw-r--r--private/crt32/h/setjmp.h299
1 files changed, 299 insertions, 0 deletions
diff --git a/private/crt32/h/setjmp.h b/private/crt32/h/setjmp.h
new file mode 100644
index 000000000..0bf778e6c
--- /dev/null
+++ b/private/crt32/h/setjmp.h
@@ -0,0 +1,299 @@
+/***
+*setjmp.h - definitions/declarations for setjmp/longjmp routines
+*
+* Copyright (c) 1985-1993, Microsoft Corporation. All rights reserved.
+*
+*Purpose:
+* This file defines the machine-dependent buffer used by
+* setjmp/longjmp to save and restore the program state, and
+* declarations for those routines.
+* [ANSI/System V]
+*
+*Revision History:
+* 12-11-87 JCR Added "_loadds" functionality
+* 12-18-87 JCR Added _FAR_ to declarations
+* 02-10-88 JCR Cleaned up white space
+* 05-03-89 JCR Added _INTERNAL_IFSTRIP for relinc usage
+* 08-15-89 GJF Cleanup, now specific to OS/2 2.0 (i.e., 386 flat model)
+* 10-30-89 GJF Fixed copyright
+* 11-02-89 JCR Changed "DLL" to "_DLL"
+* 03-01-90 GJF Added #ifndef _INC_SETJMP and #include <cruntime.h>
+* stuff. Also, removed some (now) useless preprocessor
+* directives.
+* 04-10-90 GJF Replaced _cdecl with _CALLTYPE1.
+* 05-18-90 GJF Revised for SEH.
+* 10-30-90 GJF Moved definition of _JBLEN into cruntime.h.
+* 02-25-91 SRW Moved definition of _JBLEN back here [_WIN32_]
+* 04-09-91 PNT Added _MAC_ definitions
+* 04-17-91 SRW Fixed definition of _JBLEN for i386 and MIPS to not
+* include the * sizeof(int) factor [_WIN32_]
+* 05-09-91 GJF Moved _JBLEN defs back to cruntime.h. Also, turn on
+* intrinsic _setjmp for Dosx32.
+* 08-27-91 GJF #ifdef out everything for C++.
+* 08-29-91 JCR ANSI naming
+* 11-01-91 GDP MIPS compiler support -- Moved _JBLEN back here
+* 01-16-92 GJF Fixed _JBLEN and map to _setjmp intrinsic for i386
+* target [_WIN32_].
+* 05-08-92 GJF Changed _JBLEN to support C8-32 (support for C6-386 has
+* been dropped).
+* 08-06-92 GJF Function calling type and variable type macros. Revised
+* use of compiler/target processor macros.
+* 11-09-92 GJF Fixed some preprocessing conditionals.
+* 01-03-93 SRW Fold in ALPHA changes
+* 01-09-93 SRW Remove usage of MIPS and ALPHA to conform to ANSI
+* Use _MIPS_ and _ALPHA_ instead.
+* 01-21-93 GJF Removed support for C6-386's _cdecl.
+* 02-20-93 GJF Per ChuckG and MartinO, setjmp/longjmp to used in
+* C++ programs.
+* 03-23-93 SRW Change _JBLEN for MIPS in preparation for SetJmpEx
+* 04-23-93 SRW Added _JBTYPE and finalized setjmpex support.
+* 06-09-93 SRW Missing one line in previous merge.
+* 10-04-93 SRW Fix ifdefs for MIPS and ALPHA to only check for _M_?????? defines
+* 01-12-93 PML Increased x86 _JBLEN from 8 to 16. Added new fields
+* to _JUMP_BUFFER for use with C9.0.
+*
+****/
+
+#ifndef _INC_SETJMP
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _INTERNAL_IFSTRIP_
+#include <cruntime.h>
+#endif /* _INTERNAL_IFSTRIP_ */
+
+/*
+ * Conditional macro definition for function calling type and variable type
+ * qualifiers.
+ */
+#if ( (_MSC_VER >= 800) && (_M_IX86 >= 300) )
+
+/*
+ * Definitions for MS C8-32 (386/486) compiler
+ */
+#define _CRTAPI1 __cdecl
+#define _CRTAPI2 __cdecl
+
+#else
+
+/*
+ * Other compilers (e.g., MIPS)
+ */
+#define _CRTAPI1
+#define _CRTAPI2
+
+#endif
+
+
+/*
+ * Definitions specific to particular setjmp implementations.
+ */
+#if defined(_M_IX86)
+
+/*
+ * MS C8-32 or older MS C6-386 compilers
+ */
+#ifndef _INC_SETJMPEX
+#define setjmp _setjmp
+#endif
+#define _JBLEN 16
+#define _JBTYPE int
+
+/*
+ * Define jump buffer layout for x86 setjmp/longjmp.
+ */
+
+typedef struct __JUMP_BUFFER {
+ unsigned long Ebp;
+ unsigned long Ebx;
+ unsigned long Edi;
+ unsigned long Esi;
+ unsigned long Esp;
+ unsigned long Eip;
+ unsigned long Registration;
+ unsigned long TryLevel;
+ unsigned long Cookie;
+ unsigned long UnwindFunc;
+ unsigned long UnwindData[6];
+} _JUMP_BUFFER;
+
+#elif defined(_M_MRX000)
+
+/*
+ * All MIPS implementations need _JBLEN of 16
+ */
+#define _JBLEN 16
+#define _JBTYPE double
+#define _setjmp setjmp
+
+/*
+ * Define jump buffer layout for MIPS setjmp/longjmp.
+ */
+
+typedef struct __JUMP_BUFFER {
+ unsigned long FltF20;
+ unsigned long FltF21;
+ unsigned long FltF22;
+ unsigned long FltF23;
+ unsigned long FltF24;
+ unsigned long FltF25;
+ unsigned long FltF26;
+ unsigned long FltF27;
+ unsigned long FltF28;
+ unsigned long FltF29;
+ unsigned long FltF30;
+ unsigned long FltF31;
+ unsigned long IntS0;
+ unsigned long IntS1;
+ unsigned long IntS2;
+ unsigned long IntS3;
+ unsigned long IntS4;
+ unsigned long IntS5;
+ unsigned long IntS6;
+ unsigned long IntS7;
+ unsigned long IntS8;
+ unsigned long IntSp;
+ unsigned long Type;
+ unsigned long Fir;
+} _JUMP_BUFFER;
+
+#elif defined(_M_ALPHA)
+
+/*
+ * The Alpha C8/GEM C compiler uses an intrinsic _setjmp.
+ * The Alpha acc compiler implements setjmp as a function.
+ */
+
+#define _setjmp setjmp
+
+#ifdef _MSC_VER
+#ifndef _INC_SETJMPEX
+#undef _setjmp
+#define setjmp _setjmp
+#endif
+#endif
+
+/*
+ * Alpha implementations use a _JBLEN of 24 quadwords.
+ * A double is used only to obtain quadword size and alignment.
+ */
+
+#define _JBLEN 24
+#define _JBTYPE double
+
+/*
+ * Define jump buffer layout for Alpha setjmp/longjmp.
+ * A double is used only to obtain quadword size and alignment.
+ */
+
+typedef struct __JUMP_BUFFER {
+ unsigned long Fp;
+ unsigned long Pc;
+ unsigned long Seb;
+ unsigned long Type;
+ double FltF2;
+ double FltF3;
+ double FltF4;
+ double FltF5;
+ double FltF6;
+ double FltF7;
+ double FltF8;
+ double FltF9;
+ double IntS0;
+ double IntS1;
+ double IntS2;
+ double IntS3;
+ double IntS4;
+ double IntS5;
+ double IntS6;
+ double IntSp;
+ double Fir;
+ double Fill[5];
+} _JUMP_BUFFER;
+
+#elif defined(_M_PPC)
+
+/*
+ * Min length is 240 bytes; round to 256 bytes.
+ * Since this is allocated as an array of "double", the
+ * number of entries required is 32.
+ *
+ * All PPC implementations need _JBLEN of 32
+ */
+
+#define _JBLEN 32
+#define _JBTYPE double
+#define _setjmp setjmp
+
+/*
+ * Define jump buffer layout for PowerPC setjmp/longjmp.
+ */
+
+typedef struct __JUMP_BUFFER {
+ double Fpr14;
+ double Fpr15;
+ double Fpr16;
+ double Fpr17;
+ double Fpr18;
+ double Fpr19;
+ double Fpr20;
+ double Fpr21;
+ double Fpr22;
+ double Fpr23;
+ double Fpr24;
+ double Fpr25;
+ double Fpr26;
+ double Fpr27;
+ double Fpr28;
+ double Fpr29;
+ double Fpr30;
+ double Fpr31;
+ unsigned long Gpr1;
+ unsigned long Gpr2;
+ unsigned long Gpr13;
+ unsigned long Gpr14;
+ unsigned long Gpr15;
+ unsigned long Gpr16;
+ unsigned long Gpr17;
+ unsigned long Gpr18;
+ unsigned long Gpr19;
+ unsigned long Gpr20;
+ unsigned long Gpr21;
+ unsigned long Gpr22;
+ unsigned long Gpr23;
+ unsigned long Gpr24;
+ unsigned long Gpr25;
+ unsigned long Gpr26;
+ unsigned long Gpr27;
+ unsigned long Gpr28;
+ unsigned long Gpr29;
+ unsigned long Gpr30;
+ unsigned long Gpr31;
+ unsigned long Cr;
+ unsigned long Iar;
+ unsigned long Type;
+} _JUMP_BUFFER;
+
+#endif
+
+/* define the buffer type for holding the state information */
+
+#ifndef _JMP_BUF_DEFINED
+typedef _JBTYPE jmp_buf[_JBLEN];
+#define _JMP_BUF_DEFINED
+#endif
+
+
+/* function prototypes */
+
+int _CRTAPI1 setjmp(jmp_buf);
+void _CRTAPI1 longjmp(jmp_buf, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define _INC_SETJMP
+#endif /* _INC_SETJMP */