X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_gen_decls.c;h=46f0e31f7706fdb15b97d11af87f3bcb0566397a;hb=a1a465eb2b3f54027b29f829423fffd0396937f4;hp=30cb53bdadb60c29e9b154e4945c66ac697bbfaa;hpb=8b493df96518e051f30a878f85de177858c19f0c;p=libfirm diff --git a/ir/be/ia32/ia32_gen_decls.c b/ir/be/ia32/ia32_gen_decls.c index 30cb53bda..46f0e31f7 100644 --- a/ir/be/ia32/ia32_gen_decls.c +++ b/ir/be/ia32/ia32_gen_decls.c @@ -66,7 +66,7 @@ static unsigned highest_bit(unsigned v) return res; } -static void ia32_dump_comm(obstack_t *obst, const char *name, visibility vis, int size, int align) { +static void ia32_dump_comm(obstack_t *obst, const char *name, ir_visibility vis, int size, int align) { switch (asm_flavour) { case ASM_LINUX_GAS: if (vis == visibility_local) @@ -79,6 +79,8 @@ static void ia32_dump_comm(obstack_t *obst, const char *name, visibility vis, in else obstack_printf(obst, "\t.comm\t%s,%d\n", name, size); break; + default: + break; } } @@ -187,6 +189,10 @@ static void do_dump_atomic_init(obstack_t *obst, ir_node *init) obstack_printf(obst, "%s", get_entity_ld_name(get_SymConst_entity(init))); break; + case symconst_ofs_ent: + obstack_printf(obst, "%d", get_entity_offset_bytes(get_SymConst_entity(init))); + break; + case symconst_type_size: obstack_printf(obst, "%d", get_type_size_bytes(get_SymConst_type(init))); break; @@ -201,7 +207,7 @@ static void do_dump_atomic_init(obstack_t *obst, ir_node *init) break; default: - assert(0 && "dump_atomic_init(): don't know how to init from this SymConst"); + assert(!"dump_atomic_init(): don't know how to init from this SymConst"); } return; @@ -380,6 +386,8 @@ static void dump_object_size(obstack_t *obst, const char *name, int size) { obstack_printf(obst, "\t.type\t%s,@object\n", name); obstack_printf(obst, "\t.size\t%s,%d\n", name, size); break; + default: + break; } } @@ -387,7 +395,7 @@ static void dump_object_size(obstack_t *obst, const char *name, int size) { * 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) @@ -401,8 +409,8 @@ static void dump_global(const arch_env_t *arch_env, * FIXME: did NOT work for partly constant values */ if (! is_Method_type(ty)) { - ent_variability variability = get_entity_variability(ent); - visibility visibility = get_entity_visibility(ent); + ir_variability variability = get_entity_variability(ent); + ir_visibility visibility = get_entity_visibility(ent); if (variability == variability_constant) { /* a constant entity, put it on the rdata */ @@ -411,6 +419,8 @@ static void dump_global(const arch_env_t *arch_env, /* check, whether it is initialized, if yes create data */ if (variability != variability_uninitialized) { + be_dbg_variable(main_env->db_handle, obst, ent); + if (visibility == visibility_external_visible) { obstack_printf(obst, ".globl\t%s\n", ld_name); } @@ -557,6 +567,8 @@ static void dump_global(const arch_env_t *arch_env, obstack_printf(obst, "\n"); } else if (visibility != visibility_external_allocated) { + be_dbg_variable(main_env->db_handle, comm_obstack, ent); + /* uninitialized and NOT external */ if (get_entity_owner(ent) != get_tls_type()) { /* calculate the alignment */ @@ -575,16 +587,16 @@ static void dump_global(const arch_env_t *arch_env, } 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); @@ -599,7 +611,7 @@ 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->main_env->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)); }