003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/tools/llvm-xray
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
tools
/
llvm-xray
/
📁
..
📄
func-id-helper.cpp
(2.44 KB)
📄
func-id-helper.h
(1.75 KB)
📄
llvm-xray.cpp
(1.6 KB)
📄
trie-node.h
(3.31 KB)
📄
xray-account.cpp
(17.43 KB)
📄
xray-account.h
(3.22 KB)
📄
xray-color-helper.cpp
(8.5 KB)
📄
xray-color-helper.h
(2.99 KB)
📄
xray-converter.cpp
(16.12 KB)
📄
xray-converter.h
(1.49 KB)
📄
xray-extract.cpp
(4.19 KB)
📄
xray-fdr-dump.cpp
(3.73 KB)
📄
xray-graph-diff.cpp
(19.74 KB)
📄
xray-graph-diff.h
(2.09 KB)
📄
xray-graph.cpp
(20.73 KB)
📄
xray-graph.h
(7.38 KB)
📄
xray-registry.cpp
(1.28 KB)
📄
xray-registry.h
(1.27 KB)
📄
xray-stacks.cpp
(31 KB)
Editing: func-id-helper.cpp
//===- xray-fc-account.cpp: XRay Function Call Accounting Tool ------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // 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(); } object::SectionedAddress ModuleAddress; ModuleAddress.Address = It->second; // TODO: set proper section index here. // object::SectionedAddress::UndefSection works for only absolute addresses. ModuleAddress.SectionIndex = object::SectionedAddress::UndefSection; if (auto ResOrErr = Symbolizer.symbolizeCode(BinaryInstrMap, ModuleAddress)) { auto &DI = *ResOrErr; if (DI.FunctionName == DILineInfo::BadString) 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; object::SectionedAddress ModuleAddress; ModuleAddress.Address = It->second; // TODO: set proper section index here. // object::SectionedAddress::UndefSection works for only absolute addresses. ModuleAddress.SectionIndex = object::SectionedAddress::UndefSection; auto ResOrErr = Symbolizer.symbolizeCode(BinaryInstrMap, ModuleAddress); if (!ResOrErr) { consumeError(ResOrErr.takeError()); return "(unknown)"; } auto &DI = *ResOrErr; F << sys::path::filename(DI.FileName).str() << ":" << DI.Line << ":" << DI.Column; return F.str(); }
Upload File
Create Folder