From 433fb102d797393cff4242f8c36406f542e60084 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 12:17:20 +0100 Subject: [PATCH 1/8] save --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index 348e837a3142d..72c730eae8943 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -21,6 +21,13 @@ StackTrace GetCurrentBacktrace() { BacktraceFrame Frames[MAX_BACKTRACE_FRAMES]; int FrameCount = backtrace(Frames, MAX_BACKTRACE_FRAMES); + // The Frames contain the return addresses, which is one instruction after the + // call instruction. Adjust the addresses so that symbolizer would give more + // precise result. + for (int I = 0; I < FrameCount; I++) { + (uintptr_t &)Frames[I] = (uintptr_t &)Frames[I] - 1; + } + StackTrace Stack; Stack.stack = std::vector(&Frames[0], &Frames[FrameCount - 1]); From 121913d0c2d4fcf3a199248c02dd1d11748b4a22 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 12:23:41 +0100 Subject: [PATCH 2/8] save --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index 72c730eae8943..e83bebe4a7a7d 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -29,8 +29,9 @@ StackTrace GetCurrentBacktrace() { } StackTrace Stack; - Stack.stack = - std::vector(&Frames[0], &Frames[FrameCount - 1]); + if (FrameCount > 1) + Stack.stack = + std::vector(&Frames[0], &Frames[FrameCount - 1]); return Stack; } From 6dc2f8f010f038a8714cbbbdaa27cb631ee2d707 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 13:18:01 +0100 Subject: [PATCH 3/8] fix ci --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index e83bebe4a7a7d..8953b1b38c3a7 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -25,7 +25,7 @@ StackTrace GetCurrentBacktrace() { // call instruction. Adjust the addresses so that symbolizer would give more // precise result. for (int I = 0; I < FrameCount; I++) { - (uintptr_t &)Frames[I] = (uintptr_t &)Frames[I] - 1; + *(uintptr_t *)&Frames[I] -= 1; } StackTrace Stack; From 3d77d6cdc176e150fa40151ac447d319cbb12654 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 13:42:32 +0100 Subject: [PATCH 4/8] fix alias --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index 8953b1b38c3a7..f9143e2a0c391 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -25,7 +25,7 @@ StackTrace GetCurrentBacktrace() { // call instruction. Adjust the addresses so that symbolizer would give more // precise result. for (int I = 0; I < FrameCount; I++) { - *(uintptr_t *)&Frames[I] -= 1; + reinterpret_cast(Frames[I]) -= 1; } StackTrace Stack; From 4b976a3f414ab57860ba79c59a9e164546a4ff9e Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 13:47:44 +0100 Subject: [PATCH 5/8] fix alias --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index f9143e2a0c391..6b3f0bd686590 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -25,7 +25,7 @@ StackTrace GetCurrentBacktrace() { // call instruction. Adjust the addresses so that symbolizer would give more // precise result. for (int I = 0; I < FrameCount; I++) { - reinterpret_cast(Frames[I]) -= 1; + *(char *)&Frames[I] -= 1; } StackTrace Stack; From 0f69ef7c32576b39351bbab913b06d9c0419f8a3 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 14:15:45 +0100 Subject: [PATCH 6/8] fix alias --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index 6b3f0bd686590..73b893cedc8a3 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -25,7 +25,7 @@ StackTrace GetCurrentBacktrace() { // call instruction. Adjust the addresses so that symbolizer would give more // precise result. for (int I = 0; I < FrameCount; I++) { - *(char *)&Frames[I] -= 1; + *(char **)&Frames[I] -= 1; } StackTrace Stack; From b51e08045f5f6fc79fc9067d5bb72b9a930fcbd1 Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Wed, 12 Mar 2025 14:19:28 +0100 Subject: [PATCH 7/8] fix alias --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index 73b893cedc8a3..ceb7979ecb330 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -13,6 +13,7 @@ #include "sanitizer_common/sanitizer_stacktrace.hpp" #include +#include #include namespace ur_sanitizer_layer { @@ -25,7 +26,7 @@ StackTrace GetCurrentBacktrace() { // call instruction. Adjust the addresses so that symbolizer would give more // precise result. for (int I = 0; I < FrameCount; I++) { - *(char **)&Frames[I] -= 1; + Frames[I] = (void *)((uintptr_t)Frames[I] - 1); } StackTrace Stack; From 9fe4ad237610352882220f942a4b44818641ac5c Mon Sep 17 00:00:00 2001 From: "Wu, Yingcong" Date: Thu, 13 Mar 2025 03:57:05 +0100 Subject: [PATCH 8/8] address offline comment --- .../layers/sanitizer/sanitizer_common/linux/backtrace.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp index ceb7979ecb330..7e2203c5850bb 100644 --- a/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp +++ b/unified-runtime/source/loader/layers/sanitizer/sanitizer_common/linux/backtrace.cpp @@ -30,9 +30,7 @@ StackTrace GetCurrentBacktrace() { } StackTrace Stack; - if (FrameCount > 1) - Stack.stack = - std::vector(&Frames[0], &Frames[FrameCount - 1]); + Stack.stack = std::vector(&Frames[0], &Frames[FrameCount]); return Stack; }