[llvm] r252781 - dwarfdump: First piece of support for DWP dumping
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 11 17:45:10 PST 2015
On Wed, Nov 11, 2015 at 1:23 PM, Alexey Samsonov <vonosmas at gmail.com> wrote:
>
>
> On Wed, Nov 11, 2015 at 11:28 AM, David Blaikie via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: dblaikie
>> Date: Wed Nov 11 13:28:21 2015
>> New Revision: 252781
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=252781&view=rev
>> Log:
>> dwarfdump: First piece of support for DWP dumping
>>
>> Just a tiny piece of index dumping - the header in this instance.
>>
>> Added:
>> llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h
>> llvm/trunk/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp
>> llvm/trunk/test/DebugInfo/Inputs/dwarfdump-dwp.x86_64.o
>> llvm/trunk/test/DebugInfo/dwarfdump-dwp.test
>> Modified:
>> llvm/trunk/include/llvm/DebugInfo/DIContext.h
>> llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFContext.h
>> llvm/trunk/lib/DebugInfo/DWARF/CMakeLists.txt
>> llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp
>> llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
>>
>> Modified: llvm/trunk/include/llvm/DebugInfo/DIContext.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DIContext.h?rev=252781&r1=252780&r2=252781&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/DebugInfo/DIContext.h (original)
>> +++ llvm/trunk/include/llvm/DebugInfo/DIContext.h Wed Nov 11 13:28:21 2015
>> @@ -123,7 +123,8 @@ enum DIDumpType {
>> DIDT_AppleNames,
>> DIDT_AppleTypes,
>> DIDT_AppleNamespaces,
>> - DIDT_AppleObjC
>> + DIDT_AppleObjC,
>> + DIDT_CUIndex,
>> };
>>
>> class DIContext {
>>
>> Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFContext.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFContext.h?rev=252781&r1=252780&r2=252781&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFContext.h (original)
>> +++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFContext.h Wed Nov 11
>> 13:28:21 2015
>> @@ -203,6 +203,7 @@ public:
>> virtual const DWARFSection& getAppleTypesSection() = 0;
>> virtual const DWARFSection& getAppleNamespacesSection() = 0;
>> virtual const DWARFSection& getAppleObjCSection() = 0;
>> + virtual StringRef getCUIndexSection() = 0;
>>
>> static bool isSupportedVersion(unsigned version) {
>> return version == 2 || version == 3 || version == 4;
>> @@ -251,6 +252,7 @@ class DWARFContextInMemory : public DWAR
>> DWARFSection AppleTypesSection;
>> DWARFSection AppleNamespacesSection;
>> DWARFSection AppleObjCSection;
>> + StringRef CUIndexSection;
>>
>> SmallVector<SmallString<32>, 4> UncompressedSections;
>>
>> @@ -293,6 +295,7 @@ public:
>> StringRef getAddrSection() override {
>> return AddrSection;
>> }
>> + StringRef getCUIndexSection() override { return CUIndexSection; }
>> };
>>
>> }
>>
>> Added: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h?rev=252781&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h (added)
>> +++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h Wed Nov 11
>> 13:28:21 2015
>> @@ -0,0 +1,41 @@
>> +//===-- DWARFUnitIndex.h
>> --------------------------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +#ifndef LLVM_LIB_DEBUGINFO_DWARFUNITINDEX_H
>> +#define LLVM_LIB_DEBUGINFO_DWARFUNITINDEX_H
>> +
>> +#include "llvm/Support/DataExtractor.h"
>> +#include "llvm/Support/Format.h"
>> +#include "llvm/Support/raw_ostream.h"
>> +#include <cstdint>
>> +
>> +namespace llvm {
>> +
>> +class DWARFUnitIndex {
>> + class Header {
>> + uint32_t Version;
>> + uint32_t NumColumns;
>> + uint32_t NumUnits;
>> + uint32_t NumBuckets;
>> +
>> + public:
>> + bool parse(DataExtractor IndexData, uint32_t *OffsetPtr);
>> + void dump(raw_ostream &OS) const;
>> + };
>> +
>> + class Header Header;
>> +
>> +public:
>> + bool parse(DataExtractor IndexData);
>> + void dump(raw_ostream &OS) const;
>> +};
>> +
>> +}
>> +
>> +#endif
>>
>> Modified: llvm/trunk/lib/DebugInfo/DWARF/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/CMakeLists.txt?rev=252781&r1=252780&r2=252781&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/DebugInfo/DWARF/CMakeLists.txt (original)
>> +++ llvm/trunk/lib/DebugInfo/DWARF/CMakeLists.txt Wed Nov 11 13:28:21 2015
>> @@ -13,6 +13,7 @@ add_llvm_library(LLVMDebugInfoDWARF
>> DWARFDebugRangeList.cpp
>> DWARFFormValue.cpp
>> DWARFTypeUnit.cpp
>> + DWARFUnitIndex.cpp
>> DWARFUnit.cpp
>> SyntaxHighlighting.cpp
>>
>>
>> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp?rev=252781&r1=252780&r2=252781&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp (original)
>> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp Wed Nov 11 13:28:21
>> 2015
>> @@ -12,6 +12,7 @@
>> #include "llvm/ADT/StringSwitch.h"
>> #include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h"
>> #include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h"
>> +#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
>> #include "llvm/Support/Compression.h"
>> #include "llvm/Support/Dwarf.h"
>> #include "llvm/Support/Format.h"
>> @@ -155,6 +156,14 @@ void DWARFContext::dump(raw_ostream &OS,
>> }
>> }
>>
>> + if (DumpType == DIDT_All || DumpType == DIDT_CUIndex) {
>> + OS << "\n.debug_cu_index contents:\n";
>> + DataExtractor CUIndexData(getCUIndexSection(), isLittleEndian(),
>> savedAddressByteSize);
>> + DWARFUnitIndex CUIndex;
>> + CUIndex.parse(CUIndexData);
>> + CUIndex.dump(OS);
>> + }
>> +
>> if (DumpType == DIDT_All || DumpType == DIDT_LineDwo) {
>> OS << "\n.debug_line.dwo contents:\n";
>> unsigned stmtOffset = 0;
>> @@ -608,6 +617,7 @@ DWARFContextInMemory::DWARFContextInMemo
>> .Case("apple_namespaces", &AppleNamespacesSection.Data)
>> .Case("apple_namespac", &AppleNamespacesSection.Data)
>> .Case("apple_objc", &AppleObjCSection.Data)
>> + .Case("debug_cu_index", &CUIndexSection)
>> // Any more debug info sections go here.
>> .Default(nullptr);
>> if (SectionData) {
>>
>> Added: llvm/trunk/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp?rev=252781&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp (added)
>> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFUnitIndex.cpp Wed Nov 11 13:28:21
>> 2015
>> @@ -0,0 +1,41 @@
>> +//===-- DWARFUnitIndex.cpp
>> ------------------------------------------------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
>> +
>> +namespace llvm {
>> +
>> +bool DWARFUnitIndex::Header::parse(DataExtractor IndexData, uint32_t
>> *OffsetPtr) {
>>
>
> Check IndexData.isValidOffsetForDataOfSize(*OffsetPtr, 16)?
>
I haven't seen much bounds checking like this, though I can certainly add
some to avoid us printing out zeros that aren't actually present in the
input. Added some checks like this in r252843
>
>
>> + Version = IndexData.getU32(OffsetPtr);
>> + NumColumns = IndexData.getU32(OffsetPtr);
>> + NumUnits = IndexData.getU32(OffsetPtr);
>> + NumBuckets = IndexData.getU32(OffsetPtr);
>> + return Version <= 2;
>> +}
>> +
>> +void DWARFUnitIndex::Header::dump(raw_ostream &OS) const {
>> + OS << "Index header:\n" << format(" version: %u\n", Version)
>> + << format(" columns: %u\n", NumColumns)
>> + << format(" units: %u\n", NumUnits)
>> + << format(" buckets: %u\n", NumBuckets);
>> +}
>> +
>> +bool DWARFUnitIndex::parse(DataExtractor IndexData) {
>> + uint32_t Offset = 0;
>> + if (!Header.parse(IndexData, &Offset))
>> + return false;
>> +
>> + return true;
>>
>
> return Header.parse(IndexData, &Offset)?
>
> (yeah, I understand you probably will add more stuff here).
>
Yeah, I was tossing up which way to leave that when committed. New stuff is
in there in r252842 that justifies the 'if' more. Though I might end up
refactoring away the header struct anyway... we'll see.
Thanks,
- Dave
>
>
>> +}
>> +
>> +void DWARFUnitIndex::dump(raw_ostream &OS) const {
>> + Header.dump(OS);
>> +}
>> +
>> +}
>>
>> Added: llvm/trunk/test/DebugInfo/Inputs/dwarfdump-dwp.x86_64.o
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/dwarfdump-dwp.x86_64.o?rev=252781&view=auto
>>
>> ==============================================================================
>> Binary files llvm/trunk/test/DebugInfo/Inputs/dwarfdump-dwp.x86_64.o
>> (added) and llvm/trunk/test/DebugInfo/Inputs/dwarfdump-dwp.x86_64.o Wed Nov
>> 11 13:28:21 2015 differ
>>
>> Added: llvm/trunk/test/DebugInfo/dwarfdump-dwp.test
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/dwarfdump-dwp.test?rev=252781&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/dwarfdump-dwp.test (added)
>> +++ llvm/trunk/test/DebugInfo/dwarfdump-dwp.test Wed Nov 11 13:28:21 2015
>> @@ -0,0 +1,19 @@
>> +RUN: llvm-dwarfdump %p/Inputs/dwarfdump-dwp.x86_64.o | FileCheck %s
>> +
>> +; Testing the following simple dwp file:
>> +; a.cpp:
>> +; struct foo { };
>> +; foo a;
>> +; b.cpp:
>> +; struct foo { };
>> +; foo b;
>> +
>> +; CHECK: .debug_cu_index contents:
>> +; CHECK: version: 2
>> +; CHECK: columns: 4
>> +; CHECK: units: 2
>> +; CHECK: buckets: 16
>> +
>> +; TODO: debug_tu_index
>> +; TODO: dump the index contents
>> +; TODO: use the index section offset info to correctly dump debug_info
>>
>> Modified: llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp?rev=252781&r1=252780&r2=252781&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp (original)
>> +++ llvm/trunk/tools/llvm-dwarfdump/llvm-dwarfdump.cpp Wed Nov 11
>> 13:28:21 2015
>> @@ -68,6 +68,7 @@ DumpType("debug-dump", cl::init(DIDT_All
>> clEnumValN(DIDT_Str, "str", ".debug_str"),
>> clEnumValN(DIDT_StrDwo, "str.dwo", ".debug_str.dwo"),
>> clEnumValN(DIDT_StrOffsetsDwo, "str_offsets.dwo",
>> ".debug_str_offsets.dwo"),
>> + clEnumValN(DIDT_CUIndex, "cu_index", ".debug_cu_index"),
>> clEnumValEnd));
>>
>> static void error(StringRef Filename, std::error_code EC) {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> Alexey Samsonov
> vonosmas at gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151111/82bcaf17/attachment.html>
More information about the llvm-commits
mailing list