#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;
/************************************************************************/
else
obstack_printf(obst, "\t.comm\t%s,%d\n", name, size);
break;
+ default:
+ break;
}
}
obstack_printf(obst, "\t.type\t%s,@object\n", name);
obstack_printf(obst, "\t.size\t%s,%d\n", name, size);
break;
+ default:
+ break;
}
}
* Dumps the initialization of global variables that are not
* "uninitialized".
*/
-static void dump_global(const arch_env_t *arch_env,
+static void dump_global(const be_main_env_t *main_env,
obstack_t *rdata_obstack, obstack_t *data_obstack,
obstack_t *comm_obstack, obstack_t *ctor_obstack,
entity *ent)
const char *ld_name = get_entity_ld_name(ent);
obstack_t *obst = data_obstack;
int align, h;
+ const arch_env_t *arch_env = main_env->arch_env;
/*
* FIXME: did NOT work for partly constant values
/* check, whether it is initialized, if yes create data */
if (variability != variability_uninitialized) {
+ be_dbg_global(main_env->db_handle, obst, ent);
+
if (visibility == visibility_external_visible) {
obstack_printf(obst, ".globl\t%s\n", ld_name);
}
obstack_printf(obst, "\n");
}
else if (visibility != visibility_external_allocated) {
+ be_dbg_global(main_env->db_handle, comm_obstack, ent);
+
/* uninitialized and NOT external */
if (get_entity_owner(ent) != get_tls_type()) {
/* calculate the alignment */
} else {
/* TLS */
if (visibility == visibility_external_visible) {
- obstack_printf(obst, ".globl\t%s\n", ld_name);
+ obstack_printf(comm_obstack, ".globl\t%s\n", ld_name);
}
dump_object_size(comm_obstack, ld_name, get_type_size_bytes(ty));
align = get_type_alignment_bytes(ty);
- ia32_dump_align(obst, align);
+ ia32_dump_align(comm_obstack, align);
obstack_printf(comm_obstack, "%s:\n\t.zero %d\n", ld_name, get_type_size_bytes(ty));
}
}
} /* ! is method type */
- else if (ctor_obstack && arch_ent_is_constructor(arch_env, ent)) {
+ else if (ctor_obstack && get_method_img_section(ent) == section_constructors) {
ia32_dump_align(ctor_obstack, get_type_alignment_bytes(ty));
dump_size_type(ctor_obstack, get_type_alignment_bytes(ty));
obstack_printf(ctor_obstack, "%s\n", ld_name);
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, 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;
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);
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) {