[compiler-rt] [compiler-rt][sanitizer] fix i386 build for Haiku (PR #171075)
Brad Smith via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 7 20:25:29 PST 2025
https://github.com/brad0 created https://github.com/llvm/llvm-project/pull/171075
r13 does not provide the trap err.
>From b8855b3859b4cedbd11a8072d222f3883b2c0d34 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= <jerome.duval at gmail.com>
Date: Sun, 7 Dec 2025 23:03:59 -0500
Subject: [PATCH] [compiler-rt][sanitizer] fix i386 build for Haiku
r13 does not provide the trap err.
---
compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp | 9 +++++++--
.../sanitizer_common/sanitizer_platform_limits_posix.h | 4 ++++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
index 87a18b1120af6..37245c35cf919 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -1287,7 +1287,7 @@ uptr GetPageSize() {
uptr ReadBinaryName(/*out*/ char *buf, uptr buf_len) {
# if SANITIZER_HAIKU
- int cookie = 0;
+ int32_t cookie = 0;
image_info info;
const char *argv0 = "<UNKNOWN>";
while (get_next_image_info(B_CURRENT_TEAM, &cookie, &info) == B_OK) {
@@ -1987,7 +1987,7 @@ SignalContext::WriteFlag SignalContext::GetWriteFlag() const {
# elif SANITIZER_NETBSD
uptr err = ucontext->uc_mcontext.__gregs[_REG_ERR];
# elif SANITIZER_HAIKU
- uptr err = ucontext->uc_mcontext.r13;
+ uptr err = 0; // ucontext->uc_mcontext.r13;
# elif SANITIZER_SOLARIS && defined(__i386__)
const int Err = 13;
uptr err = ucontext->uc_mcontext.gregs[Err];
@@ -2617,6 +2617,11 @@ static void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
*pc = ucontext->uc_mcontext.mc_eip;
*bp = ucontext->uc_mcontext.mc_ebp;
*sp = ucontext->uc_mcontext.mc_esp;
+# elif SANITIZER_HAIKU
+ ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.eip;
+ *bp = ucontext->uc_mcontext.ebp;
+ *sp = ucontext->uc_mcontext.esp;
# else
ucontext_t *ucontext = (ucontext_t *)context;
# if SANITIZER_SOLARIS
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
index 24966523f3a02..82f0da14f5efe 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
@@ -629,7 +629,11 @@ typedef unsigned long __sanitizer_sigset_t;
# elif SANITIZER_APPLE
typedef unsigned __sanitizer_sigset_t;
# elif SANITIZER_HAIKU
+# if defined(__x86_64__)
typedef unsigned long __sanitizer_sigset_t;
+# else
+typedef unsigned long long __sanitizer_sigset_t;
+# endif
# elif SANITIZER_LINUX
struct __sanitizer_sigset_t {
// The size is determined by looking at sizeof of real sigset_t on linux.
More information about the llvm-commits
mailing list