MIPS/BFD: Correctly report unsupported `.reginfo' section size
Report an error when an unsupported `.reginfo' section size is found in `_bfd_mips_elf_section_processing', removing an assertion that triggers at elfxx-mips.c:7105 in GAS when assembling input like: .section .reginfo .word 0xdeadbeef and in `objcopy --rename-section' when renaming an incorrectly sized section to `.reginfo'. bfd/ * elfxx-mips.c (_bfd_mips_elf_section_processing): For SHT_MIPS_REGINFO sections don't assert the correct size and report an error instead. binutils/ * testsuite/binutils-all/mips/mips-reginfo.d: New test. * testsuite/binutils-all/mips/mips-reginfo-n32.d: New test. * testsuite/binutils-all/mips/mips-reginfo.s: New test source. * testsuite/binutils-all/mips/mips.exp: Run the new tests. gas/ * testsuite/gas/mips/reginfo-2.d: New test. * testsuite/gas/mips/reginfo-2-n32.d: New test. * testsuite/gas/mips/reginfo-2.l: New test stderr output. * testsuite/gas/mips/reginfo-2.s: New test source. * testsuite/gas/mips/mips.exp: Run the new tests.
This commit is contained in:
parent
7550610057
commit
2d6dda7161
13 changed files with 67 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
|
* elfxx-mips.c (_bfd_mips_elf_section_processing): For
|
||||||
|
SHT_MIPS_REGINFO sections don't assert the correct size and
|
||||||
|
report an error instead.
|
||||||
|
|
||||||
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
* elf.c (_bfd_elf_write_object_contents): Propagate a failure
|
* elf.c (_bfd_elf_write_object_contents): Propagate a failure
|
||||||
|
|
|
@ -7102,9 +7102,18 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
|
||||||
{
|
{
|
||||||
bfd_byte buf[4];
|
bfd_byte buf[4];
|
||||||
|
|
||||||
BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
|
|
||||||
BFD_ASSERT (hdr->contents == NULL);
|
BFD_ASSERT (hdr->contents == NULL);
|
||||||
|
|
||||||
|
if (hdr->sh_size != sizeof (Elf32_External_RegInfo))
|
||||||
|
{
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("%B: Incorrect `.reginfo' section size; expected %Lu, got %Lu"),
|
||||||
|
abfd, (bfd_size_type) sizeof (Elf32_External_RegInfo),
|
||||||
|
hdr->sh_size);
|
||||||
|
bfd_set_error (bfd_error_bad_value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (bfd_seek (abfd,
|
if (bfd_seek (abfd,
|
||||||
hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
|
hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
|
||||||
SEEK_SET) != 0)
|
SEEK_SET) != 0)
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
|
* testsuite/binutils-all/mips/mips-reginfo.d: New test.
|
||||||
|
* testsuite/binutils-all/mips/mips-reginfo-n32.d: New test.
|
||||||
|
* testsuite/binutils-all/mips/mips-reginfo.s: New test source.
|
||||||
|
* testsuite/binutils-all/mips/mips.exp: Run the new tests.
|
||||||
|
|
||||||
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
* testsuite/config/default.exp (binutils_run): Document
|
* testsuite/config/default.exp (binutils_run): Document
|
||||||
|
|
7
binutils/testsuite/binutils-all/mips/mips-reginfo-n32.d
Normal file
7
binutils/testsuite/binutils-all/mips/mips-reginfo-n32.d
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#PROG: objcopy
|
||||||
|
#name: MIPS objcopy .reginfo section size (n32)
|
||||||
|
#as: -n32 -mips3
|
||||||
|
#objcopy: --rename-section .foo=.reginfo
|
||||||
|
#source: mips-reginfo.s
|
||||||
|
#error: \A[^\n]*: Incorrect `\.reginfo' section size; expected 24, got 4\n
|
||||||
|
#error: [^\n]*: Bad value\Z
|
6
binutils/testsuite/binutils-all/mips/mips-reginfo.d
Normal file
6
binutils/testsuite/binutils-all/mips/mips-reginfo.d
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#PROG: objcopy
|
||||||
|
#name: MIPS objcopy .reginfo section size
|
||||||
|
#as: -32
|
||||||
|
#objcopy: --rename-section .foo=.reginfo
|
||||||
|
#error: \A[^\n]*: Incorrect `\.reginfo' section size; expected 24, got 4\n
|
||||||
|
#error: [^\n]*: Bad value\Z
|
2
binutils/testsuite/binutils-all/mips/mips-reginfo.s
Normal file
2
binutils/testsuite/binutils-all/mips/mips-reginfo.s
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.section .foo, "a"
|
||||||
|
.word 0xdeadbeef
|
|
@ -60,3 +60,8 @@ if $has_newabi {
|
||||||
run_dump_test "mips-note-2r-n32"
|
run_dump_test "mips-note-2r-n32"
|
||||||
run_dump_test "mips-note-2r-n64"
|
run_dump_test "mips-note-2r-n64"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_dump_test "mips-reginfo"
|
||||||
|
if $has_newabi {
|
||||||
|
run_dump_test "mips-reginfo-n32"
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2018-02-05 Maciej W. Rozycki <macro@mips.com>
|
||||||
|
|
||||||
|
* testsuite/gas/mips/reginfo-2.d: New test.
|
||||||
|
* testsuite/gas/mips/reginfo-2-n32.d: New test.
|
||||||
|
* testsuite/gas/mips/reginfo-2.l: New test stderr output.
|
||||||
|
* testsuite/gas/mips/reginfo-2.s: New test source.
|
||||||
|
* testsuite/gas/mips/mips.exp: Run the new tests.
|
||||||
|
|
||||||
2018-02-05 Nick Clifton <nickc@redhat.com>
|
2018-02-05 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* po/ru.po: Updated Russian translation.
|
* po/ru.po: Updated Russian translation.
|
||||||
|
|
|
@ -1494,6 +1494,10 @@ if { [istarget mips*-*-vxworks*] } {
|
||||||
run_dump_test "pr12915"
|
run_dump_test "pr12915"
|
||||||
run_dump_test "reginfo-1a"
|
run_dump_test "reginfo-1a"
|
||||||
run_dump_test "reginfo-1b"
|
run_dump_test "reginfo-1b"
|
||||||
|
run_dump_test "reginfo-2"
|
||||||
|
if $has_newabi {
|
||||||
|
run_dump_test "reginfo-2-n32"
|
||||||
|
}
|
||||||
|
|
||||||
run_dump_test "micromips"
|
run_dump_test "micromips"
|
||||||
run_dump_test "micromips-trap"
|
run_dump_test "micromips-trap"
|
||||||
|
|
4
gas/testsuite/gas/mips/reginfo-2-n32.d
Normal file
4
gas/testsuite/gas/mips/reginfo-2-n32.d
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#name: MIPS assembled .reginfo section size (n32)
|
||||||
|
#as: -n32 -mips3
|
||||||
|
#source: reginfo-2.s
|
||||||
|
#error-output: reginfo-2.l
|
3
gas/testsuite/gas/mips/reginfo-2.d
Normal file
3
gas/testsuite/gas/mips/reginfo-2.d
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#name: MIPS assembled .reginfo section size
|
||||||
|
#as: -32
|
||||||
|
#error-output: reginfo-2.l
|
3
gas/testsuite/gas/mips/reginfo-2.l
Normal file
3
gas/testsuite/gas/mips/reginfo-2.l
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.*: Incorrect `\.reginfo' section size; expected 24, got 28
|
||||||
|
.*: Assembler messages:
|
||||||
|
.*: Fatal error: can't close .*: Bad value
|
2
gas/testsuite/gas/mips/reginfo-2.s
Normal file
2
gas/testsuite/gas/mips/reginfo-2.s
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.section .reginfo
|
||||||
|
.word 0xdeadbeef
|
Loading…
Add table
Add a link
Reference in a new issue