[compiler-rt] 34f49aa - [compiler-rt][sanitizer] Add Windows MIPS32 support (#145110)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 10 09:52:23 PDT 2025
Author: Hervé Poussineau
Date: 2025-07-10T17:52:19+01:00
New Revision: 34f49aa2e916ba0cf3165ecda86219a6774292ea
URL: https://github.com/llvm/llvm-project/commit/34f49aa2e916ba0cf3165ecda86219a6774292ea
DIFF: https://github.com/llvm/llvm-project/commit/34f49aa2e916ba0cf3165ecda86219a6774292ea.diff
LOG: [compiler-rt][sanitizer] Add Windows MIPS32 support (#145110)
As LLVM supports mipsel-windows-gnu and mipsel-windows-msvc triples,
also support this configuration in compiler-rt
Added:
Modified:
compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_win.cpp
compiler-rt/lib/sanitizer_common/sanitizer_unwind_win.cpp
compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_win.cpp
index f114acea79c9c..fa15f8a9f06a9 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_win.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_win.cpp
@@ -49,6 +49,8 @@ struct SuspendedThreadsListWindows final : public SuspendedThreadsList {
# define SP_REG Esp
# elif SANITIZER_ARM | SANITIZER_ARM64
# define SP_REG Sp
+# elif SANITIZER_MIPS32
+# define SP_REG IntSp
# else
# error Architecture not supported!
# endif
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_unwind_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_unwind_win.cpp
index 6fc18396ca63b..30ba812afc4b0 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_unwind_win.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_unwind_win.cpp
@@ -75,6 +75,11 @@ void BufferedStackTrace::UnwindSlow(uptr pc, void *context, u32 max_depth) {
stack_frame.AddrPC.Offset = ctx.Pc;
stack_frame.AddrFrame.Offset = ctx.R11;
stack_frame.AddrStack.Offset = ctx.Sp;
+# elif SANITIZER_MIPS32
+ int machine_type = IMAGE_FILE_MACHINE_R4000;
+ stack_frame.AddrPC.Offset = ctx.Fir;
+ stack_frame.AddrFrame.Offset = ctx.IntS8;
+ stack_frame.AddrStack.Offset = ctx.IntSp;
# else
int machine_type = IMAGE_FILE_MACHINE_I386;
stack_frame.AddrPC.Offset = ctx.Eip;
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
index fd0f989ee392b..48ebe78c4031e 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
@@ -1011,6 +1011,9 @@ void SignalContext::InitPcSpBp() {
# if SANITIZER_ARM
bp = (uptr)context_record->R11;
sp = (uptr)context_record->Sp;
+# elif SANITIZER_MIPS32
+ bp = (uptr)context_record->IntS8;
+ sp = (uptr)context_record->IntSp;
# else
bp = (uptr)context_record->Ebp;
sp = (uptr)context_record->Esp;
More information about the llvm-commits
mailing list