From: Nick Clifton Date: Wed, 8 Jan 2020 16:30:20 +0000 (+0000) Subject: Make the assembler generate an error if there is an attempt to define a section with... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f1f28025c3ea75d5368ddd3046461648145b89b3;p=binutils-gdb.git 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. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 46ce02ee650..799c5918112 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2020-01-08 Nick Clifton + + 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 * config/tc-z8k.c (md_begin): Make idx unsigned. diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index ffc5508532f..7cf921c051f 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 560071caffb..746ff7eea0d 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 00000000000..c15f28c92ff --- /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 00000000000..4013ec116b5 --- /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 00000000000..f8e1832ad10 --- /dev/null +++ b/gas/testsuite/gas/elf/pr14891.s @@ -0,0 +1,6 @@ + +foo: +.section foo, "a" + +.section bar, "a" +bar: