OSDN Git Service

* except.h (struct handler_info): Add handler_number field
authoramacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Dec 1998 06:15:20 +0000 (06:15 +0000)
committeramacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Dec 1998 06:15:20 +0000 (06:15 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24203 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/except.c
gcc/except.h
gcc/integrate.c

index 3b58772..332e22c 100644 (file)
@@ -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
index 40aafdd..c7cf3ed 100644 (file)
@@ -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));
index 5b4b3db..62796fe 100644 (file)
@@ -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;
index 702e5fa..4c1464c 100644 (file)
@@ -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;
 }