Expand Up
@@ -166,17 +166,25 @@ static bool error(Expected<T> &ResOrErr) {
return true ;
}
static bool parseCommand (StringRef InputString, bool &IsData,
enum class Command {
Code,
Data,
Frame,
};
static bool parseCommand (StringRef InputString, Command &Cmd,
std::string &ModuleName, uint64_t &ModuleOffset) {
const char kDelimiters [] = " \n\r " ;
ModuleName = " " ;
if (InputString.consume_front (" CODE " )) {
IsData = false ;
Cmd = Command::Code ;
} else if (InputString.consume_front (" DATA " )) {
IsData = true ;
Cmd = Command::Data;
} else if (InputString.consume_front (" FRAME " )) {
Cmd = Command::Frame;
} else {
// If no cmd, assume it's CODE.
IsData = false ;
Cmd = Command::Code ;
}
const char *pos = InputString.data ();
// Skip delimiters and parse input filename (if needed).
Expand Down
Expand Up
@@ -206,10 +214,10 @@ static bool parseCommand(StringRef InputString, bool &IsData,
static void symbolizeInput (StringRef InputString, LLVMSymbolizer &Symbolizer,
DIPrinter &Printer) {
bool IsData = false ;
Command Cmd ;
std::string ModuleName;
uint64_t Offset = 0 ;
if (!parseCommand (StringRef (InputString), IsData , ModuleName, Offset)) {
if (!parseCommand (StringRef (InputString), Cmd , ModuleName, Offset)) {
outs () << InputString;
return ;
}
Expand All
@@ -221,10 +229,19 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer,
outs () << Delimiter;
}
Offset -= ClAdjustVMA;
if (IsData ) {
if (Cmd == Command::Data ) {
auto ResOrErr = Symbolizer.symbolizeData (
ModuleName, {Offset, object::SectionedAddress::UndefSection});
Printer << (error (ResOrErr) ? DIGlobal () : ResOrErr.get ());
} else if (Cmd == Command::Frame) {
auto ResOrErr = Symbolizer.symbolizeFrame (
ModuleName, {Offset, object::SectionedAddress::UndefSection});
if (!error (ResOrErr)) {
for (DILocal Local : *ResOrErr)
Printer << Local;
if (ResOrErr->empty ())
outs () << " ??\n " ;
}
} else if (ClPrintInlining) {
auto ResOrErr = Symbolizer.symbolizeInlinedCode (
ModuleName, {Offset, object::SectionedAddress::UndefSection});
Expand Down