mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
This patch extends the libLLVMDebugInfo which contains a minimalistic DWARF parser:
1) DIContext is now able to return function name for a given instruction address (besides file/line info). 2) llvm-dwarfdump accepts flag --functions that prints the function name (if address is specified by --address flag). 3) test case that checks the basic functionality of llvm-dwarfdump added git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159512 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -26,26 +26,49 @@ class raw_ostream;
|
||||
/// DILineInfo - a format-neutral container for source line information.
|
||||
class DILineInfo {
|
||||
const char *FileName;
|
||||
const char *FunctionName;
|
||||
uint32_t Line;
|
||||
uint32_t Column;
|
||||
public:
|
||||
DILineInfo() : FileName("<invalid>"), Line(0), Column(0) {}
|
||||
DILineInfo(const char *fileName, uint32_t line, uint32_t column)
|
||||
: FileName(fileName), Line(line), Column(column) {}
|
||||
DILineInfo()
|
||||
: FileName("<invalid>"), FunctionName("<invalid>"),
|
||||
Line(0), Column(0) {}
|
||||
DILineInfo(const char *fileName, const char *functionName,
|
||||
uint32_t line, uint32_t column)
|
||||
: FileName(fileName), FunctionName(functionName),
|
||||
Line(line), Column(column) {}
|
||||
|
||||
const char *getFileName() const { return FileName; }
|
||||
const char *getFunctionName() const { return FunctionName; }
|
||||
uint32_t getLine() const { return Line; }
|
||||
uint32_t getColumn() const { return Column; }
|
||||
|
||||
bool operator==(const DILineInfo &RHS) const {
|
||||
return Line == RHS.Line && Column == RHS.Column &&
|
||||
std::strcmp(FileName, RHS.FileName) == 0;
|
||||
std::strcmp(FileName, RHS.FileName) == 0 &&
|
||||
std::strcmp(FunctionName, RHS.FunctionName) == 0;
|
||||
}
|
||||
bool operator!=(const DILineInfo &RHS) const {
|
||||
return !(*this == RHS);
|
||||
}
|
||||
};
|
||||
|
||||
/// DILineInfoSpecifier - controls which fields of DILineInfo container
|
||||
/// should be filled with data.
|
||||
class DILineInfoSpecifier {
|
||||
const uint32_t Flags; // Or'ed flags that set the info we want to fetch.
|
||||
public:
|
||||
enum Specification {
|
||||
FileLineInfo = 1 << 0,
|
||||
FunctionName = 1 << 1
|
||||
};
|
||||
// Use file/line info by default.
|
||||
DILineInfoSpecifier(uint32_t flags = FileLineInfo) : Flags(flags) {}
|
||||
bool needs(Specification spec) const {
|
||||
return (Flags & spec) > 0;
|
||||
}
|
||||
};
|
||||
|
||||
class DIContext {
|
||||
public:
|
||||
virtual ~DIContext();
|
||||
@@ -60,7 +83,8 @@ public:
|
||||
|
||||
virtual void dump(raw_ostream &OS) = 0;
|
||||
|
||||
virtual DILineInfo getLineInfoForAddress(uint64_t address) = 0;
|
||||
virtual DILineInfo getLineInfoForAddress(uint64_t address,
|
||||
DILineInfoSpecifier specifier = DILineInfoSpecifier()) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user