+2008-03-03 Denys Vlasenko <vda.linux@googlemail.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/5543
+ * read.c (pseudo_set): Don't allow global register symbol.
+
+ * symbols.c (S_SET_EXTERNAL): Don't allow register symbol
+ global.
+
+2008-03-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/5543
+ * write.c (write_object_file): Don't allow symbols which were
+ equated to register. Stop if there is an error.
+
2008-03-01 Alan Modra <amodra@bigpond.net.au>
* config/tc-ppc.h (struct _ppc_fix_extra): New.
break;
case O_register:
+ if (S_IS_EXTERNAL (symbolP))
+ {
+ as_bad ("can't equate global symbol `%s' with register name",
+ S_GET_NAME (symbolP));
+ return;
+ }
S_SET_SEGMENT (symbolP, reg_section);
S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
set_zero_frag (symbolP);
_("section symbols are already global"));
return;
}
+ if (S_GET_SEGMENT (s) == reg_section)
+ {
+ as_bad ("can't make register symbol `%s' global",
+ S_GET_NAME (s));
+ return;
+ }
s->bsym->flags |= BSF_GLOBAL;
s->bsym->flags &= ~(BSF_LOCAL | BSF_WEAK);
+2008-03-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/5543
+ * gas/i386/i386.exp: Run inval-equ-1 and inval-equ-2.
+
+ * gas/i386/inval-equ-1.l: New.
+ * gas/i386/inval-equ-1.s: Likewise.
+ * gas/i386/inval-equ-2.l: Likewise.
+ * gas/i386/inval-equ-2.s: Likewise.
2008-03-01 H.J. Lu <hongjiu.lu@intel.com>
run_dump_test "mixed-mode-reloc32"
run_dump_test "att-regs"
run_dump_test "intel-regs"
+ run_list_test "inval-equ-1" "-al"
+ run_list_test "inval-equ-2" "-al"
}
# This is a PE specific test.
--- /dev/null
+.*: Assembler messages:
+.*:3: Error: .*
+.*:5: Error: .*
+GAS LISTING .*
+
+
+[ ]*1[ ]+\.text
+[ ]*2[ ]+\.globl bar1
+[ ]*3[ ]+\.equ bar1,%eax
+[ ]*4[ ]+\.equ bar2,%eax
+[ ]*5[ ]+\.globl bar2
+[ ]*6[ ]+\?\?\?\? A1000000 mov bar1,%eax
+[ ]*6[ ]+00
+[ ]*7[ ]+\?\?\?\? 89C0 mov bar2,%eax
--- /dev/null
+ .text
+ .globl bar1
+ .equ bar1,%eax
+ .equ bar2,%eax
+ .globl bar2
+ mov bar1,%eax
+ mov bar2,%eax
--- /dev/null
+.*: Assembler messages:
+.*:8: Error: .*
+.*:8: Error: .*
+.*:8: Error: .*
+GAS LISTING .*
+
+
+[ ]*1[ ]+\.globl bar1
+[ ]*2[ ]+\.set bar1,\(%eax\+1\)
+[ ]*3[ ]+\?\?\?\? A12A0000 mov bar1,%eax
+[ ]*3[ ]+00
+[ ]*4[ ]+\.set bar2,\(%eax\+1\)
+[ ]*5[ ]+\?\?\?\? A12A0000 mov bar2,%eax
+[ ]*5[ ]+00
+[ ]*6[ ]+\.globl bar2
+[ ]*7[ ]+\.set bar3,\(%eax\+1\)
+[ ]*8[ ]+\?\?\?\? A12A0000 mov bar3,%eax
+\*\*\*\* Error:can't make global register symbol `bar3'
+[ ]*8[ ]+00
--- /dev/null
+ .globl bar1
+ .set bar1,(%eax+1)
+ mov bar1,%eax
+ .set bar2,(%eax+1)
+ mov bar2,%eax
+ .globl bar2
+ .set bar3,(%eax+1)
+ mov bar3,%eax
as_bad (_("Local symbol `%s' can't be equated to common symbol `%s'"),
name, S_GET_NAME (e->X_add_symbol));
}
+ if (S_GET_SEGMENT (symp) == reg_section)
+ {
+ /* Report error only if we know the symbol name. */
+ if (S_GET_NAME (symp) != reg_section->name)
+ as_bad (_("can't make global register symbol `%s'"),
+ name);
+ }
symbol_remove (symp, &symbol_rootP, &symbol_lastP);
continue;
}
obj_adjust_symtab ();
#endif
+ /* Stop if there is an error. */
+ if (had_errors ())
+ return;
+
/* Now that all the sizes are known, and contents correct, we can
start writing to the file. */
set_symtab ();