return res;
}
-static void ia32_dump_comm(struct obstack *obst, const char *name, int size, int align) {
+static void ia32_dump_comm(struct obstack *obst, const char *name, visibility vis, int size, int align) {
switch (asm_flavour) {
case ASM_LINUX_GAS:
+ if (vis == visibility_local)
+ obstack_printf(obst, "\t.local\t%s\n", name);
obstack_printf(obst, "\t.comm\t%s,%d,%d\n", name, size, align);
break;
case ASM_MINGW_GAS:
- obstack_printf(obst, "\t.comm\t%s,%d\n", name, size);
+ if (vis == visibility_local)
+ obstack_printf(obst, "\t.lcomm\t%s,%d\n", name, size);
+ else
+ obstack_printf(obst, "\t.comm\t%s,%d\n", name, size);
break;
}
}
tv = get_Const_tarval(init);
/* beware of old stuff */
- assert(! mode_is_reference(mode));
+ //assert(! mode_is_reference(mode));
/* it's a arithmetic value */
dump_arith_tarval(obst, tv, bytes);
obstack_printf(obst, "%s", get_entity_ld_name(get_SymConst_entity(init)));
break;
- case symconst_size:
+ case symconst_type_size:
obstack_printf(obst, "%d", get_type_size_bytes(get_SymConst_type(init)));
break;
+ case symconst_type_align:
+ obstack_printf(obst, "%d", get_type_alignment_bytes(get_SymConst_type(init)));
+ break;
+
default:
assert(0 && "dump_atomic_init(): don't know how to init from this SymConst");
}
case '\n': obstack_printf(obst, "\\n"); break;
case '\r': obstack_printf(obst, "\\r"); break;
case '\t': obstack_printf(obst, "\\t"); break;
+ case '\\': obstack_printf(obst, "\\\\"); break;
default :
if (isprint(c))
obstack_printf(obst, "%c", c);
obstack_printf(obst, "\n");
}
else if (visibility != visibility_external_allocated) {
- if (visibility == visibility_local) {
- obstack_printf(comm_obstack, "\t.local\t%s\n", ld_name);
- }
-
/* calculate the alignment */
align = get_type_alignment_bytes(ty);
h = highest_bit(align);
if (align < 1)
align = 1;
- ia32_dump_comm(comm_obstack, ld_name, (get_type_size_bits(ty) + 7) >> 3, align);
+ ia32_dump_comm(comm_obstack, ld_name, visibility,
+ (get_type_size_bits(ty) + 7) >> 3, align);
}
}
}