frame.h (__register_frame, [...]): New.
authorJeff Law <law@gcc.gnu.org>
Mon, 15 Dec 1997 23:28:44 +0000 (16:28 -0700)
committerJeff Law <law@gcc.gnu.org>
Mon, 15 Dec 1997 23:28:44 +0000 (16:28 -0700)
        * frame.h (__register_frame, __register_frame_table,
        __deregister_frame): New.
        * frame.c (__register_frame, __register_frame_table,
        __deregister_frame): New.
        * frame.c (__deregister_frame_info): Return void *.
        * frame.h (__deregister_frame_info): Ditto.
        * collect2.c (__deregister_frame_info): Ditto.

From-SVN: r17113

gcc/ChangeLog
gcc/collect2.c
gcc/frame.c
gcc/frame.h

index ff5725e6af469196aa098af7dcf43c93e3f46f38..5aff3d1af7e2066a51a50c511563e8a9160f4dc7 100644 (file)
@@ -1,7 +1,17 @@
-Tue Dec 16 00:14:29 1997  Jeffrey A Law  (law@cygnus.com)
+Tue Dec 16 00:32:01 1997  Jeffrey A Law  (law@cygnus.com)
 
        * version.c: Bump for snapshot.
 
+Tue Dec 16 00:14:29 1997  H.J. Lu  (hjl@gnu.org)
+
+       * frame.h (__register_frame, __register_frame_table,
+       __deregister_frame): New.
+       * frame.c (__register_frame, __register_frame_table,
+       __deregister_frame): New.
+       * frame.c (__deregister_frame_info): Return void *.
+       * frame.h (__deregister_frame_info): Ditto.
+       * collect2.c (__deregister_frame_info): Ditto.
+
 Mon Dec 15 18:40:08 1997  Richard Henderson  <rth@cygnus.com>
 
        * expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG.
index 88547cb4f61bf4902d2ae26ef17c534f90aaed16..aa23a0f7cddb020b898b2398ced113dc8dabe32d 100644 (file)
@@ -1791,7 +1791,7 @@ write_c_file_stat (stream, name)
       fprintf (stream, "};\n");
 
       fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
-      fprintf (stream, "extern void __deregister_frame_info (void *);\n");
+      fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
 
       fprintf (stream, "static void reg_frame () {\n");
       fprintf (stream, "\tstatic struct object ob;\n");
@@ -1877,7 +1877,7 @@ write_c_file_glob (stream, name)
       fprintf (stream, "};\n");
 
       fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
-      fprintf (stream, "extern void __deregister_frame_info (void *);\n");
+      fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
 
       fprintf (stream, "static void reg_frame () {\n");
       fprintf (stream, "\tstatic struct object ob;\n");
index ca107b081d3b774f7e7102f54587fcc2143d3a7b..5cc4184ce2a0279668fd94bd5fa0f59f9558d064 100644 (file)
@@ -528,6 +528,13 @@ __register_frame_info (void *begin, struct object *ob)
   __gthread_mutex_unlock (&object_mutex);
 }
 
+void
+__register_frame (void *begin)
+{
+  struct object *ob = (struct object *) malloc (sizeof (struct object));
+  __register_frame_info (begin, ob);                       
+}
+
 /* Similar, but BEGIN is actually a pointer to a table of unwind entries
    for different translation units.  Called from the file generated by
    collect2.  */
@@ -549,9 +556,16 @@ __register_frame_info_table (void *begin, struct object *ob)
   __gthread_mutex_unlock (&object_mutex);
 }
 
+void
+__register_frame_table (void *begin)
+{
+  struct object *ob = (struct object *) malloc (sizeof (struct object));
+  __register_frame_info_table (begin, ob);
+}
+
 /* Called from crtend.o to deregister the unwind info for an object.  */
 
-void
+void *
 __deregister_frame_info (void *begin)
 {
   struct object **p;
@@ -571,7 +585,7 @@ __deregister_frame_info (void *begin)
            free (ob->fde_array);
 
          __gthread_mutex_unlock (&object_mutex);
-         return;
+         return (void *) ob;
        }
       p = &((*p)->next);
     }
@@ -580,6 +594,12 @@ __deregister_frame_info (void *begin)
   abort ();
 }
 
+void
+__deregister_frame (void *begin)
+{
+  free (__deregister_frame_info (begin));
+}
+
 /* Called from __throw to find the registers to restore for a given
    PC_TARGET.  The caller should allocate a local variable of `struct
    frame_state' (declared in frame.h) and pass its address to STATE_IN.  */
index 7fa40d7af480ae5f5f9744e61f3051ed7c5e01b1..7493d92f80bd5e558675b3f4188e97be099b59eb 100644 (file)
@@ -34,6 +34,10 @@ struct object {
   struct object *next;
 };
 
+extern void __register_frame (void * );
+extern void __register_frame_table (void *);
+extern void __deregister_frame (void *);
+
 /* Called either from crtbegin.o or a static constructor to register the
    unwind info for an object or translation unit, respectively.  */
 
@@ -46,7 +50,7 @@ extern void __register_frame_info_table (void *, struct object *);
 
 /* Called from crtend.o to deregister the unwind info for an object.  */
 
-extern void __deregister_frame_info (void *);
+extern void *__deregister_frame_info (void *);
 
 /* Called from __throw to find the registers to restore for a given
    PC_TARGET.  The caller should allocate a local variable of `struct