Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc @@ -84,9 +84,14 @@ extern "C" { // must be included after and on // FreeBSD 9.2 and 10.0. +#if SANITIZER_KFREEBSD +#include +#endif #include } +#if !SANITIZER_KFREEBSD #include +#endif #endif // SANITIZER_FREEBSD #if SANITIZER_NETBSD @@ -468,10 +473,12 @@ bool FileExists(const char *filename) { #if !SANITIZER_NETBSD tid_t GetTid() { -#if SANITIZER_FREEBSD +#if SANITIZER_FREEBSD && !SANITIZER_KFREEBSD long Tid; thr_self(&Tid); return Tid; +#elif SANITIZER_KFREEBSD + return (uptr)pthread_self(); #elif SANITIZER_OPENBSD return internal_syscall(SYSCALL(getthrid)); #elif SANITIZER_SOLARIS @@ -1167,10 +1174,10 @@ bool LibraryNameIs(const char *full_name // Call cb for each region mapped by map. void ForEachMappedRegion(link_map *map, void (*cb)(const void *, uptr)) { CHECK_NE(map, nullptr); -#if !SANITIZER_FREEBSD && !SANITIZER_OPENBSD +#if !SANITIZER_FREEBSD && !SANITIZER_OPENBSD || SANITIZER_KFREEBSD typedef ElfW(Phdr) Elf_Phdr; typedef ElfW(Ehdr) Elf_Ehdr; -#endif // !SANITIZER_FREEBSD && !SANITIZER_OPENBSD +#endif // !SANITIZER_FREEBSD && !SANITIZER_OPENBSD || SANITIZER_KFREEBSD char *base = (char *)map->l_addr; Elf_Ehdr *ehdr = (Elf_Ehdr *)base; char *phdrs = base + ehdr->e_phoff; Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc @@ -36,10 +36,12 @@ #include #if SANITIZER_FREEBSD -#include +# if !SANITIZER_KFREEBSD +# include +# define pthread_getattr_np pthread_attr_get_np +# endif #include #include -#define pthread_getattr_np pthread_attr_get_np #endif #if SANITIZER_OPENBSD @@ -528,9 +530,9 @@ void GetThreadStackAndTls(bool main, upt #endif } -#if !SANITIZER_FREEBSD && !SANITIZER_OPENBSD +#if !SANITIZER_FREEBSD && !SANITIZER_OPENBSD || SANITIZER_KFREEBSD typedef ElfW(Phdr) Elf_Phdr; -#elif SANITIZER_WORDSIZE == 32 && __FreeBSD_version <= 902001 // v9.2 +#elif SANITIZER_WORDSIZE == 32 && !SANITIZER_KFREEBSD && __FreeBSD_version <= 902001 // v9.2 #define Elf_Phdr XElf32_Phdr #define dl_phdr_info xdl_phdr_info #define dl_iterate_phdr(c, b) xdl_iterate_phdr((c), (b)) Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_platform.h =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_platform.h @@ -16,7 +16,7 @@ #if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && \ !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(_WIN32) && \ !defined(__Fuchsia__) && !defined(__rtems__) && \ - !(defined(__sun__) && defined(__svr4__)) + !(defined(__sun__) && defined(__svr4__)) && !defined(__FreeBSD_kernel__) # error "This operating system is not supported" #endif @@ -26,12 +26,18 @@ # define SANITIZER_LINUX 0 #endif -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # define SANITIZER_FREEBSD 1 #else # define SANITIZER_FREEBSD 0 #endif +#if defined(__FreeBSD_kernel__) +# define SANITIZER_KFREEBSD 1 +#else +# define SANITIZER_KFREEBSD 0 +#endif + #if defined(__NetBSD__) # define SANITIZER_NETBSD 1 #else @@ -113,7 +119,8 @@ #define SANITIZER_POSIX \ (SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_MAC || \ - SANITIZER_NETBSD || SANITIZER_OPENBSD || SANITIZER_SOLARIS) + SANITIZER_NETBSD || SANITIZER_OPENBSD || SANITIZER_SOLARIS || \ + SANITIZER_KFREEBSD) #if __LP64__ || defined(_WIN64) # define SANITIZER_WORDSIZE 64 Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/asan/asan_linux.cc =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/asan/asan_linux.cc +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/asan/asan_linux.cc @@ -38,7 +38,7 @@ #include #include -#if SANITIZER_FREEBSD +#if SANITIZER_FREEBSD && !SANITIZER_KFREEBSD #include #endif @@ -48,7 +48,11 @@ #if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS #include +#if SANITIZER_KFREEBSD +#include +#else extern "C" void* _DYNAMIC; +#endif #elif SANITIZER_NETBSD #include #include @@ -61,7 +65,7 @@ extern Elf_Dyn _DYNAMIC; // x86-64 FreeBSD 9.2 and older define 'ucontext_t' incorrectly in // 32-bit mode. #if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32) && \ - __FreeBSD_version <= 902001 // v9.2 + !SANITIZER_KFREEBSD && __FreeBSD_version <= 902001 // v9.2 #define ucontext_t xucontext_t #endif Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/ubsan/ubsan_platform.h =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/ubsan/ubsan_platform.h +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/ubsan/ubsan_platform.h @@ -15,7 +15,7 @@ // Other platforms should be easy to add, and probably work as-is. #if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) || \ - defined(__NetBSD__) || defined(__OpenBSD__) || \ + defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD_kernel__) || \ (defined(__sun__) && defined(__svr4__)) || \ defined(_WIN32) || defined(__Fuchsia__) || defined(__rtems__) # define CAN_SANITIZE_UB 1 Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S @@ -197,7 +197,7 @@ ASM_SYMBOL_INTERCEPTOR(setjmp): lea 16(%rsp), %rdi mov %rdi, %rsi xorq ___tsan_darwin_setjmp_xor_key(%rip), %rsi -#elif defined(__linux__) +#elif defined(__linux__) || defined(__FreeBSD_kernel__) lea 16(%rsp), %rdi mov %rdi, %rsi xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) @@ -246,7 +246,7 @@ ASM_SYMBOL_INTERCEPTOR(_setjmp): lea 16(%rsp), %rdi mov %rdi, %rsi xorq ___tsan_darwin_setjmp_xor_key(%rip), %rsi -#elif defined(__linux__) +#elif defined(__linux__) || defined(__FreeBSD_kernel__) lea 16(%rsp), %rdi mov %rdi, %rsi xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) @@ -302,7 +302,7 @@ ASM_SYMBOL_INTERCEPTOR(sigsetjmp): lea 32(%rsp), %rdi mov %rdi, %rsi xorq ___tsan_darwin_setjmp_xor_key(%rip), %rsi -#elif defined(__linux__) +#elif defined(__linux__) || defined(__FreeBSD_kernel__) lea 32(%rsp), %rdi mov %rdi, %rsi xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) @@ -389,7 +389,7 @@ ASM_SYMBOL_INTERCEPTOR(__sigsetjmp): ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) #endif // !defined(__APPLE__) && !defined(__NetBSD__) -#if defined(__FreeBSD__) || defined(__linux__) +#if defined(__FreeBSD__) || defined(__linux__) || defined(__FreeBSD_kernel__) /* We do not need executable stack. */ /* This note is not needed on NetBSD. */ .section .note.GNU-stack,"",@progbits Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerDefs.h =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/fuzzer/FuzzerDefs.h +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerDefs.h @@ -28,6 +28,7 @@ #define LIBFUZZER_LINUX 1 #define LIBFUZZER_NETBSD 0 #define LIBFUZZER_FREEBSD 0 +#define LIBFUZZER_KFREEBSD 1 #define LIBFUZZER_OPENBSD 0 #define LIBFUZZER_WINDOWS 0 #elif __APPLE__ @@ -54,6 +55,15 @@ #define LIBFUZZER_FREEBSD 1 #define LIBFUZZER_OPENBSD 0 #define LIBFUZZER_WINDOWS 0 +#elif __FreeBSD_kernel__ +#define LIBFUZZER_APPLE 0 +#define LIBFUZZER_FUCHSIA 0 +#define LIBFUZZER_LINUX 0 +#define LIBFUZZER_NETBSD 0 +#define LIBFUZZER_FREEBSD 0 +#define LIBFUZZER_KFREEBSD 1 +#define LIBFUZZER_OPENBSD 0 +#define LIBFUZZER_WINDOWS 0 #elif __OpenBSD__ #define LIBFUZZER_APPLE 0 #define LIBFUZZER_FUCHSIA 0 @@ -95,7 +105,7 @@ #define LIBFUZZER_POSIX \ (LIBFUZZER_APPLE || LIBFUZZER_LINUX || LIBFUZZER_NETBSD || \ - LIBFUZZER_FREEBSD || LIBFUZZER_OPENBSD) + LIBFUZZER_FREEBSD || LIBFUZZER_OPENBSD || LIBFUZZER_KFREEBSD) #ifdef __x86_64 # if __has_attribute(target) Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerUtilPosix.cpp =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/fuzzer/FuzzerUtilPosix.cpp +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerUtilPosix.cpp @@ -119,7 +119,7 @@ size_t GetPeakRSSMb() { if (getrusage(RUSAGE_SELF, &usage)) return 0; if (LIBFUZZER_LINUX || LIBFUZZER_FREEBSD || LIBFUZZER_NETBSD || - LIBFUZZER_OPENBSD) { + LIBFUZZER_OPENBSD || LIBFUZZER_KFREEBSD) { // ru_maxrss is in KiB return usage.ru_maxrss >> 10; } else if (LIBFUZZER_APPLE) { Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerExtraCounters.cpp =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/fuzzer/FuzzerExtraCounters.cpp +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerExtraCounters.cpp @@ -12,7 +12,7 @@ #include "FuzzerDefs.h" #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD || \ - LIBFUZZER_OPENBSD + LIBFUZZER_OPENBSD || LIBFUZZER_KFREEBSD __attribute__((weak)) extern uint8_t __start___libfuzzer_extra_counters; __attribute__((weak)) extern uint8_t __stop___libfuzzer_extra_counters; Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp @@ -14,7 +14,7 @@ //===----------------------------------------------------------------------===// #include "FuzzerDefs.h" #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FUCHSIA || \ - LIBFUZZER_FREEBSD || LIBFUZZER_OPENBSD + LIBFUZZER_FREEBSD || LIBFUZZER_OPENBSD || LIBFUZZER_KFREEBSD #include "FuzzerExtFunctions.h" #include "FuzzerIO.h" Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerUtilLinux.cpp =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/fuzzer/FuzzerUtilLinux.cpp +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/fuzzer/FuzzerUtilLinux.cpp @@ -10,7 +10,7 @@ //===----------------------------------------------------------------------===// #include "FuzzerDefs.h" #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD || \ - LIBFUZZER_OPENBSD + LIBFUZZER_OPENBSD || LIBFUZZER_KFREEBSD #include "FuzzerCommand.h" #include Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h @@ -21,7 +21,7 @@ // 32-bit mode. #if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32) # include -# if __FreeBSD_version <= 902001 // v9.2 +# if !SANITIZER_KFREEBSD && __FreeBSD_version <= 902001 // v9.2 # include # include # include Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc @@ -38,7 +38,7 @@ // Fix 'kinfo_vmentry' definition on FreeBSD prior v9.2 in 32-bit mode. #if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32) #include -#if __FreeBSD_version <= 902001 // v9.2 +#if !SANITIZER_KFREEBSD && __FreeBSD_version <= 902001 // v9.2 #define kinfo_vmentry xkinfo_vmentry #endif #endif Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h @@ -20,7 +20,9 @@ #include "sanitizer_internal_defs.h" #include "sanitizer_platform.h" +#if !SANITIZER_KFREEBSD # define GET_LINK_MAP_BY_DLOPEN_HANDLE(handle) ((link_map*)(handle)) +#endif #ifndef __GLIBC_PREREQ #define __GLIBC_PREREQ(x, y) 0 Index: llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc =================================================================== --- llvm-toolchain-8_8~+rc2.orig/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc +++ llvm-toolchain-8_8~+rc2/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc @@ -20,7 +20,7 @@ # define SYSCALL(name) __NR_ ## name #endif -#if defined(__x86_64__) && (SANITIZER_FREEBSD || SANITIZER_MAC) +#if defined(__x86_64__) && ((SANITIZER_FREEBSD && !SANITIZER_KFREEBSD) || SANITIZER_MAC) # define internal_syscall __syscall # else # define internal_syscall syscall