diff options
author | Dean Michael Berris <dberris@google.com> | 2018-05-02 00:43:17 +0000 |
---|---|---|
committer | Dean Michael Berris <dberris@google.com> | 2018-05-02 00:43:17 +0000 |
commit | a0e3ae4ce01d07e575d1ab8966f78c835039ef09 (patch) | |
tree | 0b38989120c668fe509e44345dd1f02e94d5f410 /llvm/tools/llvm-xray/func-id-helper.cpp | |
parent | d1f0910a54e1f21c6c65e6b5e46459c9a26c44a7 (diff) | |
download | bcm5719-llvm-a0e3ae4ce01d07e575d1ab8966f78c835039ef09.tar.gz bcm5719-llvm-a0e3ae4ce01d07e575d1ab8966f78c835039ef09.zip |
[XRay][tools] Rename llvm-xray filenames from .cc -> .cpp (NFC)
Summary:
This brings the filenames in accordance to the style guide and LLVM
conventions for C++ filenames.
As suggested by rnk@ in D46068.
Reviewers: rnk
Subscribers: mgorny, mgrang, llvm-commits
Differential Revision: https://reviews.llvm.org/D46301
llvm-svn: 331321
Diffstat (limited to 'llvm/tools/llvm-xray/func-id-helper.cpp')
-rw-r--r-- | llvm/tools/llvm-xray/func-id-helper.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/llvm/tools/llvm-xray/func-id-helper.cpp b/llvm/tools/llvm-xray/func-id-helper.cpp new file mode 100644 index 00000000000..c2bef6ddfb3 --- /dev/null +++ b/llvm/tools/llvm-xray/func-id-helper.cpp @@ -0,0 +1,66 @@ +//===- xray-fc-account.cpp: 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 { + auto CacheIt = CachedNames.find(FuncId); + if (CacheIt != CachedNames.end()) + return CacheIt->second; + + 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 << ")"; + }); + + auto S = F.str(); + CachedNames[FuncId] = S; + return S; +} + +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(); +} |