Undo June 11th change
[official-gcc.git] / gcc / eh-common.h
blob51ecf31470e8c497f0b35464a78770a23fc579de
1 /* Copyright (C) 1997 Free Software Foundation, Inc.
2 This file is part of GNU CC. */
4 /* This file contains the structures required for the language
5 independant exception handling model. Both the static compiler and
6 the runtime library share this file. */
8 /* The runtime flag flag_new_exceptions is used to determine whether the
9 compiler supports the new runtime typechecking mechanism or not. Under
10 the new model, runtime info is contained in the exception table, and
11 the __throw() library routine determines which handler to call based
12 on the results of a call to a matching function provided by the expcetion
13 thrower. Otherwise the old scheme of calling any handler which matches
14 an exception range is used, and the handler is responsible for all
15 checking of runtime conditions. If the handler wasn't suppose to
16 get the exception, it performs a re-throw. */
18 #include "gansidecl.h"
21 /* The handler_label field MUST be the first field in this structure. The
22 __throw() library routine expects uses __eh_stub() from except.c, which
23 simply dereferences the context pointer to get the handler */
25 struct eh_context
27 void *handler_label;
28 void **dynamic_handler_chain;
29 /* This is language dependent part of the eh context. */
30 void *info;
33 #ifndef EH_TABLE_LOOKUP
35 typedef struct old_exception_table
37 void *start_region;
38 void *end_region;
39 void *exception_handler;
40 } old_exception_table;
42 typedef struct exception_table
44 void *start_region;
45 void *end_region;
46 void *exception_handler;
47 void *match_info; /* runtime type info */
48 } exception_table;
51 /* The language identifying portion of an exception table */
53 typedef struct exception_lang_info
55 short language;
56 short version;
57 } exception_lang_info;
59 /* This value in the first field of the exception descriptor
60 identifies the descriptor as the new model format. This value would never
61 be present in this location under the old model */
63 #define NEW_EH_RUNTIME ((void *) -2)
65 /* Each function has an exception_descriptor which contains the
66 language info, and a table of exception ranges and handlers */
68 typedef struct exception_descriptor
70 void *runtime_id_field;
71 exception_lang_info lang;
72 exception_table table[1];
73 } exception_descriptor;
76 /* A pointer to a matching function is initialized at runtime by the
77 specific language if run-time exceptions are supported.
78 The function takes 3 parameters
79 1 - runtime exception that has been thrown info. (__eh_info *)
80 2 - Match info pointer from the region being considered (void *)
81 3 - exception table region is in (exception descriptor *)
84 typedef void * (*__eh_matcher) PROTO ((void *, void *, void *));
86 /* This is the runtime exception information. This forms the minimum required
87 information for an exception info pointer in an eh_context structure. */
89 typedef struct __eh_info
91 __eh_matcher match_function;
92 void *coerced_value;
93 short language;
94 short version;
95 } __eh_info;
97 /* Convienient language codes for ID the originating language. Similar
98 to the codes in dwarf2.h. */
100 enum exception_source_language
102 EH_LANG_C89 = 0x0001,
103 EH_LANG_C = 0x0002,
104 EH_LANG_Ada83 = 0x0003,
105 EH_LANG_C_plus_plus = 0x0004,
106 EH_LANG_Cobol74 = 0x0005,
107 EH_LANG_Cobol85 = 0x0006,
108 EH_LANG_Fortran77 = 0x0007,
109 EH_LANG_Fortran90 = 0x0008,
110 EH_LANG_Pascal83 = 0x0009,
111 EH_LANG_Modula2 = 0x000a,
112 EH_LANG_Java = 0x000b,
113 EH_LANG_Mips_Assembler = 0x8001
116 #endif /* EH_TABLE_LOOKUP */