Commit a3fd4e75 by Jeff Law

frame.h (__register_frame, [...]): New.

        * 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
parent 520cd331
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. * 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> Mon Dec 15 18:40:08 1997 Richard Henderson <rth@cygnus.com>
* expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG. * expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG.
......
...@@ -1791,7 +1791,7 @@ write_c_file_stat (stream, name) ...@@ -1791,7 +1791,7 @@ write_c_file_stat (stream, name)
fprintf (stream, "};\n"); fprintf (stream, "};\n");
fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\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, "static void reg_frame () {\n");
fprintf (stream, "\tstatic struct object ob;\n"); fprintf (stream, "\tstatic struct object ob;\n");
...@@ -1877,7 +1877,7 @@ write_c_file_glob (stream, name) ...@@ -1877,7 +1877,7 @@ write_c_file_glob (stream, name)
fprintf (stream, "};\n"); fprintf (stream, "};\n");
fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\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, "static void reg_frame () {\n");
fprintf (stream, "\tstatic struct object ob;\n"); fprintf (stream, "\tstatic struct object ob;\n");
......
...@@ -528,6 +528,13 @@ __register_frame_info (void *begin, struct object *ob) ...@@ -528,6 +528,13 @@ __register_frame_info (void *begin, struct object *ob)
__gthread_mutex_unlock (&object_mutex); __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 /* Similar, but BEGIN is actually a pointer to a table of unwind entries
for different translation units. Called from the file generated by for different translation units. Called from the file generated by
collect2. */ collect2. */
...@@ -549,9 +556,16 @@ __register_frame_info_table (void *begin, struct object *ob) ...@@ -549,9 +556,16 @@ __register_frame_info_table (void *begin, struct object *ob)
__gthread_mutex_unlock (&object_mutex); __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. */ /* Called from crtend.o to deregister the unwind info for an object. */
void void *
__deregister_frame_info (void *begin) __deregister_frame_info (void *begin)
{ {
struct object **p; struct object **p;
...@@ -571,7 +585,7 @@ __deregister_frame_info (void *begin) ...@@ -571,7 +585,7 @@ __deregister_frame_info (void *begin)
free (ob->fde_array); free (ob->fde_array);
__gthread_mutex_unlock (&object_mutex); __gthread_mutex_unlock (&object_mutex);
return; return (void *) ob;
} }
p = &((*p)->next); p = &((*p)->next);
} }
...@@ -580,6 +594,12 @@ __deregister_frame_info (void *begin) ...@@ -580,6 +594,12 @@ __deregister_frame_info (void *begin)
abort (); abort ();
} }
void
__deregister_frame (void *begin)
{
free (__deregister_frame_info (begin));
}
/* Called from __throw to find the registers to restore for a given /* Called from __throw to find the registers to restore for a given
PC_TARGET. The caller should allocate a local variable of `struct PC_TARGET. The caller should allocate a local variable of `struct
frame_state' (declared in frame.h) and pass its address to STATE_IN. */ frame_state' (declared in frame.h) and pass its address to STATE_IN. */
......
...@@ -34,6 +34,10 @@ struct object { ...@@ -34,6 +34,10 @@ struct object {
struct object *next; 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 /* Called either from crtbegin.o or a static constructor to register the
unwind info for an object or translation unit, respectively. */ unwind info for an object or translation unit, respectively. */
...@@ -46,7 +50,7 @@ extern void __register_frame_info_table (void *, struct object *); ...@@ -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. */ /* 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 /* Called from __throw to find the registers to restore for a given
PC_TARGET. The caller should allocate a local variable of `struct PC_TARGET. The caller should allocate a local variable of `struct
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment