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
|
@ -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>
|
||||
|
||||
* 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_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
|
||||
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,
|
||||
hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
|
||||
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>
|
||||
|
||||
* testsuite/config/default.exp (binutils_run): Document
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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-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>
|
||||
|
||||
* po/ru.po: Updated Russian translation.
|
||||
|
|
|
@ -1494,6 +1494,10 @@ if { [istarget mips*-*-vxworks*] } {
|
|||
run_dump_test "pr12915"
|
||||
run_dump_test "reginfo-1a"
|
||||
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-trap"
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
#name: MIPS assembled .reginfo section size (n32)
|
||||
#as: -n32 -mips3
|
||||
#source: reginfo-2.s
|
||||
#error-output: reginfo-2.l
|
|
@ -0,0 +1,3 @@
|
|||
#name: MIPS assembled .reginfo section size
|
||||
#as: -32
|
||||
#error-output: reginfo-2.l
|
|
@ -0,0 +1,3 @@
|
|||
.*: Incorrect `\.reginfo' section size; expected 24, got 28
|
||||
.*: Assembler messages:
|
||||
.*: Fatal error: can't close .*: Bad value
|
|
@ -0,0 +1,2 @@
|
|||
.section .reginfo
|
||||
.word 0xdeadbeef
|
Loading…
Reference in New Issue