aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-06-26 05:11:07 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-06-26 05:11:29 -0700
commita3aea05a66ec325ddd19b0c8dbe504958a295cd3 (patch)
tree48a9ccef7ac053c755efcce87e653942fa7a2525 /gas
parentfd52715cfa77b7e06f4ab5eadfe7946d22180adc (diff)
downloadgdb-a3aea05a66ec325ddd19b0c8dbe504958a295cd3.zip
gdb-a3aea05a66ec325ddd19b0c8dbe504958a295cd3.tar.gz
gdb-a3aea05a66ec325ddd19b0c8dbe504958a295cd3.tar.bz2
Check unsupported .symver with common symbol
The .symver directive on common symbol creates a new common symbol, which shouldn't be allowed, similar to alias on common symbol: $ cat y.S .comm bar,8,8 .set bar1,bar $ as -o y.o y.S y.S: Assembler messages: y.S:2: Error: `bar1' can't be equated to common symbol 'bar' $ PR gas/21661 * config/obj-elf.c (obj_elf_symver): Don't allow .symver with common symbol. (elf_frob_symbol): Likewise. * testsuite/gas/elf/elf.exp: Run pr21661. * testsuite/gas/elf/pr21661.d: New file. * testsuite/gas/elf/pr21661.s: Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/obj-elf.c15
-rw-r--r--gas/testsuite/gas/elf/elf.exp1
-rw-r--r--gas/testsuite/gas/elf/pr21661.d2
-rw-r--r--gas/testsuite/gas/elf/pr21661.l3
-rw-r--r--gas/testsuite/gas/elf/pr21661.s4
6 files changed, 35 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index f48280d..6d3281d 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2017-06-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/21661
+ * config/obj-elf.c (obj_elf_symver): Don't allow .symver with
+ common symbol.
+ (elf_frob_symbol): Likewise.
+ * testsuite/gas/elf/elf.exp: Run pr21661.
+ * testsuite/gas/elf/pr21661.d: New file.
+ * testsuite/gas/elf/pr21661.s: Likewise.
+
2017-06-26 Nick Clifton <nickc@redhat.com>
* config/tc-arm.c (fpu_any): Only define for ELF based targets.
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index 3696d5e..49d99a4 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -1414,6 +1414,14 @@ obj_elf_symver (int ignore ATTRIBUTE_UNUSED)
c = get_symbol_name (& name);
lex_type[(unsigned char) '@'] = old_lexat;
+ if (S_IS_COMMON (sym))
+ {
+ as_bad (_("`%s' can't be versioned to common symbol '%s'"),
+ name, S_GET_NAME (sym));
+ ignore_rest_of_line ();
+ return;
+ }
+
if (symbol_get_obj (sym)->versioned_name == NULL)
{
symbol_get_obj (sym)->versioned_name = xstrdup (name);
@@ -2277,6 +2285,13 @@ elf_frob_symbol (symbolS *symp, int *puntp)
symp2 = symbol_find_or_make (sy_obj->versioned_name);
/* Now we act as though we saw symp2 = sym. */
+ if (S_IS_COMMON (symp))
+ {
+ as_bad (_("`%s' can't be versioned to common symbol '%s'"),
+ sy_obj->versioned_name, S_GET_NAME (symp));
+ *puntp = TRUE;
+ return;
+ }
S_SET_SEGMENT (symp2, S_GET_SEGMENT (symp));
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index ad38d66..6b2b31a 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -184,6 +184,7 @@ if { [is_elf_format] } then {
run_dump_test "symtab"
}
run_dump_test "symver"
+ run_dump_test "pr21661"
# No indirect functions on non-GNU targets.
# The Visium and MSP set the ELF header's OSABI field to ELFOSABI_STANDALONE.
diff --git a/gas/testsuite/gas/elf/pr21661.d b/gas/testsuite/gas/elf/pr21661.d
new file mode 100644
index 0000000..a16e410
--- /dev/null
+++ b/gas/testsuite/gas/elf/pr21661.d
@@ -0,0 +1,2 @@
+#name: unsupported .symver with common symbol
+#error-output: pr21661.l
diff --git a/gas/testsuite/gas/elf/pr21661.l b/gas/testsuite/gas/elf/pr21661.l
new file mode 100644
index 0000000..0565faa
--- /dev/null
+++ b/gas/testsuite/gas/elf/pr21661.l
@@ -0,0 +1,3 @@
+[^:]*: Assembler messages:
+[^:]*:2: Error: `foo@VERS.1' can't be versioned to common symbol 'foo'
+[^:]*: Error: `bar@VERS.1' can't be versioned to common symbol 'bar'
diff --git a/gas/testsuite/gas/elf/pr21661.s b/gas/testsuite/gas/elf/pr21661.s
new file mode 100644
index 0000000..5586bfd
--- /dev/null
+++ b/gas/testsuite/gas/elf/pr21661.s
@@ -0,0 +1,4 @@
+ .comm foo,8,8
+ .symver foo,foo@VERS.1
+ .symver bar,bar@VERS.1
+ .comm bar,8,8