[compiler-rt] [llvm] [XRay] Draft: Runtime symbol resolution (PR #132416)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 21 09:31:26 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 733be4ed7dcf976719f424c0cb81b77a14f91f5a 82bb16ee5094cd7759bcf579eaf56f3b32a19f88 --extensions h,cpp -- compiler-rt/test/xray/TestCases/Posix/symbolize-dso.cpp compiler-rt/include/xray/xray_interface.h compiler-rt/include/xray/xray_records.h compiler-rt/lib/xray/xray_basic_logging.cpp compiler-rt/lib/xray/xray_interface.cpp compiler-rt/lib/xray/xray_interface_internal.h compiler-rt/lib/xray/xray_utils.cpp compiler-rt/lib/xray/xray_utils.h compiler-rt/test/xray/TestCases/Posix/basic-mode-dso.cpp llvm/include/llvm/XRay/Trace.h llvm/include/llvm/XRay/XRayRecord.h llvm/lib/XRay/Trace.cpp llvm/tools/llvm-xray/func-id-helper.cpp llvm/tools/llvm-xray/func-id-helper.h llvm/tools/llvm-xray/xray-account.cpp llvm/tools/llvm-xray/xray-account.h
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/compiler-rt/include/xray/xray_interface.h b/compiler-rt/include/xray/xray_interface.h
index e3ac316102..39bcd7dc8d 100644
--- a/compiler-rt/include/xray/xray_interface.h
+++ b/compiler-rt/include/xray/xray_interface.h
@@ -23,18 +23,18 @@ extern "C" {
struct FunctionMapEntry {
int32_t FunctionId;
uint64_t Addr;
- FunctionMapEntry* Next;
+ FunctionMapEntry *Next;
};
struct XRaySymbolInfo {
int32_t FuncId;
- const char* Name;
- const char* Module;
- const char* File;
+ const char *Name;
+ const char *Module;
+ const char *File;
int64_t Line;
};
-extern int __xray_symbolize(int32_t, XRaySymbolInfo*);
+extern int __xray_symbolize(int32_t, XRaySymbolInfo *);
/// Synchronize this with AsmPrinter::SledKind in LLVM.
enum XRayEntryType {
diff --git a/compiler-rt/include/xray/xray_records.h b/compiler-rt/include/xray/xray_records.h
index 5c87f21296..293a794094 100644
--- a/compiler-rt/include/xray/xray_records.h
+++ b/compiler-rt/include/xray/xray_records.h
@@ -88,9 +88,9 @@ struct alignas(32) XRayFunctionMD {
struct alignas(32) XRayFileMD {
uint16_t RecordType = RecordTypes::FILE_MD;
int16_t FilenameLen = 0;
- // The padding bytes may not be enough to store the full name. In this case, 32 byte blocks
- // containing the rest of the name are expected to follow this record
- // as needed.
+ // The padding bytes may not be enough to store the full name. In this case,
+ // 32 byte blocks containing the rest of the name are expected to follow this
+ // record as needed.
char FilenameBuffer[28] = {};
} __attribute__((packed));
diff --git a/compiler-rt/lib/xray/xray_basic_logging.cpp b/compiler-rt/lib/xray/xray_basic_logging.cpp
index 1847372fbf..4500505525 100644
--- a/compiler-rt/lib/xray/xray_basic_logging.cpp
+++ b/compiler-rt/lib/xray/xray_basic_logging.cpp
@@ -26,18 +26,18 @@
#include <unistd.h>
#include "sanitizer_common/sanitizer_allocator_internal.h"
-#include "sanitizer_common/sanitizer_libc.h"
#include "sanitizer_common/sanitizer_dense_map.h"
-#include "sanitizer_common/sanitizer_symbolizer.h"
#include "sanitizer_common/sanitizer_hash.h"
-#include "xray/xray_records.h"
+#include "sanitizer_common/sanitizer_libc.h"
+#include "sanitizer_common/sanitizer_symbolizer.h"
#include "xray/xray_allocator.h"
-#include "xray_recursion_guard.h"
+#include "xray/xray_records.h"
#include "xray_basic_flags.h"
#include "xray_basic_logging.h"
#include "xray_defs.h"
#include "xray_flags.h"
#include "xray_interface_internal.h"
+#include "xray_recursion_guard.h"
#include "xray_tsc.h"
#include "xray_utils.h"
@@ -62,7 +62,6 @@ struct StringKey {
const char *Key{nullptr};
mutable char EmptyOrTombstone{__sanitizer::DenseMapInfo<char>::getEmptyKey()};
-
};
} // namespace
@@ -70,7 +69,9 @@ namespace __sanitizer {
// Provide DenseMapInfo for chars.
template <> struct DenseMapInfo<StringKey> {
static constexpr StringKey getEmptyKey() { return StringKey::Empty(); }
- static constexpr StringKey getTombstoneKey() { return StringKey::Tombstone(); }
+ static constexpr StringKey getTombstoneKey() {
+ return StringKey::Tombstone();
+ }
static unsigned getHashValue(const StringKey &Val) {
if (!Val.Key) {
return 0;
@@ -87,7 +88,7 @@ template <> struct DenseMapInfo<StringKey> {
if (!LHS.Key || !RHS.Key) {
return !LHS.Key && !RHS.Key;
}
- return __sanitizer::internal_strcmp(LHS.Key, RHS.Key) == 0;
+ return __sanitizer::internal_strcmp(LHS.Key, RHS.Key) == 0;
}
};
} // namespace __sanitizer
@@ -140,11 +141,10 @@ static atomic_uint64_t ThresholdTicks{0};
static atomic_uint64_t TicksPerSec{0};
static atomic_uint64_t CycleFrequency{NanosecondsPerSecond};
-
struct FunctionRecordBuffer {
// First entry is buffer idx, second states if this entry has been flushed.
- using FuncMapEntry = bool;//detail::DenseMapPair<int32_t, bool>;
+ using FuncMapEntry = bool; // detail::DenseMapPair<int32_t, bool>;
// DenseMap<int32_t, DataInfo> SymInfo;
@@ -153,7 +153,7 @@ struct FunctionRecordBuffer {
using MappedAddressInfo = std::pair<int, AddressInfo>;
- MappedAddressInfo * AddrInfoBuf{nullptr};
+ MappedAddressInfo *AddrInfoBuf{nullptr};
unsigned Size{0};
DenseMap<StringKey, int32_t> FileMDMap;
@@ -163,36 +163,36 @@ struct FunctionRecordBuffer {
static constexpr unsigned BufferSize = 1024;
- LogWriter* Writer;
+ LogWriter *Writer;
- FunctionRecordBuffer(LogWriter* LW) XRAY_NEVER_INSTRUMENT : Writer(LW) {
+ FunctionRecordBuffer(LogWriter *LW) XRAY_NEVER_INSTRUMENT : Writer(LW) {
AddrInfoBuf = allocateBuffer<MappedAddressInfo>(BufferSize);
}
- ~FunctionRecordBuffer() XRAY_NEVER_INSTRUMENT {
+ ~FunctionRecordBuffer() XRAY_NEVER_INSTRUMENT {
Flush();
deallocateBuffer<MappedAddressInfo>(AddrInfoBuf, BufferSize);
}
- static FunctionRecordBuffer& Create(LogWriter* LW) XRAY_NEVER_INSTRUMENT {
+ static FunctionRecordBuffer &Create(LogWriter *LW) XRAY_NEVER_INSTRUMENT {
auto *FRB = allocate<FunctionRecordBuffer>();
new (FRB) FunctionRecordBuffer(LW);
return *FRB;
}
- void Destroy() XRAY_NEVER_INSTRUMENT {
+ void Destroy() XRAY_NEVER_INSTRUMENT {
this->~FunctionRecordBuffer();
deallocate(this);
}
void StoreFunctionRecord(int32_t FuncId) XRAY_NEVER_INSTRUMENT {
- auto& Symbolized = FuncMapping[FuncId];
+ auto &Symbolized = FuncMapping[FuncId];
if (!Symbolized) {
if (Size >= BufferSize) {
Flush();
}
- auto&MAI = AddrInfoBuf[Size];
+ auto &MAI = AddrInfoBuf[Size];
if (!Symbolize(FuncId, &MAI.second)) {
Report("Unable to symbolize function %d\n", FuncId);
return;
@@ -201,17 +201,15 @@ struct FunctionRecordBuffer {
Symbolized = true;
Size++;
}
-
-
}
- void Flush() XRAY_NEVER_INSTRUMENT {
+ void Flush() XRAY_NEVER_INSTRUMENT {
if (Verbosity())
Report("Flushing function record buffer\n");
for (unsigned I = 0; I < Size; I++) {
- auto& MDI = AddrInfoBuf[I];
+ auto &MDI = AddrInfoBuf[I];
auto Id = MDI.first;
- AddressInfo& AI = MDI.second;
+ AddressInfo &AI = MDI.second;
int FileMDIdx = 0;
if (AI.file) {
@@ -245,33 +243,36 @@ struct FunctionRecordBuffer {
reinterpret_cast<char *>(&FIR.NameBuffer));
Writer->WriteAll(AI.function, AI.function + FIR.NameLen);
constexpr int NameBufferSize = sizeof(FIR.NameBuffer);
- auto NumPaddingBytes = FIR.NameLen < NameBufferSize ? NameBufferSize - FIR.NameLen : 32 - (FIR.NameLen - NameBufferSize) % 32;
+ auto NumPaddingBytes = FIR.NameLen < NameBufferSize
+ ? NameBufferSize - FIR.NameLen
+ : 32 - (FIR.NameLen - NameBufferSize) % 32;
Writer->WritePadding(NumPaddingBytes);
-// auto ObjId = UnpackId(Id).first;
-// auto& ObjWritten = ObjWrittenMap[ObjId];
-// if (!ObjWritten) {
-// XRayObjectInfoRecord OIR;
-// OIR.ObjId = ObjId;
-// const char* Filename = AI.module;
-// OIR.FilenameLen = static_cast<int16_t>(internal_strlen(Filename));
-// Writer->WriteAll(reinterpret_cast<char *>(&OIR),
-// reinterpret_cast<char *>(&OIR.FilenameBuffer));
-// Writer->WriteAll(Filename, Filename + OIR.FilenameLen);
-// NumPaddingBytes = OIR.FilenameLen < 24 ? 24 - OIR.FilenameLen : 32 - (OIR.FilenameLen - 24) % 32;
-// Writer->WritePadding(NumPaddingBytes);
-// ObjWritten = true;
-// }
+ // auto ObjId = UnpackId(Id).first;
+ // auto& ObjWritten = ObjWrittenMap[ObjId];
+ // if (!ObjWritten) {
+ // XRayObjectInfoRecord OIR;
+ // OIR.ObjId = ObjId;
+ // const char* Filename = AI.module;
+ // OIR.FilenameLen =
+ // static_cast<int16_t>(internal_strlen(Filename));
+ // Writer->WriteAll(reinterpret_cast<char *>(&OIR),
+ // reinterpret_cast<char *>(&OIR.FilenameBuffer));
+ // Writer->WriteAll(Filename, Filename + OIR.FilenameLen);
+ // NumPaddingBytes = OIR.FilenameLen < 24 ? 24 - OIR.FilenameLen :
+ // 32 - (OIR.FilenameLen - 24) % 32;
+ // Writer->WritePadding(NumPaddingBytes);
+ // ObjWritten = true;
+ // }
}
Size = 0;
}
};
-
struct GlobalLoggingData {
- LogWriter* Writer;
- FunctionRecordBuffer* RecordBuffer;
+ LogWriter *Writer;
+ FunctionRecordBuffer *RecordBuffer;
};
static LogWriter *getLog() XRAY_NEVER_INSTRUMENT {
@@ -305,8 +306,8 @@ static LogWriter *getLog() XRAY_NEVER_INSTRUMENT {
}
static GlobalLoggingData createLoggingData() XRAY_NEVER_INSTRUMENT {
- auto* LW = getLog();
- auto* FRB = &FunctionRecordBuffer::Create(LW);
+ auto *LW = getLog();
+ auto *FRB = &FunctionRecordBuffer::Create(LW);
return {LW, FRB};
}
@@ -350,7 +351,6 @@ static ThreadLocalData &getThreadLocalData() XRAY_NEVER_INSTRUMENT {
return TLD;
}
-
template <class RDTSC>
void InMemoryRawLog(int32_t FuncId, XRayEntryType Type,
RDTSC ReadTSC) XRAY_NEVER_INSTRUMENT {
diff --git a/compiler-rt/lib/xray/xray_interface.cpp b/compiler-rt/lib/xray/xray_interface.cpp
index 554fccd2b7..6469a3ddc3 100644
--- a/compiler-rt/lib/xray/xray_interface.cpp
+++ b/compiler-rt/lib/xray/xray_interface.cpp
@@ -34,7 +34,6 @@
// TODO: For function map
#include "sanitizer_common/sanitizer_symbolizer.h"
-
#include "xray_defs.h"
#include "xray_flags.h"
@@ -508,7 +507,7 @@ XRayPatchingStatus mprotectAndPatchFunction(int32_t FuncId, int32_t ObjId,
} // namespace
-bool Symbolize(int32_t PackedId, AddressInfo* AI) {
+bool Symbolize(int32_t PackedId, AddressInfo *AI) {
auto Ids = UnpackId(PackedId);
auto ObjId = Ids.first;
auto FuncId = Ids.second;
@@ -526,17 +525,19 @@ bool Symbolize(int32_t PackedId, AddressInfo* AI) {
const XRaySledEntry *Sled =
InstrMap.SledsIndex ? InstrMap.SledsIndex[FuncId - 1].fromPCRelative()
- : findFunctionSleds(FuncId, InstrMap).Begin;
+ : findFunctionSleds(FuncId, InstrMap).Begin;
auto Addr = Sled->function();
- Symbolizer* Sym = Symbolizer::GetOrInit();
-// Sym->RefreshModules(); // FIXME: Is this needed?
- auto* SymStack = Sym->SymbolizePC(Addr);
+ Symbolizer *Sym = Symbolizer::GetOrInit();
+ // Sym->RefreshModules(); // FIXME: Is this needed?
+ auto *SymStack = Sym->SymbolizePC(Addr);
if (!SymStack) {
return false;
}
-// printf("Symbol Info: function %s from module %s in %s:%d\n", SymStack->info.function, SymStack->info.module, SymStack->info.file, SymStack->info.line);
+ // printf("Symbol Info: function %s from module %s in %s:%d\n",
+ // SymStack->info.function, SymStack->info.module, SymStack->info.file,
+ // SymStack->info.line);
// XRay does not support inlined function instrumentation.
// Therefore, we only look at the first function stack entry.
@@ -545,7 +546,6 @@ bool Symbolize(int32_t PackedId, AddressInfo* AI) {
return true;
}
-
} // namespace __xray
using namespace __xray;
@@ -607,7 +607,7 @@ uint16_t __xray_register_event_type(
return h->type_id;
}
-int __xray_symbolize(int32_t PackedId, XRaySymbolInfo* SymInfo) {
+int __xray_symbolize(int32_t PackedId, XRaySymbolInfo *SymInfo) {
if (!SymInfo) {
return 0; // TODO Error msg?
}
@@ -624,7 +624,8 @@ int __xray_symbolize(int32_t PackedId, XRaySymbolInfo* SymInfo) {
SymInfo->File = ai.file;
SymInfo->Line = ai.line;
- // TODO: AddressInfo owns its memory, so passing char pointers is okay for now.
+ // TODO: AddressInfo owns its memory, so passing char pointers is okay for
+ // now.
// Need to free at some point.
return true;
diff --git a/compiler-rt/lib/xray/xray_interface_internal.h b/compiler-rt/lib/xray/xray_interface_internal.h
index ca1618a8fc..0df3b3ef42 100644
--- a/compiler-rt/lib/xray/xray_interface_internal.h
+++ b/compiler-rt/lib/xray/xray_interface_internal.h
@@ -21,7 +21,6 @@
#include <cstdint>
#include <utility>
-
extern "C" {
// The following functions have to be defined in assembler, on a per-platform
// basis. See xray_trampoline_*.S files for implementations.
@@ -137,7 +136,7 @@ struct XRaySledMap {
bool Loaded;
};
-bool Symbolize(int32_t FuncId, AddressInfo* DI);
+bool Symbolize(int32_t FuncId, AddressInfo *DI);
bool patchFunctionEntry(bool Enable, uint32_t FuncId, const XRaySledEntry &Sled,
const XRayTrampolines &Trampolines, bool LogArgs);
diff --git a/llvm/include/llvm/XRay/Trace.h b/llvm/include/llvm/XRay/Trace.h
index 9c69b950fd..d226d58f40 100644
--- a/llvm/include/llvm/XRay/Trace.h
+++ b/llvm/include/llvm/XRay/Trace.h
@@ -38,8 +38,8 @@ class FunctionMetadata {
typedef std::vector<XRayObjectInfo>::const_iterator omap_citerator;
public:
- bool hasFunctionMapping() const { return FuncMapping.empty();}
- bool hasObjectInfo() const {return ObjInfo.empty();}
+ bool hasFunctionMapping() const { return FuncMapping.empty(); }
+ bool hasObjectInfo() const { return ObjInfo.empty(); }
void AddFunctionInfo(XRayFunctionInfo FInfo) {
FuncMapping.push_back(std::move(FInfo));
@@ -50,11 +50,10 @@ public:
}
fmap_citerator mapping_begin() const { return FuncMapping.cbegin(); }
- fmap_citerator mappping_end() const { return FuncMapping.cend(); }
-
- omap_citerator objects_begin() const { return ObjInfo.cbegin(); }
- omap_citerator objects_end() const { return ObjInfo.cend(); }
+ fmap_citerator mappping_end() const { return FuncMapping.cend(); }
+ omap_citerator objects_begin() const { return ObjInfo.cbegin(); }
+ omap_citerator objects_end() const { return ObjInfo.cend(); }
};
/// A Trace object represents the records that have been loaded from XRay
@@ -96,14 +95,12 @@ public:
/// Provides access to the loaded XRay trace file header.
const XRayFileHeader &getFileHeader() const { return FileHeader; }
- const FunctionMetadata &getFunctionMetadata() const { return FuncMetadata;}
+ const FunctionMetadata &getFunctionMetadata() const { return FuncMetadata; }
const_iterator begin() const { return Records.begin(); }
const_iterator end() const { return Records.end(); }
bool empty() const { return Records.empty(); }
size_type size() const { return Records.size(); }
-
-
};
/// This function will attempt to load XRay trace records from the provided
diff --git a/llvm/lib/XRay/Trace.cpp b/llvm/lib/XRay/Trace.cpp
index 3c8ffc8d99..4aa630622e 100644
--- a/llvm/lib/XRay/Trace.cpp
+++ b/llvm/lib/XRay/Trace.cpp
@@ -236,12 +236,12 @@ Error loadNaiveFormatLog(StringRef Data, bool IsLittleEndian,
Info.File = "(unknown)";
} else {
if (FileMDIdx < 1 ||
- static_cast<size_t>(FileMDIdx-1) >= Filenames.size()) {
+ static_cast<size_t>(FileMDIdx - 1) >= Filenames.size()) {
return createStringError(
std::make_error_code(std::errc::executable_format_error),
"File metadata does not exist at offset %" PRId64 ".", OffsetPtr);
}
- Info.File = Filenames[FileMDIdx-1];
+ Info.File = Filenames[FileMDIdx - 1];
}
PreReadOffset = OffsetPtr;
@@ -251,7 +251,6 @@ Error loadNaiveFormatLog(StringRef Data, bool IsLittleEndian,
std::make_error_code(std::errc::executable_format_error),
"Failed reading symbol length at offset %" PRId64 ".", OffsetPtr);
-
PreReadOffset = OffsetPtr;
auto FName = Reader.getFixedLengthString(&OffsetPtr, NameLen);
if (OffsetPtr == PreReadOffset)
@@ -265,53 +264,55 @@ Error loadNaiveFormatLog(StringRef Data, bool IsLittleEndian,
// Skip to start of next 32 byte record. Subtract 8 to main to account
// for 8 byte advance after switch.
auto BytesUsedInChunk = (OffsetPtr - FInfoBeginOffset + 2) % 32;
- auto BytesToSkip =
- BytesUsedInChunk > 0 ? 32 - BytesUsedInChunk % 32 : 0;
+ auto BytesToSkip = BytesUsedInChunk > 0 ? 32 - BytesUsedInChunk % 32 : 0;
OffsetPtr += BytesToSkip - 8;
break;
}
case 3: // Object info record
{
llvm_unreachable("Handling removed");
-// XRayObjectInfo ObjInfo;
-//
-// auto OInfoBeginOffset = OffsetPtr;
-// PreReadOffset = OffsetPtr;
-// int32_t ObjId = Reader.getSigned(&OffsetPtr, sizeof(int32_t));
-// if (OffsetPtr == PreReadOffset)
-// return createStringError(
-// std::make_error_code(std::errc::executable_format_error),
-// "Failed reading object id field at offset %" PRId64 ".",
-// OffsetPtr);
-//
-// ObjInfo.ObjId = ObjId;
-//
-// PreReadOffset = OffsetPtr;
-// auto NameLen = Reader.getU16(&OffsetPtr);
-// if (OffsetPtr == PreReadOffset)
-// return createStringError(
-// std::make_error_code(std::errc::executable_format_error),
-// "Failed reading symbol length at offset %" PRId64 ".", OffsetPtr);
-//
-//
-// PreReadOffset = OffsetPtr;
-// auto Filename = Reader.getFixedLengthString(&OffsetPtr, NameLen);
-// if (OffsetPtr == PreReadOffset)
-// return createStringError(
-// std::make_error_code(std::errc::executable_format_error),
-// "Failed reading symbol %" PRId64 ".", OffsetPtr);
-// ObjInfo.Filename = Filename;
-//
-// FuncMetadata.AddObjectInfo(ObjInfo);
-//
-// llvm::outs() << "Read object: " << ObjId << ": " << Filename << "\n";
-//
-// // Skip to start of next 32 byte record. Subtract 8 to main to account
-// // for 8 byte advance after switch.
-// auto BytesUsedInChunk = (OffsetPtr - OInfoBeginOffset + 2) % 32;
-// auto BytesToSkip =
-// BytesUsedInChunk > 0 ? 32 - BytesUsedInChunk % 32 : 0;
-// OffsetPtr += BytesToSkip - 8;
+ // XRayObjectInfo ObjInfo;
+ //
+ // auto OInfoBeginOffset = OffsetPtr;
+ // PreReadOffset = OffsetPtr;
+ // int32_t ObjId = Reader.getSigned(&OffsetPtr, sizeof(int32_t));
+ // if (OffsetPtr == PreReadOffset)
+ // return createStringError(
+ // std::make_error_code(std::errc::executable_format_error),
+ // "Failed reading object id field at offset %" PRId64 ".",
+ // OffsetPtr);
+ //
+ // ObjInfo.ObjId = ObjId;
+ //
+ // PreReadOffset = OffsetPtr;
+ // auto NameLen = Reader.getU16(&OffsetPtr);
+ // if (OffsetPtr == PreReadOffset)
+ // return createStringError(
+ // std::make_error_code(std::errc::executable_format_error),
+ // "Failed reading symbol length at offset %" PRId64 ".",
+ // OffsetPtr);
+ //
+ //
+ // PreReadOffset = OffsetPtr;
+ // auto Filename = Reader.getFixedLengthString(&OffsetPtr, NameLen);
+ // if (OffsetPtr == PreReadOffset)
+ // return createStringError(
+ // std::make_error_code(std::errc::executable_format_error),
+ // "Failed reading symbol %" PRId64 ".", OffsetPtr);
+ // ObjInfo.Filename = Filename;
+ //
+ // FuncMetadata.AddObjectInfo(ObjInfo);
+ //
+ // llvm::outs() << "Read object: " << ObjId << ": " << Filename <<
+ // "\n";
+ //
+ // // Skip to start of next 32 byte record. Subtract 8 to main to
+ // account
+ // // for 8 byte advance after switch.
+ // auto BytesUsedInChunk = (OffsetPtr - OInfoBeginOffset + 2) % 32;
+ // auto BytesToSkip =
+ // BytesUsedInChunk > 0 ? 32 - BytesUsedInChunk % 32 : 0;
+ // OffsetPtr += BytesToSkip - 8;
break;
}
case 4: // Filename MD
@@ -324,7 +325,6 @@ Error loadNaiveFormatLog(StringRef Data, bool IsLittleEndian,
std::make_error_code(std::errc::executable_format_error),
"Failed reading filename length at offset %" PRId64 ".", OffsetPtr);
-
PreReadOffset = OffsetPtr;
auto Filename = Reader.getFixedLengthString(&OffsetPtr, NameLen);
if (OffsetPtr == PreReadOffset)
@@ -336,8 +336,7 @@ Error loadNaiveFormatLog(StringRef Data, bool IsLittleEndian,
// Skip to start of next 32 byte record. Subtract 8 to main to account
// for 8 byte advance after switch.
auto BytesUsedInChunk = (OffsetPtr - FilenameBeginOffset + 2) % 32;
- auto BytesToSkip =
- BytesUsedInChunk > 0 ? 32 - BytesUsedInChunk % 32 : 0;
+ auto BytesToSkip = BytesUsedInChunk > 0 ? 32 - BytesUsedInChunk % 32 : 0;
OffsetPtr += BytesToSkip - 8;
break;
}
diff --git a/llvm/tools/llvm-xray/func-id-helper.cpp b/llvm/tools/llvm-xray/func-id-helper.cpp
index 469aeec730..0f9c59f6de 100644
--- a/llvm/tools/llvm-xray/func-id-helper.cpp
+++ b/llvm/tools/llvm-xray/func-id-helper.cpp
@@ -23,7 +23,7 @@ std::string FuncIdConversionHelper::SymbolOrNumber(int32_t FuncId) const {
if (CacheIt != CachedNames.end())
return CacheIt->second;
- auto* lookupRes = LookupFn(FuncId);
+ auto *lookupRes = LookupFn(FuncId);
if (lookupRes) {
CachedNames[FuncId] = lookupRes->Name;
return lookupRes->Name;
@@ -88,8 +88,7 @@ std::string FuncIdConversionHelper::FileLineAndColumn(int32_t FuncId) const {
Column = DI.Column;
}
std::ostringstream F;
- F << sys::path::filename(Filename).str() << ":" << Line << ":"
- << Column;
+ F << sys::path::filename(Filename).str() << ":" << Line << ":" << Column;
return F.str();
}
diff --git a/llvm/tools/llvm-xray/func-id-helper.h b/llvm/tools/llvm-xray/func-id-helper.h
index aedecf481b..5b67d58e87 100644
--- a/llvm/tools/llvm-xray/func-id-helper.h
+++ b/llvm/tools/llvm-xray/func-id-helper.h
@@ -25,7 +25,7 @@ namespace xray {
class FuncIdConversionHelper {
public:
using FunctionAddressMap = std::unordered_map<int32_t, uint64_t>;
- using LookupFnType = std::function<const XRayFunctionInfo*(int32_t FuncId)>;
+ using LookupFnType = std::function<const XRayFunctionInfo *(int32_t FuncId)>;
private:
std::string BinaryInstrMap;
@@ -48,7 +48,7 @@ public:
const FunctionAddressMap &FunctionAddresses)
: FuncIdConversionHelper(std::move(BinaryInstrMap), Symbolizer,
FunctionAddresses,
- [](int32_t FuncId) -> const XRayFunctionInfo* {
+ [](int32_t FuncId) -> const XRayFunctionInfo * {
return nullptr;
}) {}
diff --git a/llvm/tools/llvm-xray/xray-account.cpp b/llvm/tools/llvm-xray/xray-account.cpp
index effff719eb..9f8f456807 100644
--- a/llvm/tools/llvm-xray/xray-account.cpp
+++ b/llvm/tools/llvm-xray/xray-account.cpp
@@ -478,25 +478,29 @@ static CommandRegistration Unused(&Account, []() -> Error {
auto &FMD = T.getFunctionMetadata();
-// std::for_each(FMD.mapping_begin(), FMD.mappping_end(), [](const auto& Mapping) {
-// outs() << "Function MD: " << Mapping.FuncId << " -> " << Mapping.Name << ", file=" << Mapping.File << "\n";
-// });
+ // std::for_each(FMD.mapping_begin(), FMD.mappping_end(), [](const auto&
+ // Mapping) {
+ // outs() << "Function MD: " << Mapping.FuncId << " -> " << Mapping.Name <<
+ // ", file=" << Mapping.File << "\n";
+ // });
const auto &FunctionAddresses = Map.getFunctionAddresses();
symbolize::LLVMSymbolizer Symbolizer;
- llvm::xray::FuncIdConversionHelper FuncIdHelper(AccountInstrMap, Symbolizer,
- FunctionAddresses, [&FMD](int32_t FuncId) -> const XRayFunctionInfo* {
- auto It = std::find_if(FMD.mapping_begin(), FMD.mappping_end(), [FuncId](const auto&FInfo) {return FInfo.FuncId == FuncId;});
- if (It == FMD.mappping_end()) {
- return nullptr;
- }
- return &*It;
- });
+ llvm::xray::FuncIdConversionHelper FuncIdHelper(
+ AccountInstrMap, Symbolizer, FunctionAddresses,
+ [&FMD](int32_t FuncId) -> const XRayFunctionInfo * {
+ auto It = std::find_if(
+ FMD.mapping_begin(), FMD.mappping_end(),
+ [FuncId](const auto &FInfo) { return FInfo.FuncId == FuncId; });
+ if (It == FMD.mappping_end()) {
+ return nullptr;
+ }
+ return &*It;
+ });
xray::LatencyAccountant FCA(FuncIdHelper, AccountRecursiveCallsOnly,
AccountDeduceSiblingCalls);
-
for (const auto &Record : T) {
if (FCA.accountRecord(Record))
continue;
``````````
</details>
https://github.com/llvm/llvm-project/pull/132416
More information about the llvm-commits
mailing list