aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@cygnus.com>1998-12-09 06:15:20 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>1998-12-09 06:15:20 +0000
commit0177de873717bfea42604efef6f45d1265c2e36c (patch)
tree0a262ac524c0c187ae000525eec494381a63ee7d
parenta91d8b9534d0e0a6a741971001ccc1128ec2d76a (diff)
downloadgcc-0177de873717bfea42604efef6f45d1265c2e36c.zip
gcc-0177de873717bfea42604efef6f45d1265c2e36c.tar.gz
gcc-0177de873717bfea42604efef6f45d1265c2e36c.tar.bz2
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
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/except.c13
-rw-r--r--gcc/except.h3
-rw-r--r--gcc/integrate.c7
4 files changed, 21 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3b58772..332e22c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+Wed Dec 9 09:12:40 EST 1998 Andrew MacLeod <amacleod@cygnus.com>
+
+ * 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 <wilson@cygnus.com>
* i960/i960.h (CONST_COSTS, case CONST_INT): Accept power2_operand
diff --git a/gcc/except.c b/gcc/except.c
index 40aafdd..c7cf3ed 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 5b4b3db..62796fe 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 702e5fa..4c1464c 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;
}