Skip to content

Commit 51128bf

Browse files
committed
sanitizer_common interceptors
1 parent c3715ec commit 51128bf

File tree

5 files changed

+95
-47
lines changed

5 files changed

+95
-47
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ INTERCEPTOR(char*, textdomain, const char *domainname) {
480480
#define INIT_TEXTDOMAIN
481481
#endif
482482

483-
#if SANITIZER_INTERCEPT_STRCMP || SANITIZER_INTERCEPT_MEMCMP
483+
#if SANITIZER_INTERCEPT_MEMCMP
484484
static inline int CharCmpX(unsigned char c1, unsigned char c2) {
485485
return (c1 == c2) ? 0 : (c1 < c2) ? -1 : 1;
486486
}
@@ -953,7 +953,7 @@ INTERCEPTOR(double, frexp, double x, int *exp) {
953953
#define INIT_FREXP
954954
#endif // SANITIZER_INTERCEPT_FREXP
955955

956-
#if SANITIZER_INTERCEPT_FREXPF_FREXPL
956+
#if SANITIZER_INTERCEPT_FREXPF
957957
INTERCEPTOR(float, frexpf, float x, int *exp) {
958958
void *ctx;
959959
COMMON_INTERCEPTOR_ENTER(ctx, frexpf, x, exp);
@@ -963,6 +963,12 @@ INTERCEPTOR(float, frexpf, float x, int *exp) {
963963
return res;
964964
}
965965

966+
# define INIT_FREXPF COMMON_INTERCEPT_FUNCTION(frexpf);
967+
#else
968+
# define INIT_FREXPF
969+
#endif
970+
971+
#if SANITIZER_INTERCEPT_FREXPL
966972
INTERCEPTOR(long double, frexpl, long double x, int *exp) {
967973
void *ctx;
968974
COMMON_INTERCEPTOR_ENTER(ctx, frexpl, x, exp);
@@ -972,12 +978,10 @@ INTERCEPTOR(long double, frexpl, long double x, int *exp) {
972978
return res;
973979
}
974980

975-
#define INIT_FREXPF_FREXPL \
976-
COMMON_INTERCEPT_FUNCTION(frexpf); \
977-
COMMON_INTERCEPT_FUNCTION_LDBL(frexpl)
981+
# define INIT_FREXPL COMMON_INTERCEPT_FUNCTION_LDBL(frexpl)
978982
#else
979-
#define INIT_FREXPF_FREXPL
980-
#endif // SANITIZER_INTERCEPT_FREXPF_FREXPL
983+
# define INIT_FREXPL
984+
#endif
981985

982986
#if SI_POSIX
983987
static void write_iovec(void *ctx, struct __sanitizer_iovec *iovec,
@@ -1346,7 +1350,8 @@ INTERCEPTOR(unsigned long, time, unsigned long *t) {
13461350
#if SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS
13471351
static void unpoison_tm(void *ctx, __sanitizer_tm *tm) {
13481352
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, tm, sizeof(*tm));
1349-
#if !SANITIZER_SOLARIS
1353+
// AIX tm struct does not have tm_zone field.
1354+
# if !SANITIZER_SOLARIS && !SANITIZER_AIX
13501355
if (tm->tm_zone) {
13511356
// Can not use COMMON_INTERCEPTOR_WRITE_RANGE here, because tm->tm_zone
13521357
// can point to shared memory and tsan would report a data race.
@@ -1731,10 +1736,12 @@ INTERCEPTOR(int, __vsprintf_chk, char *str, int flag, SIZE_T size_to,
17311736
VSPRINTF_INTERCEPTOR_IMPL(vsprintf, str, format, ap)
17321737
#endif
17331738

1739+
# if SANITIZER_INTERCEPT_VASPRINTF
17341740
INTERCEPTOR(int, vasprintf, char **strp, const char *format, va_list ap)
17351741
VASPRINTF_INTERCEPTOR_IMPL(vasprintf, strp, format, ap)
1742+
# endif
17361743

1737-
#if SANITIZER_INTERCEPT_ISOC99_PRINTF
1744+
# if SANITIZER_INTERCEPT_ISOC99_PRINTF
17381745
INTERCEPTOR(int, __isoc99_vprintf, const char *format, va_list ap)
17391746
VPRINTF_INTERCEPTOR_IMPL(__isoc99_vprintf, format, ap)
17401747

@@ -1783,10 +1790,12 @@ INTERCEPTOR(int, __snprintf_chk, char *str, SIZE_T size, int flag,
17831790
FORMAT_INTERCEPTOR_IMPL(__snprintf_chk, vsnprintf, str, size, format)
17841791
#endif
17851792

1793+
# if SANITIZER_INTERCEPT_ASPRINTF
17861794
INTERCEPTOR(int, asprintf, char **strp, const char *format, ...)
17871795
FORMAT_INTERCEPTOR_IMPL(asprintf, vasprintf, strp, format)
1796+
# endif
17881797

1789-
#if SANITIZER_INTERCEPT_ISOC99_PRINTF
1798+
# if SANITIZER_INTERCEPT_ISOC99_PRINTF
17901799
INTERCEPTOR(int, __isoc99_printf, const char *format, ...)
17911800
FORMAT_INTERCEPTOR_IMPL(__isoc99_printf, __isoc99_vprintf, format)
17921801

@@ -1807,17 +1816,29 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_snprintf, __isoc99_vsnprintf, str, size,
18071816
#endif // SANITIZER_INTERCEPT_PRINTF
18081817

18091818
#if SANITIZER_INTERCEPT_PRINTF
1810-
#define INIT_PRINTF \
1811-
COMMON_INTERCEPT_FUNCTION_LDBL(printf); \
1812-
COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \
1813-
COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \
1814-
COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \
1815-
COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \
1816-
COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \
1817-
COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \
1818-
COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \
1819-
COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \
1820-
COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf);
1819+
# if SANITIZER_AIX
1820+
# define INIT_PRINTF \
1821+
COMMON_INTERCEPT_FUNCTION_LDBL(printf); \
1822+
COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \
1823+
COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \
1824+
COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \
1825+
COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \
1826+
COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \
1827+
COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \
1828+
COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf);
1829+
# else
1830+
# define INIT_PRINTF \
1831+
COMMON_INTERCEPT_FUNCTION_LDBL(printf); \
1832+
COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \
1833+
COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \
1834+
COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \
1835+
COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \
1836+
COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \
1837+
COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \
1838+
COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \
1839+
COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \
1840+
COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf);
1841+
# endif
18211842
#else
18221843
#define INIT_PRINTF
18231844
#endif
@@ -3917,7 +3938,11 @@ INTERCEPTOR(SIZE_T, wcrtomb, char *dest, wchar_t src, void *ps) {
39173938
if (res != ((SIZE_T)-1)) {
39183939
CHECK_LE(res, sizeof(local_dest));
39193940
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res);
3941+
# if !SANITIZER_AIX
39203942
REAL(memcpy)(dest, local_dest, res);
3943+
# else
3944+
internal_memcpy(dest, local_dest, res);
3945+
# endif
39213946
}
39223947
return res;
39233948
}
@@ -3939,7 +3964,11 @@ INTERCEPTOR(int, wctomb, char *dest, wchar_t src) {
39393964
if (res != -1) {
39403965
CHECK_LE(res, sizeof(local_dest));
39413966
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res);
3967+
# if !SANITIZER_AIX
39423968
REAL(memcpy)(dest, local_dest, res);
3969+
# else
3970+
internal_memcpy(dest, local_dest, res);
3971+
# endif
39433972
}
39443973
return res;
39453974
}
@@ -10411,7 +10440,8 @@ static void InitializeCommonInterceptors() {
1041110440
INIT_ISOC99_PRINTF;
1041210441
INIT_SETPROCTITLE;
1041310442
INIT_FREXP;
10414-
INIT_FREXPF_FREXPL;
10443+
INIT_FREXPF;
10444+
INIT_FREXPL;
1041510445
INIT_GETPWNAM_AND_FRIENDS;
1041610446
INIT_GETPWNAM_R_AND_FRIENDS;
1041710447
INIT_GETPWENT;

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ static void ioctl_table_fill() {
7979
_(TIOCMSET, READ, sizeof(int));
8080
_(TIOCNXCL, NONE, 0);
8181
_(TIOCOUTQ, WRITE, sizeof(int));
82+
# if !SANITIZER_AIX
8283
_(TIOCSCTTY, NONE, 0);
84+
# endif
8385
_(TIOCSPGRP, READ, pid_t_sz);
8486
_(TIOCSWINSZ, READ, struct_winsize_sz);
8587

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0
3737
#elif SANITIZER_WINDOWS64
3838
#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0
39+
#elif SANITIZER_AIX
40+
# define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0
3941
#else
4042
#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 1
4143
#endif // SANITIZER_APPLE

compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
141141
#define SI_SOLARIS 0
142142
#endif
143143

144+
#if SANITIZER_AIX
145+
# define SI_NOT_AIX 0
146+
#else
147+
# define SI_NOT_AIX 1
148+
#endif
149+
144150
#if SANITIZER_SOLARIS32
145151
#define SI_SOLARIS32 1
146152
#else
@@ -161,20 +167,20 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
161167

162168
#define SANITIZER_INTERCEPT_STRLEN SI_NOT_FUCHSIA
163169
#define SANITIZER_INTERCEPT_STRNLEN (SI_NOT_MAC && SI_NOT_FUCHSIA)
164-
#define SANITIZER_INTERCEPT_STRCMP SI_NOT_FUCHSIA
170+
#define SANITIZER_INTERCEPT_STRCMP (SI_NOT_FUCHSIA && SI_NOT_AIX)
165171
#define SANITIZER_INTERCEPT_STRSTR SI_NOT_FUCHSIA
166-
#define SANITIZER_INTERCEPT_STRCASESTR SI_POSIX
172+
#define SANITIZER_INTERCEPT_STRCASESTR (SI_POSIX && SI_NOT_AIX)
167173
#define SANITIZER_INTERCEPT_STRTOK SI_NOT_FUCHSIA
168174
#define SANITIZER_INTERCEPT_STRCHR SI_NOT_FUCHSIA
169-
#define SANITIZER_INTERCEPT_STRCHRNUL SI_POSIX_NOT_MAC
175+
#define SANITIZER_INTERCEPT_STRCHRNUL (SI_POSIX_NOT_MAC && SI_NOT_AIX)
170176
#define SANITIZER_INTERCEPT_STRRCHR SI_NOT_FUCHSIA
171177
#define SANITIZER_INTERCEPT_STRSPN SI_NOT_FUCHSIA
172178
#define SANITIZER_INTERCEPT_STRPBRK SI_NOT_FUCHSIA
173179
#define SANITIZER_INTERCEPT_TEXTDOMAIN SI_LINUX_NOT_ANDROID || SI_SOLARIS
174180
#define SANITIZER_INTERCEPT_STRCASECMP SI_POSIX
175181
#define SANITIZER_INTERCEPT_MEMSET 1
176-
#define SANITIZER_INTERCEPT_MEMMOVE 1
177-
#define SANITIZER_INTERCEPT_MEMCPY 1
182+
#define SANITIZER_INTERCEPT_MEMMOVE SI_NOT_AIX
183+
#define SANITIZER_INTERCEPT_MEMCPY SI_NOT_AIX
178184
#define SANITIZER_INTERCEPT_MEMCMP SI_NOT_FUCHSIA
179185
#define SANITIZER_INTERCEPT_BCMP \
180186
SANITIZER_INTERCEPT_MEMCMP && \
@@ -233,18 +239,22 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
233239
#define SANITIZER_INTERCEPT_ISOC99_SCANF SI_GLIBC
234240

235241
#ifndef SANITIZER_INTERCEPT_PRINTF
236-
#define SANITIZER_INTERCEPT_PRINTF SI_POSIX
237-
#define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD)
238-
#define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC
242+
# define SANITIZER_INTERCEPT_ASPRINTF SI_NOT_AIX
243+
# define SANITIZER_INTERCEPT_VASPRINTF SI_NOT_AIX
244+
# define SANITIZER_INTERCEPT_PRINTF SI_POSIX
245+
# define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD)
246+
# define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC
239247
#endif
240248

241249
#define SANITIZER_INTERCEPT_SETPROCTITLE (SI_FREEBSD || SI_NETBSD)
242250

243251
#define SANITIZER_INTERCEPT___PRINTF_CHK \
244252
(SANITIZER_INTERCEPT_PRINTF && SI_GLIBC)
245253

246-
#define SANITIZER_INTERCEPT_FREXP SI_NOT_FUCHSIA
247-
#define SANITIZER_INTERCEPT_FREXPF_FREXPL SI_POSIX
254+
// AIX libc does not export FREXP and FREXP.
255+
#define SANITIZER_INTERCEPT_FREXP (SI_NOT_FUCHSIA && SI_NOT_AIX)
256+
#define SANITIZER_INTERCEPT_FREXPF (SI_POSIX && SI_NOT_AIX)
257+
#define SANITIZER_INTERCEPT_FREXPL SI_POSIX
248258

249259
#define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS SI_POSIX
250260
#define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS \
@@ -293,7 +303,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
293303
#define SANITIZER_INTERCEPT_ACCEPT4 \
294304
(SI_LINUX_NOT_ANDROID || SI_NETBSD || SI_FREEBSD)
295305
#define SANITIZER_INTERCEPT_PACCEPT SI_NETBSD
296-
#define SANITIZER_INTERCEPT_MODF SI_POSIX
306+
#define SANITIZER_INTERCEPT_MODF (SI_POSIX && SI_NOT_AIX)
297307
#define SANITIZER_INTERCEPT_RECVMSG SI_POSIX
298308
#define SANITIZER_INTERCEPT_SENDMSG SI_POSIX
299309
#define SANITIZER_INTERCEPT_RECVMMSG SI_LINUX
@@ -328,8 +338,9 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
328338
#define SANITIZER_INTERCEPT___WCSXFRM_L SI_LINUX
329339
#define SANITIZER_INTERCEPT_WCSNRTOMBS \
330340
(SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
331-
#define SANITIZER_INTERCEPT_WCRTOMB \
332-
(SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
341+
#define SANITIZER_INTERCEPT_WCRTOMB \
342+
(SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS || \
343+
!SI_NOT_AIX)
333344
#define SANITIZER_INTERCEPT_WCTOMB \
334345
(SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
335346
#define SANITIZER_INTERCEPT_TCGETATTR SI_LINUX_NOT_ANDROID || SI_SOLARIS
@@ -369,7 +380,8 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
369380
#define SANITIZER_INTERCEPT_GETMNTENT_R SI_LINUX_NOT_ANDROID
370381
#define SANITIZER_INTERCEPT_STATFS \
371382
(SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS)
372-
#define SANITIZER_INTERCEPT_STATFS64 SI_GLIBC && SANITIZER_HAS_STATFS64
383+
#define SANITIZER_INTERCEPT_STATFS64 \
384+
((SI_GLIBC || !SI_NOT_AIX) && SANITIZER_HAS_STATFS64)
373385
#define SANITIZER_INTERCEPT_STATVFS \
374386
(SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID)
375387
#define SANITIZER_INTERCEPT_STATVFS64 SI_GLIBC
@@ -418,10 +430,10 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
418430
#define SANITIZER_INTERCEPT_TTYNAME_R SI_POSIX
419431
#define SANITIZER_INTERCEPT_TEMPNAM SI_POSIX
420432
#define SANITIZER_INTERCEPT_SINCOS SI_LINUX || SI_SOLARIS
421-
#define SANITIZER_INTERCEPT_REMQUO SI_POSIX
422-
#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD)
423-
#define SANITIZER_INTERCEPT_LGAMMA SI_POSIX
424-
#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD)
433+
#define SANITIZER_INTERCEPT_REMQUO (SI_POSIX && SI_NOT_AIX)
434+
#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD && SI_NOT_AIX)
435+
#define SANITIZER_INTERCEPT_LGAMMA (SI_POSIX && SI_NOT_AIX)
436+
#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD && SI_NOT_AIX)
425437
#define SANITIZER_INTERCEPT_LGAMMA_R (SI_FREEBSD || SI_LINUX || SI_SOLARIS)
426438
#define SANITIZER_INTERCEPT_LGAMMAL_R SI_LINUX_NOT_ANDROID || SI_SOLARIS
427439
#define SANITIZER_INTERCEPT_DRAND48_R SI_GLIBC
@@ -504,11 +516,13 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
504516
#define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE (SI_LINUX || SI_FREEBSD)
505517

506518
#define SI_STAT_LINUX (SI_LINUX && __GLIBC_PREREQ(2, 33))
507-
#define SANITIZER_INTERCEPT_STAT \
508-
(SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \
509-
SI_STAT_LINUX)
510-
#define SANITIZER_INTERCEPT_STAT64 SI_STAT_LINUX && SANITIZER_HAS_STAT64
511-
#define SANITIZER_INTERCEPT_LSTAT (SI_NETBSD || SI_FREEBSD || SI_STAT_LINUX)
519+
#define SANITIZER_INTERCEPT_STAT \
520+
(SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \
521+
SI_STAT_LINUX || !SI_NOT_AIX)
522+
#define SANITIZER_INTERCEPT_STAT64 \
523+
((SI_STAT_LINUX || !SI_NOT_AIX) && SANITIZER_HAS_STAT64)
524+
#define SANITIZER_INTERCEPT_LSTAT \
525+
(SI_NETBSD || SI_FREEBSD || SI_STAT_LINUX || !SI_NOT_AIX)
512526
#define SANITIZER_INTERCEPT___XSTAT \
513527
((!SANITIZER_INTERCEPT_STAT && SI_POSIX) || SI_STAT_LINUX)
514528
#define SANITIZER_INTERCEPT___XSTAT64 SI_GLIBC
@@ -577,7 +591,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment,
577591
#define SANITIZER_INTERCEPT_PROTOENT_R SI_GLIBC
578592
#define SANITIZER_INTERCEPT_NETENT (SI_LINUX || SI_NETBSD || SI_FREEBSD)
579593
#define SANITIZER_INTERCEPT_SETVBUF \
580-
(SI_NETBSD || SI_FREEBSD || SI_LINUX || SI_MAC)
594+
(SI_NETBSD || SI_FREEBSD || SI_LINUX || SI_MAC || !SI_NOT_AIX)
581595
#define SANITIZER_INTERCEPT_GETMNTINFO (SI_NETBSD || SI_FREEBSD || SI_MAC)
582596
#define SANITIZER_INTERCEPT_MI_VECTOR_HASH SI_NETBSD
583597
#define SANITIZER_INTERCEPT_GETVFSSTAT SI_NETBSD

compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# define SANITIZER_REDEFINE_BUILTINS_H
1616

1717
// The asm hack only works with GCC and Clang.
18-
# if !defined(_WIN32)
18+
# if !defined(_WIN32) && !defined(_AIX)
1919

2020
asm(R"(
2121
.set memcpy, __sanitizer_internal_memcpy

0 commit comments

Comments
 (0)