diff options
author | Alan Modra <amodra@gmail.com> | 2020-02-07 00:42:45 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-02-10 15:28:23 +1030 |
commit | 33176d912add7680277ad5e18af0e6303d9a7af8 (patch) | |
tree | 1b621ee091460c29d5c0989cd621ad1dc658e4b6 /gas | |
parent | 821948744f578be38aade35ae6db7deecb4ee7be (diff) | |
download | gdb-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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/obj-elf.c | 21 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/elf.exp | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/elf/section5.l | 9 |
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.* |