diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-12-12 07:37:57 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-12-12 07:37:57 +0000 |
commit | 285cf8b87b7228c987a6f080f4d2284019536eab (patch) | |
tree | 70c60c961090bf19fcd082685f003aeb7fdbcf9c /gcc/collect2.c | |
parent | 1a74f95934c62236b44279ed846824637faa4523 (diff) | |
download | gcc-285cf8b87b7228c987a6f080f4d2284019536eab.tar.gz |
* collect2.c (write_c_file_glob): Allocate initial frame object
in static storage and pass its address.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@17066 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/collect2.c')
-rw-r--r-- | gcc/collect2.c | 15 |
1 files changed, 13 insertions, 2 deletions
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"); |