You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
2.1 KiB
52 lines
2.1 KiB
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#include "tracy_jit_symbols.h"
|
|
|
|
#if defined(TRACY_ENABLE) && defined(TRACY_HAS_USER_SYMBOLS)
|
|
#include <client/TracyStringHelpers.hpp>
|
|
#include <tracy/Tracy.hpp>
|
|
|
|
namespace tracy_jit {
|
|
std::string JitCodeMap::get_module_name () {
|
|
return "[JIT_Code]";
|
|
}
|
|
}
|
|
|
|
namespace tracy {
|
|
extern bool UserDecodeCallstackPtrFast( uint64_t ptr, char* name_buf, size_t buf_size ) {
|
|
if (buf_size <= 0) return false;
|
|
|
|
auto& map = tracy_jit::JitCodeMap::instance();
|
|
return map.lookup_code_address( ptr, [name_buf, buf_size] (tracy_jit::JitCodeMap::JittedCodeBlock& block, char const* module_name) -> void {
|
|
// copy name truncated
|
|
size_t safe_chars = std::min(block.name.size(), buf_size-1);
|
|
memcpy(name_buf, block.name.c_str(), safe_chars);
|
|
name_buf[safe_chars] = '\0';
|
|
} );
|
|
}
|
|
extern bool UserDecodeSymbolAddress( uint64_t ptr, CallstackSymbolData* result ) {
|
|
auto& map = tracy_jit::JitCodeMap::instance();
|
|
return map.lookup_code_address( ptr, [result] (tracy_jit::JitCodeMap::JittedCodeBlock& block, char const* module_name) -> void {
|
|
result->symAddr = block.entrypoint;
|
|
// we have no source file
|
|
result->file = "[unknown]";
|
|
result->line = 0;
|
|
result->needFree = false;
|
|
} );
|
|
}
|
|
extern bool UserDecodeCallstackPtr( uint64_t ptr, CallstackEntryData* result, CallstackEntry* cb_data ) {
|
|
auto& map = tracy_jit::JitCodeMap::instance();
|
|
return map.lookup_code_address( ptr, [result, cb_data] (tracy_jit::JitCodeMap::JittedCodeBlock& block, char const* module_name) -> void {
|
|
cb_data[0].symAddr = block.entrypoint;
|
|
cb_data[0].symLen = block.size;
|
|
cb_data[0].name = CopyStringFast(block.name.c_str(), block.name.size());
|
|
// we have no source file
|
|
cb_data[0].file = CopyStringFast("[unknown]");
|
|
cb_data[0].line = 0;
|
|
|
|
*result = { cb_data, 1, module_name };
|
|
} );
|
|
}
|
|
}
|
|
#endif
|