mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-28 00:24:18 +00:00
f111c6f9ce
* starting with rc2 * make `lldb` compilable again on Darwin * separate out manpage creation for `lldb` into a new derivation * minor tweaks to the patching of sources, some of which are backportable to earlier versions
413 lines
17 KiB
Diff
413 lines
17 KiB
Diff
From f7a253f8f85d0f49df6b73996737a3e84ac64236 Mon Sep 17 00:00:00 2001
|
|
From: Will Dietz <w@wdtz.org>
|
|
Date: Mon, 24 Sep 2018 11:17:25 -0500
|
|
Subject: [PATCH] Ported to 7.0, taken from gentoo-musl project.
|
|
|
|
------
|
|
Ported to compiler-rt-sanitizers-5.0.0. Taken from
|
|
|
|
https://gist.githubusercontent.com/pwaller/2337f3290f12634cad3e3730cff0a6c1/raw/83c87a8585e2f9662494db5662e5361beb093c26/nongnu.patch
|
|
Signed-off-by: Jory A. Pratt <anarchy@gentoo.org>
|
|
|
|
Taken from gentoo-musl project, with a few additional minor fixes.
|
|
---
|
|
lib/asan/asan_linux.cc | 4 +-
|
|
lib/interception/interception_linux.cc | 2 +-
|
|
lib/interception/interception_linux.h | 2 +-
|
|
lib/msan/msan_linux.cc | 2 +-
|
|
lib/sanitizer_common/sanitizer_allocator.cc | 2 +-
|
|
.../sanitizer_common_interceptors_ioctl.inc | 4 +-
|
|
.../sanitizer_common_syscalls.inc | 2 +-
|
|
lib/sanitizer_common/sanitizer_linux.cc | 8 +++-
|
|
.../sanitizer_linux_libcdep.cc | 10 ++---
|
|
lib/sanitizer_common/sanitizer_platform.h | 6 +++
|
|
.../sanitizer_platform_interceptors.h | 4 +-
|
|
.../sanitizer_platform_limits_posix.cc | 37 +++++++++++--------
|
|
lib/tsan/rtl/tsan_platform_linux.cc | 2 +-
|
|
13 files changed, 51 insertions(+), 34 deletions(-)
|
|
|
|
diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc
|
|
index 625f32d40..73cf77aca 100644
|
|
--- a/lib/asan/asan_linux.cc
|
|
+++ b/lib/asan/asan_linux.cc
|
|
@@ -46,7 +46,7 @@
|
|
#include <link.h>
|
|
#endif
|
|
|
|
-#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS
|
|
+#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU
|
|
#include <ucontext.h>
|
|
extern "C" void* _DYNAMIC;
|
|
#elif SANITIZER_NETBSD
|
|
@@ -139,7 +139,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
|
|
UNIMPLEMENTED();
|
|
}
|
|
|
|
-#if SANITIZER_ANDROID
|
|
+#if SANITIZER_ANDROID || SANITIZER_NONGNU
|
|
// FIXME: should we do anything for Android?
|
|
void AsanCheckDynamicRTPrereqs() {}
|
|
void AsanCheckIncompatibleRT() {}
|
|
diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc
|
|
index 26bfcd8f6..529b234f7 100644
|
|
--- a/lib/interception/interception_linux.cc
|
|
+++ b/lib/interception/interception_linux.cc
|
|
@@ -43,7 +43,7 @@ bool GetRealFunctionAddress(const char *func_name, uptr *func_addr,
|
|
}
|
|
|
|
// Android and Solaris do not have dlvsym
|
|
-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD
|
|
+#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU
|
|
void *GetFuncAddrVer(const char *func_name, const char *ver) {
|
|
return dlvsym(RTLD_NEXT, func_name, ver);
|
|
}
|
|
diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h
|
|
index 942c25609..24a4d5080 100644
|
|
--- a/lib/interception/interception_linux.h
|
|
+++ b/lib/interception/interception_linux.h
|
|
@@ -36,7 +36,7 @@ void *GetFuncAddrVer(const char *func_name, const char *ver);
|
|
(::__interception::uptr) & WRAP(func))
|
|
|
|
// Android, Solaris and OpenBSD do not have dlvsym
|
|
-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD
|
|
+#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU
|
|
#define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \
|
|
(::__interception::real_##func = (func##_f)( \
|
|
unsigned long)::__interception::GetFuncAddrVer(#func, symver))
|
|
diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc
|
|
index 385a650c4..6e30a8ce9 100644
|
|
--- a/lib/msan/msan_linux.cc
|
|
+++ b/lib/msan/msan_linux.cc
|
|
@@ -13,7 +13,7 @@
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "sanitizer_common/sanitizer_platform.h"
|
|
-#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD
|
|
+#if SANITIZER_FREEBSD || (SANITIZER_LINUX && !SANITIZER_NONGNU) || SANITIZER_NETBSD
|
|
|
|
#include "msan.h"
|
|
#include "msan_report.h"
|
|
diff --git a/lib/sanitizer_common/sanitizer_allocator.cc b/lib/sanitizer_common/sanitizer_allocator.cc
|
|
index 6bfd5e5ee..048f6154f 100644
|
|
--- a/lib/sanitizer_common/sanitizer_allocator.cc
|
|
+++ b/lib/sanitizer_common/sanitizer_allocator.cc
|
|
@@ -27,7 +27,7 @@ const char *SecondaryAllocatorName = "LargeMmapAllocator";
|
|
|
|
// ThreadSanitizer for Go uses libc malloc/free.
|
|
#if SANITIZER_GO || defined(SANITIZER_USE_MALLOC)
|
|
-# if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+# if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
extern "C" void *__libc_malloc(uptr size);
|
|
# if !SANITIZER_GO
|
|
extern "C" void *__libc_memalign(uptr alignment, uptr size);
|
|
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
|
|
index 2d633c173..b6eb23116 100644
|
|
--- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
|
|
+++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
|
|
@@ -104,7 +104,7 @@ static void ioctl_table_fill() {
|
|
_(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz);
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX
|
|
+#if SANITIZER_LINUX && !SANITIZER_NONGNU
|
|
// Conflicting request ids.
|
|
// _(CDROMAUDIOBUFSIZ, NONE, 0);
|
|
// _(SNDCTL_TMR_CONTINUE, NONE, 0);
|
|
@@ -365,7 +365,7 @@ static void ioctl_table_fill() {
|
|
_(VT_WAITACTIVE, NONE, 0);
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
// _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE
|
|
_(CYGETDEFTHRESH, WRITE, sizeof(int));
|
|
_(CYGETDEFTIMEOUT, WRITE, sizeof(int));
|
|
diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc
|
|
index 469c8eb7e..24f87867d 100644
|
|
--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc
|
|
+++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc
|
|
@@ -2038,7 +2038,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) {
|
|
}
|
|
}
|
|
|
|
-#if !SANITIZER_ANDROID
|
|
+#if !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim,
|
|
void *old_rlim) {
|
|
if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz);
|
|
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc
|
|
index 96d6c1eff..9e2b7fb9d 100644
|
|
--- a/lib/sanitizer_common/sanitizer_linux.cc
|
|
+++ b/lib/sanitizer_common/sanitizer_linux.cc
|
|
@@ -541,13 +541,13 @@ const char *GetEnv(const char *name) {
|
|
#endif
|
|
}
|
|
|
|
-#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD
|
|
+#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_NONGNU
|
|
extern "C" {
|
|
SANITIZER_WEAK_ATTRIBUTE extern void *__libc_stack_end;
|
|
}
|
|
#endif
|
|
|
|
-#if !SANITIZER_GO && !SANITIZER_FREEBSD && !SANITIZER_NETBSD && \
|
|
+#if (!SANITIZER_GO || SANITIZER_NONGNU) && !SANITIZER_FREEBSD && !SANITIZER_NETBSD && \
|
|
!SANITIZER_OPENBSD
|
|
static void ReadNullSepFileToArray(const char *path, char ***arr,
|
|
int arr_size) {
|
|
@@ -590,6 +590,10 @@ static void GetArgsAndEnv(char ***argv, char ***envp) {
|
|
#elif SANITIZER_NETBSD
|
|
*argv = __ps_strings->ps_argvstr;
|
|
*envp = __ps_strings->ps_envstr;
|
|
+#elif SANITIZER_NONGNU
|
|
+ static const int kMaxArgv = 2000, kMaxEnvp = 2000;
|
|
+ ReadNullSepFileToArray("/proc/self/cmdline", argv, kMaxArgv);
|
|
+ ReadNullSepFileToArray("/proc/self/environ", envp, kMaxEnvp);
|
|
#else // SANITIZER_FREEBSD
|
|
#if !SANITIZER_GO
|
|
if (&__libc_stack_end) {
|
|
diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_linux_libcdep.cc
|
|
index 4962ff832..438f94dbe 100644
|
|
--- a/lib/sanitizer_common/sanitizer_linux_libcdep.cc
|
|
+++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cc
|
|
@@ -179,7 +179,7 @@ __attribute__((unused)) static bool GetLibcVersion(int *major, int *minor,
|
|
}
|
|
|
|
#if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && \
|
|
- !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS
|
|
+ !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU
|
|
static uptr g_tls_size;
|
|
|
|
#ifdef __i386__
|
|
@@ -261,7 +261,7 @@ void InitTlsSize() { }
|
|
#if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) || \
|
|
defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) || \
|
|
defined(__arm__)) && \
|
|
- SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+ SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
// sizeof(struct pthread) from glibc.
|
|
static atomic_uintptr_t thread_descriptor_size;
|
|
|
|
@@ -426,7 +426,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) {
|
|
|
|
#if !SANITIZER_GO
|
|
static void GetTls(uptr *addr, uptr *size) {
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
# if defined(__x86_64__) || defined(__i386__) || defined(__s390__)
|
|
*addr = ThreadSelf();
|
|
*size = GetTlsSize();
|
|
@@ -470,7 +470,7 @@ static void GetTls(uptr *addr, uptr *size) {
|
|
#elif SANITIZER_OPENBSD
|
|
*addr = 0;
|
|
*size = 0;
|
|
-#elif SANITIZER_ANDROID
|
|
+#elif SANITIZER_ANDROID || SANITIZER_NONGNU
|
|
*addr = 0;
|
|
*size = 0;
|
|
#elif SANITIZER_SOLARIS
|
|
@@ -486,7 +486,7 @@ static void GetTls(uptr *addr, uptr *size) {
|
|
#if !SANITIZER_GO
|
|
uptr GetTlsSize() {
|
|
#if SANITIZER_FREEBSD || SANITIZER_ANDROID || SANITIZER_NETBSD || \
|
|
- SANITIZER_OPENBSD || SANITIZER_SOLARIS
|
|
+ SANITIZER_OPENBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU
|
|
uptr addr, size;
|
|
GetTls(&addr, &size);
|
|
return size;
|
|
diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h
|
|
index d81e25580..e10680ac8 100644
|
|
--- a/lib/sanitizer_common/sanitizer_platform.h
|
|
+++ b/lib/sanitizer_common/sanitizer_platform.h
|
|
@@ -208,6 +208,12 @@
|
|
# define SANITIZER_SOLARIS32 0
|
|
#endif
|
|
|
|
+#if defined(__linux__) && !defined(__GLIBC__)
|
|
+# define SANITIZER_NONGNU 1
|
|
+#else
|
|
+# define SANITIZER_NONGNU 0
|
|
+#endif
|
|
+
|
|
#if defined(__myriad2__)
|
|
# define SANITIZER_MYRIAD2 1
|
|
#else
|
|
diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h
|
|
index f95539a73..6c53b3415 100644
|
|
--- a/lib/sanitizer_common/sanitizer_platform_interceptors.h
|
|
+++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h
|
|
@@ -39,7 +39,7 @@
|
|
# include "sanitizer_platform_limits_solaris.h"
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
# define SI_LINUX_NOT_ANDROID 1
|
|
#else
|
|
# define SI_LINUX_NOT_ANDROID 0
|
|
@@ -322,7 +322,7 @@
|
|
#define SANITIZER_INTERCEPT_ETHER_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
|
|
#define SANITIZER_INTERCEPT_SHMCTL \
|
|
(SI_NETBSD || SI_OPENBSD || SI_SOLARIS || \
|
|
- ((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && \
|
|
+ ((SI_FREEBSD || SI_LINUX_NOT_ANDROID || SANITIZER_NONGNU) && \
|
|
SANITIZER_WORDSIZE == 64)) // NOLINT
|
|
#define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID
|
|
#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_POSIX
|
|
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
|
|
index 54da635d7..2f6ff69c3 100644
|
|
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
|
|
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
|
|
@@ -14,6 +14,9 @@
|
|
|
|
#include "sanitizer_platform.h"
|
|
|
|
+// Workaround musl <--> linux conflicting definition of 'struct sysinfo'
|
|
+#define _LINUX_SYSINFO_H
|
|
+
|
|
#if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC
|
|
// Tests in this file assume that off_t-dependent data structures match the
|
|
// libc ABI. For example, struct dirent here is what readdir() function (as
|
|
@@ -138,12 +141,14 @@ typedef struct user_fpregs elf_fpregset_t;
|
|
|
|
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
#include <glob.h>
|
|
-#include <obstack.h>
|
|
+# if !SANITIZER_NONGNU
|
|
+# include <obstack.h>
|
|
+# endif
|
|
#include <mqueue.h>
|
|
-#include <net/if_ppp.h>
|
|
-#include <netax25/ax25.h>
|
|
-#include <netipx/ipx.h>
|
|
-#include <netrom/netrom.h>
|
|
+#include <linux/if_ppp.h>
|
|
+#include <linux/ax25.h>
|
|
+#include <linux/ipx.h>
|
|
+#include <linux/netrom.h>
|
|
#if HAVE_RPC_XDR_H
|
|
# include <rpc/xdr.h>
|
|
#elif HAVE_TIRPC_RPC_XDR_H
|
|
@@ -251,7 +256,7 @@ namespace __sanitizer {
|
|
unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
|
|
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
// Use pre-computed size of struct ustat to avoid <sys/ustat.h> which
|
|
// has been removed from glibc 2.28.
|
|
#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \
|
|
@@ -322,7 +327,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr));
|
|
unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|
#endif
|
|
|
|
-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
|
+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
int glob_nomatch = GLOB_NOMATCH;
|
|
int glob_altdirfunc = GLOB_ALTDIRFUNC;
|
|
#endif
|
|
@@ -416,7 +421,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|
unsigned struct_termios_sz = sizeof(struct termios);
|
|
unsigned struct_winsize_sz = sizeof(struct winsize);
|
|
|
|
-#if SANITIZER_LINUX
|
|
+#if SANITIZER_LINUX && !SANITIZER_NONGNU
|
|
unsigned struct_arpreq_sz = sizeof(struct arpreq);
|
|
unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf);
|
|
unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession);
|
|
@@ -466,7 +471,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|
unsigned struct_vt_mode_sz = sizeof(struct vt_mode);
|
|
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
|
|
unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor);
|
|
#if EV_VERSION > (0x010000)
|
|
@@ -834,7 +839,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|
unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE;
|
|
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
|
|
unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT;
|
|
unsigned IOCTL_CYGETMON = CYGETMON;
|
|
@@ -989,7 +994,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);
|
|
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_NONGNU
|
|
CHECK_TYPE_SIZE(glob_t);
|
|
CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc);
|
|
CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv);
|
|
@@ -1023,6 +1028,7 @@ CHECK_TYPE_SIZE(iovec);
|
|
CHECK_SIZE_AND_OFFSET(iovec, iov_base);
|
|
CHECK_SIZE_AND_OFFSET(iovec, iov_len);
|
|
|
|
+#if !SANITIZER_NONGNU
|
|
CHECK_TYPE_SIZE(msghdr);
|
|
CHECK_SIZE_AND_OFFSET(msghdr, msg_name);
|
|
CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen);
|
|
@@ -1036,6 +1042,7 @@ CHECK_TYPE_SIZE(cmsghdr);
|
|
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len);
|
|
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);
|
|
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);
|
|
+#endif
|
|
|
|
#ifndef __GLIBC_PREREQ
|
|
#define __GLIBC_PREREQ(x, y) 0
|
|
@@ -1145,7 +1152,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno);
|
|
|
|
CHECK_TYPE_SIZE(ether_addr);
|
|
|
|
-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
|
+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
CHECK_TYPE_SIZE(ipc_perm);
|
|
# if SANITIZER_FREEBSD
|
|
CHECK_SIZE_AND_OFFSET(ipc_perm, key);
|
|
@@ -1206,7 +1213,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
|
|
CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data);
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX
|
|
+#if SANITIZER_LINUX && !SANITIZER_NONGNU
|
|
COMPILER_CHECK(sizeof(__sanitizer_mallinfo) == sizeof(struct mallinfo));
|
|
#endif
|
|
|
|
@@ -1256,7 +1263,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE);
|
|
COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE);
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE));
|
|
CHECK_SIZE_AND_OFFSET(FILE, _flags);
|
|
CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr);
|
|
@@ -1275,7 +1282,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain);
|
|
CHECK_SIZE_AND_OFFSET(FILE, _fileno);
|
|
#endif
|
|
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk));
|
|
CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit);
|
|
CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev);
|
|
diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc
|
|
index de989b780..51a97b554 100644
|
|
--- a/lib/tsan/rtl/tsan_platform_linux.cc
|
|
+++ b/lib/tsan/rtl/tsan_platform_linux.cc
|
|
@@ -294,7 +294,7 @@ void InitializePlatform() {
|
|
// This is required to properly "close" the fds, because we do not see internal
|
|
// closes within glibc. The code is a pure hack.
|
|
int ExtractResolvFDs(void *state, int *fds, int nfd) {
|
|
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
|
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
|
|
int cnt = 0;
|
|
struct __res_state *statp = (struct __res_state*)state;
|
|
for (int i = 0; i < MAXNS && cnt < nfd; i++) {
|
|
--
|
|
2.19.0
|
|
|