From 189b7393d545330fae6b84e9a140d34e09eb634e Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Sat, 21 Dec 2019 17:59:37 +0000 Subject: [PATCH] [lld][RISCV] Use an e_flags of 0 if there are only binary input files. Summary: If none of the input files are ELF object files (for example, when generating an object file from a single binary input file via "-b binary"), use a fallback value for the ELF header flags instead of crashing with an assertion failure. Reviewers: MaskRay, ruiu, espindola Reviewed By: MaskRay, ruiu Subscribers: kevans, grimar, emaste, arichardson, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, kito-cheng, shiva0217, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, lenary, s.egerton, pzheng, sameer.abuasal, apazos, luismarques, llvm-commits, jrtc27 Tags: #llvm Differential Revision: https://reviews.llvm.org/D71101 --- lld/ELF/Arch/RISCV.cpp | 5 ++++- lld/test/ELF/riscv-elf-flags.s | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 lld/test/ELF/riscv-elf-flags.s diff --git a/lld/ELF/Arch/RISCV.cpp b/lld/ELF/Arch/RISCV.cpp index 7b807aa..d4acccf 100644 --- a/lld/ELF/Arch/RISCV.cpp +++ b/lld/ELF/Arch/RISCV.cpp @@ -108,7 +108,10 @@ static uint32_t getEFlags(InputFile *f) { } uint32_t RISCV::calcEFlags() const { - assert(!objectFiles.empty()); + // If there are only binary input files (from -b binary), use a + // value of 0 for the ELF header flags. + if (objectFiles.empty()) + return 0; uint32_t target = getEFlags(objectFiles.front()); diff --git a/lld/test/ELF/riscv-elf-flags.s b/lld/test/ELF/riscv-elf-flags.s new file mode 100644 index 0000000..137c89d --- /dev/null +++ b/lld/test/ELF/riscv-elf-flags.s @@ -0,0 +1,8 @@ +# REQUIRES: riscv + +# RUN: echo -n "BLOB" > %t.binary +# RUN: ld.lld -m elf64lriscv -b binary %t.binary -o %t.out +# RUN: llvm-readobj -h %t.out | FileCheck %s + +# CHECK: Flags [ +# CHECK-NEXT: ] -- 2.7.4