From 5a5ab947b8056df07a18fdeea1df2a15400315ec Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 12 Dec 1997 07:37:57 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/collect2.c | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e98717d920..983e355f911 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +1997-12-11 Paul Eggert + + * 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 * except.c (call_get_eh_context): Don't take a parm. diff --git a/gcc/collect2.c b/gcc/collect2.c index a9baf8475d0..a79f7a849f9 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");