diff options
author | Jeff Law <law@gcc.gnu.org> | 1997-12-15 16:28:44 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-12-15 16:28:44 -0700 |
commit | a3fd4e7530be6ac62206fec602e6b1d760070671 (patch) | |
tree | 6b08e545a3000a76739861bf072edc0eff7bd19d /gcc | |
parent | 520cd331616a9abb78a927d5842647c414c58581 (diff) | |
download | gcc-a3fd4e7530be6ac62206fec602e6b1d760070671.zip gcc-a3fd4e7530be6ac62206fec602e6b1d760070671.tar.gz gcc-a3fd4e7530be6ac62206fec602e6b1d760070671.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/collect2.c | 4 | ||||
-rw-r--r-- | gcc/frame.c | 24 | ||||
-rw-r--r-- | gcc/frame.h | 6 |
4 files changed, 40 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff5725e..5aff3d1 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 <rth@cygnus.com> * expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG. diff --git a/gcc/collect2.c b/gcc/collect2.c index 88547cb..aa23a0f 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 ca107b0..5cc4184 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 7fa40d7..7493d92 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 |