mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-29 10:25:12 +00:00
Sketch out a DWARF parser.
This introduces a new library to LLVM: libDebugInfo. It will provide debug information parsing to LLVM. Much of the design and some of the code is taken from the LLDB project. It also contains an llvm-dwarfdump tool that can dump the abbrevs and DIEs from an object file. It can be used to write tests for DWARF input and output easily. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139627 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
104
lib/DebugInfo/DWARFContext.h
Normal file
104
lib/DebugInfo/DWARFContext.h
Normal file
@@ -0,0 +1,104 @@
|
||||
//===-- DWARFContext.h ------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===/
|
||||
|
||||
#ifndef LLVM_DEBUGINFO_DWARFCONTEXT_H
|
||||
#define LLVM_DEBUGINFO_DWARFCONTEXT_H
|
||||
|
||||
#include "DWARFCompileUnit.h"
|
||||
#include "llvm/DebugInfo/DIContext.h"
|
||||
#include "llvm/ADT/OwningPtr.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class DWARFDebugAbbrev;
|
||||
|
||||
/// DWARFContext
|
||||
/// This data structure is the top level entity that deals with dwarf debug
|
||||
/// information parsing. The actual data is supplied through pure virtual
|
||||
/// methods that a concrete implementation provides.
|
||||
class DWARFContext : public DIContext {
|
||||
bool IsLittleEndian;
|
||||
|
||||
SmallVector<DWARFCompileUnit, 1> CUs;
|
||||
OwningPtr<DWARFDebugAbbrev> Abbrev;
|
||||
|
||||
DWARFContext(DWARFContext &); // = delete
|
||||
DWARFContext &operator=(DWARFContext &); // = delete
|
||||
|
||||
/// Read compile units from the debug_info section and store them in CUs.
|
||||
void parseCompileUnits();
|
||||
protected:
|
||||
DWARFContext(bool isLittleEndian) : IsLittleEndian(isLittleEndian) {}
|
||||
public:
|
||||
virtual void dump(raw_ostream &OS);
|
||||
/// Get the number of compile units in this context.
|
||||
unsigned getNumCompileUnits() {
|
||||
if (CUs.empty())
|
||||
parseCompileUnits();
|
||||
return CUs.size();
|
||||
}
|
||||
/// Get the compile unit at the specified index for this compile unit.
|
||||
DWARFCompileUnit *getCompileUnitAtIndex(unsigned index) {
|
||||
if (CUs.empty())
|
||||
parseCompileUnits();
|
||||
return &CUs[index];
|
||||
}
|
||||
|
||||
/// Get a pointer to the parsed DebugAbbrev object.
|
||||
const DWARFDebugAbbrev *getDebugAbbrev();
|
||||
|
||||
bool isLittleEndian() const { return IsLittleEndian; }
|
||||
|
||||
virtual StringRef getInfoSection() = 0;
|
||||
virtual StringRef getAbbrevSection() = 0;
|
||||
virtual StringRef getARangeSection() = 0;
|
||||
virtual StringRef getLineSection() = 0;
|
||||
virtual StringRef getStringSection() = 0;
|
||||
|
||||
static bool isSupportedVersion(unsigned version) {
|
||||
return version == 2 || version == 3;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/// DWARFContextInMemory is the simplest possible implementation of a
|
||||
/// DWARFContext. It assumes all content is available in memory and stores
|
||||
/// pointers to it.
|
||||
class DWARFContextInMemory : public DWARFContext {
|
||||
StringRef InfoSection;
|
||||
StringRef AbbrevSection;
|
||||
StringRef ARangeSection;
|
||||
StringRef LineSection;
|
||||
StringRef StringSection;
|
||||
public:
|
||||
DWARFContextInMemory(bool isLittleEndian,
|
||||
StringRef infoSection,
|
||||
StringRef abbrevSection,
|
||||
StringRef aRangeSection,
|
||||
StringRef lineSection,
|
||||
StringRef stringSection)
|
||||
: DWARFContext(isLittleEndian),
|
||||
InfoSection(infoSection),
|
||||
AbbrevSection(abbrevSection),
|
||||
ARangeSection(aRangeSection),
|
||||
LineSection(lineSection),
|
||||
StringSection(stringSection)
|
||||
{}
|
||||
|
||||
virtual StringRef getInfoSection() { return InfoSection; }
|
||||
virtual StringRef getAbbrevSection() { return AbbrevSection; }
|
||||
virtual StringRef getARangeSection() { return ARangeSection; }
|
||||
virtual StringRef getLineSection() { return LineSection; }
|
||||
virtual StringRef getStringSection() { return StringSection; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user