From nobody Sat May 21 14:40:30 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 60E0B1AE6EAF; Sat, 21 May 2022 14:40:31 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4L55qM1FYpz3sqV; Sat, 21 May 2022 14:40:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653144031; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oV6EDLx+alCPGON4anPXjhVFUSfnwVRonGXxOPWzjyw=; b=WHcF508mHs/hSYfoxx0b3NUWaR0BRS2hyw913Ha3AyTgAU7HjC9yE+ve29vkKddaWSLWm8 WPpk3amA9l30t03kaTnxDs7lL6kuoDUyVqbOTSg/PhUDgExYb7CyNQe6ok91pTn/y5zWta 47CWZGj2CaS5w+q7o29iYT0FIJm5Y1514wafaFK3ElAlZRu+Tl4zRWvk32V41Y/7m4o3gd IwEFWlLfsbYWjARH6Sg4NnDdSFVZHxN46K3IF2WPMIrzLNEsUbWBhMDAHYcKaY1AvEhJto 0d9r70vXGcobieH7LMAfnP/V0k7b0FqVzpXx2Y0DZBmN96B2llwZwh8AUWCMmA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DEFC88D4; Sat, 21 May 2022 14:40:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24LEeUe0081026; Sat, 21 May 2022 14:40:30 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24LEeUmY081025; Sat, 21 May 2022 14:40:30 GMT (envelope-from git) Date: Sat, 21 May 2022 14:40:30 GMT Message-Id: <202205211440.24LEeUmY081025@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Piotr Kubaj Subject: git: e760ac89f865 - stable/13 - powerpc: enable supported sanitizers on powerpc64* List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pkubaj X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: e760ac89f86586e287cc2b49fcf4a679e12140f3 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653144031; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oV6EDLx+alCPGON4anPXjhVFUSfnwVRonGXxOPWzjyw=; b=YHPPYuaRNCw1Wlmfdh+SJr4dIA8qThn/CuC3o7S6ki+xYDFeintcdM/7AMX1/4uSFPO+7+ tro7PDbG2lWzDHE7r2wLXRyvgivj0DJWvFEYSYiE+XzhL2w3vnXN1Z7yuJXNANFJsK4FJ/ UUs7RiL9Q9VoY5exUYzFzMffcPI8DiZihzth2dn460gq0Q43jD/GFaySy83tkMvj85wg4+ UlDnS6x1iPLd32DHEwFFpU2MiCKJKmN+iGBZu/OOBcBzc9OnFOAsCvnNDqQyyz6ctoxVtz t8bKlJPbQngA7Cx5aWcagKVcU2jyAP9eROIBQ5TVzFQ2Wk8V9mJqZQu9ZtKXeg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1653144031; a=rsa-sha256; cv=none; b=ICFgrOI/3UYaqIttaH7jgLIyx6LNIDybNNA8OWZRkb2G046tMj7/ZqytAuikhBZjnUx5BR Bu1ExaUk3LFDGxG4K4apkIkBdSYWqSf/dhillQ11tE+GXK8e7TSceL6ix91C3KSNNRgz8H 0TXzTilRccoNWZSK8Nq//0vE8T84Xmc9Muvf3CfAbRycCzEoqOx0K5hxVlvjs9jZOA/lQf bVjP6nNJOkY0KQs+VRC8s48xqzCm4qj7ShHrABUDXrQFKphR77eGJtE5K7jgtBNWJnQquL 0+6prjW0ntPIxscRJgbantng0Y4+AZv7pVYz+Zj/0/NZ/ZC1b4MCUy0kAamO2A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by pkubaj (ports committer): URL: https://cgit.FreeBSD.org/src/commit/?id=e760ac89f86586e287cc2b49fcf4a679e12140f3 commit e760ac89f86586e287cc2b49fcf4a679e12140f3 Author: Piotr Kubaj AuthorDate: 2022-05-17 06:39:29 +0000 Commit: Piotr Kubaj CommitDate: 2022-05-21 14:40:14 +0000 powerpc: enable supported sanitizers on powerpc64* 1. Merge LLVM's 315d792130258a9b7250494be8d002ebb427b08f, adding support for FreeBSD/powerpc64*. 2. Add sanitizer list to lib/libclang_rt/Makefile, taken from the list of libraries that llvm-devel port builds. 3. powerpc64le supports the same sanitizers that powerpc64, but powerpc64le also supports xray* sanitizers. 4. lib/libclang_rt/xray/Makefile hardcodes amd64-specific files, so that needs to be conditionalized. 5. Sanitizers are not enabled for powerpc, because powerpc supports only builtins and profile. Reviewed by: dim Differential Revision: https://reviews.freebsd.org/D35228 Relnotes: yes MFC after: 3 days (cherry picked from commit f5024381ac16ba43d37a8bd32d54c27f6a6afa66) --- .../lib/sanitizer_common/sanitizer_linux.cpp | 34 +++++++++++++--------- .../compiler-rt/lib/xray/xray_powerpc64.inc | 15 ++++++++++ lib/libclang_rt/Makefile | 24 +++++++++++++++ lib/libclang_rt/xray/Makefile | 11 ++++++- 4 files changed, 70 insertions(+), 14 deletions(-) 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 index 769e8029dfcb..193a7fa8b1c5 100644 --- a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -2099,12 +2099,19 @@ static void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) { *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 @@ -2188,17 +2195,6 @@ void CheckASLR() { 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)) { @@ -2215,6 +2211,18 @@ void CheckASLR() { 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 @@ -2239,9 +2247,9 @@ void CheckMPROTECT() { 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 index e4e16d5b28e0..7e872b5b42e6 100644 --- 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 #include +#ifdef __linux__ #include +#elif defined(__FreeBSD__) +#include +#include + +#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 index 952b7ea8806a..2ad4bbe78d51 100644 --- a/lib/libclang_rt/Makefile +++ b/lib/libclang_rt/Makefile @@ -30,6 +30,30 @@ SUBDIR+= xray-fdr 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+= 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 index 60ed642d330a..25eaac3304c0 100644 --- a/lib/libclang_rt/xray/Makefile +++ b/lib/libclang_rt/xray/Makefile @@ -38,9 +38,18 @@ SRCS+= xray/xray_flags.cpp 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