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
This commit is contained in:
parent
520cd33161
commit
a3fd4e7530
|
@ -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.
|
||||
|
|
|
@ -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");
|
||||
|
|
24
gcc/frame.c
24
gcc/frame.c
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue