aboutsummaryrefslogtreecommitdiff
path: root/gcc/libgcc2.c
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1997-12-04 09:41:38 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-12-04 04:41:38 -0500
commite701eb4de0b60d5ceac3ec4d9be03f7e39a57103 (patch)
tree952b95458e119610c40fb72e6d852f3a40843ba5 /gcc/libgcc2.c
parenta1e343dd7a3f537a038c3903264fa41f9c4df29d (diff)
downloadgcc-e701eb4de0b60d5ceac3ec4d9be03f7e39a57103.zip
gcc-e701eb4de0b60d5ceac3ec4d9be03f7e39a57103.tar.gz
gcc-e701eb4de0b60d5ceac3ec4d9be03f7e39a57103.tar.bz2
./: * libgcc2.c (__throw): Use __builtin_return_addr instead of __eh_pc.
* except.c: Lose outer_context_label_stack. (expand_eh_region_end): Rethrow from outer_context here. (expand_fixup_region_end): Let expand_eh_region_end do the rethrow. (expand_internal_throw): Take no args. (expand_internal_throw_indirect): Lose. (expand_leftover_cleanups, expand_start_all_catch): Use expand_rethrow. (expand_start_all_catch): Start a rethrow region. (expand_end_all_catch): End it. (expand_rethrow): New fn. * except.h: Reflect above changes. cp/: * except.c (expand_end_catch_block): Lose rethrow region. (expand_start_catch_block): Likewise. (expand_end_catch_block): Don't expand_leftover_cleanups. From-SVN: r16937
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r--gcc/libgcc2.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 53af01b..faa3c14 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -3154,8 +3154,6 @@ __sjpopnthrow ()
/* This value identifies the place from which an exception is being
thrown. */
-void *__eh_pc;
-
#ifdef EH_TABLE_LOOKUP
EH_TABLE_LOOKUP
@@ -3212,6 +3210,8 @@ find_exception_handler (void *pc, exception_table *table)
/* Support code for exception handling using inline unwinders or
__unwind_function. */
+void *__eh_pc;
+
#ifndef EH_TABLE_LOOKUP
typedef struct exception_table_node {
exception_table *table;
@@ -3489,7 +3489,7 @@ in_reg_window (int reg, frame_state *udata)
void
__throw ()
{
- void *pc, *handler, *retaddr;
+ void *pc, *handler, *retaddr, *__eh_pc;
frame_state ustruct, ustruct2;
frame_state *udata = &ustruct;
frame_state *sub_udata = &ustruct2;
@@ -3524,6 +3524,7 @@ label:
__builtin_unwind_init ();
/* Now reset pc to the right throw point. */
+ __eh_pc = __builtin_extract_return_addr (__builtin_return_address (0)) - 1;
pc = __eh_pc;
handler = 0;