diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 7cc692b3e5b..8da40977e1e 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2020-05-04 Fangrui Song + + * objcopy.c (copy_object): Allow empty section. + * testsuite/binutils-all/update-section.exp: Add test. + 2020-05-04 Nick Clifton PR 25917 diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 738ef4c2c91..5760d06a859 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -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) { + FILE * f; + bfd_byte *contents; + osec = bfd_get_section_by_name (ibfd, pdump->name); 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); - if (size == 0) - { - bfd_nonfatal_message (NULL, ibfd, osec, - _("can't dump section - it is empty")); - continue; - } + /* Note - we allow the dumping of zero-sized sections. */ - FILE * f; f = fopen (pdump->filename, FOPEN_WB); if (f == NULL) { @@ -3016,7 +3013,6 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch) continue; } - bfd_byte *contents; if (bfd_malloc_and_get_section (ibfd, osec, &contents)) { if (fwrite (contents, 1, size, f) != size) diff --git a/binutils/testsuite/binutils-all/update-section.exp b/binutils/testsuite/binutils-all/update-section.exp index 4fd6a77214a..81a01b0a58b 100644 --- a/binutils/testsuite/binutils-all/update-section.exp +++ b/binutils/testsuite/binutils-all/update-section.exp @@ -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 \ "--dump-section .foo=tmpdir/dumped-contents"] || ![do_objcopy update-2.o \