diff options
Diffstat (limited to 'contrib/gcc/except.h')
-rw-r--r-- | contrib/gcc/except.h | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/contrib/gcc/except.h b/contrib/gcc/except.h index c08d0c5..a8c4f9c 100644 --- a/contrib/gcc/except.h +++ b/contrib/gcc/except.h @@ -1,5 +1,5 @@ /* Exception Handling interface routines. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Mike Stump <mrs@cygnus.com>. This file is part of GNU CC. @@ -24,6 +24,10 @@ typedef struct rtx_def *_except_rtx; #define rtx _except_rtx #endif +/* The label generated by expand_builtin_eh_return. */ + +extern rtx eh_return_stub_label; + #ifdef TREE_CODE /* A stack of labels. CHAIN points to the next entry in the stack. */ @@ -47,6 +51,10 @@ struct label_node { label or not. New ones are needed for additional catch blocks if it has. + FALSE_LABEL is used when either setjmp/longjmp exceptions are in + use, or old style table exceptions. It contains the label for + branching to the next runtime type check as handlers are processed. + FINALIZATION is the tree codes for the handler, or is NULL_TREE if one hasn't been generated yet, or is integer_zero_node to mark the end of a group of try blocks. */ @@ -56,6 +64,8 @@ struct eh_entry { rtx exception_handler_label; tree finalization; int label_used; + rtx false_label; + rtx rethrow_label; }; /* A list of EH_ENTRYs. ENTRY is the entry; CHAIN points to the next @@ -82,7 +92,6 @@ struct eh_queue { struct eh_node *tail; }; - /* Start an exception handling region. All instructions emitted after this point are considered to be part of the region until expand_eh_region_end () is invoked. */ @@ -149,8 +158,8 @@ extern int doing_eh PROTO ((int)); /* Toplevel initialization for EH. */ -void set_exception_lang_code PROTO((short)); -void set_exception_version_code PROTO((short)); +void set_exception_lang_code PROTO((int)); +void set_exception_version_code PROTO((int)); /* A list of handlers asocciated with an exception region. HANDLER_LABEL is the the label that control should be transfered to if the data @@ -163,19 +172,13 @@ void set_exception_version_code PROTO((short)); typedef struct handler_info { - rtx handler_label; + rtx handler_label; + int handler_number; void *type_info; struct handler_info *next; } handler_info; -/* Add a new eh_entry for this function, The parameter specifies what - exception region number NOTE insns use to delimit this range. - The integer returned is uniquely identifies this exception range - within an internal table. */ - -int new_eh_region_entry PROTO((int)); - /* Add new handler information to an exception range. The first parameter specifies the range number (returned from new_eh_entry()). The second parameter specifies the handler. By default the handler is inserted at @@ -200,8 +203,19 @@ struct handler_info *get_new_handler PROTO((rtx, void *)); /* Make a duplicate of an exception region by copying all the handlers for an exception region. Return the new handler index. */ -int duplicate_handlers PROTO((int, int)); +int duplicate_eh_handlers PROTO((int, int, rtx (*)(rtx))); + +/* map symbol refs for rethrow */ +rtx rethrow_symbol_map PROTO((rtx, rtx (*)(rtx))); + +/* Is the rethrow label for a region used? */ + +int rethrow_used PROTO((int)); + +/* Return the region number a this is the rethrow label for. */ + +int eh_region_from_symbol PROTO((rtx)); /* Get a pointer to the first handler in an exception region's list. */ @@ -232,6 +246,10 @@ extern void add_eh_table_entry PROTO((int n)); 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)); @@ -363,15 +381,13 @@ extern void expand_fixup_region_end PROTO((tree)); void expand_builtin_unwind_init PROTO((void)); rtx expand_builtin_dwarf_fp_regnum PROTO((void)); -rtx expand_builtin_eh_stub PROTO((void)); -rtx expand_builtin_eh_stub_old PROTO((void)); #ifdef TREE_CODE rtx expand_builtin_frob_return_addr PROTO((tree)); rtx expand_builtin_extract_return_addr PROTO((tree)); -void expand_builtin_set_return_addr_reg PROTO((tree)); -void expand_builtin_set_eh_regs PROTO((tree, tree)); rtx expand_builtin_dwarf_reg_size PROTO((tree, rtx)); +void expand_builtin_eh_return PROTO((tree, tree, tree)); #endif +void expand_eh_return PROTO((void)); /* Checking whether 2 instructions are within the same exception region. */ |