Also disallow global alias of common symbol
We can't create alias of common symbol. Local alias of common symbol has been disallowed. But global alias of common symbol is disallowed when the common symbol is seen first and silently dropped otherwise. This patch disallows alias of common symbol in all cases. gas/ PR gas/21667 * read.c (pseudo_set): Update error message for alias of common symbol. * write.c (write_object_file): Disallow both local and global aliases of common symbol. * testsuite/gas/elf/common5a.d: New file. * testsuite/gas/elf/common5a.l: Likewise. * testsuite/gas/elf/common5a.s: Likewise. * testsuite/gas/elf/common5b.d: Likewise. * testsuite/gas/elf/common5b.l: Likewise. * testsuite/gas/elf/common5b.s: Likewise. * testsuite/gas/elf/common5c.d: Likewise. * testsuite/gas/elf/common5c.s: Likewise. * testsuite/gas/elf/common5d.d: Likewise. * testsuite/gas/elf/common5d.s: Likewise. * testsuite/gas/elf/elf.exp: Run common5a, common5b, common5c and common5d.
This commit is contained in:
parent
de7985c3cc
commit
76db0a2e17
|
@ -1,3 +1,23 @@
|
|||
2017-08-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR gas/21667
|
||||
* read.c (pseudo_set): Update error message for alias of common
|
||||
symbol.
|
||||
* write.c (write_object_file): Disallow both local and global
|
||||
aliases of common symbol.
|
||||
* testsuite/gas/elf/common5a.d: New file.
|
||||
* testsuite/gas/elf/common5a.l: Likewise.
|
||||
* testsuite/gas/elf/common5a.s: Likewise.
|
||||
* testsuite/gas/elf/common5b.d: Likewise.
|
||||
* testsuite/gas/elf/common5b.l: Likewise.
|
||||
* testsuite/gas/elf/common5b.s: Likewise.
|
||||
* testsuite/gas/elf/common5c.d: Likewise.
|
||||
* testsuite/gas/elf/common5c.s: Likewise.
|
||||
* testsuite/gas/elf/common5d.d: Likewise.
|
||||
* testsuite/gas/elf/common5d.s: Likewise.
|
||||
* testsuite/gas/elf/elf.exp: Run common5a, common5b, common5c
|
||||
and common5d.
|
||||
|
||||
2017-08-10 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR gas/21939
|
||||
|
|
|
@ -3870,7 +3870,7 @@ pseudo_set (symbolS *symbolP)
|
|||
symbolS *s = exp.X_add_symbol;
|
||||
|
||||
if (S_IS_COMMON (s))
|
||||
as_bad (_("`%s' can't be equated to common symbol '%s'"),
|
||||
as_bad (_("`%s' can't be equated to common symbol `%s'"),
|
||||
S_GET_NAME (symbolP), S_GET_NAME (s));
|
||||
|
||||
S_SET_SEGMENT (symbolP, seg);
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#source: common5a.s
|
||||
#as:
|
||||
#error-output: common5a.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
|
@ -0,0 +1,2 @@
|
|||
[^:]*: Assembler messages:
|
||||
[^:]*: Error: `foo1' can't be equated to common symbol `foo'
|
|
@ -0,0 +1,3 @@
|
|||
.set foo1,foo
|
||||
.globl foo1
|
||||
.comm foo,8,8
|
|
@ -0,0 +1,5 @@
|
|||
#source: common5b.s
|
||||
#as:
|
||||
#error-output: common5b.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
|
@ -0,0 +1,2 @@
|
|||
[^:]*: Assembler messages:
|
||||
[^:]*:2: Error: `foo1' can't be equated to common symbol `foo'
|
|
@ -0,0 +1,3 @@
|
|||
.comm foo,8,8
|
||||
.set foo1,foo
|
||||
.globl foo1
|
|
@ -0,0 +1,5 @@
|
|||
#source: common5c.s
|
||||
#as:
|
||||
#error-output: common5a.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
|
@ -0,0 +1,2 @@
|
|||
.set foo1,foo
|
||||
.comm foo,8,8
|
|
@ -0,0 +1,5 @@
|
|||
#source: common5d.s
|
||||
#as:
|
||||
#error-output: common5b.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
|
@ -0,0 +1,2 @@
|
|||
.comm foo,8,8
|
||||
.set foo1,foo
|
|
@ -252,6 +252,10 @@ if { [is_elf_format] } then {
|
|||
run_dump_test "common3b"
|
||||
run_dump_test "common4a"
|
||||
run_dump_test "common4b"
|
||||
run_dump_test "common5a"
|
||||
run_dump_test "common5b"
|
||||
run_dump_test "common5c"
|
||||
run_dump_test "common5d"
|
||||
}
|
||||
|
||||
run_dump_test "strtab"
|
||||
|
|
|
@ -2107,12 +2107,11 @@ write_object_file (void)
|
|||
|
||||
if (S_IS_COMMON (symp)
|
||||
&& !TC_FAKE_LABEL (sname)
|
||||
&& !S_IS_WEAKREFR (symp)
|
||||
&& (!S_IS_EXTERNAL (symp) || S_IS_LOCAL (symp)))
|
||||
&& !S_IS_WEAKREFR (symp))
|
||||
{
|
||||
expressionS *e = symbol_get_value_expression (symp);
|
||||
|
||||
as_bad (_("Local symbol `%s' can't be equated to common symbol `%s'"),
|
||||
as_bad (_("`%s' can't be equated to common symbol `%s'"),
|
||||
sname, S_GET_NAME (e->X_add_symbol));
|
||||
}
|
||||
if (S_GET_SEGMENT (symp) == reg_section)
|
||||
|
|
Loading…
Reference in New Issue