summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2020-05-04 17:04:25 +0100
committerNick Clifton <nickc@redhat.com>2020-05-04 17:04:25 +0100
commite052e2ba295a65b6ea80cbc3f90495beca299c42 (patch)
tree8e1fe52512a6257c597917d47cc2cd5731dc1dfe
parent7242fa8aa7596b4e154ca96ddf5ce49353bf2e5d (diff)
downloadbinutils-gdb-e052e2ba295a65b6ea80cbc3f90495beca299c42.tar.gz
[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/ChangeLog5
-rw-r--r--binutils/objcopy.c12
-rw-r--r--binutils/testsuite/binutils-all/update-section.exp7
3 files changed, 16 insertions, 8 deletions
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 <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 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 \