Gentoo Archives: gentoo-commits

From: "Anthony G. Basile" <blueness@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/musl:master commit in: sys-libs/compiler-rt-sanitizers/files/, sys-libs/compiler-rt-sanitizers/
Date: Sun, 29 Apr 2018 14:53:34
Message-Id: 1525013586.610050d374df34b3186787412e303b5225d7b16d.blueness@gentoo
1 commit: 610050d374df34b3186787412e303b5225d7b16d
2 Author: Milkey Mouse <milkeymouse <AT> meme <DOT> institute>
3 AuthorDate: Sun Apr 29 02:21:07 2018 +0000
4 Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
5 CommitDate: Sun Apr 29 14:53:06 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/musl.git/commit/?id=610050d3
7
8 sys-libs/compiler-rt-sanitizers: version bump to 6.0.0
9
10 sync with upstream
11
12 Package-Manager: Portage-2.3.31, Repoman-2.3.9
13 Manifest-Sign-Key: C6EF5A02F5647987
14
15 sys-libs/compiler-rt-sanitizers/Manifest | 21 ++
16 .../compiler-rt-sanitizers-6.0.0.ebuild | 172 ++++++++++++
17 ...compiler-rt-sanitizers-6.0.0-musl-patches.patch | 306 +++++++++++++++++++++
18 3 files changed, 499 insertions(+)
19
20 diff --git a/sys-libs/compiler-rt-sanitizers/Manifest b/sys-libs/compiler-rt-sanitizers/Manifest
21 index cb8ead5..cb7526b 100644
22 --- a/sys-libs/compiler-rt-sanitizers/Manifest
23 +++ b/sys-libs/compiler-rt-sanitizers/Manifest
24 @@ -1,5 +1,26 @@
25 +-----BEGIN PGP SIGNED MESSAGE-----
26 +Hash: SHA256
27 +
28 DIST compiler-rt-4.0.1.src.tar.xz 1434100 BLAKE2B ca6bf78fc07f387b7244a52ef648b06a5685effb46a66b241a9ee847ecafb17d02602f49b0dbe473d47202586874a043a6d75141400062f526d2f808da323e1e SHA512 cfeb625884b273f7c0e6767b81a8d3e5f24e0b96a510d5764d9d47a0e215fc841b4cb9d1843c8fb428cd21def720cfbfe8d3593ff5bb390548ebc8c32a902649
29 DIST compiler-rt-5.0.1.src.tar.xz 1498220 BLAKE2B 61503df8a4075c2fe1e42d480753b861321b5de127e340f48d648fc38d81c7967cead17e136beaa5235cc92540f158915fccec77cf39aa7c336d106c9d265222 SHA512 61e23775db78bdeed3003a509b45ae609287db31302fed186f3210d481ecf062d1828571e63482215ab00ff732df8f3fa6c77334dfb677e4b76eb555d476b8c4
30 +DIST compiler-rt-6.0.0.src.tar.xz 1633096 BLAKE2B d5df9b16ad474f687507013fb6eda8c7c3bbe479c85aab6ce428b93bbef2467538c0ba59c54dd9266b978da53c8c312a59e3b7abac843702048900f5cdbc1011 SHA512 717bed116ef43ebb2e18daf6fb737472edf57564947f53fe6368d3bbb080f63e986c0d1b94dbd087be998196ad7be54f4361854f8eb5214600b82449ba02c9c1
31 DIST compiler-rt-sanitizers-4.0.1-patchset.tar.xz 2384 BLAKE2B 6f9eee711c83570767f0bb634d0f91c18ee7f2af93a478938b8d5b6ce6f2c2fbaadb7bd5c7ee94a14dc1834359a046187db6bc7005b7c2efa539325dc0701ad9 SHA512 72d7357b4c27bbf8fa8b34803ddea905a9f1054e8fc7bf99a4ead9dc00408989ea2709f04be9cf45a27eeb4b9386c89feeb25b53a84f3cac9739196b89813887
32 DIST llvm-4.0.1.src.tar.xz 21065652 BLAKE2B 6327eed2d1feb108440f22d2581d1ff86c10a10c29793538d8d899c7e2dc83d3f7b147d3fd4bcce2bd2bf57c071b08c624aeafe40a3e7a3914506e7751727e6c SHA512 16adc39b34ddb628f81b171119a8e2a0e9138b25011e803ef0b688e2fbea116fc4953d3a1b61b90a98a75e33619f81566b7cb06a9a2ea4d04ac5e0eb303a2d1d
33 DIST llvm-5.0.1.src.tar.xz 23428720 BLAKE2B 3db4d33df21018d17eef0042c0d8d82a8412bd5daa99cfb5405a6ec83c5774178fa76b220e8731c2a9a64dabf898aa90fe29c685327bd63a4f078e8e94a9a77e SHA512 bee1d45fca15ce725b1f2b1339b13eb6f750a3a321cfd099075477ec25835a8ca55b5366172c4aad46592dfd8afe372349ecf264f581463d017f9cee2d63c1cb
34 +DIST llvm-6.0.0.src.tar.xz 25296048 BLAKE2B 7ea90bb63d6f26cfbc1c1ed2f243b0fcd8ad2ceb7963cf768d262cd55e9a0c71a9cfdea0333fb220faacf4540d924d2512532774dcfb52b52490ad74e38c09e0 SHA512 a71fdd5ddc46f01327ad891cfcc198febdbe10769c57f14d8a4fb7d514621ee4080e1a641200d3353c16a16731d390270499ec6cd3dc98fadc570f3eb6b52b8c
35 +-----BEGIN PGP SIGNATURE-----
36 +
37 +iQIzBAEBCAAdFiEE8JaD5QHaZGPThRiKxu9aAvVkeYcFAlrlJSsACgkQxu9aAvVk
38 +eYcGKA//Xd45mub1ddyvFvo/CBQg2qLDyDctP3IcsRIjY1DuZkqGbygKA1THRmLJ
39 +gSGbrzAsAT1bJWnmXVNQOiWjnCxCbPyrlvmz9Cpgb9o69BIKay/DPvYznVbs4kQ6
40 +kmFp7tCoN6RCLQ1DEA9tLwS2obRCKaqUO1Z0IZYK0Dl4lAX6bdgBYsqDrQr9m0Lw
41 +7l2mmjOf16JAGfQrG56VEQBUTXzwg/UL7b0xmw63q7vXSQwI5mcRrNJlj6XQvR1g
42 +XXMcKF5C9fTYX0HNsu7uK0kdv2aSjQSzsbsCCoZV6Myegc8L+/rc+ZBp30VIub0K
43 +KgoA3GEl2Xhx8IWyuxDP8a5ZzrXXc10KO4u0TiajfM+ACsOiyIjBRCv/auQI/KGL
44 +U62Jrq/T+4sQM4GNkUKho3U4vsUiBzKi7dl+ZFIU9FIluCq7BLXz9P2agF0KaHwU
45 +YXWI+Eilhv7fexH8VzhVQVYnTZ+bczmrOukc9Xwqrp2Cio3NPAlyYxA3gsxYSK/S
46 +Ep9Vo2rI3CHFnVcPDV2p/+8SAaXtLzqJ+QYhWadaJ+S3+RSfwPAQ0vFHwYe5B7YC
47 +iPyncwqY+Axiky4pUzKBS/pvR/X/RYogaSTn1MVEi0iB/s4QzZCzXQgcO3CphDnO
48 +U6NIcfGVnMB4Ijn5ipKNrRNDOcsr9ENOX9e1z2bwm/KPKIJwR6Q=
49 +=9Yzy
50 +-----END PGP SIGNATURE-----
51
52 diff --git a/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-6.0.0.ebuild b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-6.0.0.ebuild
53 new file mode 100644
54 index 0000000..6616e20
55 --- /dev/null
56 +++ b/sys-libs/compiler-rt-sanitizers/compiler-rt-sanitizers-6.0.0.ebuild
57 @@ -0,0 +1,172 @@
58 +# Copyright 1999-2018 Gentoo Foundation
59 +# Distributed under the terms of the GNU General Public License v2
60 +
61 +EAPI=6
62 +
63 +: ${CMAKE_MAKEFILE_GENERATOR:=ninja}
64 +# (needed due to CMAKE_BUILD_TYPE != Gentoo)
65 +CMAKE_MIN_VERSION=3.7.0-r1
66 +PYTHON_COMPAT=( python2_7 )
67 +
68 +inherit check-reqs cmake-utils flag-o-matic llvm \
69 + multiprocessing python-any-r1
70 +
71 +MY_P=compiler-rt-${PV/_/}.src
72 +LLVM_P=llvm-${PV/_/}.src
73 +
74 +DESCRIPTION="Compiler runtime libraries for clang (sanitizers & xray)"
75 +HOMEPAGE="https://llvm.org/"
76 +SRC_URI="https://releases.llvm.org/${PV/_//}/${MY_P}.tar.xz
77 + test? ( https://releases.llvm.org/${PV/_//}/${LLVM_P}.tar.xz )"
78 +
79 +LICENSE="|| ( UoI-NCSA MIT )"
80 +SLOT="${PV%_*}"
81 +KEYWORDS="~amd64 ~arm64 ~x86 ~amd64-fbsd ~amd64-linux ~ppc-macos ~x64-macos ~x86-macos"
82 +IUSE="+clang test elibc_glibc"
83 +RESTRICT="!test? ( test ) !clang? ( test )"
84 +
85 +CLANG_SLOT=${SLOT%%.*}
86 +# llvm-6 for new lit options
87 +DEPEND="
88 + >=sys-devel/llvm-6
89 + clang? ( sys-devel/clang )
90 + test? (
91 + !<sys-apps/sandbox-2.13
92 + $(python_gen_any_dep ">=dev-python/lit-5[\${PYTHON_USEDEP}]")
93 + =sys-devel/clang-${PV%_*}*:${CLANG_SLOT}
94 + sys-libs/compiler-rt:${SLOT} )
95 + ${PYTHON_DEPS}"
96 +
97 +S=${WORKDIR}/${MY_P}
98 +
99 +PATCHES=( "${FILESDIR}"/${PN}-6.0.0-musl-patches.patch )
100 +
101 +# least intrusive of all
102 +CMAKE_BUILD_TYPE=RelWithDebInfo
103 +
104 +check_space() {
105 + if use test; then
106 + local CHECKREQS_DISK_BUILD=11G
107 + check-reqs_pkg_pretend
108 + fi
109 +}
110 +
111 +pkg_pretend() {
112 + check_space
113 +}
114 +
115 +pkg_setup() {
116 + check_space
117 + llvm_pkg_setup
118 + python-any-r1_pkg_setup
119 +}
120 +
121 +src_unpack() {
122 + einfo "Unpacking ${MY_P}.tar.xz ..."
123 + tar -xf "${DISTDIR}/${MY_P}.tar.xz" || die
124 +
125 + if use test; then
126 + einfo "Unpacking parts of ${LLVM_P}.tar.xz ..."
127 + tar -xf "${DISTDIR}/${LLVM_P}.tar.xz" \
128 + "${LLVM_P}"/utils/{lit,unittest} || die
129 + mv "${LLVM_P}" llvm || die
130 + fi
131 +}
132 +
133 +src_prepare() {
134 + cmake-utils_src_prepare
135 +
136 + if use test; then
137 + # remove tests that are broken by new glibc
138 + # https://bugs.llvm.org/show_bug.cgi?id=36065
139 + if use elibc_glibc && has_version '>=sys-libs/glibc-2.25'; then
140 + rm test/lsan/TestCases/Linux/use_tls_dynamic.cc || die
141 + rm test/msan/dtls_test.c || die
142 + rm test/sanitizer_common/TestCases/Posix/sanitizer_set_death_callback_test.cc || die
143 + fi
144 + fi
145 +}
146 +
147 +src_configure() {
148 + # pre-set since we need to pass it to cmake
149 + BUILD_DIR=${WORKDIR}/${P}_build
150 +
151 + if use clang; then
152 + local -x CC=${CHOST}-clang
153 + local -x CXX=${CHOST}-clang++
154 + strip-unsupported-flags
155 + fi
156 +
157 + local mycmakeargs=(
158 + -DCOMPILER_RT_INSTALL_PATH="${EPREFIX}/usr/lib/clang/${SLOT}"
159 + # use a build dir structure consistent with install
160 + # this makes it possible to easily deploy test-friendly clang
161 + -DCOMPILER_RT_OUTPUT_DIR="${BUILD_DIR}/lib/clang/${SLOT}"
162 +
163 + -DCOMPILER_RT_INCLUDE_TESTS=$(usex test)
164 + # built-ins installed by sys-libs/compiler-rt
165 + -DCOMPILER_RT_BUILD_BUILTINS=OFF
166 + -DCOMPILER_RT_BUILD_LIBFUZZER=ON
167 + -DCOMPILER_RT_BUILD_PROFILE=ON
168 + -DCOMPILER_RT_BUILD_SANITIZERS=ON
169 + -DCOMPILER_RT_BUILD_XRAY=ON
170 + )
171 + if use test; then
172 + mycmakeargs+=(
173 + -DLLVM_MAIN_SRC_DIR="${WORKDIR}/llvm"
174 + -DLLVM_EXTERNAL_LIT="${EPREFIX}/usr/bin/lit"
175 + -DLLVM_LIT_ARGS="-vv;-j;${LIT_JOBS:-$(makeopts_jobs "${MAKEOPTS}" "$(get_nproc)")}"
176 +
177 + # they are created during src_test()
178 + -DCOMPILER_RT_TEST_COMPILER="${BUILD_DIR}/lib/llvm/${CLANG_SLOT}/bin/clang"
179 + -DCOMPILER_RT_TEST_CXX_COMPILER="${BUILD_DIR}/lib/llvm/${CLANG_SLOT}/bin/clang++"
180 + )
181 +
182 + # same flags are passed for build & tests, so we need to strip
183 + # them down to a subset supported by clang
184 + CC=${EPREFIX}/usr/lib/llvm/${CLANG_SLOT}/bin/clang \
185 + CXX=${EPREFIX}/usr/lib/llvm/${CLANG_SLOT}/bin/clang++ \
186 + strip-unsupported-flags
187 + fi
188 +
189 + if use prefix && [[ "${CHOST}" == *-darwin* ]] ; then
190 + mycmakeargs+=(
191 + # disable use of SDK for the system itself
192 + -DDARWIN_macosx_CACHED_SYSROOT=/
193 + )
194 + fi
195 +
196 + cmake-utils_src_configure
197 +
198 + if use test; then
199 + local sys_dir=( "${EPREFIX}"/usr/lib/clang/${SLOT}/lib/* )
200 + [[ -e ${sys_dir} ]] || die "Unable to find ${sys_dir}"
201 + [[ ${#sys_dir[@]} -eq 1 ]] || die "Non-deterministic compiler-rt install: ${sys_dir[*]}"
202 +
203 + # copy clang over since resource_dir is located relatively to binary
204 + # therefore, we can put our new libraries in it
205 + mkdir -p "${BUILD_DIR}"/lib/{llvm/${CLANG_SLOT}/{bin,$(get_libdir)},clang/${SLOT}/include} || die
206 + cp "${EPREFIX}"/usr/lib/llvm/${CLANG_SLOT}/bin/clang{,++} \
207 + "${BUILD_DIR}"/lib/llvm/${CLANG_SLOT}/bin/ || die
208 + cp "${EPREFIX}"/usr/lib/clang/${SLOT}/include/*.h \
209 + "${BUILD_DIR}"/lib/clang/${SLOT}/include/ || die
210 + cp "${sys_dir}"/*builtins*.a \
211 + "${BUILD_DIR}/lib/clang/${SLOT}/lib/${sys_dir##*/}/" || die
212 + # we also need LLVMgold.so for gold-based tests
213 + if [[ -f ${EPREFIX}/usr/lib/llvm/${CLANG_SLOT}/$(get_libdir)/LLVMgold.so ]]; then
214 + ln -s "${EPREFIX}"/usr/lib/llvm/${CLANG_SLOT}/$(get_libdir)/LLVMgold.so \
215 + "${BUILD_DIR}"/lib/llvm/${CLANG_SLOT}/$(get_libdir)/ || die
216 + fi
217 + fi
218 +}
219 +
220 +src_test() {
221 + # respect TMPDIR!
222 + local -x LIT_PRESERVES_TMP=1
223 + # disable sandbox to have it stop clobbering LD_PRELOAD
224 + local -x SANDBOX_ON=0
225 + # wipe LD_PRELOAD to make ASAN happy
226 + local -x LD_PRELOAD=
227 +
228 + cmake-utils_src_make check-all
229 +}
230
231 diff --git a/sys-libs/compiler-rt-sanitizers/files/compiler-rt-sanitizers-6.0.0-musl-patches.patch b/sys-libs/compiler-rt-sanitizers/files/compiler-rt-sanitizers-6.0.0-musl-patches.patch
232 new file mode 100644
233 index 0000000..034fc4a
234 --- /dev/null
235 +++ b/sys-libs/compiler-rt-sanitizers/files/compiler-rt-sanitizers-6.0.0-musl-patches.patch
236 @@ -0,0 +1,306 @@
237 +diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc
238 +index 625f32d..73cf77a 100644
239 +--- a/lib/asan/asan_linux.cc
240 ++++ b/lib/asan/asan_linux.cc
241 +@@ -46,7 +46,7 @@
242 + #include <link.h>
243 + #endif
244 +
245 +-#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS
246 ++#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU
247 + #include <ucontext.h>
248 + extern "C" void* _DYNAMIC;
249 + #elif SANITIZER_NETBSD
250 +@@ -139,7 +139,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
251 + UNIMPLEMENTED();
252 + }
253 +
254 +-#if SANITIZER_ANDROID
255 ++#if SANITIZER_ANDROID || SANITIZER_NONGNU
256 + // FIXME: should we do anything for Android?
257 + void AsanCheckDynamicRTPrereqs() {}
258 + void AsanCheckIncompatibleRT() {}
259 +diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc
260 +index c991550..918b635 100644
261 +--- a/lib/interception/interception_linux.cc
262 ++++ b/lib/interception/interception_linux.cc
263 +@@ -43,7 +43,7 @@ bool GetRealFunctionAddress(const char *func_name, uptr *func_addr,
264 + }
265 +
266 + // Android and Solaris do not have dlvsym
267 +-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS
268 ++#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && defined(__GLIBC__)
269 + void *GetFuncAddrVer(const char *func_name, const char *ver) {
270 + return dlvsym(RTLD_NEXT, func_name, ver);
271 + }
272 +diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc
273 +index a7fe09b..6a04515 100644
274 +--- a/lib/msan/msan_interceptors.cc
275 ++++ b/lib/msan/msan_interceptors.cc
276 +@@ -1438,6 +1438,7 @@ static int msan_dl_iterate_phdr_cb(__sanitizer_dl_phdr_info *info, SIZE_T size,
277 + return cbdata->callback(info, size, cbdata->data);
278 + }
279 +
280 ++/* does not compile with musl
281 + INTERCEPTOR(void *, shmat, int shmid, const void *shmaddr, int shmflg) {
282 + ENSURE_MSAN_INITED();
283 + void *p = REAL(shmat)(shmid, shmaddr, shmflg);
284 +@@ -1450,6 +1451,7 @@ INTERCEPTOR(void *, shmat, int shmid, const void *shmaddr, int shmflg) {
285 + }
286 + return p;
287 + }
288 ++*/
289 +
290 + INTERCEPTOR(int, dl_iterate_phdr, dl_iterate_phdr_cb callback, void *data) {
291 + void *ctx;
292 +@@ -1668,7 +1670,7 @@ void InitializeInterceptors() {
293 + INTERCEPT_FUNCTION(pthread_join);
294 + INTERCEPT_FUNCTION(tzset);
295 + INTERCEPT_FUNCTION(__cxa_atexit);
296 +- INTERCEPT_FUNCTION(shmat);
297 ++ // INTERCEPT_FUNCTION(shmat); // does not compile with musl
298 + INTERCEPT_FUNCTION(fork);
299 + INTERCEPT_FUNCTION(openpty);
300 + INTERCEPT_FUNCTION(forkpty);
301 +diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc
302 +index 4e6321f..e437fa6 100644
303 +--- a/lib/msan/msan_linux.cc
304 ++++ b/lib/msan/msan_linux.cc
305 +@@ -13,7 +13,7 @@
306 + //===----------------------------------------------------------------------===//
307 +
308 + #include "sanitizer_common/sanitizer_platform.h"
309 +-#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD
310 ++#if SANITIZER_FREEBSD || SANITIZER_LINUX && !SANITIZER_NONGNU || SANITIZER_NETBSD
311 +
312 + #include "msan.h"
313 + #include "msan_thread.h"
314 +diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
315 +index 24e7548..20259b1 100644
316 +--- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
317 ++++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
318 +@@ -102,7 +102,7 @@ static void ioctl_table_fill() {
319 + _(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz);
320 + #endif
321 +
322 +-#if SANITIZER_LINUX
323 ++#if SANITIZER_LINUX && !SANITIZER_NONGNU
324 + // Conflicting request ids.
325 + // _(CDROMAUDIOBUFSIZ, NONE, 0);
326 + // _(SNDCTL_TMR_CONTINUE, NONE, 0);
327 +@@ -363,7 +363,7 @@ static void ioctl_table_fill() {
328 + _(VT_WAITACTIVE, NONE, 0);
329 + #endif
330 +
331 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
332 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
333 + // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE
334 + _(CYGETDEFTHRESH, WRITE, sizeof(int));
335 + _(CYGETDEFTIMEOUT, WRITE, sizeof(int));
336 +diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc
337 +index 469c8eb..24f8786 100644
338 +--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc
339 ++++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc
340 +@@ -2038,7 +2038,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) {
341 + }
342 + }
343 +
344 +-#if !SANITIZER_ANDROID
345 ++#if !SANITIZER_ANDROID && !SANITIZER_NONGNU
346 + PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim,
347 + void *old_rlim) {
348 + if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz);
349 +diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h
350 +index 334903c..5a8d1ea 100644
351 +--- a/lib/sanitizer_common/sanitizer_platform.h
352 ++++ b/lib/sanitizer_common/sanitizer_platform.h
353 +@@ -25,6 +25,12 @@
354 + # define SANITIZER_LINUX 0
355 + #endif
356 +
357 ++#if defined(__linux__) && !defined(__GLIBC__)
358 ++# define SANITIZER_NONGNU 1
359 ++#else
360 ++# define SANITIZER_NONGNU 0
361 ++#endif
362 ++
363 + #if defined(__FreeBSD__)
364 + # define SANITIZER_FREEBSD 1
365 + #else
366 +diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h
367 +index b99ac44..d90e713 100644
368 +--- a/lib/sanitizer_common/sanitizer_platform_interceptors.h
369 ++++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h
370 +@@ -38,7 +38,7 @@
371 + # include "sanitizer_platform_limits_solaris.h"
372 + #endif
373 +
374 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
375 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
376 + # define SI_LINUX_NOT_ANDROID 1
377 + #else
378 + # define SI_LINUX_NOT_ANDROID 0
379 +diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
380 +index f12e820..b98c57d 100644
381 +--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
382 ++++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
383 +@@ -138,12 +138,14 @@ typedef struct user_fpregs elf_fpregset_t;
384 +
385 + #if SANITIZER_LINUX && !SANITIZER_ANDROID
386 + #include <glob.h>
387 +-#include <obstack.h>
388 ++#if !SANITIZER_NONGNU
389 ++# include <obstack.h>
390 ++#endif
391 + #include <mqueue.h>
392 +-#include <net/if_ppp.h>
393 +-#include <netax25/ax25.h>
394 +-#include <netipx/ipx.h>
395 +-#include <netrom/netrom.h>
396 ++#include <linux/if_ppp.h>
397 ++#include <linux/ax25.h>
398 ++#include <linux/ipx.h>
399 ++#include <linux/netrom.h>
400 + #if HAVE_RPC_XDR_H
401 + # include <rpc/xdr.h>
402 + #elif HAVE_TIRPC_RPC_XDR_H
403 +@@ -159,7 +161,7 @@ typedef struct user_fpregs elf_fpregset_t;
404 + # include <sys/procfs.h>
405 + #endif
406 + #include <sys/user.h>
407 +-#include <sys/ustat.h>
408 ++/* #include <sys/ustat.h> // is in glibc, but not in musl */
409 + #include <linux/cyclades.h>
410 + #include <linux/if_eql.h>
411 + #include <linux/if_plip.h>
412 +@@ -252,7 +254,7 @@ namespace __sanitizer {
413 + unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
414 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD
415 +
416 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
417 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
418 + unsigned struct_ustat_sz = sizeof(struct ustat);
419 + unsigned struct_rlimit64_sz = sizeof(struct rlimit64);
420 + unsigned struct_statvfs64_sz = sizeof(struct statvfs64);
421 +@@ -275,9 +277,9 @@ namespace __sanitizer {
422 + #endif
423 +
424 +
425 +-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
426 ++#if (SANITIZER_LINUX && !SANITIZER_NONGNU || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
427 + unsigned struct_shminfo_sz = sizeof(struct shminfo);
428 +- unsigned struct_shm_info_sz = sizeof(struct shm_info);
429 ++ unsigned struct_shm_info_sz = sizeof(nstruct shm_info);
430 + int shmctl_ipc_stat = (int)IPC_STAT;
431 + int shmctl_ipc_info = (int)IPC_INFO;
432 + int shmctl_shm_info = (int)SHM_INFO;
433 +@@ -311,7 +313,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr));
434 + unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
435 + #endif
436 +
437 +-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
438 ++#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
439 + int glob_nomatch = GLOB_NOMATCH;
440 + int glob_altdirfunc = GLOB_ALTDIRFUNC;
441 + #endif
442 +@@ -405,7 +407,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
443 + unsigned struct_termios_sz = sizeof(struct termios);
444 + unsigned struct_winsize_sz = sizeof(struct winsize);
445 +
446 +-#if SANITIZER_LINUX
447 ++#if SANITIZER_LINUX && !SANITIZER_NONGNU
448 + unsigned struct_arpreq_sz = sizeof(struct arpreq);
449 + unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf);
450 + unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession);
451 +@@ -455,7 +457,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
452 + unsigned struct_vt_mode_sz = sizeof(struct vt_mode);
453 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD
454 +
455 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
456 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
457 + unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
458 + unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor);
459 + #if EV_VERSION > (0x010000)
460 +@@ -823,7 +825,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
461 + unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE;
462 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD
463 +
464 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
465 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
466 + unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
467 + unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT;
468 + unsigned IOCTL_CYGETMON = CYGETMON;
469 +@@ -978,7 +980,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);
470 + CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);
471 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD
472 +
473 +-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
474 ++#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
475 + CHECK_TYPE_SIZE(glob_t);
476 + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc);
477 + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv);
478 +@@ -1012,6 +1014,7 @@ CHECK_TYPE_SIZE(iovec);
479 + CHECK_SIZE_AND_OFFSET(iovec, iov_base);
480 + CHECK_SIZE_AND_OFFSET(iovec, iov_len);
481 +
482 ++#if !SANITIZER_NONGNU
483 + CHECK_TYPE_SIZE(msghdr);
484 + CHECK_SIZE_AND_OFFSET(msghdr, msg_name);
485 + CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen);
486 +@@ -1025,6 +1028,7 @@ CHECK_TYPE_SIZE(cmsghdr);
487 + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len);
488 + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);
489 + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);
490 ++#endif
491 +
492 + COMPILER_CHECK(sizeof(__sanitizer_dirent) <= sizeof(dirent));
493 + CHECK_SIZE_AND_OFFSET(dirent, d_ino);
494 +@@ -1127,7 +1131,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno);
495 +
496 + CHECK_TYPE_SIZE(ether_addr);
497 +
498 +-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
499 ++#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
500 + CHECK_TYPE_SIZE(ipc_perm);
501 + # if SANITIZER_FREEBSD
502 + CHECK_SIZE_AND_OFFSET(ipc_perm, key);
503 +@@ -1188,7 +1192,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
504 + CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data);
505 + #endif
506 +
507 +-#if SANITIZER_LINUX
508 ++#if SANITIZER_LINUX && !SANITIZER_NONGNU
509 + COMPILER_CHECK(sizeof(__sanitizer_mallinfo) == sizeof(struct mallinfo));
510 + #endif
511 +
512 +@@ -1238,7 +1242,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE);
513 + COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE);
514 + #endif
515 +
516 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
517 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
518 + COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE));
519 + CHECK_SIZE_AND_OFFSET(FILE, _flags);
520 + CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr);
521 +@@ -1257,7 +1261,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain);
522 + CHECK_SIZE_AND_OFFSET(FILE, _fileno);
523 + #endif
524 +
525 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
526 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
527 + COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk));
528 + CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit);
529 + CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev);
530 +diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc
531 +index e14d5f5..389a3bc 100644
532 +--- a/lib/tsan/rtl/tsan_platform_linux.cc
533 ++++ b/lib/tsan/rtl/tsan_platform_linux.cc
534 +@@ -285,7 +285,7 @@ void InitializePlatform() {
535 + // This is required to properly "close" the fds, because we do not see internal
536 + // closes within glibc. The code is a pure hack.
537 + int ExtractResolvFDs(void *state, int *fds, int nfd) {
538 +-#if SANITIZER_LINUX && !SANITIZER_ANDROID
539 ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
540 + int cnt = 0;
541 + struct __res_state *statp = (struct __res_state*)state;
542 + for (int i = 0; i < MAXNS && cnt < nfd; i++) {