OSDN Git Service

[pf3gnuchains/gcc-fork.git] / gcc / except.h
index d2523cb..540044b 100644 (file)
@@ -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,7 @@ struct eh_entry {
   rtx exception_handler_label;
   tree finalization;
   int label_used;
+  rtx false_label;
 };
 
 /* A list of EH_ENTRYs. ENTRY is the entry; CHAIN points to the next
@@ -82,7 +91,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,12 +157,8 @@ extern int doing_eh                                       PROTO ((int));
 
 /* Toplevel initialization for EH.  */
 
-#ifdef NEW_EH_MODEL
-
-void set_exception_lang_code                    PROTO((short));
-void set_exception_version_code                 PROTO((short));
-
-#endif
+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
@@ -165,8 +169,6 @@ void set_exception_version_code                 PROTO((short));
    exception. NEXT is a pointer to the next handler for this region. 
    NULL means there are no more. */
 
-#define CATCH_ALL_TYPE   (tree *) -1
-
 typedef struct handler_info 
 {
   rtx  handler_label;
@@ -213,6 +215,9 @@ int duplicate_handlers                          PROTO((int, int));
 
 struct handler_info *get_first_handler          PROTO((int));
 
+/* Find all the runtime handlers type matches currently referenced */
+
+int find_all_handler_type_matches               PROTO((void ***));
 
 extern void init_eh                            PROTO((void));
 
@@ -232,12 +237,12 @@ extern void add_eh_table_entry                    PROTO((int n));
 /* Start a catch clause, triggered by runtime value paramter. */
 
 #ifdef TREE_CODE
-extern void expand_start_catch                  PROTO((tree));
+extern void start_catch_handler                 PROTO((tree));
 #endif
 
-/* End a catch clause. */
+/* End an individual catch clause. */
 
-extern void expand_end_catch                    PROTO((void));
+extern void end_catch_handler                   PROTO((void));
 
 /* Returns a non-zero value if we need to output an exception table.  */
 
@@ -293,16 +298,6 @@ extern void expand_leftover_cleanups               PROTO((void));
 
 extern void emit_eh_context                    PROTO((void));
 
-/* If necessary, emit insns for the start of per-function unwinder for
-   the current function.  */
-
-extern void emit_unwinder                      PROTO((void));
-
-/* If necessary, emit insns for the end of the per-function unwinder
-   for the current function.  */
-
-extern void end_eh_unwinder                    PROTO((void));
-
 /* Builds a list of handler labels and puts them in the global
    variable exception_handler_labels.  */
 
@@ -380,14 +375,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));
 #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. */