- int *region_index;
- handler_info ***handlers;
- int *num_handlers;
- int *outer_index;
- int region_count;
-} eh_nesting_info;
-
-/* Initialize the eh_nesting_info structure. */
-
-eh_nesting_info *init_eh_nesting_info PROTO((void));
-
-/* Get a list of handlers reachable from a an exception region/insn. */
-
-int reachable_handlers PROTO((int, eh_nesting_info *, rtx,
- handler_info ***handlers));
-
-/* Free the eh_nesting_info structure. */
-
-void free_eh_nesting_info PROTO((eh_nesting_info *));
-
-extern void init_eh PROTO((void));
-
-/* Initialization for the per-function EH data. */
-
-extern void init_eh_for_function PROTO((void));
-
-/* Generate an exception label. Use instead of gen_label_rtx */
-
-extern rtx gen_exception_label PROTO((void));
-
-/* Adds an EH table entry for EH entry number N. Called from
- final_scan_insn for NOTE_INSN_EH_REGION_BEG. */
-
-extern void add_eh_table_entry PROTO((int n));
-
-/* Start a catch clause, triggered by runtime value paramter. */
-
-#ifdef TREE_CODE
-extern void start_catch_handler PROTO((tree));
-#endif
-
-/* End an individual catch clause. */
-
-extern void end_catch_handler PROTO((void));
-
-/* Returns a non-zero value if we need to output an exception table. */
-
-extern int exception_table_p PROTO((void));
-
-/* Outputs the exception table if we have one. */
-
-extern void output_exception_table PROTO((void));
-
-/* Given a return address in ADDR, determine the address we should use
- to find the corresponding EH region. */
-
-extern rtx eh_outer_context PROTO((rtx addr));
-
-/* Called at the start of a block of try statements for which there is
- a supplied catch handler. */
-
-extern void expand_start_try_stmts PROTO((void));
-
-/* Called at the start of a block of catch statements. It terminates the
- previous set of try statements. */
-
-extern void expand_start_all_catch PROTO((void));
-
-/* Called at the end of a block of catch statements. */
-
-extern void expand_end_all_catch PROTO((void));
-
-#ifdef TREE_CODE
-/* Create a new exception region and add the handler for the region
- onto a list. These regions will be ended (and their handlers
- emitted) when end_protect_partials is invoked. */
-
-extern void add_partial_entry PROTO((tree handler));
-#endif
-
-/* End all of the pending exception regions that have handlers added with
- push_protect_entry (). */
-
-extern void end_protect_partials PROTO((void));
-
-/* An internal throw. */
-
-extern void expand_internal_throw PROTO((void));
-
-/* Called from expand_exception_blocks and expand_end_catch_block to
- expand and pending handlers. */
-
-extern void expand_leftover_cleanups PROTO((void));
-
-/* If necessary, emit insns to get EH context for the current
- function. */
-
-extern void emit_eh_context PROTO((void));
-
-/* Builds a list of handler labels and puts them in the global
- variable exception_handler_labels. */
-
-extern void find_exception_handler_labels PROTO((void));
-
-/* Determine if an arbitrary label is an exception label */
-
-extern int is_exception_handler_label PROTO((int));
-
-/* Performs sanity checking on the check_exception_handler_labels
- list. */
-
-extern void check_exception_handler_labels PROTO((void));
-
-/* Keeps track of the label used as the context of a throw to rethrow an
- exception to the outer exception region. */
-
-extern struct label_node *outer_context_label_stack;
-
-/* A list of labels used for exception handlers. It is created by
- find_exception_handler_labels for the optimization passes. */
-
-extern rtx exception_handler_labels;
-
-/* Performs optimizations for exception handling, such as removing
- unnecessary exception regions. Invoked from jump_optimize (). */
-
-extern void exception_optimize PROTO((void));
-
-/* Return EH context (and set it up once per fn). */
-extern rtx get_eh_context PROTO((void));
-
-/* Get the dynamic handler chain. */
-extern rtx get_dynamic_handler_chain PROTO((void));
-
-/* Get the dynamic cleanup chain. */
-extern rtx get_dynamic_cleanup_chain PROTO((void));
-
-/* Throw an exception. */
-
-extern void emit_throw PROTO((void));
-
-/* One to use setjmp/longjmp method of generating code. */
-
-extern int exceptions_via_longjmp;
-
-/* One to enable asynchronous exception support. */
-
-extern int asynchronous_exceptions;
-
-/* One to protect cleanup actions with a handler that calls
- __terminate, zero otherwise. */
+ /* The tree of all regions for this function. */
+ eh_region region_tree;
+
+ /* The same information as an indexable array. */
+ VEC(eh_region,gc) *region_array;
+
+ /* The landing pads as an indexable array. */
+ VEC(eh_landing_pad,gc) *lp_array;
+
+ /* At the gimple level, a mapping from gimple statement to landing pad
+ or must-not-throw region. See record_stmt_eh_region. */
+ htab_t GTY((param_is (struct throw_stmt_node))) throw_stmt_table;
+
+ /* All of the runtime type data used by the function. These objects
+ are emitted to the lang-specific-data-area for the function. */
+ VEC(tree,gc) *ttype_data;
+
+ /* The table of all action chains. These encode the eh_region tree in
+ a compact form for use by the runtime, and is also emitted to the
+ lang-specific-data-area. Note that the ARM EABI uses a different
+ format for the encoding than all other ports. */
+ union eh_status_u {
+ VEC(tree,gc) * GTY((tag ("1"))) arm_eabi;
+ VEC(uchar,gc) * GTY((tag ("0"))) other;
+ } GTY ((desc ("targetm.arm_eabi_unwinder"))) ehspec_data;
+};