mirror of
https://git.proxmox.com/git/llvm-toolchain
synced 2025-06-15 14:48:35 +00:00
524 lines
19 KiB
Diff
524 lines
19 KiB
Diff
Index: llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
|
|
+++ llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
|
|
@@ -84,9 +84,14 @@
|
|
extern "C" {
|
|
// <sys/umtx.h> must be included after <errno.h> and <sys/types.h> on
|
|
// FreeBSD 9.2 and 10.0.
|
|
+#if SANITIZER_KFREEBSD
|
|
+#include <bsd/sys/cdefs.h>
|
|
+#endif
|
|
#include <sys/umtx.h>
|
|
}
|
|
+#if !SANITIZER_KFREEBSD
|
|
#include <sys/thr.h>
|
|
+#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~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
|
|
+++ llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
|
|
@@ -36,10 +36,12 @@
|
|
#include <syslog.h>
|
|
|
|
#if SANITIZER_FREEBSD
|
|
-#include <pthread_np.h>
|
|
+# if !SANITIZER_KFREEBSD
|
|
+# include <pthread_np.h>
|
|
+# define pthread_getattr_np pthread_attr_get_np
|
|
+# endif
|
|
#include <osreldate.h>
|
|
#include <sys/sysctl.h>
|
|
-#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~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
|
|
+++ llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
|
|
@@ -50,7 +50,7 @@
|
|
#include <utmp.h>
|
|
#endif
|
|
|
|
-#if !SANITIZER_IOS
|
|
+#if !SANITIZER_IOS && !SANITIZER_KFREEBSD
|
|
#include <net/route.h>
|
|
#endif
|
|
|
|
@@ -109,7 +109,11 @@ typedef struct user_fpregs elf_fpregset_
|
|
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
#include <glob.h>
|
|
#include <obstack.h>
|
|
-#include <mqueue.h>
|
|
+#if SANITIZER_KFREEBSD
|
|
+# include <mqueue.h>
|
|
+#else
|
|
+# include <sys/mqueue.h>
|
|
+#endif
|
|
#include <net/if_ppp.h>
|
|
#include <netax25/ax25.h>
|
|
#include <netipx/ipx.h>
|
|
@@ -146,6 +150,12 @@ typedef struct user_fpregs elf_fpregset_
|
|
#include <linux/if_ppp.h>
|
|
#endif
|
|
|
|
+#if SANITIZER_KFREEBSD
|
|
+# include <link.h>
|
|
+#else
|
|
+# include <sys/link_elf.h>
|
|
+#endif
|
|
+
|
|
#if SANITIZER_LINUX
|
|
#include <link.h>
|
|
#include <sys/vfs.h>
|
|
@@ -256,7 +266,7 @@ namespace __sanitizer {
|
|
#endif
|
|
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_KFREEBSD
|
|
unsigned struct_shminfo_sz = sizeof(struct shminfo);
|
|
unsigned struct_shm_info_sz = sizeof(struct shm_info);
|
|
int shmctl_ipc_stat = (int)IPC_STAT;
|
|
@@ -286,7 +296,7 @@ namespace __sanitizer {
|
|
return 0;
|
|
}
|
|
|
|
-#if SANITIZER_LINUX
|
|
+#if SANITIZER_LINUX || SANITIZER_KFREEBSD
|
|
unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr));
|
|
#elif SANITIZER_FREEBSD
|
|
unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|
@@ -466,7 +476,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(El
|
|
unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats);
|
|
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
|
|
|
-#if !SANITIZER_ANDROID && !SANITIZER_MAC
|
|
+#if !SANITIZER_ANDROID && !SANITIZER_MAC && !SANITIZER_KFREEBSD
|
|
unsigned struct_sioc_sg_req_sz = sizeof(struct sioc_sg_req);
|
|
unsigned struct_sioc_vif_req_sz = sizeof(struct sioc_vif_req);
|
|
#endif
|
|
@@ -519,7 +529,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(El
|
|
unsigned IOCTL_TIOCSPGRP = TIOCSPGRP;
|
|
unsigned IOCTL_TIOCSTI = TIOCSTI;
|
|
unsigned IOCTL_TIOCSWINSZ = TIOCSWINSZ;
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_KFREEBSD
|
|
unsigned IOCTL_SIOCGETSGCNT = SIOCGETSGCNT;
|
|
unsigned IOCTL_SIOCGETVIFCNT = SIOCGETVIFCNT;
|
|
#endif
|
|
@@ -958,7 +968,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi
|
|
CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);
|
|
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
|
|
|
-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
|
+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_KFREEBSD
|
|
CHECK_TYPE_SIZE(glob_t);
|
|
CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc);
|
|
CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv);
|
|
@@ -978,8 +988,10 @@ CHECK_SIZE_AND_OFFSET(addrinfo, ai_sockt
|
|
CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol);
|
|
CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol);
|
|
CHECK_SIZE_AND_OFFSET(addrinfo, ai_addrlen);
|
|
+#if !SANITIZER_KFREEBSD
|
|
CHECK_SIZE_AND_OFFSET(addrinfo, ai_canonname);
|
|
CHECK_SIZE_AND_OFFSET(addrinfo, ai_addr);
|
|
+#endif
|
|
|
|
CHECK_TYPE_SIZE(hostent);
|
|
CHECK_SIZE_AND_OFFSET(hostent, h_name);
|
|
@@ -1001,7 +1013,9 @@ CHECK_SIZE_AND_OFFSET(msghdr, msg_contro
|
|
CHECK_SIZE_AND_OFFSET(msghdr, msg_controllen);
|
|
CHECK_SIZE_AND_OFFSET(msghdr, msg_flags);
|
|
|
|
+#if !SANITIZER_KFREEBSD
|
|
CHECK_TYPE_SIZE(cmsghdr);
|
|
+#endif
|
|
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len);
|
|
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);
|
|
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);
|
|
@@ -1043,7 +1057,9 @@ CHECK_SIZE_AND_OFFSET(pollfd, fd);
|
|
CHECK_SIZE_AND_OFFSET(pollfd, events);
|
|
CHECK_SIZE_AND_OFFSET(pollfd, revents);
|
|
|
|
+#if !SANITIZER_KFREEBSD
|
|
CHECK_TYPE_SIZE(nfds_t);
|
|
+#endif
|
|
|
|
CHECK_TYPE_SIZE(sigset_t);
|
|
|
|
@@ -1083,7 +1099,9 @@ CHECK_TYPE_SIZE(__kernel_fd_set);
|
|
#endif
|
|
|
|
#if !SANITIZER_ANDROID
|
|
+# if !SANITIZER_KFREEBSD
|
|
CHECK_TYPE_SIZE(wordexp_t);
|
|
+# endif
|
|
CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordc);
|
|
CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordv);
|
|
CHECK_SIZE_AND_OFFSET(wordexp_t, we_offs);
|
|
@@ -1116,13 +1134,14 @@ CHECK_TYPE_SIZE(ether_addr);
|
|
|
|
#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
|
CHECK_TYPE_SIZE(ipc_perm);
|
|
-# if SANITIZER_FREEBSD
|
|
+#if SANITIZER_FREEBSD && !SANITIZER_KFREEBSD
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, key);
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, seq);
|
|
-# else
|
|
+#endif
|
|
+#if !SANITIZER_FREEBSD && !SANITIZER_KFREEBSD
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, __key);
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, __seq);
|
|
-# endif
|
|
+#endif
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
|
|
@@ -1161,7 +1180,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_netma
|
|
#ifdef ifa_dstaddr
|
|
#undef ifa_dstaddr
|
|
#endif
|
|
-# if SANITIZER_FREEBSD
|
|
+# if SANITIZER_FREEBSD && !SANITIZER_KFREEBSD
|
|
CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
|
|
# else
|
|
COMPILER_CHECK(sizeof(((__sanitizer_ifaddrs *)nullptr)->ifa_dstaddr) ==
|
|
@@ -1187,15 +1206,19 @@ CHECK_SIZE_AND_OFFSET(timeb, timezone);
|
|
CHECK_SIZE_AND_OFFSET(timeb, dstflag);
|
|
#endif
|
|
|
|
+#if !SANITIZER_KFREEBSD
|
|
CHECK_TYPE_SIZE(passwd);
|
|
+#endif
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_name);
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_passwd);
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_uid);
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_gid);
|
|
+#if !SANITIZER_KFREEBSD
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_dir);
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_shell);
|
|
+#endif
|
|
|
|
-#if !SANITIZER_ANDROID
|
|
+#if !SANITIZER_ANDROID && !SANITIZER_KFREEBSD
|
|
CHECK_SIZE_AND_OFFSET(passwd, pw_gecos);
|
|
#endif
|
|
|
|
@@ -1261,7 +1284,7 @@ CHECK_SIZE_AND_OFFSET(cookie_io_function
|
|
CHECK_SIZE_AND_OFFSET(cookie_io_functions_t, close);
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX || SANITIZER_FREEBSD
|
|
+#if SANITIZER_LINUX || (SANITIZER_FREEBSD && !SANITIZER_KFREEBSD)
|
|
CHECK_TYPE_SIZE(sem_t);
|
|
#endif
|
|
|
|
Index: llvm-toolchain-8-8~+rc1/compiler-rt/lib/asan/asan_linux.cc
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/asan/asan_linux.cc
|
|
+++ llvm-toolchain-8-8~+rc1/compiler-rt/lib/asan/asan_linux.cc
|
|
@@ -38,7 +38,7 @@
|
|
#include <unistd.h>
|
|
#include <unwind.h>
|
|
|
|
-#if SANITIZER_FREEBSD
|
|
+#if SANITIZER_FREEBSD && !SANITIZER_KFREEBSD
|
|
#include <sys/link_elf.h>
|
|
#endif
|
|
|
|
@@ -48,7 +48,11 @@
|
|
|
|
#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS
|
|
#include <ucontext.h>
|
|
+#if SANITIZER_KFREEBSD
|
|
+#include <link.h>
|
|
+#else
|
|
extern "C" void* _DYNAMIC;
|
|
+#endif
|
|
#elif SANITIZER_NETBSD
|
|
#include <link_elf.h>
|
|
#include <ucontext.h>
|
|
@@ -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~+rc1/compiler-rt/lib/ubsan/ubsan_platform.h
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/ubsan/ubsan_platform.h
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/fuzzer/FuzzerDefs.h
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/fuzzer/FuzzerDefs.h
|
|
+++ llvm-toolchain-8-8~+rc1/compiler-rt/lib/fuzzer/FuzzerDefs.h
|
|
@@ -54,6 +54,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 +104,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~+rc1/compiler-rt/lib/fuzzer/FuzzerUtilPosix.cpp
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/fuzzer/FuzzerUtilPosix.cpp
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/fuzzer/FuzzerExtraCounters.cpp
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/fuzzer/FuzzerExtraCounters.cpp
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/fuzzer/FuzzerUtilLinux.cpp
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/fuzzer/FuzzerUtilLinux.cpp
|
|
+++ llvm-toolchain-8-8~+rc1/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 <stdlib.h>
|
|
Index: llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h
|
|
+++ llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h
|
|
@@ -21,7 +21,7 @@
|
|
// 32-bit mode.
|
|
#if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32)
|
|
# include <osreldate.h>
|
|
-# if __FreeBSD_version <= 902001 // v9.2
|
|
+# if !SANITIZER_KFREEBSD && __FreeBSD_version <= 902001 // v9.2
|
|
# include <link.h>
|
|
# include <sys/param.h>
|
|
# include <ucontext.h>
|
|
Index: llvm-toolchain-8-8~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc
|
|
+++ llvm-toolchain-8-8~+rc1/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 <osreldate.h>
|
|
-#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~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
|
|
+++ llvm-toolchain-8-8~+rc1/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~+rc1/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc
|
|
===================================================================
|
|
--- llvm-toolchain-8-8~+rc1.orig/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc
|
|
+++ llvm-toolchain-8-8~+rc1/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
|