[PATCH] objcopy: Allow --dump-section to dump an empty SEC_HAS_CONTENTS section

* objcopy.c (copy_object): Allow empty section.
	* testsuite/binutils-all/update-section.exp: Add test.
This commit is contained in:
Fangrui Song
2020-05-04 17:04:25 +01:00
committed by Nick Clifton
parent 7242fa8aa7
commit e052e2ba29
3 changed files with 16 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2020-05-04 Fangrui Song <maskray@google.com>
* objcopy.c (copy_object): Allow empty section.
* testsuite/binutils-all/update-section.exp: Add test.
2020-05-04 Nick Clifton <nickc@redhat.com> 2020-05-04 Nick Clifton <nickc@redhat.com>
PR 25917 PR 25917

View File

@ -2983,6 +2983,9 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
for (pdump = dump_sections; pdump != NULL; pdump = pdump->next) for (pdump = dump_sections; pdump != NULL; pdump = pdump->next)
{ {
FILE * f;
bfd_byte *contents;
osec = bfd_get_section_by_name (ibfd, pdump->name); osec = bfd_get_section_by_name (ibfd, pdump->name);
if (osec == NULL) if (osec == NULL)
{ {
@ -3000,14 +3003,8 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
} }
bfd_size_type size = bfd_section_size (osec); bfd_size_type size = bfd_section_size (osec);
if (size == 0) /* Note - we allow the dumping of zero-sized sections. */
{
bfd_nonfatal_message (NULL, ibfd, osec,
_("can't dump section - it is empty"));
continue;
}
FILE * f;
f = fopen (pdump->filename, FOPEN_WB); f = fopen (pdump->filename, FOPEN_WB);
if (f == NULL) if (f == NULL)
{ {
@ -3016,7 +3013,6 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
continue; continue;
} }
bfd_byte *contents;
if (bfd_malloc_and_get_section (ibfd, osec, &contents)) if (bfd_malloc_and_get_section (ibfd, osec, &contents))
{ {
if (fwrite (contents, 1, size, f) != size) if (fwrite (contents, 1, size, f) != size)

View File

@ -82,6 +82,13 @@ foreach f [list update-1.s update-2.s update-3.s update-4.s] {
} }
} }
# Check that we can dump empty sections.
if { ![do_objcopy update-1.o "--dump-section .text=tmpdir/empty"] } {
fail "objcopy (dump empty section)"
} else {
pass "objcopy (dump empty section)"
}
if { ![do_objcopy update-1.o \ if { ![do_objcopy update-1.o \
"--dump-section .foo=tmpdir/dumped-contents"] "--dump-section .foo=tmpdir/dumped-contents"]
|| ![do_objcopy update-2.o \ || ![do_objcopy update-2.o \