Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145996862
D35228.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D35228.id.diff
View Options
diff --git a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
--- a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -2080,12 +2080,19 @@
*sp = ucontext->uc_mcontext.gregs[REG_UESP];
# endif
#elif defined(__powerpc__) || defined(__powerpc64__)
+# if SANITIZER_FREEBSD
+ ucontext_t *ucontext = (ucontext_t *)context;
+ *pc = ucontext->uc_mcontext.mc_srr0;
+ *sp = ucontext->uc_mcontext.mc_frame[1];
+ *bp = ucontext->uc_mcontext.mc_frame[31];
+# else
ucontext_t *ucontext = (ucontext_t*)context;
*pc = ucontext->uc_mcontext.regs->nip;
*sp = ucontext->uc_mcontext.regs->gpr[PT_R1];
// The powerpc{,64}-linux ABIs do not specify r31 as the frame
// pointer, but GCC always uses r31 when we need a frame pointer.
*bp = ucontext->uc_mcontext.regs->gpr[PT_R31];
+# endif
#elif defined(__sparc__)
#if defined(__arch64__) || defined(__sparcv9)
#define STACK_BIAS 2047
@@ -2174,17 +2181,6 @@
GetArgv()[0]);
Die();
}
-#elif SANITIZER_PPC64V2
- // Disable ASLR for Linux PPC64LE.
- int old_personality = personality(0xffffffff);
- if (old_personality != -1 && (old_personality & ADDR_NO_RANDOMIZE) == 0) {
- VReport(1, "WARNING: Program is being run with address space layout "
- "randomization (ASLR) enabled which prevents the thread and "
- "memory sanitizers from working on powerpc64le.\n"
- "ASLR will be disabled and the program re-executed.\n");
- CHECK_NE(personality(old_personality | ADDR_NO_RANDOMIZE), -1);
- ReExec();
- }
#elif SANITIZER_FREEBSD
int aslr_status;
if (UNLIKELY(procctl(P_PID, 0, PROC_ASLR_STATUS, &aslr_status) == -1)) {
@@ -2201,6 +2197,18 @@
CHECK_NE(procctl(P_PID, 0, PROC_ASLR_CTL, &aslr_ctl), -1);
ReExec();
}
+# elif SANITIZER_PPC64V2
+ // Disable ASLR for Linux PPC64LE.
+ int old_personality = personality(0xffffffff);
+ if (old_personality != -1 && (old_personality & ADDR_NO_RANDOMIZE) == 0) {
+ VReport(1,
+ "WARNING: Program is being run with address space layout "
+ "randomization (ASLR) enabled which prevents the thread and "
+ "memory sanitizers from working on powerpc64le.\n"
+ "ASLR will be disabled and the program re-executed.\n");
+ CHECK_NE(personality(old_personality | ADDR_NO_RANDOMIZE), -1);
+ ReExec();
+ }
#else
// Do nothing
#endif
@@ -2225,9 +2233,9 @@
Printf("This sanitizer is not compatible with enabled MPROTECT\n");
Die();
}
-#else
+# else
// Do nothing
-#endif
+# endif
}
void CheckNoDeepBind(const char *filename, int flag) {
diff --git a/contrib/llvm-project/compiler-rt/lib/xray/xray_powerpc64.inc b/contrib/llvm-project/compiler-rt/lib/xray/xray_powerpc64.inc
--- a/contrib/llvm-project/compiler-rt/lib/xray/xray_powerpc64.inc
+++ b/contrib/llvm-project/compiler-rt/lib/xray/xray_powerpc64.inc
@@ -12,7 +12,22 @@
#include <cstdint>
#include <mutex>
+#ifdef __linux__
#include <sys/platform/ppc.h>
+#elif defined(__FreeBSD__)
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+#define __ppc_get_timebase __builtin_ppc_get_timebase
+
+uint64_t __ppc_get_timebase_freq (void)
+{
+ uint64_t tb_freq = 0;
+ size_t length = sizeof(tb_freq);
+ sysctlbyname("kern.timecounter.tc.timebase.frequency", &tb_freq, &length, nullptr, 0);
+ return tb_freq;
+}
+#endif
#include "xray_defs.h"
diff --git a/lib/libclang_rt/Makefile b/lib/libclang_rt/Makefile
--- a/lib/libclang_rt/Makefile
+++ b/lib/libclang_rt/Makefile
@@ -32,6 +32,31 @@
SUBDIR+= xray-profiling
.endif # amd64
+.if ${MACHINE_ARCH} == "powerpc64" || ${MACHINE_ARCH} == "powerpc64le"
+SUBDIR+= include
+SUBDIR+= asan
+SUBDIR+= asan-preinit
+SUBDIR+= asan_cxx
+SUBDIR+= asan_dynamic
+SUBDIR+= asan_static
+SUBDIR+= msan
+SUBDIR+= msan_cxx
+SUBDIR+= stats
+SUBDIR+= stats_client
+SUBDIR+= tsan
+SUBDIR+= tsan_cxx
+SUBDIR+= ubsan_minimal
+SUBDIR+= ubsan_standalone
+SUBDIR+= ubsan_standalone_cxx
+.endif # powerpc64 || powerpc64le
+
+.if ${MACHINE_ARCH} == "powerpc64le"
+SUBDIR+= xray
+SUBDIR+= xray-basic
+SUBDIR+= xray-fdr
+SUBDIR+= xray-profiling
+.endif # powerpc64le
+
.if ${MACHINE_CPUARCH} == "riscv"
SUBDIR+= include
SUBDIR+= asan
diff --git a/lib/libclang_rt/xray/Makefile b/lib/libclang_rt/xray/Makefile
--- a/lib/libclang_rt/xray/Makefile
+++ b/lib/libclang_rt/xray/Makefile
@@ -37,9 +37,18 @@
SRCS+= xray/xray_init.cpp
SRCS+= xray/xray_interface.cpp
SRCS+= xray/xray_log_interface.cpp
-SRCS+= xray/xray_trampoline_x86_64.S
SRCS+= xray/xray_utils.cpp
+
+.if ${MACHINE_CPUARCH} == amd64
+SRCS+= xray/xray_trampoline_x86_64.S
SRCS+= xray/xray_x86_64.cpp
+.endif # amd64
+
+.if ${MACHINE_ARCH} == powerpc64le
+SRCS+= xray/xray_powerpc64.cpp
+SRCS+= xray/xray_trampoline_powerpc64.cpp
+SRCS+= xray/xray_trampoline_powerpc64_asm.S
+.endif # powerpc64le
.PATH: ${CRTSRC}/include/xray
INCSDIR= ${CLANGDIR}/include/xray
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Feb 27, 9:05 PM (41 m, 44 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29014734
Default Alt Text
D35228.id.diff (4 KB)
Attached To
Mode
D35228: powerpc: enable supported sanitizers on powerpc64*
Attached
Detach File
Event Timeline
Log In to Comment