use .word instead of .value, older gas don't support it
[libfirm] / ir / be / begnuas.c
index e8f3760..41cb56d 100644 (file)
@@ -259,6 +259,8 @@ static void do_dump_atomic_init(be_gas_decl_env_t *env, obstack_t *obst,
        ir_label_t label;
        ir_entity *ent;
 
+       init = skip_Id(init);
+
        switch (get_irn_opcode(init)) {
 
        case iro_Cast:
@@ -362,7 +364,7 @@ static void dump_size_type(obstack_t *obst, size_t size) {
                break;
 
        case 2:
-               obstack_printf(obst, "\t.value\t");
+               obstack_printf(obst, "\t.word\t");
                break;
 
        case 4:
@@ -418,6 +420,8 @@ static int initializer_is_string_const(const ir_initializer_t *initializer)
                return 0;
 
        len = initializer->compound.n_initializers;
+       if (len < 1)
+               return 0;
        for(i = 0; i < len; ++i) {
                int               c;
                tarval           *tv;
@@ -436,9 +440,13 @@ static int initializer_is_string_const(const ir_initializer_t *initializer)
                        return 0;
 
                c = get_tarval_long(tv);
-               if((i < len - 1 && !(isgraph(c) || isspace(c)))
-                               || (i >= len - 1 && c != 0))
-                       return 0;
+               if (i < len - 1) {
+                       if (!isgraph(c) && !isspace(c))
+                               return 0;
+               } else {
+                       if (c != 0)
+                               return 0;
+               }
        }
 
        return 1;
@@ -807,6 +815,9 @@ static void dump_initializer(be_gas_decl_env_t *env, obstack_t *obst,
        type = get_entity_type(entity);
        size = get_initializer_size(initializer, type);
 
+       if (size == 0)
+               return;
+
        /*
         * In the worst case, every initializer allocates one byte.
         * Moreover, initializer might be big, do not allocate on stack.