From 0177de873717bfea42604efef6f45d1265c2e36c Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Wed, 9 Dec 1998 06:15:20 +0000 Subject: [PATCH] except.h (struct handler_info): Add handler_number field * except.h (struct handler_info): Add handler_number field * except.c (gen_exception_label): EH labels no longer need to be on the permanent obstack. (get_new_handler): Set the label number field. (output_exception_table_entry): Regenerate handler label reference from the label number field. (init_eh): Remove a blank line * integrate.c (get_label_from_map): Labels no longer need to be on the permanent obstack. From-SVN: r24203 --- gcc/ChangeLog | 12 ++++++++++++ gcc/except.c | 13 ++++++------- gcc/except.h | 3 ++- gcc/integrate.c | 7 +------ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b587720ba8..332e22c6f7b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +Wed Dec 9 09:12:40 EST 1998 Andrew MacLeod + + * except.h (struct handler_info): Add handler_number field. + * except.c (gen_exception_label): EH labels no longer need to be + on the permanent obstack. + (get_new_handler): Set the label number field. + (output_exception_table_entry): Regenerate handler label reference + from the label number field. + (init_eh): Remove a blank line. + * integrate.c (get_label_from_map): Labels no longer need to be + on the permanent obstack. + Tue Dec 8 22:04:33 1998 Jim Wilson * i960/i960.h (CONST_COSTS, case CONST_INT): Accept power2_operand diff --git a/gcc/except.c b/gcc/except.c index 40aafdd21dc..c7cf3eddce1 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -616,11 +616,7 @@ rtx gen_exception_label () { rtx lab; - - push_obstacks_nochange (); - end_temporary_allocation (); lab = gen_label_rtx (); - pop_obstacks (); return lab; } @@ -924,6 +920,7 @@ get_new_handler (handler, typeinfo) struct handler_info* ptr; ptr = (struct handler_info *) malloc (sizeof (struct handler_info)); ptr->handler_label = handler; + ptr->handler_number = CODE_LABEL_NUMBER (handler); ptr->type_info = typeinfo; ptr->next = NULL; @@ -2147,8 +2144,11 @@ output_exception_table_entry (file, n) if (handler == NULL) assemble_integer (GEN_INT (0), POINTER_SIZE / BITS_PER_UNIT, 1); else - assemble_integer (handler->handler_label, - POINTER_SIZE / BITS_PER_UNIT, 1); + { + ASM_GENERATE_INTERNAL_LABEL (buf, "L", handler->handler_number); + sym = gen_rtx_SYMBOL_REF (Pmode, buf); + assemble_integer (sym, POINTER_SIZE / BITS_PER_UNIT, 1); + } if (flag_new_exceptions) { @@ -2394,7 +2394,6 @@ check_exception_handler_labels () void init_eh () { - first_rethrow_symbol = create_rethrow_ref (0); final_rethrow = gen_exception_label (); last_rethrow_symbol = create_rethrow_ref (CODE_LABEL_NUMBER (final_rethrow)); diff --git a/gcc/except.h b/gcc/except.h index 5b4b3db4ed2..62796fefb3a 100644 --- a/gcc/except.h +++ b/gcc/except.h @@ -172,7 +172,8 @@ void set_exception_version_code PROTO((int)); typedef struct handler_info { - rtx handler_label; + rtx handler_label; + int handler_number; void *type_info; struct handler_info *next; } handler_info; diff --git a/gcc/integrate.c b/gcc/integrate.c index 702e5fa4f51..4c1464cb644 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -99,12 +99,7 @@ get_label_from_map (map, i) rtx x = map->label_map[i]; if (x == NULL_RTX) - { - push_obstacks_nochange (); - end_temporary_allocation (); - x = map->label_map[i] = gen_label_rtx(); - pop_obstacks (); - } + x = map->label_map[i] = gen_label_rtx(); return x; }