aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-02-07 00:42:45 +1030
committerAlan Modra <amodra@gmail.com>2020-02-10 15:28:23 +1030
commit33176d912add7680277ad5e18af0e6303d9a7af8 (patch)
tree1b621ee091460c29d5c0989cd621ad1dc658e4b6
parent821948744f578be38aade35ae6db7deecb4ee7be (diff)
downloadgdb-33176d912add7680277ad5e18af0e6303d9a7af8.zip
gdb-33176d912add7680277ad5e18af0e6303d9a7af8.tar.gz
gdb-33176d912add7680277ad5e18af0e6303d9a7af8.tar.bz2
gas: error for section type, attr, or entsize change
* config/obj-elf.c (obj_elf_change_section): Error for section type, attr or entsize changes in assembly. * testsuite/gas/elf/elf.exp: Pass -Z to gas for section5 test. * testsuite/gas/elf/section5.l: Update.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/obj-elf.c21
-rw-r--r--gas/testsuite/gas/elf/elf.exp2
-rw-r--r--gas/testsuite/gas/elf/section5.l9
4 files changed, 31 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4c60d86..a07d9b7 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,12 @@
2020-02-10 Alan Modra <amodra@gmail.com>
+ * config/obj-elf.c (obj_elf_change_section): Error for section
+ type, attr or entsize changes in assembly.
+ * testsuite/gas/elf/elf.exp: Pass -Z to gas for section5 test.
+ * testsuite/gas/elf/section5.l: Update.
+
+2020-02-10 Alan Modra <amodra@gmail.com>
+
* output-file.c (output_file_close): Do a normal close when
flag_always_generate_output.
* write.c (write_object_file): Don't stop output when
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index d7a07fe..a722598 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -767,7 +767,17 @@ obj_elf_change_section (const char *name,
{
if (type != SHT_NULL
&& (unsigned) type != elf_section_type (old_sec))
- as_warn (_("ignoring changed section type for %s"), name);
+ {
+ if (ssect != NULL)
+ /* This is a special section with known type. User
+ assembly might get the section type wrong; Even high
+ profile projects like glibc have done so in the past.
+ So don't error in this case. */
+ as_warn (_("ignoring changed section type for %s"), name);
+ else
+ /* Do error when assembly isn't self-consistent. */
+ as_bad (_("changed section type for %s"), name);
+ }
if (attr != 0)
{
@@ -779,14 +789,19 @@ obj_elf_change_section (const char *name,
| SEC_EXCLUDE | SEC_SORT_ENTRIES | SEC_MERGE | SEC_STRINGS
| SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD
| SEC_THREAD_LOCAL)))
- as_warn (_("ignoring changed section attributes for %s"), name);
+ {
+ if (ssect != NULL)
+ as_warn (_("ignoring changed section attributes for %s"), name);
+ else
+ as_bad (_("changed section attributes for %s"), name);
+ }
else
/* FIXME: Maybe we should consider removing a previously set
processor or application specific attribute as suspicious ? */
elf_section_flags (sec) = attr;
if ((flags & SEC_MERGE) && old_sec->entsize != (unsigned) entsize)
- as_warn (_("ignoring changed section entity size for %s"), name);
+ as_bad (_("changed section entity size for %s"), name);
}
}
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 0f9b267..b0522af 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -202,7 +202,7 @@ if { [is_elf_format] } then {
# new sections created without atrributes.
# The RX port does not complain about changing the attributes of the
# .data and .bss sections since it does not use those names.
- run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
+ run_elf_list_test "section5" "" "-al -Z" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
}
run_dump_test "struct"
if { ![istarget "alpha*-*-*"] } then {
diff --git a/gas/testsuite/gas/elf/section5.l b/gas/testsuite/gas/elf/section5.l
index 31b87e60..00a1456 100644
--- a/gas/testsuite/gas/elf/section5.l
+++ b/gas/testsuite/gas/elf/section5.l
@@ -1,12 +1,13 @@
.*: Assembler messages:
-.*:7: Warning: .*
-.*:7: Warning: .*
-.*:10: Warning: .*
-.*:16: Warning: .*
+.*:7: Error: .*
+.*:7: Error: .*
+.*:10: Error: .*
+.*:16: Error: .*
.*:18: Warning: .*
.*:20: Warning: .*
.*:22: Warning: .*
.*:24: Warning: .*
+4 errors, 4 warnings, generating bad object file
.*GAS.*