aboutsummaryrefslogtreecommitdiff
path: root/contrib/gcc/except.h
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>1999-10-16 06:09:09 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>1999-10-16 06:09:09 +0000
commitf2c57ef828fda14567ffdf5489def4e2408ac03d (patch)
treef7d3a3ab9c32694206552e767626366f016f2062 /contrib/gcc/except.h
parentaef9219924a74e512eff866a60b402251de6eceb (diff)
downloadsrc-f2c57ef828fda14567ffdf5489def4e2408ac03d.tar.gz
src-f2c57ef828fda14567ffdf5489def4e2408ac03d.zip
Virgin import of the GCC 2.95.1 compilers
Notes
Notes: svn path=/vendor/gcc/dist/; revision=52284
Diffstat (limited to 'contrib/gcc/except.h')
-rw-r--r--contrib/gcc/except.h50
1 files changed, 33 insertions, 17 deletions
diff --git a/contrib/gcc/except.h b/contrib/gcc/except.h
index c08d0c583994..a8c4f9c8004f 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. */