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);
|
||||
|
5
gas/testsuite/gas/elf/common5a.d
Normal file
5
gas/testsuite/gas/elf/common5a.d
Normal file
@ -0,0 +1,5 @@
|
||||
#source: common5a.s
|
||||
#as:
|
||||
#error-output: common5a.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
2
gas/testsuite/gas/elf/common5a.l
Normal file
2
gas/testsuite/gas/elf/common5a.l
Normal file
@ -0,0 +1,2 @@
|
||||
[^:]*: Assembler messages:
|
||||
[^:]*: Error: `foo1' can't be equated to common symbol `foo'
|
3
gas/testsuite/gas/elf/common5a.s
Normal file
3
gas/testsuite/gas/elf/common5a.s
Normal file
@ -0,0 +1,3 @@
|
||||
.set foo1,foo
|
||||
.globl foo1
|
||||
.comm foo,8,8
|
5
gas/testsuite/gas/elf/common5b.d
Normal file
5
gas/testsuite/gas/elf/common5b.d
Normal file
@ -0,0 +1,5 @@
|
||||
#source: common5b.s
|
||||
#as:
|
||||
#error-output: common5b.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
2
gas/testsuite/gas/elf/common5b.l
Normal file
2
gas/testsuite/gas/elf/common5b.l
Normal file
@ -0,0 +1,2 @@
|
||||
[^:]*: Assembler messages:
|
||||
[^:]*:2: Error: `foo1' can't be equated to common symbol `foo'
|
3
gas/testsuite/gas/elf/common5b.s
Normal file
3
gas/testsuite/gas/elf/common5b.s
Normal file
@ -0,0 +1,3 @@
|
||||
.comm foo,8,8
|
||||
.set foo1,foo
|
||||
.globl foo1
|
5
gas/testsuite/gas/elf/common5c.d
Normal file
5
gas/testsuite/gas/elf/common5c.d
Normal file
@ -0,0 +1,5 @@
|
||||
#source: common5c.s
|
||||
#as:
|
||||
#error-output: common5a.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
2
gas/testsuite/gas/elf/common5c.s
Normal file
2
gas/testsuite/gas/elf/common5c.s
Normal file
@ -0,0 +1,2 @@
|
||||
.set foo1,foo
|
||||
.comm foo,8,8
|
5
gas/testsuite/gas/elf/common5d.d
Normal file
5
gas/testsuite/gas/elf/common5d.d
Normal file
@ -0,0 +1,5 @@
|
||||
#source: common5d.s
|
||||
#as:
|
||||
#error-output: common5b.l
|
||||
#not-target: alpha-*-*
|
||||
# The Alpha target uses its own .set pseudo-insn.
|
2
gas/testsuite/gas/elf/common5d.s
Normal file
2
gas/testsuite/gas/elf/common5d.s
Normal file
@ -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
Block a user