aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1997-12-15 16:28:44 -0700
committerJeff Law <law@gcc.gnu.org>1997-12-15 16:28:44 -0700
commita3fd4e7530be6ac62206fec602e6b1d760070671 (patch)
tree6b08e545a3000a76739861bf072edc0eff7bd19d /gcc
parent520cd331616a9abb78a927d5842647c414c58581 (diff)
downloadgcc-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/ChangeLog12
-rw-r--r--gcc/collect2.c4
-rw-r--r--gcc/frame.c24
-rw-r--r--gcc/frame.h6
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