Skip to content

Commit 621cb2b

Browse files
committed
save
1 parent 7ba4447 commit 621cb2b

File tree

3 files changed

+11
-19
lines changed

3 files changed

+11
-19
lines changed

source/loader/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ if(UR_ENABLE_SANITIZER)
173173
PRIVATE
174174
${CMAKE_CURRENT_SOURCE_DIR}/layers/sanitizer/linux/symbolizer.cpp
175175
)
176+
target_compile_definitions(ur_loader PRIVATE UR_ENABLE_SYMBOLIZER)
176177
target_include_directories(ur_loader PRIVATE ${LLVM_INCLUDE_DIRS})
177178
target_link_libraries(ur_loader PRIVATE LLVMSupport LLVMSymbolize)
178179
# In in-tree build, if LLVM is built with libc++, we also need to build

source/loader/layers/sanitizer/linux/symbolizer.cpp

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,6 @@
1212

1313
namespace ur_sanitizer_layer {
1414

15-
static llvm::symbolize::LLVMSymbolizer *Symbolizer = nullptr;
16-
17-
llvm::symbolize::LLVMSymbolizer *GetSymbolizer() {
18-
static auto *Instance = []() {
19-
Symbolizer = new llvm::symbolize::LLVMSymbolizer{};
20-
return Symbolizer;
21-
}();
22-
return Instance;
23-
}
24-
25-
// Let's destruct the symbolizer at the very end of exit process, at least
26-
// should be after the destructors of the SanitizerLayer since we may print
27-
// some symbolized information in the SanitizerLayer destructor.
28-
__attribute__((destructor(101))) void DestructSymbolizer() {
29-
delete Symbolizer;
30-
}
31-
3215
llvm::symbolize::PrinterConfig GetPrinterConfig() {
3316
llvm::symbolize::PrinterConfig Config;
3417
Config.Pretty = false;
@@ -59,15 +42,15 @@ void SymbolizeCode(const char *ModuleName, uint64_t ModuleOffset,
5942
auto Printer =
6043
std::make_unique<llvm::symbolize::LLVMPrinter>(OS, EH, Config);
6144

62-
auto ResOrErr = ur_sanitizer_layer::GetSymbolizer()->symbolizeInlinedCode(
45+
auto ResOrErr = ur_sanitizer_layer::getContext()->symbolizer.symbolizeInlinedCode(
6346
ModuleName,
6447
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
6548

6649
if (!ResOrErr) {
6750
return;
6851
}
6952
Printer->print(Request, *ResOrErr);
70-
ur_sanitizer_layer::GetSymbolizer()->pruneCache();
53+
ur_sanitizer_layer::getContext()->symbolizer.pruneCache();
7154
if (RetSize) {
7255
*RetSize = Result.size() + 1;
7356
}

source/loader/layers/sanitizer/ur_sanitizer_layer.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#include "ur/ur.hpp"
1717
#include "ur_proxy_layer.hpp"
1818

19+
#ifdef UR_ENABLE_SYMBOLIZER
20+
#include "llvm/DebugInfo/Symbolize/Symbolize.h"
21+
#endif // UR_ENABLE_SYMBOLIZER
22+
1923
#define SANITIZER_COMP_NAME "sanitizer layer"
2024

2125
namespace ur_sanitizer_layer {
@@ -38,6 +42,10 @@ class __urdlllocal context_t : public proxy_layer_context_t,
3842
std::unique_ptr<SanitizerInterceptor> interceptor;
3943
SanitizerType enabledType = SanitizerType::None;
4044

45+
#ifdef UR_ENABLE_SYMBOLIZER
46+
llvm::symbolize::LLVMSymbolizer symbolizer;
47+
#endif // UR_ENABLE_SYMBOLIZER
48+
4149
context_t();
4250
~context_t();
4351

0 commit comments

Comments
 (0)