fixed ctor support
authorChristian Würdig <chriswue@ipd.info.uni-karlsruhe.de>
Mon, 4 Sep 2006 15:09:24 +0000 (15:09 +0000)
committerChristian Würdig <chriswue@ipd.info.uni-karlsruhe.de>
Mon, 4 Sep 2006 15:09:24 +0000 (15:09 +0000)
ir/be/ia32/bearch_ia32.c
ir/be/ia32/ia32_emitter.c
ir/be/ia32/ia32_gen_decls.c
ir/be/ia32/ia32_gen_decls.h

index b7d3872..2470ba6 100644 (file)
@@ -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);
index c9bed25..d3ab571 100644 (file)
@@ -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;
 
index 8decc1f..30cb53b 100644 (file)
@@ -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"
 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) {
index 2946492..88a5960 100644 (file)
@@ -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_ */