diff options
-rw-r--r-- | gas/ChangeLog | 20 | ||||
-rw-r--r-- | gas/read.c | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5a.d | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5a.l | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5a.s | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5b.d | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5b.l | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5b.s | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5c.d | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5c.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5d.d | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/common5d.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 4 | ||||
-rw-r--r-- | gas/write.c | 5 |
14 files changed, 61 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index adeb38b..dd61142 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -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); diff --git a/gas/testsuite/gas/elf/common5a.d b/gas/testsuite/gas/elf/common5a.d new file mode 100644 index 0000000..9c790e6 --- /dev/null +++ b/gas/testsuite/gas/elf/common5a.d @@ -0,0 +1,5 @@ +#source: common5a.s +#as: +#error-output: common5a.l +#not-target: alpha-*-* +# The Alpha target uses its own .set pseudo-insn. diff --git a/gas/testsuite/gas/elf/common5a.l b/gas/testsuite/gas/elf/common5a.l new file mode 100644 index 0000000..7574dc6 --- /dev/null +++ b/gas/testsuite/gas/elf/common5a.l @@ -0,0 +1,2 @@ +[^:]*: Assembler messages: +[^:]*: Error: `foo1' can't be equated to common symbol `foo' diff --git a/gas/testsuite/gas/elf/common5a.s b/gas/testsuite/gas/elf/common5a.s new file mode 100644 index 0000000..d4b0acf --- /dev/null +++ b/gas/testsuite/gas/elf/common5a.s @@ -0,0 +1,3 @@ + .set foo1,foo + .globl foo1 + .comm foo,8,8 diff --git a/gas/testsuite/gas/elf/common5b.d b/gas/testsuite/gas/elf/common5b.d new file mode 100644 index 0000000..b1dabdc --- /dev/null +++ b/gas/testsuite/gas/elf/common5b.d @@ -0,0 +1,5 @@ +#source: common5b.s +#as: +#error-output: common5b.l +#not-target: alpha-*-* +# The Alpha target uses its own .set pseudo-insn. diff --git a/gas/testsuite/gas/elf/common5b.l b/gas/testsuite/gas/elf/common5b.l new file mode 100644 index 0000000..171bed0 --- /dev/null +++ b/gas/testsuite/gas/elf/common5b.l @@ -0,0 +1,2 @@ +[^:]*: Assembler messages: +[^:]*:2: Error: `foo1' can't be equated to common symbol `foo' diff --git a/gas/testsuite/gas/elf/common5b.s b/gas/testsuite/gas/elf/common5b.s new file mode 100644 index 0000000..df79fcb --- /dev/null +++ b/gas/testsuite/gas/elf/common5b.s @@ -0,0 +1,3 @@ + .comm foo,8,8 + .set foo1,foo + .globl foo1 diff --git a/gas/testsuite/gas/elf/common5c.d b/gas/testsuite/gas/elf/common5c.d new file mode 100644 index 0000000..1e106ad --- /dev/null +++ b/gas/testsuite/gas/elf/common5c.d @@ -0,0 +1,5 @@ +#source: common5c.s +#as: +#error-output: common5a.l +#not-target: alpha-*-* +# The Alpha target uses its own .set pseudo-insn. diff --git a/gas/testsuite/gas/elf/common5c.s b/gas/testsuite/gas/elf/common5c.s new file mode 100644 index 0000000..fa9db8d --- /dev/null +++ b/gas/testsuite/gas/elf/common5c.s @@ -0,0 +1,2 @@ + .set foo1,foo + .comm foo,8,8 diff --git a/gas/testsuite/gas/elf/common5d.d b/gas/testsuite/gas/elf/common5d.d new file mode 100644 index 0000000..9f51636 --- /dev/null +++ b/gas/testsuite/gas/elf/common5d.d @@ -0,0 +1,5 @@ +#source: common5d.s +#as: +#error-output: common5b.l +#not-target: alpha-*-* +# The Alpha target uses its own .set pseudo-insn. diff --git a/gas/testsuite/gas/elf/common5d.s b/gas/testsuite/gas/elf/common5d.s new file mode 100644 index 0000000..6da5cb3 --- /dev/null +++ b/gas/testsuite/gas/elf/common5d.s @@ -0,0 +1,2 @@ + .comm foo,8,8 + .set foo1,foo diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp index 1284619..6737486 100644 --- a/gas/testsuite/gas/elf/elf.exp +++ b/gas/testsuite/gas/elf/elf.exp @@ -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" diff --git a/gas/write.c b/gas/write.c index 8efdbc5..4f6547d 100644 --- a/gas/write.c +++ b/gas/write.c @@ -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) |