Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion source/loader/layers/sanitizer/linux/symbolizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*
*/
#include "common.hpp"
#include "llvm/DebugInfo/Symbolize/DIPrinter.h"
#include "llvm/DebugInfo/Symbolize/Symbolize.h"
#include <link.h>

namespace ur_sanitizer_layer {

Expand All @@ -27,6 +29,28 @@ llvm::symbolize::PrinterConfig GetPrinterConfig() {
return Config;
}

uptr GetModuleBase(const char *ModuleName) {
uptr Data = (uptr)ModuleName;
int Result = dl_iterate_phdr(
[](struct dl_phdr_info *Info, size_t, void *Arg) {
uptr *Data = (uptr *)Arg;
const char *ModuleName = (const char *)(*Data);
if (strstr(Info->dlpi_name, ModuleName)) {
*Data = (uptr)Info->dlpi_addr;
return 1;
}
return 0;
},
(void *)&Data);

// If dl_iterate_phdr return 0, it means the module is main executable,
// its base address should be 0.
if (!Result) {
return 0;
}
return Data;
}

} // namespace ur_sanitizer_layer

extern "C" {
Expand All @@ -49,7 +73,8 @@ void SymbolizeCode(const char *ModuleName, uint64_t ModuleOffset,

auto ResOrErr = ur_sanitizer_layer::GetSymbolizer()->symbolizeInlinedCode(
ModuleName,
{ModuleOffset, llvm::object::SectionedAddress::UndefSection});
{ModuleOffset - ur_sanitizer_layer::GetModuleBase(ModuleName),
llvm::object::SectionedAddress::UndefSection});

if (!ResOrErr) {
return;
Expand Down
8 changes: 5 additions & 3 deletions source/loader/layers/sanitizer/stacktrace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*/

#include "stacktrace.hpp"
#include "asan_interceptor.hpp"
#include "ur_sanitizer_layer.hpp"

extern "C" {
Expand Down Expand Up @@ -92,9 +93,10 @@ void StackTrace::print() const {
BacktraceInfo BI = BacktraceSymbols[i];

// Skip runtime modules
if (Contains(BI, "libsycl.so") ||
Contains(BI, "libpi_unified_runtime.so") ||
Contains(BI, "libur_loader.so")) {
if (!getContext()->interceptor->getOptions().Debug &&
(Contains(BI, "libsycl.so") || Contains(BI, "libur_loader.so") ||
Contains(BI, "libomptarget.rtl.unified_runtime.so") ||
Contains(BI, "libomptarget.so"))) {
continue;
}

Expand Down
Loading