mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 14:10:41 +00:00
6e1f066adf
This is the second part of a multi-part change to define additional subcommands to the `llvm-xray` tool. This change defines a conversion subcommand to take XRay log files, and turns them from one format to another (binary or YAML). This currently only supports the first version of the log file format, defined in the compiler-rt runtime. Depends on D21987. Reviewers: dblaikie, echristo Subscribers: mehdi_amini, dberris, beanz, llvm-commits Differential Revision: https://reviews.llvm.org/D24376 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291529 91177308-0d34-0410-b5e6-96231b3b80d8
61 lines
1.7 KiB
C++
61 lines
1.7 KiB
C++
//===- xray-fc-account.cc - XRay Function Call Accounting Tool ------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Implementation of the helper tools dealing with XRay-generated function ids.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "func-id-helper.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include <sstream>
|
|
|
|
using namespace llvm;
|
|
using namespace xray;
|
|
|
|
std::string FuncIdConversionHelper::SymbolOrNumber(int32_t FuncId) const {
|
|
std::ostringstream F;
|
|
auto It = FunctionAddresses.find(FuncId);
|
|
if (It == FunctionAddresses.end()) {
|
|
F << "#" << FuncId;
|
|
return F.str();
|
|
}
|
|
|
|
if (auto ResOrErr = Symbolizer.symbolizeCode(BinaryInstrMap, It->second)) {
|
|
auto &DI = *ResOrErr;
|
|
if (DI.FunctionName == "<invalid>")
|
|
F << "@(" << std::hex << It->second << ")";
|
|
else
|
|
F << DI.FunctionName;
|
|
} else
|
|
handleAllErrors(ResOrErr.takeError(), [&](const ErrorInfoBase &) {
|
|
F << "@(" << std::hex << It->second << ")";
|
|
});
|
|
|
|
return F.str();
|
|
}
|
|
|
|
std::string FuncIdConversionHelper::FileLineAndColumn(int32_t FuncId) const {
|
|
auto It = FunctionAddresses.find(FuncId);
|
|
if (It == FunctionAddresses.end())
|
|
return "(unknown)";
|
|
|
|
std::ostringstream F;
|
|
auto ResOrErr = Symbolizer.symbolizeCode(BinaryInstrMap, It->second);
|
|
if (!ResOrErr) {
|
|
consumeError(ResOrErr.takeError());
|
|
return "(unknown)";
|
|
}
|
|
|
|
auto &DI = *ResOrErr;
|
|
F << sys::path::filename(DI.FileName).str() << ":" << DI.Line << ":"
|
|
<< DI.Column;
|
|
|
|
return F.str();
|
|
}
|