From: David Blaikie Date: Wed, 2 Dec 2015 22:01:56 +0000 (+0000) Subject: [llvm-dwp] Include only the non-empty columns in the cu_index X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=dc5640824942c77b26fe92a9aa7a7ee6d150454d;p=oota-llvm.git [llvm-dwp] Include only the non-empty columns in the cu_index git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254555 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/llvm-dwp/X86/simple.test b/test/tools/llvm-dwp/X86/simple.test index aa5ae40dc2b..6ee19697442 100644 --- a/test/tools/llvm-dwp/X86/simple.test +++ b/test/tools/llvm-dwp/X86/simple.test @@ -42,7 +42,11 @@ CHECK: DW_AT_name {{.*}} "b" CHECK: DW_TAG_formal_parameter CHECK: .debug_cu_index contents: -FIXME: Emit and verify the cu_index contents +Ensure only the relevant/contained sections are included in the table: +CHECK: Index Signature INFO ABBREV STR_OFFSETS +Don't bother checking the Signatures, they aren't correct yet. +CHECK: [0x00000000, 0x00000029) [0x00000000, 0x00000031) [0x00000000, 0x00000010) +CHECK: [0x00000029, 0x0000005e) [0x00000031, 0x00000075) [0x00000010, 0x00000024) CHECK: .debug_str.dwo contents: CHECK: "clang version diff --git a/tools/llvm-dwp/llvm-dwp.cpp b/tools/llvm-dwp/llvm-dwp.cpp index 6617b0b23ae..e6a90cf8a3c 100644 --- a/tools/llvm-dwp/llvm-dwp.cpp +++ b/tools/llvm-dwp/llvm-dwp.cpp @@ -157,9 +157,14 @@ static std::error_code write(MCStreamer &Out, ArrayRef Inputs) { return Err; } + unsigned Columns = 0; + for (auto &C : ContributionOffsets) + if (C) + ++Columns; + Out.SwitchSection(MCOFI.getDwarfCUIndexSection()); Out.EmitIntValue(2, 4); // Version - Out.EmitIntValue(8, 4); // Columns + Out.EmitIntValue(Columns, 4); // Columns Out.EmitIntValue(IndexEntries.size(), 4); // Num Units // FIXME: This is not the right number of buckets for a real hash. Out.EmitIntValue(IndexEntries.size(), 4); // Num Buckets @@ -173,18 +178,21 @@ static std::error_code write(MCStreamer &Out, ArrayRef Inputs) { Out.EmitIntValue(i + 1, 4); // Write the column headers (which sections will appear in the table) - for (size_t i = 1; i != 9; ++i) - Out.EmitIntValue(i, 4); + for (size_t i = 0; i != array_lengthof(ContributionOffsets); ++i) + if (ContributionOffsets[i]) + Out.EmitIntValue(i + DW_SECT_INFO, 4); // Write the offsets. for (const auto &E : IndexEntries) - for (const auto &C : E.Contributions) - Out.EmitIntValue(C.Offset, 4); + for (size_t i = 0; i != array_lengthof(E.Contributions); ++i) + if (ContributionOffsets[i]) + Out.EmitIntValue(E.Contributions[i].Offset, 4); // Write the lengths. for (const auto &E : IndexEntries) - for (const auto &C : E.Contributions) - Out.EmitIntValue(C.Length, 4); + for (size_t i = 0; i != array_lengthof(E.Contributions); ++i) + if (ContributionOffsets[i]) + Out.EmitIntValue(E.Contributions[i].Length, 4); return std::error_code(); }