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++) { |