diff options
author | Fangrui Song <maskray@google.com> | 2020-05-04 17:04:25 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2020-05-04 17:04:25 +0100 |
commit | e052e2ba295a65b6ea80cbc3f90495beca299c42 (patch) | |
tree | 8e1fe52512a6257c597917d47cc2cd5731dc1dfe | |
parent | 7242fa8aa7596b4e154ca96ddf5ce49353bf2e5d (diff) | |
download | gdb-e052e2ba295a65b6ea80cbc3f90495beca299c42.zip gdb-e052e2ba295a65b6ea80cbc3f90495beca299c42.tar.gz gdb-e052e2ba295a65b6ea80cbc3f90495beca299c42.tar.bz2 |
[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.
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/objcopy.c | 12 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/update-section.exp | 7 |
3 files changed, 16 insertions, 8 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 7cc692b..8da4097 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -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> PR 25917 diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 738ef4c..5760d06 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 4fd6a77..81a01b0 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 \ |