This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Also disallow global alias of common symbol


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=76db0a2e171d2c6780e0388840e3a10ffe7e9ee2

commit 76db0a2e171d2c6780e0388840e3a10ffe7e9ee2
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Aug 11 07:41:51 2017 -0700

    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.

Diff:
---
 gas/ChangeLog                    | 20 ++++++++++++++++++++
 gas/read.c                       |  2 +-
 gas/testsuite/gas/elf/common5a.d |  5 +++++
 gas/testsuite/gas/elf/common5a.l |  2 ++
 gas/testsuite/gas/elf/common5a.s |  3 +++
 gas/testsuite/gas/elf/common5b.d |  5 +++++
 gas/testsuite/gas/elf/common5b.l |  2 ++
 gas/testsuite/gas/elf/common5b.s |  3 +++
 gas/testsuite/gas/elf/common5c.d |  5 +++++
 gas/testsuite/gas/elf/common5c.s |  2 ++
 gas/testsuite/gas/elf/common5d.d |  5 +++++
 gas/testsuite/gas/elf/common5d.s |  2 ++
 gas/testsuite/gas/elf/elf.exp    |  4 ++++
 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
diff --git a/gas/read.c b/gas/read.c
index 9627ef5..0b0b058 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]