From: Christian Würdig Date: Mon, 4 Sep 2006 15:09:24 +0000 (+0000) Subject: fixed ctor support X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=8b493df96518e051f30a878f85de177858c19f0c;p=libfirm fixed ctor support --- diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index b7d3872cf..2470ba612 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -1396,6 +1396,7 @@ static ia32_isa_t ia32_isa_template = { &ia32_gp_regs[REG_ESP], /* stack pointer register */ &ia32_gp_regs[REG_EBP], /* base pointer register */ -1, /* stack direction */ + NULL, /* main environment */ }, NULL, /* 16bit register names */ NULL, /* 8bit register names */ @@ -1412,6 +1413,7 @@ static ia32_isa_t ia32_isa_template = { arch_pentium_4, /* optimize for architecture */ fp_sse2, /* use sse2 unit */ NULL, /* current code generator */ + NULL, /* output file */ #ifndef NDEBUG NULL, /* name obstack */ 0 /* name obst size */ @@ -1491,7 +1493,7 @@ static void ia32_done(void *self) { ia32_isa_t *isa = self; /* emit now all global declarations */ - ia32_gen_decls(isa->out, isa->cg); + ia32_gen_decls(isa->out, isa->arch_isa.main_env); pmap_destroy(isa->regs_16bit); pmap_destroy(isa->regs_8bit); diff --git a/ir/be/ia32/ia32_emitter.c b/ir/be/ia32/ia32_emitter.c index c9bed250b..d3ab57178 100644 --- a/ir/be/ia32/ia32_emitter.c +++ b/ir/be/ia32/ia32_emitter.c @@ -80,6 +80,7 @@ void ia32_switch_section(FILE *F, section_t sec) { case SECTION_RODATA: case SECTION_COMMON: case SECTION_TLS: + case SECTION_CTOR: fprintf(F, "\t%s\n", text[asm_flavour][sec]); break; diff --git a/ir/be/ia32/ia32_gen_decls.c b/ir/be/ia32/ia32_gen_decls.c index 8decc1ffb..30cb53bda 100644 --- a/ir/be/ia32/ia32_gen_decls.c +++ b/ir/be/ia32/ia32_gen_decls.c @@ -16,7 +16,7 @@ #include "entity.h" #include "irprog.h" -#include "../bearch.h" +#include "../be.h" #include "ia32_emitter.h" #include "ia32_gen_decls.h" @@ -24,11 +24,11 @@ typedef struct obstack obstack_t; typedef struct _ia32_decl_env { - obstack_t *rodata_obst; - obstack_t *data_obst; - obstack_t *comm_obst; - obstack_t *ctor_obst; - ia32_code_gen_t *cg; + obstack_t *rodata_obst; + obstack_t *data_obst; + obstack_t *comm_obst; + obstack_t *ctor_obst; + const be_main_env_t *main_env; } ia32_decl_env_t; /************************************************************************/ @@ -599,13 +599,13 @@ static void ia32_dump_globals(ir_type *gt, ia32_decl_env_t *env) int i, n = get_compound_n_members(gt); for (i = 0; i < n; i++) - dump_global(env->cg->arch_env, env->rodata_obst, env->data_obst, env->comm_obst, env->ctor_obst, + dump_global(env->main_env->arch_env, env->rodata_obst, env->data_obst, env->comm_obst, env->ctor_obst, get_compound_member(gt, i)); } /************************************************************************/ -void ia32_gen_decls(FILE *out, ia32_code_gen_t *cg) { +void ia32_gen_decls(FILE *out, const be_main_env_t *main_env) { ia32_decl_env_t env; obstack_t rodata, data, comm, ctor; int size; @@ -616,13 +616,14 @@ void ia32_gen_decls(FILE *out, ia32_code_gen_t *cg) { obstack_init(&data); obstack_init(&comm); - if (cg->birg->main_env->options->opt_profile) + if (main_env->options->opt_profile) obstack_init(&ctor); env.rodata_obst = &rodata; env.data_obst = &data; env.comm_obst = &comm; - env.ctor_obst = cg->birg->main_env->options->opt_profile ? &ctor : NULL; + env.ctor_obst = main_env->options->opt_profile ? &ctor : NULL; + env.main_env = main_env; ia32_dump_globals(get_glob_type(), &env); @@ -647,7 +648,7 @@ void ia32_gen_decls(FILE *out, ia32_code_gen_t *cg) { fwrite(cp, 1, size, out); } - if (cg->birg->main_env->options->opt_profile) { + if (main_env->options->opt_profile) { size = obstack_object_size(&ctor); cp = obstack_finish(&ctor); if (size > 0) { diff --git a/ir/be/ia32/ia32_gen_decls.h b/ir/be/ia32/ia32_gen_decls.h index 2946492a3..88a596002 100644 --- a/ir/be/ia32/ia32_gen_decls.h +++ b/ir/be/ia32/ia32_gen_decls.h @@ -7,11 +7,11 @@ #ifndef _IA32_GEN_DECLS_H_ #define _IA32_GEN_DECLS_H_ -#include "bearch_ia32_t.h" +#include "../be.h" /** * Generate all entities. */ -void ia32_gen_decls(FILE *out, ia32_code_gen_t *cg); +void ia32_gen_decls(FILE *out, const be_main_env_t *main_env); #endif /* _IA32_GEN_DECLS_H_ */