llvm-dwp: Support empty .dwo files

Though a bit odd, this is handy for a few reasons - for example, in a
build system that wants consistent input/output of build steps, but
where split-dwarf might be overriden/disabled by the user on a per-file
basis.

llvm-svn: 261987
This commit is contained in:
David Blaikie 2016-02-26 07:04:58 +00:00
parent ce63c2053d
commit 5d6d4dc306
3 changed files with 19 additions and 9 deletions

Binary file not shown.

View File

@ -0,0 +1,8 @@
RUN: llvm-dwp %p/../Inputs/empty.dwo -o %t
RUN: llvm-dwarfdump %t | FileCheck %s
CHECK-LABEL: .debug_cu_index
CHECK-NOT: version
CHECK-LABEL: .debug_tu_index
CHECK-NOT: version
CHECK: .debug_

View File

@ -219,6 +219,9 @@ static void
writeIndex(MCStreamer &Out, MCSection *Section,
ArrayRef<unsigned> ContributionOffsets,
const MapVector<uint64_t, UnitIndexEntry> &IndexEntries) {
if (IndexEntries.empty())
return;
unsigned Columns = 0;
for (auto &C : ContributionOffsets)
if (C)
@ -397,8 +400,9 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
}
}
assert(!AbbrevSection.empty());
assert(!InfoSection.empty());
if (InfoSection.empty())
continue;
if (!CurCUIndexSection.empty()) {
DWARFUnitIndex CUIndex(DW_SECT_INFO);
DataExtractor CUIndexData(CurCUIndexSection,
@ -448,13 +452,11 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
return Err;
}
if (!TypeIndexEntries.empty()) {
// Lie about there being no info contributions so the TU index only includes
// the type unit contribution
ContributionOffsets[0] = 0;
writeIndex(Out, MCOFI.getDwarfTUIndexSection(), ContributionOffsets,
TypeIndexEntries);
}
// Lie about there being no info contributions so the TU index only includes
// the type unit contribution
ContributionOffsets[0] = 0;
writeIndex(Out, MCOFI.getDwarfTUIndexSection(), ContributionOffsets,
TypeIndexEntries);
// Lie about the type contribution
ContributionOffsets[DW_SECT_TYPES - DW_SECT_INFO] = 0;