compiler-rt_lib
authorLLVM Packaging Team <pkg-llvm-team@lists.alioth.debian.org>
Wed, 7 Aug 2019 13:11:36 +0000 (14:11 +0100)
committerGianfranco Costamagna <locutusofborg@debian.org>
Wed, 7 Aug 2019 13:11:36 +0000 (14:11 +0100)
===================================================================

Gbp-Pq: Topic kfreebsd
Gbp-Pq: Name compiler-rt_lib.diff

15 files changed:
compiler-rt/lib/asan/asan_linux.cc
compiler-rt/lib/fuzzer/FuzzerDefs.h
compiler-rt/lib/fuzzer/FuzzerExtFunctionsWeak.cpp
compiler-rt/lib/fuzzer/FuzzerExtraCounters.cpp
compiler-rt/lib/fuzzer/FuzzerUtilLinux.cpp
compiler-rt/lib/fuzzer/FuzzerUtilPosix.cpp
compiler-rt/lib/sanitizer_common/sanitizer_freebsd.h
compiler-rt/lib/sanitizer_common/sanitizer_linux.cc
compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
compiler-rt/lib/sanitizer_common/sanitizer_platform.h
compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h
compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cc
compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc
compiler-rt/lib/tsan/rtl/tsan_rtl_amd64.S
compiler-rt/lib/ubsan/ubsan_platform.h

index a150b1955d60e2c44fd9d7e7d735d7331c9ffffc..a76bb73b77bf2c1867fd4c1d77d61bb34db11ae0 100644 (file)
@@ -38,7 +38,7 @@
 #include <unistd.h>
 #include <unwind.h>
 
-#if SANITIZER_FREEBSD
+#if SANITIZER_FREEBSD && !SANITIZER_KFREEBSD
 #include <sys/link_elf.h>
 #endif
 
 
 #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 c3dccbcd86f5c8edf6f5448af91b09b276051b15..0f4678b07397a3f0f8c35d625810d7d6adc575c8 100644 (file)
@@ -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__
 #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
 
 #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 6a6ef4932f41680b0e3a32da4eb48ee3cdb7e422..85b2682b313a6642857e5e429dc5564da857469a 100644 (file)
@@ -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 c99cd89be293a663d9a810aa87c40de84d2ae9b0..f6d752a15b098d33abc1101ed7ef489c9f5c6fce 100644 (file)
@@ -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 c103fd230b0c677990a402f4acf9c026859e95a3..82aa1ee8f9eabdc0c5dc23dc343b45462cafb379 100644 (file)
@@ -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 bc64d3293702f12b2c8445627d43ca5d925ea2a3..194591f0c18791571b2b1bc247073ed3f698f17f 100644 (file)
@@ -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 c9bba8064af012247cdcc150dcd46d5261a89c05..bd10a468195c50785d8de8181101da5ef1c9b18c 100644 (file)
@@ -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 48795674c54c58c5498086acf03972e5b4c25098..abc47042c32e56ed24f1609156013f00061f31a5 100644 (file)
 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, const char *base_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 6ce47ec620dc7b939c90c217ce5844d150f13f8f..f1ccacf2b3497ea356fa295922ed3b3c86e1621a 100644 (file)
 #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, uptr *stk_addr, uptr *stk_size,
 #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 82bb1af7746be061177a53bccbf83f7bf4055d3a..5d3be55c3bc1991fd2f4e11018398b7b9d60c50e 100644 (file)
@@ -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
 
 # 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
 
 #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 de69852d35a6bbee0580b97f6c52d960ff1a1817..10e5a01272b74ec1bddbada497770c092d00a5b7 100644 (file)
@@ -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 362a424d737a42a34f6b41f0d1f1ce9509671e90..d22e9f2eb28f4f25f2ed79f5ec083d4f8fdb6db3 100644 (file)
@@ -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 ddfb26397f44c730f8a4f0c7bb4936aa632ac40c..c60b647ec84dd409ee4a33e344da9a98a52366c7 100644 (file)
@@ -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
index 34ef51c2a725704815630699073263c97aaf8d83..d86bf088ed194f5f217f174acba7fa8367ac235c 100644 (file)
@@ -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 45a4aa7720815122207fc650539cf4ca247e0a70..3ba8628dc9c1b0a54b887e2fc66297b32e21e725 100644 (file)
@@ -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