aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Eggert <eggert@twinsun.com>1997-12-12 07:37:57 +0000
committerJeff Law <law@gcc.gnu.org>1997-12-12 00:37:57 -0700
commit5a5ab947b8056df07a18fdeea1df2a15400315ec (patch)
tree70c60c961090bf19fcd082685f003aeb7fdbcf9c /gcc
parent01eb7f9a1ccd7a2edb8902dee4546cc9f5e154ec (diff)
downloadgcc-5a5ab947b8056df07a18fdeea1df2a15400315ec.zip
gcc-5a5ab947b8056df07a18fdeea1df2a15400315ec.tar.gz
gcc-5a5ab947b8056df07a18fdeea1df2a15400315ec.tar.bz2
collect2.c (write_c_file_glob): Allocate initial frame object in static storage and pass its address.
* collect2.c (write_c_file_glob): Allocate initial frame object in static storage and pass its address. From-SVN: r17066
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/collect2.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8e98717..983e355 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+1997-12-11 Paul Eggert <eggert@twinsun.com>
+
+ * collect2.c (write_c_file_glob): Allocate initial frame object
+ in static storage and pass its address.
+
Thu Dec 11 23:33:48 1997 Jason Merrill <jason@yorick.cygnus.com>
* except.c (call_get_eh_context): Don't take a parm.
diff --git a/gcc/collect2.c b/gcc/collect2.c
index a9baf84..a79f7a8 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -1866,11 +1866,22 @@ write_c_file_glob (stream, name)
write_list (stream, "\t\t&", frame_tables.first);
fprintf (stream, "\t0\n};\n");
- fprintf (stream, "extern void __register_frame_table (void *);\n");
+ /* This must match what's in frame.h. */
+ fprintf (stream, "struct object {\n");
+ fprintf (stream, " void *pc_begin;\n");
+ fprintf (stream, " void *pc_end;\n");
+ fprintf (stream, " void *fde_begin;\n");
+ fprintf (stream, " void *fde_array;\n");
+ fprintf (stream, " __SIZE_TYPE__ count;\n");
+ fprintf (stream, " struct object *next;\n");
+ fprintf (stream, "};\n");
+
+ fprintf (stream, "extern void __register_frame_table (void *, struct object *);\n");
fprintf (stream, "extern void __deregister_frame (void *);\n");
fprintf (stream, "static void reg_frame () {\n");
- fprintf (stream, "\t__register_frame_table (frame_table);\n");
+ fprintf (stream, "\tstatic struct object ob;\n");
+ fprintf (stream, "\t__register_frame_table (frame_table, &ob);\n");
fprintf (stream, "\t}\n");
fprintf (stream, "static void dereg_frame () {\n");