From: Jeff Law Date: Mon, 15 Dec 1997 23:28:44 +0000 (-0700) Subject: frame.h (__register_frame, [...]): New. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a3fd4e7530be6ac62206fec602e6b1d760070671;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff5725e6af4..5aff3d1af7e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 * expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG. diff --git a/gcc/collect2.c b/gcc/collect2.c index 88547cb4f61..aa23a0f7cdd 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -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"); diff --git a/gcc/frame.c b/gcc/frame.c index ca107b081d3..5cc4184ce2a 100644 --- a/gcc/frame.c +++ b/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. */ diff --git a/gcc/frame.h b/gcc/frame.h index 7fa40d7af48..7493d92f80b 100644 --- a/gcc/frame.h +++ b/gcc/frame.h @@ -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