aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2020-01-08 16:30:20 +0000
committerNick Clifton <nickc@redhat.com>2020-01-08 16:30:20 +0000
commitf1f28025c3ea75d5368ddd3046461648145b89b3 (patch)
treefb1d76e45031da950adaf8f42cc90c9a43cd749e
parent030a2e78acf66c5c12e073ec3887a167da7a7195 (diff)
downloadbinutils-f1f28025c3ea75d5368ddd3046461648145b89b3.zip
binutils-f1f28025c3ea75d5368ddd3046461648145b89b3.tar.gz
binutils-f1f28025c3ea75d5368ddd3046461648145b89b3.tar.bz2
Make the assembler generate an error if there is an attempt to define a section with the same name as an already defined symbol.
PR 14891 * config/obj-elf.c (obj_elf_section): Fail if the section name is already defined as a different symbol type. * testsuite/gas/elf/pr14891.s: New test source file. * testsuite/gas/elf/pr14891.d: New test driver. * testsuite/gas/elf/pr14891.s: New test expected error output. * testsuite/gas/elf/elf.exp: Run the new test.
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/obj-elf.c12
-rw-r--r--gas/testsuite/gas/elf/elf.exp1
-rw-r--r--gas/testsuite/gas/elf/pr14891.d2
-rw-r--r--gas/testsuite/gas/elf/pr14891.l3
-rw-r--r--gas/testsuite/gas/elf/pr14891.s6
6 files changed, 34 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 46ce02e..799c591 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2020-01-08 Nick Clifton <nickc@redhat.com>
+
+ PR 14891
+ * config/obj-elf.c (obj_elf_section): Fail if the section name is
+ already defined as a different symbol type.
+ * testsuite/gas/elf/pr14891.s: New test source file.
+ * testsuite/gas/elf/pr14891.d: New test driver.
+ * testsuite/gas/elf/pr14891.s: New test expected error output.
+ * testsuite/gas/elf/elf.exp: Run the new test.
+
2020-01-08 Alan Modra <amodra@gmail.com>
* config/tc-z8k.c (md_begin): Make idx unsigned.
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index ffc5508..7cf921c 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -1039,6 +1039,18 @@ obj_elf_section (int push)
name = obj_elf_section_name ();
if (name == NULL)
return;
+
+ symbolS * sym;
+ if ((sym = symbol_find (name)) != NULL
+ && ! symbol_section_p (sym)
+ && S_IS_DEFINED (sym)
+ && ! S_IS_VOLATILE (sym)
+ && ! S_CAN_BE_REDEFINED (sym))
+ {
+ as_bad (_("section name '%s' already defined as another symbol"), name);
+ ignore_rest_of_line ();
+ return;
+ }
type = SHT_NULL;
attr = 0;
gnu_attr = 0;
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 560071c..746ff7e 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -209,6 +209,7 @@ if { [is_elf_format] } then {
}
run_dump_test "symver"
run_dump_test "pr21661"
+ run_dump_test "pr14891"
# 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/pr14891.d b/gas/testsuite/gas/elf/pr14891.d
new file mode 100644
index 0000000..c15f28c
--- /dev/null
+++ b/gas/testsuite/gas/elf/pr14891.d
@@ -0,0 +1,2 @@
+#name: defining a section with the same name as a symbol
+#error_output: pr14891.l
diff --git a/gas/testsuite/gas/elf/pr14891.l b/gas/testsuite/gas/elf/pr14891.l
new file mode 100644
index 0000000..4013ec1
--- /dev/null
+++ b/gas/testsuite/gas/elf/pr14891.l
@@ -0,0 +1,3 @@
+[^:]*: Assembler messages:
+[^:]*:3: Error: section name 'foo' already defined as another symbol
+[^:]*:6: Error: symbol `bar' is already defined
diff --git a/gas/testsuite/gas/elf/pr14891.s b/gas/testsuite/gas/elf/pr14891.s
new file mode 100644
index 0000000..f8e1832
--- /dev/null
+++ b/gas/testsuite/gas/elf/pr14891.s
@@ -0,0 +1,6 @@
+
+foo:
+.section foo, "a"
+
+.section bar, "a"
+bar: