diff options
| author | Jordan Rupprecht <rupprecht@google.com> | 2019-01-28 15:02:40 +0000 |
|---|---|---|
| committer | Jordan Rupprecht <rupprecht@google.com> | 2019-01-28 15:02:40 +0000 |
| commit | b2702d6a45016b24bed936901c183a5b1851858a (patch) | |
| tree | ac94a272963be35296887161473b2821f3d0534a /llvm/test | |
| parent | 6c5dfcb89edf93eb50356dc39ea0ea2dcbba906f (diff) | |
| download | bcm5719-llvm-b2702d6a45016b24bed936901c183a5b1851858a.tar.gz bcm5719-llvm-b2702d6a45016b24bed936901c183a5b1851858a.zip | |
[llvm-objcopy] Fix crash when writing empty binary output
Summary: When using llvm-objcopy -O binary and the resulting file will be empty (e.g. removing the only section that would be written, or using --only-keep with a section that doesn't exist/isn't SHF_ALLOC), we crash because FileOutputBuffer expects Size > 0. Add a regression test, and change Buffer to open/truncate the output file in this case.
Reviewers: alexshap, jhenderson, jakehehrlich, espindola
Reviewed By: alexshap, jhenderson
Subscribers: jfb, llvm-commits, emaste, arichardson
Differential Revision: https://reviews.llvm.org/D56806
llvm-svn: 352371
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/tools/llvm-objcopy/ELF/binary-output-empty.test | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objcopy/ELF/binary-output-empty.test b/llvm/test/tools/llvm-objcopy/ELF/binary-output-empty.test new file mode 100644 index 00000000000..d234b58a4a2 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/ELF/binary-output-empty.test @@ -0,0 +1,27 @@ +# RUN: yaml2obj %s -o %t.o + +# Writing an empty output to a non-existent file will still create it. +# RUN: rm -f %t-new.txt +# RUN: llvm-objcopy -R .text -O binary %t.o %t-new.txt +# RUN: wc -c %t-new.txt | FileCheck %s + +# Writing an empty output to an existing file will truncate it. +# RUN: echo abcd > %t-existing.txt +# RUN: llvm-objcopy -R .text -O binary %t.o %t-existing.txt +# RUN: wc -c %t-existing.txt | FileCheck %s + +# In both cases, the file should be empty. +# CHECK: 0 + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "c3c3c3c3" + Size: 0x1000 |

