1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[DebugInfo] Fix some Include What You Use warnings; other minor fixes (NFC).

llvm-svn: 296559
This commit is contained in:
Eugene Zelenko 2017-03-01 01:14:23 +00:00
parent 9d0a55ab5e
commit cf3512dc12
24 changed files with 276 additions and 157 deletions

View File

@ -1,4 +1,4 @@
//===-- DWARFContext.h ------------------------------------------*- C++ -*-===// //===- DWARFContext.h -------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,8 +7,8 @@
// //
//===----------------------------------------------------------------------===/ //===----------------------------------------------------------------------===/
#ifndef LLVM_LIB_DEBUGINFO_DWARFCONTEXT_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H
#define LLVM_LIB_DEBUGINFO_DWARFCONTEXT_H #define LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H
#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/iterator_range.h" #include "llvm/ADT/iterator_range.h"
@ -31,6 +31,7 @@
#include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h" #include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/Object/ObjectFile.h" #include "llvm/Object/ObjectFile.h"
#include "llvm/Support/Host.h"
#include <cstdint> #include <cstdint>
#include <deque> #include <deque>
#include <map> #include <map>
@ -39,6 +40,9 @@
namespace llvm { namespace llvm {
class MemoryBuffer;
class raw_ostream;
// In place of applying the relocations to the data we've read from disk we use // In place of applying the relocations to the data we've read from disk we use
// a separate mapping table to the side and checking that at locations in the // a separate mapping table to the side and checking that at locations in the
// dwarf where we expect relocated values. This adds a bit of complexity to the // dwarf where we expect relocated values. This adds a bit of complexity to the
@ -328,20 +332,26 @@ public:
// Sections for DWARF5 split dwarf proposal. // Sections for DWARF5 split dwarf proposal.
const DWARFSection &getInfoDWOSection() override { return InfoDWOSection; } const DWARFSection &getInfoDWOSection() override { return InfoDWOSection; }
const TypeSectionMap &getTypesDWOSections() override { const TypeSectionMap &getTypesDWOSections() override {
return TypesDWOSections; return TypesDWOSections;
} }
StringRef getAbbrevDWOSection() override { return AbbrevDWOSection; } StringRef getAbbrevDWOSection() override { return AbbrevDWOSection; }
const DWARFSection &getLineDWOSection() override { return LineDWOSection; } const DWARFSection &getLineDWOSection() override { return LineDWOSection; }
const DWARFSection &getLocDWOSection() override { return LocDWOSection; } const DWARFSection &getLocDWOSection() override { return LocDWOSection; }
StringRef getStringDWOSection() override { return StringDWOSection; } StringRef getStringDWOSection() override { return StringDWOSection; }
StringRef getStringOffsetDWOSection() override { StringRef getStringOffsetDWOSection() override {
return StringOffsetDWOSection; return StringOffsetDWOSection;
} }
StringRef getRangeDWOSection() override { return RangeDWOSection; } StringRef getRangeDWOSection() override { return RangeDWOSection; }
StringRef getAddrSection() override { StringRef getAddrSection() override {
return AddrSection; return AddrSection;
} }
StringRef getCUIndexSection() override { return CUIndexSection; } StringRef getCUIndexSection() override { return CUIndexSection; }
StringRef getGdbIndexSection() override { return GdbIndexSection; } StringRef getGdbIndexSection() override { return GdbIndexSection; }
StringRef getTUIndexSection() override { return TUIndexSection; } StringRef getTUIndexSection() override { return TUIndexSection; }
@ -349,4 +359,4 @@ public:
} // end namespace llvm } // end namespace llvm
#endif // LLVM_LIB_DEBUGINFO_DWARFCONTEXT_H #endif // LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugFrame.h - Parsing of .debug_frame -------------*- C++ -*-===// //===- DWARFDebugFrame.h - Parsing of .debug_frame --------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,23 +7,24 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFDEBUGFRAME_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGFRAME_H
#define LLVM_LIB_DEBUGINFO_DWARFDEBUGFRAME_H #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGFRAME_H
#include "llvm/Support/DataExtractor.h" #include "llvm/Support/DataExtractor.h"
#include "llvm/Support/raw_ostream.h"
#include <memory> #include <memory>
#include <vector> #include <vector>
namespace llvm { namespace llvm {
class FrameEntry; class FrameEntry;
class raw_ostream;
/// \brief A parsed .debug_frame or .eh_frame section /// \brief A parsed .debug_frame or .eh_frame section
/// ///
class DWARFDebugFrame { class DWARFDebugFrame {
// True if this is parsing an eh_frame section. // True if this is parsing an eh_frame section.
bool IsEH; bool IsEH;
public: public:
DWARFDebugFrame(bool IsEH); DWARFDebugFrame(bool IsEH);
~DWARFDebugFrame(); ~DWARFDebugFrame();
@ -39,7 +40,6 @@ private:
std::vector<std::unique_ptr<FrameEntry>> Entries; std::vector<std::unique_ptr<FrameEntry>> Entries;
}; };
} // end namespace llvm
} // namespace llvm #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGFRAME_H
#endif

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugLoc.h -----------------------------------------*- C++ -*-===// //===- DWARFDebugLoc.h ------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,12 +7,13 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFDEBUGLOC_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGLOC_H
#define LLVM_LIB_DEBUGINFO_DWARFDEBUGLOC_H #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGLOC_H
#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SmallVector.h"
#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
#include "llvm/Support/DataExtractor.h" #include "llvm/Support/DataExtractor.h"
#include <cstdint>
namespace llvm { namespace llvm {
@ -49,8 +50,10 @@ class DWARFDebugLoc {
public: public:
DWARFDebugLoc(const RelocAddrMap &LocRelocMap) : RelocMap(LocRelocMap) {} DWARFDebugLoc(const RelocAddrMap &LocRelocMap) : RelocMap(LocRelocMap) {}
/// Print the location lists found within the debug_loc section. /// Print the location lists found within the debug_loc section.
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
/// Parse the debug_loc section accessible via the 'data' parameter using the /// Parse the debug_loc section accessible via the 'data' parameter using the
/// specified address size to interpret the address ranges. /// specified address size to interpret the address ranges.
void parse(DataExtractor data, unsigned AddressSize); void parse(DataExtractor data, unsigned AddressSize);
@ -76,6 +79,7 @@ public:
void parse(DataExtractor data); void parse(DataExtractor data);
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
}; };
}
#endif } // end namespace llvm
#endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGLOC_H

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugMacro.h ---------------------------------------*- C++ -*-===// //===- DWARFDebugMacro.h ----------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -50,6 +50,7 @@ public:
/// Print the macro list found within the debug_macinfo section. /// Print the macro list found within the debug_macinfo section.
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
/// Parse the debug_macinfo section accessible via the 'data' parameter. /// Parse the debug_macinfo section accessible via the 'data' parameter.
void parse(DataExtractor data); void parse(DataExtractor data);
}; };

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugPubTable.h ------------------------------------*- C++ -*-===// //===- DWARFDebugPubTable.h -------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,13 +7,13 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFDEBUGPUBTABLE_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H
#define LLVM_LIB_DEBUGINFO_DWARFDEBUGPUBTABLE_H #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H
#include "llvm/ADT/iterator_range.h"
#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/ArrayRef.h"
#include "llvm/Support/DataExtractor.h" #include "llvm/ADT/StringRef.h"
#include "llvm/Support/Dwarf.h" #include "llvm/Support/Dwarf.h"
#include <cstdint>
#include <vector> #include <vector>
namespace llvm { namespace llvm {
@ -28,7 +28,7 @@ public:
uint32_t SecOffset; uint32_t SecOffset;
/// An entry of the various gnu_pub* debug sections. /// An entry of the various gnu_pub* debug sections.
llvm::dwarf::PubIndexEntryDescriptor Descriptor; dwarf::PubIndexEntryDescriptor Descriptor;
/// The name of the object as given by the DW_AT_name attribute of the /// The name of the object as given by the DW_AT_name attribute of the
/// referenced DIE. /// referenced DIE.
@ -68,10 +68,12 @@ private:
public: public:
DWARFDebugPubTable(StringRef Data, bool LittleEndian, bool GnuStyle); DWARFDebugPubTable(StringRef Data, bool LittleEndian, bool GnuStyle);
void dump(StringRef Name, raw_ostream &OS) const; void dump(StringRef Name, raw_ostream &OS) const;
ArrayRef<Set> getData() { return Sets; } ArrayRef<Set> getData() { return Sets; }
}; };
}
#endif } // end namespace llvm
#endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGPUBTABLE_H

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugRangeList.h -----------------------------------*- C++ -*-===// //===- DWARFDebugRangeList.h ------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,10 +7,13 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFDEBUGRANGELIST_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFDEBUGRANGELIST_H
#define LLVM_LIB_DEBUGINFO_DWARFDEBUGRANGELIST_H #define LLVM_DEBUGINFO_DWARF_DWARFDEBUGRANGELIST_H
#include "llvm/Support/DataExtractor.h" #include "llvm/Support/DataExtractor.h"
#include <cassert>
#include <cstdint>
#include <utility>
#include <vector> #include <vector>
namespace llvm { namespace llvm {
@ -34,12 +37,14 @@ public:
// address past the end of the address range. The ending address must // address past the end of the address range. The ending address must
// be greater than or equal to the beginning address. // be greater than or equal to the beginning address.
uint64_t EndAddress; uint64_t EndAddress;
// The end of any given range list is marked by an end of list entry, // The end of any given range list is marked by an end of list entry,
// which consists of a 0 for the beginning address offset // which consists of a 0 for the beginning address offset
// and a 0 for the ending address offset. // and a 0 for the ending address offset.
bool isEndOfListEntry() const { bool isEndOfListEntry() const {
return (StartAddress == 0) && (EndAddress == 0); return (StartAddress == 0) && (EndAddress == 0);
} }
// A base address selection entry consists of: // A base address selection entry consists of:
// 1. The value of the largest representable address offset // 1. The value of the largest representable address offset
// (for example, 0xffffffff when the size of an address is 32 bits). // (for example, 0xffffffff when the size of an address is 32 bits).
@ -63,6 +68,7 @@ private:
public: public:
DWARFDebugRangeList() { clear(); } DWARFDebugRangeList() { clear(); }
void clear(); void clear();
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
bool extract(DataExtractor data, uint32_t *offset_ptr); bool extract(DataExtractor data, uint32_t *offset_ptr);
@ -74,6 +80,6 @@ public:
DWARFAddressRangesVector getAbsoluteRanges(uint64_t BaseAddress) const; DWARFAddressRangesVector getAbsoluteRanges(uint64_t BaseAddress) const;
}; };
} // namespace llvm } // end namespace llvm
#endif // LLVM_DEBUGINFO_DWARFDEBUGRANGELIST_H #endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGRANGELIST_H

