[llvm] r252781 - dwarfdump: First piece of support for DWP dumping
Alexey Samsonov via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 11 13:23:46 PST 2015
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)?
> + 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).
> +}
> +
> +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/48e5bc37/attachment.html>
More information about the llvm-commits
mailing list