View File

@ -1,4 +1,4 @@
//===-- DWARFGdbIndex.h -----------------------------------------*- C++ -*-===// //===- DWARFGdbIndex.h ------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,14 +7,19 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFGDBINDEX_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H
#define LLVM_LIB_DEBUGINFO_DWARFGDBINDEX_H #define LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/DataExtractor.h" #include "llvm/Support/DataExtractor.h"
#include "llvm/Support/Error.h" #include <cstdint>
#include "llvm/Support/raw_ostream.h" #include <utility>
namespace llvm { namespace llvm {
class raw_ostream;
class DWARFGdbIndex { class DWARFGdbIndex {
uint32_t Version; uint32_t Version;
@ -63,6 +68,7 @@ public:
bool HasContent = false; bool HasContent = false;
bool HasError = false; bool HasError = false;
}; };
}
#endif // LLVM_LIB_DEBUGINFO_DWARFGDBINDEX_H } // end namespace llvm
#endif // LLVM_DEBUGINFO_DWARF_DWARFGDBINDEX_H

View File

@ -1,4 +1,4 @@
//===-- DWARFRelocMap.h -----------------------------------------*- C++ -*-===// //===- DWARFRelocMap.h ------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,16 +7,17 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFRELOCMAP_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFRELOCMAP_H
#define LLVM_LIB_DEBUGINFO_DWARFRELOCMAP_H #define LLVM_DEBUGINFO_DWARF_DWARFRELOCMAP_H
#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMap.h"
#include <cstdint>
#include <utility>
namespace llvm { namespace llvm {
typedef DenseMap<uint64_t, std::pair<uint8_t, int64_t>> RelocAddrMap; typedef DenseMap<uint64_t, std::pair<uint8_t, int64_t>> RelocAddrMap;
} // namespace llvm } // end namespace llvm
#endif
#endif // LLVM_DEBUGINFO_DWARF_DWARFRELOCMAP_H

View File

@ -1,4 +1,4 @@
//===-- DWARFSection.h ------------------------------------------*- C++ -*-===// //===- DWARFSection.h -------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,11 +7,11 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFSECTION_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFSECTION_H
#define LLVM_LIB_DEBUGINFO_DWARFSECTION_H #define LLVM_DEBUGINFO_DWARF_DWARFSECTION_H
#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
namespace llvm { namespace llvm {
@ -20,6 +20,6 @@ struct DWARFSection {
RelocAddrMap Relocs; RelocAddrMap Relocs;
}; };
} } // end namespace llvm
#endif #endif // LLVM_DEBUGINFO_DWARF_DWARFSECTION_H

View File

@ -1,4 +1,4 @@
//===-- DWARFTypeUnit.h -----------------------------------------*- C++ -*-===// //===- DWARFTypeUnit.h ------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,17 +7,27 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFTYPEUNIT_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFTYPEUNIT_H
#define LLVM_LIB_DEBUGINFO_DWARFTYPEUNIT_H #define LLVM_DEBUGINFO_DWARF_DWARFTYPEUNIT_H
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/Support/DataExtractor.h"
#include <cstdint>
namespace llvm { namespace llvm {
class DWARFContext;
class DWARFDebugAbbrev;
struct DWARFSection;
class raw_ostream;
class DWARFTypeUnit : public DWARFUnit { class DWARFTypeUnit : public DWARFUnit {
private: private:
uint64_t TypeHash; uint64_t TypeHash;
uint32_t TypeOffset; uint32_t TypeOffset;
public: public:
DWARFTypeUnit(DWARFContext &Context, const DWARFSection &Section, DWARFTypeUnit(DWARFContext &Context, const DWARFSection &Section,
const DWARFDebugAbbrev *DA, StringRef RS, StringRef SS, const DWARFDebugAbbrev *DA, StringRef RS, StringRef SS,
@ -26,9 +36,11 @@ public:
const DWARFUnitIndex::Entry *Entry) const DWARFUnitIndex::Entry *Entry)
: DWARFUnit(Context, Section, DA, RS, SS, SOS, AOS, LS, LE, IsDWO, : DWARFUnit(Context, Section, DA, RS, SS, SOS, AOS, LS, LE, IsDWO,
UnitSection, Entry) {} UnitSection, Entry) {}
uint32_t getHeaderSize() const override { uint32_t getHeaderSize() const override {
return DWARFUnit::getHeaderSize() + 12; return DWARFUnit::getHeaderSize() + 12;
} }
void dump(raw_ostream &OS, bool Brief = false); void dump(raw_ostream &OS, bool Brief = false);
static const DWARFSectionKind Section = DW_SECT_TYPES; static const DWARFSectionKind Section = DW_SECT_TYPES;
@ -36,7 +48,6 @@ protected:
bool extractImpl(DataExtractor debug_info, uint32_t *offset_ptr) override; bool extractImpl(DataExtractor debug_info, uint32_t *offset_ptr) override;
}; };
} } // end namespace llvm
#endif
#endif // LLVM_DEBUGINFO_DWARF_DWARFTYPEUNIT_H

View File

@ -1,4 +1,4 @@
//===-- DWARFUnit.h ---------------------------------------------*- C++ -*-===// //===- DWARFUnit.h ----------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,32 +7,37 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFUNIT_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFUNIT_H
#define LLVM_LIB_DEBUGINFO_DWARFUNIT_H #define LLVM_DEBUGINFO_DWARF_DWARFUNIT_H
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/iterator_range.h" #include "llvm/ADT/iterator_range.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h" #include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
#include "llvm/DebugInfo/DWARF/DWARFDie.h" #include "llvm/DebugInfo/DWARF/DWARFDie.h"
#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h" #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
#include "llvm/DebugInfo/DWARF/DWARFSection.h" #include "llvm/DebugInfo/DWARF/DWARFSection.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h" #include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/Object/Binary.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/DataExtractor.h"
#include "llvm/Support/Dwarf.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <vector> #include <vector>
namespace llvm { namespace llvm {
namespace object { class DWARFAbbreviationDeclarationSet;
class ObjectFile;
}
class DWARFContext; class DWARFContext;
class DWARFDebugAbbrev; class DWARFDebugAbbrev;
class DWARFUnit; class DWARFUnit;
class StringRef;
class raw_ostream;
/// Base class for all DWARFUnitSection classes. This provides the /// Base class for all DWARFUnitSection classes. This provides the
/// functionality common to all unit types. /// functionality common to all unit types.
@ -47,12 +52,12 @@ public:
DWARFUnitIndex *Index = nullptr); DWARFUnitIndex *Index = nullptr);
protected: protected:
~DWARFUnitSectionBase() = default;
virtual void parseImpl(DWARFContext &Context, const DWARFSection &Section, virtual void parseImpl(DWARFContext &Context, const DWARFSection &Section,
const DWARFDebugAbbrev *DA, StringRef RS, StringRef SS, const DWARFDebugAbbrev *DA, StringRef RS, StringRef SS,
StringRef SOS, StringRef AOS, StringRef LS, StringRef SOS, StringRef AOS, StringRef LS,
bool isLittleEndian, bool isDWO) = 0; bool isLittleEndian, bool isDWO) = 0;
~DWARFUnitSectionBase() = default;
}; };
const DWARFUnitIndex &getDWARFUnitIndex(DWARFContext &Context, const DWARFUnitIndex &getDWARFUnitIndex(DWARFContext &Context,
@ -65,7 +70,7 @@ class DWARFUnitSection final : public SmallVector<std::unique_ptr<UnitType>, 1>,
bool Parsed = false; bool Parsed = false;
public: public:
typedef llvm::SmallVectorImpl<std::unique_ptr<UnitType>> UnitVector; typedef SmallVectorImpl<std::unique_ptr<UnitType>> UnitVector;
typedef typename UnitVector::iterator iterator; typedef typename UnitVector::iterator iterator;
typedef llvm::iterator_range<typename UnitVector::iterator> iterator_range; typedef llvm::iterator_range<typename UnitVector::iterator> iterator_range;
@ -135,9 +140,11 @@ class DWARFUnit {
class DWOHolder { class DWOHolder {
object::OwningBinary<object::ObjectFile> DWOFile; object::OwningBinary<object::ObjectFile> DWOFile;
std::unique_ptr<DWARFContext> DWOContext; std::unique_ptr<DWARFContext> DWOContext;
DWARFUnit *DWOU; DWARFUnit *DWOU = nullptr;
public: public:
DWOHolder(StringRef DWOPath); DWOHolder(StringRef DWOPath);
DWARFUnit *getUnit() const { return DWOU; } DWARFUnit *getUnit() const { return DWOU; }
}; };
std::unique_ptr<DWOHolder> DWO; std::unique_ptr<DWOHolder> DWO;
@ -152,6 +159,7 @@ class DWARFUnit {
protected: protected:
virtual bool extractImpl(DataExtractor debug_info, uint32_t *offset_ptr); virtual bool extractImpl(DataExtractor debug_info, uint32_t *offset_ptr);
/// Size in bytes of the unit header. /// Size in bytes of the unit header.
virtual uint32_t getHeaderSize() const { return Version <= 4 ? 11 : 12; } virtual uint32_t getHeaderSize() const { return Version <= 4 ? 11 : 12; }
@ -169,10 +177,12 @@ public:
StringRef getLineSection() const { return LineSection; } StringRef getLineSection() const { return LineSection; }
StringRef getStringSection() const { return StringSection; } StringRef getStringSection() const { return StringSection; }
StringRef getStringOffsetSection() const { return StringOffsetSection; } StringRef getStringOffsetSection() const { return StringOffsetSection; }
void setAddrOffsetSection(StringRef AOS, uint32_t Base) { void setAddrOffsetSection(StringRef AOS, uint32_t Base) {
AddrOffsetSection = AOS; AddrOffsetSection = AOS;
AddrOffsetSectionBase = Base; AddrOffsetSectionBase = Base;
} }
void setRangesSection(StringRef RS, uint32_t Base) { void setRangesSection(StringRef RS, uint32_t Base) {
RangeSection = RS; RangeSection = RS;
RangeSectionBase = Base; RangeSectionBase = Base;
@ -185,6 +195,7 @@ public:
DataExtractor getDebugInfoExtractor() const { DataExtractor getDebugInfoExtractor() const {
return DataExtractor(InfoSection.Data, isLittleEndian, AddrSize); return DataExtractor(InfoSection.Data, isLittleEndian, AddrSize);
} }
DataExtractor getStringExtractor() const { DataExtractor getStringExtractor() const {
return DataExtractor(StringSection, false, 0); return DataExtractor(StringSection, false, 0);
} }
@ -203,24 +214,30 @@ public:
uint32_t getNextUnitOffset() const { return Offset + Length + 4; } uint32_t getNextUnitOffset() const { return Offset + Length + 4; }
uint32_t getLength() const { return Length; } uint32_t getLength() const { return Length; }
uint16_t getVersion() const { return Version; } uint16_t getVersion() const { return Version; }
dwarf::DwarfFormat getFormat() const { dwarf::DwarfFormat getFormat() const {
return dwarf::DwarfFormat::DWARF32; // FIXME: Support DWARF64. return dwarf::DwarfFormat::DWARF32; // FIXME: Support DWARF64.
} }
const DWARFAbbreviationDeclarationSet *getAbbreviations() const { const DWARFAbbreviationDeclarationSet *getAbbreviations() const {
return Abbrevs; return Abbrevs;
} }
uint8_t getUnitType() const { return UnitType; } uint8_t getUnitType() const { return UnitType; }
uint8_t getAddressByteSize() const { return AddrSize; } uint8_t getAddressByteSize() const { return AddrSize; }
uint8_t getRefAddrByteSize() const { uint8_t getRefAddrByteSize() const {
if (Version == 2) if (Version == 2)
return AddrSize; return AddrSize;
return getDwarfOffsetByteSize(); return getDwarfOffsetByteSize();
} }
uint8_t getDwarfOffsetByteSize() const { uint8_t getDwarfOffsetByteSize() const {
if (getFormat() == dwarf::DwarfFormat::DWARF64) if (getFormat() == dwarf::DwarfFormat::DWARF64)
return 8; return 8;
return 4; return 4;
} }
uint64_t getBaseAddress() const { return BaseAddr; } uint64_t getBaseAddress() const { return BaseAddr; }
void setBaseAddress(uint64_t base_addr) { void setBaseAddress(uint64_t base_addr) {
@ -310,9 +327,11 @@ private:
/// extractDIEsIfNeeded - Parses a compile unit and indexes its DIEs if it /// extractDIEsIfNeeded - Parses a compile unit and indexes its DIEs if it
/// hasn't already been done. Returns the number of DIEs parsed at this call. /// hasn't already been done. Returns the number of DIEs parsed at this call.
size_t extractDIEsIfNeeded(bool CUDieOnly); size_t extractDIEsIfNeeded(bool CUDieOnly);
/// extractDIEsToVector - Appends all parsed DIEs to a vector. /// extractDIEsToVector - Appends all parsed DIEs to a vector.
void extractDIEsToVector(bool AppendCUDie, bool AppendNonCUDIEs, void extractDIEsToVector(bool AppendCUDie, bool AppendNonCUDIEs,
std::vector<DWARFDebugInfoEntry> &DIEs) const; std::vector<DWARFDebugInfoEntry> &DIEs) const;
/// clearDIEs - Clear parsed DIEs to keep memory usage low. /// clearDIEs - Clear parsed DIEs to keep memory usage low.
void clearDIEs(bool KeepCUDie); void clearDIEs(bool KeepCUDie);
@ -326,6 +345,6 @@ private:
DWARFDie getSubprogramForAddress(uint64_t Address); DWARFDie getSubprogramForAddress(uint64_t Address);
}; };
} } // end namespace llvm
#endif #endif // LLVM_DEBUGINFO_DWARF_DWARFUNIT_H

View File

@ -1,4 +1,4 @@
//===-- DWARFUnitIndex.h --------------------------------------------------===// //===- DWARFUnitIndex.h -----------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,17 +7,19 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_LIB_DEBUGINFO_DWARFUNITINDEX_H #ifndef LLVM_DEBUGINFO_DWARF_DWARFUNITINDEX_H
#define LLVM_LIB_DEBUGINFO_DWARFUNITINDEX_H #define LLVM_DEBUGINFO_DWARF_DWARFUNITINDEX_H
#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/DataExtractor.h" #include "llvm/Support/DataExtractor.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdint> #include <cstdint>
#include <memory>
namespace llvm { namespace llvm {
class raw_ostream;
enum DWARFSectionKind { enum DWARFSectionKind {
DW_SECT_INFO = 1, DW_SECT_INFO = 1,
DW_SECT_TYPES, DW_SECT_TYPES,
@ -57,9 +59,11 @@ public:
public: public:
const SectionContribution *getOffset(DWARFSectionKind Sec) const; const SectionContribution *getOffset(DWARFSectionKind Sec) const;
const SectionContribution *getOffset() const; const SectionContribution *getOffset() const;
const SectionContribution *getOffsets() const { const SectionContribution *getOffsets() const {
return Contributions.get(); return Contributions.get();
} }
uint64_t getSignature() const { return Signature; } uint64_t getSignature() const { return Signature; }
}; };
@ -72,21 +76,26 @@ private:
std::unique_ptr<Entry[]> Rows; std::unique_ptr<Entry[]> Rows;
static StringRef getColumnHeader(DWARFSectionKind DS); static StringRef getColumnHeader(DWARFSectionKind DS);
bool parseImpl(DataExtractor IndexData); bool parseImpl(DataExtractor IndexData);
public: public:
bool parse(DataExtractor IndexData);
DWARFUnitIndex(DWARFSectionKind InfoColumnKind) DWARFUnitIndex(DWARFSectionKind InfoColumnKind)
: InfoColumnKind(InfoColumnKind) {} : InfoColumnKind(InfoColumnKind) {}
bool parse(DataExtractor IndexData);
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
const Entry *getFromOffset(uint32_t Offset) const; const Entry *getFromOffset(uint32_t Offset) const;
ArrayRef<DWARFSectionKind> getColumnKinds() const { ArrayRef<DWARFSectionKind> getColumnKinds() const {
return makeArrayRef(ColumnKinds.get(), Header.NumColumns); return makeArrayRef(ColumnKinds.get(), Header.NumColumns);
} }
ArrayRef<Entry> getRows() const { ArrayRef<Entry> getRows() const {
return makeArrayRef(Rows.get(), Header.NumBuckets); return makeArrayRef(Rows.get(), Header.NumBuckets);
} }
}; };
}
#endif } // end namespace llvm
#endif // LLVM_DEBUGINFO_DWARF_DWARFUNITINDEX_H

View File

@ -1,4 +1,4 @@
//===-- DWARFContext.cpp --------------------------------------------------===// //===- DWARFContext.cpp ---------------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,23 +7,45 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h" #include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h"
#include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h"
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAranges.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h" #include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugLine.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugMacro.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h" #include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
#include "llvm/DebugInfo/DWARF/DWARFDie.h"
#include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
#include "llvm/DebugInfo/DWARF/DWARFGdbIndex.h"
#include "llvm/DebugInfo/DWARF/DWARFSection.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h" #include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/Object/Decompressor.h" #include "llvm/Object/Decompressor.h"
#include "llvm/Object/MachO.h" #include "llvm/Object/MachO.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Object/RelocVisitor.h" #include "llvm/Object/RelocVisitor.h"
#include "llvm/Support/Compression.h" #include "llvm/Support/Casting.h"
#include "llvm/Support/Dwarf.h" #include "llvm/Support/DataExtractor.h"
#include "llvm/Support/ELF.h" #include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
#include "llvm/Support/Path.h" #include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include <algorithm> #include <algorithm>
#include <cstdint>
#include <string>
#include <utility>
#include <vector>
using namespace llvm; using namespace llvm;
using namespace dwarf; using namespace dwarf;
using namespace object; using namespace object;
@ -756,7 +778,7 @@ DWARFContextInMemory::DWARFContextInMemory(const object::ObjectFile &Obj,
// we need to perform the same computation. // we need to perform the same computation.
StringRef SecName; StringRef SecName;
RSec->getName(SecName); RSec->getName(SecName);
// llvm::dbgs() << "Name: '" << SecName // dbgs() << "Name: '" << SecName
// << "', RSec: " << RSec->getRawDataRefImpl() // << "', RSec: " << RSec->getRawDataRefImpl()
// << ", Section: " << Section.getRawDataRefImpl() << "\n"; // << ", Section: " << Section.getRawDataRefImpl() << "\n";
SectionLoadAddress = L->getSectionLoadAddress(*RSec); SectionLoadAddress = L->getSectionLoadAddress(*RSec);

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugFrame.h - Parsing of .debug_frame -------------*- C++ -*-===// //===- DWARFDebugFrame.h - Parsing of .debug_frame ------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,7 +7,6 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h"
#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Optional.h" #include "llvm/ADT/Optional.h"
@ -15,6 +14,7 @@
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h"
#include "llvm/Support/Casting.h" #include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include "llvm/Support/DataExtractor.h" #include "llvm/Support/DataExtractor.h"
@ -465,8 +465,7 @@ void FrameEntry::dumpInstructions(raw_ostream &OS) const {
} }
} }
DWARFDebugFrame::DWARFDebugFrame(bool IsEH) : IsEH(IsEH) { DWARFDebugFrame::DWARFDebugFrame(bool IsEH) : IsEH(IsEH) {}
}
DWARFDebugFrame::~DWARFDebugFrame() = default; DWARFDebugFrame::~DWARFDebugFrame() = default;
@ -485,17 +484,17 @@ static unsigned getSizeForEncoding(const DataExtractor &Data,
unsigned format = symbolEncoding & 0x0f; unsigned format = symbolEncoding & 0x0f;
switch (format) { switch (format) {
default: llvm_unreachable("Unknown Encoding"); default: llvm_unreachable("Unknown Encoding");
case dwarf::DW_EH_PE_absptr: case DW_EH_PE_absptr:
case dwarf::DW_EH_PE_signed: case DW_EH_PE_signed:
return Data.getAddressSize(); return Data.getAddressSize();
case dwarf::DW_EH_PE_udata2: case DW_EH_PE_udata2:
case dwarf::DW_EH_PE_sdata2: case DW_EH_PE_sdata2:
return 2; return 2;
case dwarf::DW_EH_PE_udata4: case DW_EH_PE_udata4:
case dwarf::DW_EH_PE_sdata4: case DW_EH_PE_sdata4:
return 4; return 4;
case dwarf::DW_EH_PE_udata8: case DW_EH_PE_udata8:
case dwarf::DW_EH_PE_sdata8: case DW_EH_PE_sdata8:
return 8; return 8;
} }
} }

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugLoc.cpp -------------------------------------------------===// //===- DWARFDebugLoc.cpp --------------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,10 +7,15 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h" #include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h"
#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
#include "llvm/Support/Dwarf.h" #include "llvm/Support/Dwarf.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cinttypes>
#include <cstdint>
using namespace llvm; using namespace llvm;
@ -71,7 +76,7 @@ void DWARFDebugLoc::parse(DataExtractor data, unsigned AddressSize) {
} }
} }
if (data.isValidOffset(Offset)) if (data.isValidOffset(Offset))
llvm::errs() << "error: failed to consume entire .debug_loc section\n"; errs() << "error: failed to consume entire .debug_loc section\n";
} }
void DWARFDebugLocDWO::parse(DataExtractor data) { void DWARFDebugLocDWO::parse(DataExtractor data) {
@ -85,7 +90,7 @@ void DWARFDebugLocDWO::parse(DataExtractor data) {
data.getU8(&Offset))) != dwarf::DW_LLE_end_of_list) { data.getU8(&Offset))) != dwarf::DW_LLE_end_of_list) {
if (Kind != dwarf::DW_LLE_startx_length) { if (Kind != dwarf::DW_LLE_startx_length) {
llvm::errs() << "error: dumping support for LLE of kind " << (int)Kind errs() << "error: dumping support for LLE of kind " << (int)Kind
<< " not implemented\n"; << " not implemented\n";
return; return;
} }
@ -123,4 +128,3 @@ void DWARFDebugLocDWO::dump(raw_ostream &OS) const {
} }
} }
} }

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugMacro.cpp -----------------------------------------------===// //===- DWARFDebugMacro.cpp ------------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,11 +7,11 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/DWARF/DWARFDebugMacro.h"
#include "SyntaxHighlighting.h" #include "SyntaxHighlighting.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugMacro.h"
#include "llvm/Support/Dwarf.h" #include "llvm/Support/Dwarf.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include <cstdint>
using namespace llvm; using namespace llvm;
using namespace dwarf; using namespace dwarf;

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugPubTable.cpp ---------------------------------------------===// //===- DWARFDebugPubTable.cpp ---------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,12 +7,16 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h" #include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h"
#include "llvm/Support/DataExtractor.h"
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include <cstdint>
using namespace llvm; using namespace llvm;
using namespace llvm::dwarf; using namespace dwarf;
DWARFDebugPubTable::DWARFDebugPubTable(StringRef Data, bool LittleEndian, DWARFDebugPubTable::DWARFDebugPubTable(StringRef Data, bool LittleEndian,
bool GnuStyle) bool GnuStyle)
@ -54,7 +58,7 @@ void DWARFDebugPubTable::dump(StringRef Name, raw_ostream &OS) const {
OS << format("0x%8.8x ", E.SecOffset); OS << format("0x%8.8x ", E.SecOffset);
if (GnuStyle) { if (GnuStyle) {
StringRef EntryLinkage = StringRef EntryLinkage =
dwarf::GDBIndexEntryLinkageString(E.Descriptor.Linkage); GDBIndexEntryLinkageString(E.Descriptor.Linkage);
StringRef EntryKind = dwarf::GDBIndexEntryKindString(E.Descriptor.Kind); StringRef EntryKind = dwarf::GDBIndexEntryKindString(E.Descriptor.Kind);
OS << format("%-8s", EntryLinkage.data()) << ' ' OS << format("%-8s", EntryLinkage.data()) << ' '
<< format("%-8s", EntryKind.data()) << ' '; << format("%-8s", EntryKind.data()) << ' ';

View File

@ -1,4 +1,4 @@
//===-- DWARFDebugRangesList.cpp ------------------------------------------===// //===- DWARFDebugRangesList.cpp -------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -10,6 +10,9 @@
#include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h" #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include <cinttypes>
#include <cstdint>
#include <utility>
using namespace llvm; using namespace llvm;

View File

@ -1,4 +1,4 @@
//===-- DWARFGdbIndex.cpp -------------------------------------------------===// //===- DWARFGdbIndex.cpp --------------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,10 +7,16 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFGdbIndex.h" #include "llvm/DebugInfo/DWARF/DWARFGdbIndex.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cinttypes>
#include <cstdint>
#include <utility>
using namespace llvm; using namespace llvm;

View File

@ -1,4 +1,4 @@
//===-- DWARFTypeUnit.cpp -------------------------------------------------===// //===- DWARFTypeUnit.cpp --------------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,11 +7,14 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/DIContext.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h"
#include "llvm/DebugInfo/DWARF/DWARFDie.h"
#include "llvm/DebugInfo/DWARF/DWARFTypeUnit.h" #include "llvm/DebugInfo/DWARF/DWARFTypeUnit.h"
#include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h"
#include "llvm/Support/Dwarf.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
#include <cinttypes>
using namespace llvm; using namespace llvm;

View File

@ -13,6 +13,8 @@
#include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" #include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h"
#include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" #include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h"
#include "llvm/DebugInfo/DWARF/DWARFDie.h"
#include "llvm/DebugInfo/DWARF/DWARFFormValue.h" #include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
#include "llvm/DebugInfo/DWARF/DWARFUnit.h" #include "llvm/DebugInfo/DWARF/DWARFUnit.h"
#include "llvm/Object/ObjectFile.h" #include "llvm/Object/ObjectFile.h"
@ -21,12 +23,12 @@
#include "llvm/Support/Path.h" #include "llvm/Support/Path.h"
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include <cstddef>
#include <cstdint> #include <cstdint>
#include <cstdio> #include <cstdio>
#include <vector> #include <vector>
namespace llvm { using namespace llvm;
using namespace dwarf; using namespace dwarf;
void DWARFUnitSectionBase::parse(DWARFContext &C, const DWARFSection &Section) { void DWARFUnitSectionBase::parse(DWARFContext &C, const DWARFSection &Section) {
@ -159,7 +161,7 @@ void DWARFUnit::clear() {
} }
const char *DWARFUnit::getCompilationDir() { const char *DWARFUnit::getCompilationDir() {
return toString(getUnitDIE().find(DW_AT_comp_dir), nullptr); return dwarf::toString(getUnitDIE().find(DW_AT_comp_dir), nullptr);
} }
Optional<uint64_t> DWARFUnit::getDWOId() { Optional<uint64_t> DWARFUnit::getDWOId() {
@ -245,8 +247,7 @@ size_t DWARFUnit::extractDIEsIfNeeded(bool CUDieOnly) {
return DieArray.size(); return DieArray.size();
} }
DWARFUnit::DWOHolder::DWOHolder(StringRef DWOPath) DWARFUnit::DWOHolder::DWOHolder(StringRef DWOPath) {
: DWOU(nullptr) {
auto Obj = object::ObjectFile::createObjectFile(DWOPath); auto Obj = object::ObjectFile::createObjectFile(DWOPath);
if (!Obj) { if (!Obj) {
// TODO: Actually report errors helpfully. // TODO: Actually report errors helpfully.
@ -268,10 +269,10 @@ bool DWARFUnit::parseDWO() {
DWARFDie UnitDie = getUnitDIE(); DWARFDie UnitDie = getUnitDIE();
if (!UnitDie) if (!UnitDie)
return false; return false;
auto DWOFileName = toString(UnitDie.find(DW_AT_GNU_dwo_name)); auto DWOFileName = dwarf::toString(UnitDie.find(DW_AT_GNU_dwo_name));
if (!DWOFileName) if (!DWOFileName)
return false; return false;
auto CompilationDir = toString(UnitDie.find(DW_AT_comp_dir)); auto CompilationDir = dwarf::toString(UnitDie.find(DW_AT_comp_dir));
SmallString<16> AbsolutePath; SmallString<16> AbsolutePath;
if (sys::path::is_relative(*DWOFileName) && CompilationDir && if (sys::path::is_relative(*DWOFileName) && CompilationDir &&
*CompilationDir) { *CompilationDir) {
@ -375,7 +376,7 @@ DWARFUnit::getInlinedChainForAddress(uint64_t Address,
InlinedChain.clear(); InlinedChain.clear();
} }
const DWARFUnitIndex &getDWARFUnitIndex(DWARFContext &Context, const DWARFUnitIndex &llvm::getDWARFUnitIndex(DWARFContext &Context,
DWARFSectionKind Kind) { DWARFSectionKind Kind) {
if (Kind == DW_SECT_INFO) if (Kind == DW_SECT_INFO)
return Context.getCUIndex(); return Context.getCUIndex();
@ -414,11 +415,10 @@ DWARFDie DWARFUnit::getSibling(const DWARFDebugInfoEntry *Die) {
return DWARFDie(); return DWARFDie();
// Find the next DIE whose depth is the same as the Die's depth. // Find the next DIE whose depth is the same as the Die's depth.
for (size_t I=getDIEIndex(Die)+1, EndIdx = DieArray.size(); I<EndIdx; ++I) { for (size_t I = getDIEIndex(Die) + 1, EndIdx = DieArray.size(); I < EndIdx;
++I) {
if (DieArray[I].getDepth() == Depth) if (DieArray[I].getDepth() == Depth)
return DWARFDie(this, &DieArray[I]); return DWARFDie(this, &DieArray[I]);
} }
return DWARFDie(); return DWARFDie();
} }
} // end namespace llvm

View File

@ -1,4 +1,4 @@
//===-- DWARFUnitIndex.cpp ------------------------------------------------===// //===- DWARFUnitIndex.cpp -------------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,12 +7,16 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <cinttypes>
#include <cstdint>
namespace llvm { using namespace llvm;
bool DWARFUnitIndex::Header::parse(DataExtractor IndexData, bool DWARFUnitIndex::Header::parse(DataExtractor IndexData,
uint32_t *OffsetPtr) { uint32_t *OffsetPtr) {
@ -152,6 +156,7 @@ DWARFUnitIndex::Entry::getOffset(DWARFSectionKind Sec) const {
return &Contributions[i]; return &Contributions[i];
return nullptr; return nullptr;
} }
const DWARFUnitIndex::Entry::SectionContribution * const DWARFUnitIndex::Entry::SectionContribution *
DWARFUnitIndex::Entry::getOffset() const { DWARFUnitIndex::Entry::getOffset() const {
return &Contributions[Index->InfoColumn]; return &Contributions[Index->InfoColumn];
@ -165,4 +170,3 @@ DWARFUnitIndex::getFromOffset(uint32_t Offset) const {
return &Rows[i]; return &Rows[i];
return nullptr; return nullptr;
} }
}

View File

@ -1,4 +1,4 @@
//===-- SyntaxHighlighting.cpp ----------------------------------*- C++ -*-===// //===- SyntaxHighlighting.cpp ---------------------------------------------===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -9,6 +9,8 @@
#include "SyntaxHighlighting.h" #include "SyntaxHighlighting.h"
#include "llvm/Support/CommandLine.h" #include "llvm/Support/CommandLine.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm; using namespace llvm;
using namespace dwarf; using namespace dwarf;
using namespace syntax; using namespace syntax;
@ -18,16 +20,16 @@ static cl::opt<cl::boolOrDefault>
cl::desc("use colored syntax highlighting (default=autodetect)"), cl::desc("use colored syntax highlighting (default=autodetect)"),
cl::init(cl::BOU_UNSET)); cl::init(cl::BOU_UNSET));
WithColor::WithColor(llvm::raw_ostream &OS, enum HighlightColor Type) : OS(OS) { WithColor::WithColor(raw_ostream &OS, enum HighlightColor Type) : OS(OS) {
// Detect color from terminal type unless the user passed the --color option. // Detect color from terminal type unless the user passed the --color option.
if (UseColor == cl::BOU_UNSET ? OS.has_colors() : UseColor == cl::BOU_TRUE) { if (UseColor == cl::BOU_UNSET ? OS.has_colors() : UseColor == cl::BOU_TRUE) {
switch (Type) { switch (Type) {
case Address: OS.changeColor(llvm::raw_ostream::YELLOW); break; case Address: OS.changeColor(raw_ostream::YELLOW); break;
case String: OS.changeColor(llvm::raw_ostream::GREEN); break; case String: OS.changeColor(raw_ostream::GREEN); break;
case Tag: OS.changeColor(llvm::raw_ostream::BLUE); break; case Tag: OS.changeColor(raw_ostream::BLUE); break;
case Attribute: OS.changeColor(llvm::raw_ostream::CYAN); break; case Attribute: OS.changeColor(raw_ostream::CYAN); break;
case Enumerator: OS.changeColor(llvm::raw_ostream::MAGENTA); break; case Enumerator: OS.changeColor(raw_ostream::MAGENTA); break;
case Macro: OS.changeColor(llvm::raw_ostream::RED); break; case Macro: OS.changeColor(raw_ostream::RED); break;
} }
} }
} }

View File

@ -1,4 +1,4 @@
//===-- SyntaxHighlighting.h ------------------------------------*- C++ -*-===// //===- SyntaxHighlighting.h -------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -10,9 +10,10 @@
#ifndef LLVM_LIB_DEBUGINFO_SYNTAXHIGHLIGHTING_H #ifndef LLVM_LIB_DEBUGINFO_SYNTAXHIGHLIGHTING_H
#define LLVM_LIB_DEBUGINFO_SYNTAXHIGHLIGHTING_H #define LLVM_LIB_DEBUGINFO_SYNTAXHIGHLIGHTING_H
#include "llvm/Support/raw_ostream.h"
namespace llvm { namespace llvm {
class raw_ostream;
namespace dwarf { namespace dwarf {
namespace syntax { namespace syntax {
@ -22,18 +23,20 @@ enum HighlightColor { Address, String, Tag, Attribute, Enumerator, Macro };
/// An RAII object that temporarily switches an output stream to a /// An RAII object that temporarily switches an output stream to a
/// specific color. /// specific color.
class WithColor { class WithColor {
llvm::raw_ostream &OS; raw_ostream &OS;
public: public:
/// To be used like this: WithColor(OS, syntax::String) << "text"; /// To be used like this: WithColor(OS, syntax::String) << "text";
WithColor(llvm::raw_ostream &OS, enum HighlightColor Type); WithColor(raw_ostream &OS, enum HighlightColor Type);
~WithColor(); ~WithColor();
llvm::raw_ostream& get() { return OS; } raw_ostream& get() { return OS; }
operator llvm::raw_ostream& () { return OS; } operator raw_ostream& () { return OS; }
}; };
}
}
}
#endif } // end namespace syntax
} // end namespace dwarf
} // end namespace llvm
#endif // LLVM_LIB_DEBUGINFO_SYNTAXHIGHLIGHTING_H