From 1c2952c42322c0822a5d6fb0f5e38aa0f56ad8e3 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 18 Mar 2025 01:46:07 -0400 Subject: [PATCH 01/27] [sanitizer_common] Implement interceptors for AIX --- compiler-rt/lib/interception/CMakeLists.txt | 2 + compiler-rt/lib/interception/interception.h | 19 ++++++- .../lib/interception/interception_aix.cpp | 45 ++++++++++++++++ .../lib/interception/interception_aix.h | 36 +++++++++++++ .../sanitizer_common_interceptors.inc | 52 ++++++++++++++----- .../sanitizer_common_interceptors_ioctl.inc | 2 + ...izer_common_interceptors_memintrinsics.inc | 2 + .../sanitizer_platform_interceptors.h | 52 ++++++++++++------- .../sanitizer_redefine_builtins.h | 2 +- 9 files changed, 178 insertions(+), 34 deletions(-) create mode 100644 compiler-rt/lib/interception/interception_aix.cpp create mode 100644 compiler-rt/lib/interception/interception_aix.h diff --git a/compiler-rt/lib/interception/CMakeLists.txt b/compiler-rt/lib/interception/CMakeLists.txt index fe7fa27fbc78b..57c8c8ba20141 100644 --- a/compiler-rt/lib/interception/CMakeLists.txt +++ b/compiler-rt/lib/interception/CMakeLists.txt @@ -1,6 +1,7 @@ # Build for the runtime interception helper library. set(INTERCEPTION_SOURCES + interception_aix.cpp interception_linux.cpp interception_mac.cpp interception_win.cpp @@ -9,6 +10,7 @@ set(INTERCEPTION_SOURCES set(INTERCEPTION_HEADERS interception.h + interception_aix.h interception_linux.h interception_mac.h interception_win.h diff --git a/compiler-rt/lib/interception/interception.h b/compiler-rt/lib/interception/interception.h index 3cb6b446638e0..3a20cfb04dcd6 100644 --- a/compiler-rt/lib/interception/interception.h +++ b/compiler-rt/lib/interception/interception.h @@ -19,7 +19,7 @@ #if !SANITIZER_LINUX && !SANITIZER_FREEBSD && !SANITIZER_APPLE && \ !SANITIZER_NETBSD && !SANITIZER_WINDOWS && !SANITIZER_FUCHSIA && \ - !SANITIZER_SOLARIS + !SANITIZER_SOLARIS && !SANITIZER_AIX # error "Interception doesn't work on this operating system." #endif @@ -168,6 +168,16 @@ const interpose_substitution substitution_##func_name[] \ extern "C" ret_type func(__VA_ARGS__); # define DECLARE_WRAPPER_WINAPI(ret_type, func, ...) \ extern "C" __declspec(dllimport) ret_type __stdcall func(__VA_ARGS__); +#elif SANITIZER_AIX +# define WRAP(x) __interceptor_##x +# define TRAMPOLINE(x) WRAP(x) +// # define WRAPPER_NAME(x) "__interceptor_" #x +# define INTERCEPTOR_ATTRIBUTE __attribute__((visibility("default"))) +// AIX's linker will not select the weak symbol, so don't use weak for the +// interceptors. +# define DECLARE_WRAPPER(ret_type, func, ...) \ + extern "C" ret_type func(__VA_ARGS__) \ + __attribute__((alias("__interceptor_" #func), visibility("default"))); #elif !SANITIZER_FUCHSIA // LINUX, FREEBSD, NETBSD, SOLARIS # define INTERCEPTOR_ATTRIBUTE __attribute__((visibility("default"))) # if ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT @@ -367,7 +377,12 @@ inline void DoesNotSupportStaticLinking() {} #define INCLUDED_FROM_INTERCEPTION_LIB -#if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ +#if SANITIZER_AIX +# include "interception_aix.h" +# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_AIX(func) +# define INTERCEPT_FUNCTION_VER(func, symver) INTERCEPT_FUNCTION_AIX(func) + +#elif SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ SANITIZER_SOLARIS # include "interception_linux.h" diff --git a/compiler-rt/lib/interception/interception_aix.cpp b/compiler-rt/lib/interception/interception_aix.cpp new file mode 100644 index 0000000000000..953bbad96eb47 --- /dev/null +++ b/compiler-rt/lib/interception/interception_aix.cpp @@ -0,0 +1,45 @@ +//===-- interception_aix.cpp ------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of AddressSanitizer, an address sanity checker. +// +// AIX-specific interception methods. +//===----------------------------------------------------------------------===// + +#include "interception.h" +#include "sanitizer_common/sanitizer_common.h" + +#if SANITIZER_AIX + +# include // for dlsym() + +namespace __interception { + +static void *GetFuncAddr(const char *name, uptr wrapper_addr) { + // AIX dlsym can only defect the functions that are exported, so + // on AIX, we can not intercept some basic functions like memcpy. + // FIXME: if we are going to ship dynamic asan library, we may need to search + // all the loaded modules with RTLD_DEFAULT if RTLD_NEXT failed. + void *addr = dlsym(RTLD_NEXT, name); + + // In case `name' is not loaded, dlsym ends up finding the actual wrapper. + // We don't want to intercept the wrapper and have it point to itself. + if ((uptr)addr == wrapper_addr) + addr = nullptr; + return addr; +} + +bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, + uptr wrapper) { + void *addr = GetFuncAddr(name, wrapper); + *ptr_to_real = (uptr)addr; + return addr && (func == wrapper); +} + +} // namespace __interception +#endif // SANITIZER_AIX diff --git a/compiler-rt/lib/interception/interception_aix.h b/compiler-rt/lib/interception/interception_aix.h new file mode 100644 index 0000000000000..08d17caeb6a8d --- /dev/null +++ b/compiler-rt/lib/interception/interception_aix.h @@ -0,0 +1,36 @@ +//===-- interception_aix.h --------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file is a part of AddressSanitizer, an address sanity checker. +// +// AIX-specific interception methods. +//===----------------------------------------------------------------------===// + +#if SANITIZER_AIX + +# if !defined(INCLUDED_FROM_INTERCEPTION_LIB) +# error \ + "interception_aix.h should be included from interception library only" +# endif + +# ifndef INTERCEPTION_AIX_H +# define INTERCEPTION_AIX_H + +namespace __interception { +bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, + uptr wrapper); +} // namespace __interception + +# define INTERCEPT_FUNCTION_AIX(func) \ + ::__interception::InterceptFunction( \ + #func, (::__interception::uptr *)&REAL(func), \ + (::__interception::uptr) & (func), \ + (::__interception::uptr)&WRAP(func)) + +# endif // INTERCEPTION_AIX_H +#endif // SANITIZER_AIX diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 24a8a2d4dc55b..a71981282f615 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -480,7 +480,7 @@ INTERCEPTOR(char*, textdomain, const char *domainname) { #define INIT_TEXTDOMAIN #endif -#if SANITIZER_INTERCEPT_STRCMP || SANITIZER_INTERCEPT_MEMCMP +#if SANITIZER_INTERCEPT_MEMCMP static inline int CharCmpX(unsigned char c1, unsigned char c2) { return (c1 == c2) ? 0 : (c1 < c2) ? -1 : 1; } @@ -953,7 +953,7 @@ INTERCEPTOR(double, frexp, double x, int *exp) { #define INIT_FREXP #endif // SANITIZER_INTERCEPT_FREXP -#if SANITIZER_INTERCEPT_FREXPF_FREXPL +#if SANITIZER_INTERCEPT_FREXPF INTERCEPTOR(float, frexpf, float x, int *exp) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, frexpf, x, exp); @@ -963,6 +963,12 @@ INTERCEPTOR(float, frexpf, float x, int *exp) { return res; } +#define INIT_FREXPF COMMON_INTERCEPT_FUNCTION(frexpf); +#else +#define INIT_FREXPF +#endif + +#if SANITIZER_INTERCEPT_FREXPL INTERCEPTOR(long double, frexpl, long double x, int *exp) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, frexpl, x, exp); @@ -972,12 +978,10 @@ INTERCEPTOR(long double, frexpl, long double x, int *exp) { return res; } -#define INIT_FREXPF_FREXPL \ - COMMON_INTERCEPT_FUNCTION(frexpf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(frexpl) +#define INIT_FREXPL COMMON_INTERCEPT_FUNCTION_LDBL(frexpl) #else -#define INIT_FREXPF_FREXPL -#endif // SANITIZER_INTERCEPT_FREXPF_FREXPL +#define INIT_FREXPL +#endif #if SI_POSIX static void write_iovec(void *ctx, struct __sanitizer_iovec *iovec, @@ -1346,7 +1350,8 @@ INTERCEPTOR(unsigned long, time, unsigned long *t) { #if SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS static void unpoison_tm(void *ctx, __sanitizer_tm *tm) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, tm, sizeof(*tm)); -#if !SANITIZER_SOLARIS +// AIX tm struct does not have tm_zone field. +#if !SANITIZER_SOLARIS && !SANITIZER_AIX if (tm->tm_zone) { // Can not use COMMON_INTERCEPTOR_WRITE_RANGE here, because tm->tm_zone // can point to shared memory and tsan would report a data race. @@ -1731,8 +1736,10 @@ INTERCEPTOR(int, __vsprintf_chk, char *str, int flag, SIZE_T size_to, VSPRINTF_INTERCEPTOR_IMPL(vsprintf, str, format, ap) #endif +#if SANITIZER_INTERCEPT_VASPRINTF INTERCEPTOR(int, vasprintf, char **strp, const char *format, va_list ap) VASPRINTF_INTERCEPTOR_IMPL(vasprintf, strp, format, ap) +#endif #if SANITIZER_INTERCEPT_ISOC99_PRINTF INTERCEPTOR(int, __isoc99_vprintf, const char *format, va_list ap) @@ -1783,8 +1790,10 @@ INTERCEPTOR(int, __snprintf_chk, char *str, SIZE_T size, int flag, FORMAT_INTERCEPTOR_IMPL(__snprintf_chk, vsnprintf, str, size, format) #endif +#if SANITIZER_INTERCEPT_ASPRINTF INTERCEPTOR(int, asprintf, char **strp, const char *format, ...) FORMAT_INTERCEPTOR_IMPL(asprintf, vasprintf, strp, format) +#endif #if SANITIZER_INTERCEPT_ISOC99_PRINTF INTERCEPTOR(int, __isoc99_printf, const char *format, ...) @@ -1807,17 +1816,29 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_snprintf, __isoc99_vsnprintf, str, size, #endif // SANITIZER_INTERCEPT_PRINTF #if SANITIZER_INTERCEPT_PRINTF +#if SANITIZER_AIX +#define INIT_PRINTF \ + COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); +#else #define INIT_PRINTF \ COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \ COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); +#endif #else #define INIT_PRINTF #endif @@ -3901,7 +3922,10 @@ INTERCEPTOR(SIZE_T, wcrtomb, char *dest, wchar_t src, void *ps) { if (res != ((SIZE_T)-1)) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); - REAL(memcpy)(dest, local_dest, res); + if (!SANITIZER_AIX) + REAL(memcpy)(dest, local_dest, res); + else + internal_memcpy(dest, local_dest, res); } return res; } @@ -3923,7 +3947,10 @@ INTERCEPTOR(int, wctomb, char *dest, wchar_t src) { if (res != -1) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); - REAL(memcpy)(dest, local_dest, res); + if (!SANITIZER_AIX) + REAL(memcpy)(dest, local_dest, res); + else + internal_memcpy(dest, local_dest, res); } return res; } @@ -10329,7 +10356,8 @@ static void InitializeCommonInterceptors() { INIT_PRINTF_L; INIT_ISOC99_PRINTF; INIT_FREXP; - INIT_FREXPF_FREXPL; + INIT_FREXPF; + INIT_FREXPL; INIT_GETPWNAM_AND_FRIENDS; INIT_GETPWNAM_R_AND_FRIENDS; INIT_GETPWENT; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index 49ec4097c900b..5b23039954a43 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -73,7 +73,9 @@ static void ioctl_table_fill() { _(TIOCNXCL, NONE, 0); _(TIOCOUTQ, WRITE, sizeof(int)); _(TIOCPKT, READ, sizeof(int)); +#if !SANITIZER_AIX _(TIOCSCTTY, NONE, 0); +#endif _(TIOCSETD, READ, sizeof(int)); _(TIOCSPGRP, READ, pid_t_sz); _(TIOCSTI, READ, sizeof(char)); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc index 1565a494140f6..e542a6c7b438a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc @@ -36,6 +36,8 @@ #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 #elif SANITIZER_WINDOWS64 #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 +#elif SANITIZER_AIX +#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 #else #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 1 #endif // SANITIZER_APPLE diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h index febd233bb1e3c..43a37037c971d 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -139,6 +139,12 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SI_SOLARIS 0 #endif +#if SANITIZER_AIX +#define SI_NOT_AIX 0 +#else +#define SI_NOT_AIX 1 +#endif + #if SANITIZER_SOLARIS32 #define SI_SOLARIS32 1 #else @@ -159,20 +165,20 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_STRLEN SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRNLEN (SI_NOT_MAC && SI_NOT_FUCHSIA) -#define SANITIZER_INTERCEPT_STRCMP SI_NOT_FUCHSIA +#define SANITIZER_INTERCEPT_STRCMP (SI_NOT_FUCHSIA && SI_NOT_AIX) #define SANITIZER_INTERCEPT_STRSTR SI_NOT_FUCHSIA -#define SANITIZER_INTERCEPT_STRCASESTR SI_POSIX +#define SANITIZER_INTERCEPT_STRCASESTR (SI_POSIX && SI_NOT_AIX) #define SANITIZER_INTERCEPT_STRTOK SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRCHR SI_NOT_FUCHSIA -#define SANITIZER_INTERCEPT_STRCHRNUL SI_POSIX_NOT_MAC +#define SANITIZER_INTERCEPT_STRCHRNUL (SI_POSIX_NOT_MAC && SI_NOT_AIX) #define SANITIZER_INTERCEPT_STRRCHR SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRSPN SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRPBRK SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_TEXTDOMAIN SI_LINUX_NOT_ANDROID || SI_SOLARIS #define SANITIZER_INTERCEPT_STRCASECMP SI_POSIX #define SANITIZER_INTERCEPT_MEMSET 1 -#define SANITIZER_INTERCEPT_MEMMOVE 1 -#define SANITIZER_INTERCEPT_MEMCPY 1 +#define SANITIZER_INTERCEPT_MEMMOVE SI_NOT_AIX +#define SANITIZER_INTERCEPT_MEMCPY SI_NOT_AIX #define SANITIZER_INTERCEPT_MEMCMP SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_BCMP \ SANITIZER_INTERCEPT_MEMCMP && \ @@ -231,6 +237,8 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_ISOC99_SCANF SI_GLIBC #ifndef SANITIZER_INTERCEPT_PRINTF +#define SANITIZER_INTERCEPT_ASPRINTF SI_NOT_AIX +#define SANITIZER_INTERCEPT_VASPRINTF SI_NOT_AIX #define SANITIZER_INTERCEPT_PRINTF SI_POSIX #define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD) #define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC @@ -239,8 +247,10 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT___PRINTF_CHK \ (SANITIZER_INTERCEPT_PRINTF && SI_GLIBC) -#define SANITIZER_INTERCEPT_FREXP SI_NOT_FUCHSIA -#define SANITIZER_INTERCEPT_FREXPF_FREXPL SI_POSIX +// AIX libc does not export FREXP and FREXP. +#define SANITIZER_INTERCEPT_FREXP (SI_NOT_FUCHSIA && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_FREXPF (SI_POSIX && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_FREXPL SI_POSIX #define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS SI_POSIX #define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS \ @@ -289,7 +299,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_ACCEPT4 \ (SI_LINUX_NOT_ANDROID || SI_NETBSD || SI_FREEBSD) #define SANITIZER_INTERCEPT_PACCEPT SI_NETBSD -#define SANITIZER_INTERCEPT_MODF SI_POSIX +#define SANITIZER_INTERCEPT_MODF (SI_POSIX && SI_NOT_AIX) #define SANITIZER_INTERCEPT_RECVMSG SI_POSIX #define SANITIZER_INTERCEPT_SENDMSG SI_POSIX #define SANITIZER_INTERCEPT_RECVMMSG SI_LINUX @@ -324,8 +334,9 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT___WCSXFRM_L SI_LINUX #define SANITIZER_INTERCEPT_WCSNRTOMBS \ (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) -#define SANITIZER_INTERCEPT_WCRTOMB \ - (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) +#define SANITIZER_INTERCEPT_WCRTOMB \ + (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS || \ + !SI_NOT_AIX) #define SANITIZER_INTERCEPT_WCTOMB \ (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) #define SANITIZER_INTERCEPT_TCGETATTR SI_LINUX_NOT_ANDROID || SI_SOLARIS @@ -365,7 +376,8 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_GETMNTENT_R SI_LINUX_NOT_ANDROID #define SANITIZER_INTERCEPT_STATFS \ (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) -#define SANITIZER_INTERCEPT_STATFS64 SI_GLIBC && SANITIZER_HAS_STATFS64 +#define SANITIZER_INTERCEPT_STATFS64 \ + ((SI_GLIBC || !SI_NOT_AIX) && SANITIZER_HAS_STATFS64) #define SANITIZER_INTERCEPT_STATVFS \ (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID) #define SANITIZER_INTERCEPT_STATVFS64 SI_GLIBC @@ -414,10 +426,10 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_TTYNAME_R SI_POSIX #define SANITIZER_INTERCEPT_TEMPNAM SI_POSIX #define SANITIZER_INTERCEPT_SINCOS SI_LINUX || SI_SOLARIS -#define SANITIZER_INTERCEPT_REMQUO SI_POSIX -#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD) -#define SANITIZER_INTERCEPT_LGAMMA SI_POSIX -#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD) +#define SANITIZER_INTERCEPT_REMQUO (SI_POSIX && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_LGAMMA (SI_POSIX && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD && SI_NOT_AIX) #define SANITIZER_INTERCEPT_LGAMMA_R (SI_FREEBSD || SI_LINUX || SI_SOLARIS) #define SANITIZER_INTERCEPT_LGAMMAL_R SI_LINUX_NOT_ANDROID || SI_SOLARIS #define SANITIZER_INTERCEPT_DRAND48_R SI_GLIBC @@ -502,9 +514,11 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SI_STAT_LINUX (SI_LINUX && __GLIBC_PREREQ(2, 33)) #define SANITIZER_INTERCEPT_STAT \ (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \ - SI_STAT_LINUX) -#define SANITIZER_INTERCEPT_STAT64 SI_STAT_LINUX && SANITIZER_HAS_STAT64 -#define SANITIZER_INTERCEPT_LSTAT (SI_NETBSD || SI_FREEBSD || SI_STAT_LINUX) + SI_STAT_LINUX || !SI_NOT_AIX) +#define SANITIZER_INTERCEPT_STAT64 \ + ((SI_STAT_LINUX || !SI_NOT_AIX) && SANITIZER_HAS_STAT64) +#define SANITIZER_INTERCEPT_LSTAT \ + (SI_NETBSD || SI_FREEBSD || SI_STAT_LINUX || !SI_NOT_AIX) #define SANITIZER_INTERCEPT___XSTAT \ ((!SANITIZER_INTERCEPT_STAT && SI_POSIX) || SI_STAT_LINUX) #define SANITIZER_INTERCEPT___XSTAT64 SI_GLIBC @@ -572,7 +586,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_PROTOENT_R SI_GLIBC #define SANITIZER_INTERCEPT_NETENT (SI_LINUX || SI_NETBSD || SI_FREEBSD) #define SANITIZER_INTERCEPT_SETVBUF \ - (SI_NETBSD || SI_FREEBSD || SI_LINUX || SI_MAC) + (SI_NETBSD || SI_FREEBSD || SI_LINUX || SI_MAC || !SI_NOT_AIX) #define SANITIZER_INTERCEPT_GETMNTINFO (SI_NETBSD || SI_FREEBSD || SI_MAC) #define SANITIZER_INTERCEPT_MI_VECTOR_HASH SI_NETBSD #define SANITIZER_INTERCEPT_GETVFSSTAT SI_NETBSD diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h b/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h index 41e0613d6fc13..bda0f04687693 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h @@ -15,7 +15,7 @@ # define SANITIZER_REDEFINE_BUILTINS_H // The asm hack only works with GCC and Clang. -# if !defined(_WIN32) +# if !defined(_WIN32) && !defined(_AIX) asm(R"( .set memcpy, __sanitizer_internal_memcpy From 549b1349d8dee96a27ec6914b1d4c3de47633d3a Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 24 Mar 2025 08:10:46 -0400 Subject: [PATCH 02/27] Define SANITIZER_AIX temporarily to build --- compiler-rt/lib/sanitizer_common/sanitizer_platform.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h index 57966403c92a9..75ee3c0d90f00 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h @@ -31,6 +31,12 @@ # define SANITIZER_LINUX 0 #endif +#if defined(_AIX) +# define SANITIZER_AIX 1 +#else +# define SANITIZER_AIX 0 +#endif + #if defined(__GLIBC__) # define SANITIZER_GLIBC 1 #else From d3301a31329316ad0d736f72a76c5449a93fa09d Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 24 Mar 2025 08:44:12 -0400 Subject: [PATCH 03/27] Revert "Define SANITIZER_AIX temporarily to build" This reverts commit 549b1349d8dee96a27ec6914b1d4c3de47633d3a. --- compiler-rt/lib/sanitizer_common/sanitizer_platform.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h index 75ee3c0d90f00..57966403c92a9 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h @@ -31,12 +31,6 @@ # define SANITIZER_LINUX 0 #endif -#if defined(_AIX) -# define SANITIZER_AIX 1 -#else -# define SANITIZER_AIX 0 -#endif - #if defined(__GLIBC__) # define SANITIZER_GLIBC 1 #else From 6ffa232c78cb559d200594cf547f5591a9b492a8 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 24 Mar 2025 08:48:07 -0400 Subject: [PATCH 04/27] convert to preprocessor directives --- .../sanitizer_common/sanitizer_common_interceptors.inc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index a71981282f615..35876084f8107 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -3922,10 +3922,11 @@ INTERCEPTOR(SIZE_T, wcrtomb, char *dest, wchar_t src, void *ps) { if (res != ((SIZE_T)-1)) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); - if (!SANITIZER_AIX) +#if !SANITIZER_AIX REAL(memcpy)(dest, local_dest, res); - else +#else internal_memcpy(dest, local_dest, res); +#endif } return res; } @@ -3947,10 +3948,11 @@ INTERCEPTOR(int, wctomb, char *dest, wchar_t src) { if (res != -1) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); - if (!SANITIZER_AIX) +#if !SANITIZER_AIX REAL(memcpy)(dest, local_dest, res); - else +#else internal_memcpy(dest, local_dest, res); +#endif } return res; } From 4890013338967f16053c160d36b4c8d8581aff0f Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 1 Apr 2025 10:12:35 -0400 Subject: [PATCH 05/27] Fix formatting --- compiler-rt/lib/interception/interception.h | 12 +-- .../lib/interception/interception_aix.h | 2 +- .../sanitizer_common_interceptors.inc | 88 +++++++++---------- .../sanitizer_common_interceptors_ioctl.inc | 4 +- ...izer_common_interceptors_memintrinsics.inc | 2 +- .../sanitizer_platform_interceptors.h | 18 ++-- 6 files changed, 63 insertions(+), 63 deletions(-) diff --git a/compiler-rt/lib/interception/interception.h b/compiler-rt/lib/interception/interception.h index 3a20cfb04dcd6..8e1bc176e72e3 100644 --- a/compiler-rt/lib/interception/interception.h +++ b/compiler-rt/lib/interception/interception.h @@ -378,16 +378,16 @@ inline void DoesNotSupportStaticLinking() {} #define INCLUDED_FROM_INTERCEPTION_LIB #if SANITIZER_AIX -# include "interception_aix.h" -# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_AIX(func) -# define INTERCEPT_FUNCTION_VER(func, symver) INTERCEPT_FUNCTION_AIX(func) +# include "interception_aix.h" +# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_AIX(func) +# define INTERCEPT_FUNCTION_VER(func, symver) INTERCEPT_FUNCTION_AIX(func) #elif SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ SANITIZER_SOLARIS -# include "interception_linux.h" -# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) -# define INTERCEPT_FUNCTION_VER(func, symver) \ +# include "interception_linux.h" +# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) +# define INTERCEPT_FUNCTION_VER(func, symver) \ INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) #elif SANITIZER_APPLE # include "interception_mac.h" diff --git a/compiler-rt/lib/interception/interception_aix.h b/compiler-rt/lib/interception/interception_aix.h index 08d17caeb6a8d..b86ae89f50461 100644 --- a/compiler-rt/lib/interception/interception_aix.h +++ b/compiler-rt/lib/interception/interception_aix.h @@ -30,7 +30,7 @@ bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, ::__interception::InterceptFunction( \ #func, (::__interception::uptr *)&REAL(func), \ (::__interception::uptr) & (func), \ - (::__interception::uptr)&WRAP(func)) + (::__interception::uptr) & WRAP(func)) # endif // INTERCEPTION_AIX_H #endif // SANITIZER_AIX diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 35876084f8107..0403872802f55 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -963,9 +963,9 @@ INTERCEPTOR(float, frexpf, float x, int *exp) { return res; } -#define INIT_FREXPF COMMON_INTERCEPT_FUNCTION(frexpf); +# define INIT_FREXPF COMMON_INTERCEPT_FUNCTION(frexpf); #else -#define INIT_FREXPF +# define INIT_FREXPF #endif #if SANITIZER_INTERCEPT_FREXPL @@ -978,9 +978,9 @@ INTERCEPTOR(long double, frexpl, long double x, int *exp) { return res; } -#define INIT_FREXPL COMMON_INTERCEPT_FUNCTION_LDBL(frexpl) +# define INIT_FREXPL COMMON_INTERCEPT_FUNCTION_LDBL(frexpl) #else -#define INIT_FREXPL +# define INIT_FREXPL #endif #if SI_POSIX @@ -1351,7 +1351,7 @@ INTERCEPTOR(unsigned long, time, unsigned long *t) { static void unpoison_tm(void *ctx, __sanitizer_tm *tm) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, tm, sizeof(*tm)); // AIX tm struct does not have tm_zone field. -#if !SANITIZER_SOLARIS && !SANITIZER_AIX +# if !SANITIZER_SOLARIS && !SANITIZER_AIX if (tm->tm_zone) { // Can not use COMMON_INTERCEPTOR_WRITE_RANGE here, because tm->tm_zone // can point to shared memory and tsan would report a data race. @@ -1736,12 +1736,12 @@ INTERCEPTOR(int, __vsprintf_chk, char *str, int flag, SIZE_T size_to, VSPRINTF_INTERCEPTOR_IMPL(vsprintf, str, format, ap) #endif -#if SANITIZER_INTERCEPT_VASPRINTF +# if SANITIZER_INTERCEPT_VASPRINTF INTERCEPTOR(int, vasprintf, char **strp, const char *format, va_list ap) VASPRINTF_INTERCEPTOR_IMPL(vasprintf, strp, format, ap) -#endif +# endif -#if SANITIZER_INTERCEPT_ISOC99_PRINTF +# if SANITIZER_INTERCEPT_ISOC99_PRINTF INTERCEPTOR(int, __isoc99_vprintf, const char *format, va_list ap) VPRINTF_INTERCEPTOR_IMPL(__isoc99_vprintf, format, ap) @@ -1790,12 +1790,12 @@ INTERCEPTOR(int, __snprintf_chk, char *str, SIZE_T size, int flag, FORMAT_INTERCEPTOR_IMPL(__snprintf_chk, vsnprintf, str, size, format) #endif -#if SANITIZER_INTERCEPT_ASPRINTF +# if SANITIZER_INTERCEPT_ASPRINTF INTERCEPTOR(int, asprintf, char **strp, const char *format, ...) FORMAT_INTERCEPTOR_IMPL(asprintf, vasprintf, strp, format) -#endif +# endif -#if SANITIZER_INTERCEPT_ISOC99_PRINTF +# if SANITIZER_INTERCEPT_ISOC99_PRINTF INTERCEPTOR(int, __isoc99_printf, const char *format, ...) FORMAT_INTERCEPTOR_IMPL(__isoc99_printf, __isoc99_vprintf, format) @@ -1816,29 +1816,29 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_snprintf, __isoc99_vsnprintf, str, size, #endif // SANITIZER_INTERCEPT_PRINTF #if SANITIZER_INTERCEPT_PRINTF -#if SANITIZER_AIX -#define INIT_PRINTF \ - COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); -#else -#define INIT_PRINTF \ - COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); -#endif +# if SANITIZER_AIX +# define INIT_PRINTF \ + COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); +# else +# define INIT_PRINTF \ + COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); +# endif #else #define INIT_PRINTF #endif @@ -3922,11 +3922,11 @@ INTERCEPTOR(SIZE_T, wcrtomb, char *dest, wchar_t src, void *ps) { if (res != ((SIZE_T)-1)) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); -#if !SANITIZER_AIX - REAL(memcpy)(dest, local_dest, res); -#else - internal_memcpy(dest, local_dest, res); -#endif +# if !SANITIZER_AIX + REAL(memcpy)(dest, local_dest, res); +# else + internal_memcpy(dest, local_dest, res); +# endif } return res; } @@ -3948,11 +3948,11 @@ INTERCEPTOR(int, wctomb, char *dest, wchar_t src) { if (res != -1) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); -#if !SANITIZER_AIX - REAL(memcpy)(dest, local_dest, res); -#else - internal_memcpy(dest, local_dest, res); -#endif +# if !SANITIZER_AIX + REAL(memcpy)(dest, local_dest, res); +# else + internal_memcpy(dest, local_dest, res); +# endif } return res; } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index 5b23039954a43..ea77707c2e64e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -73,9 +73,9 @@ static void ioctl_table_fill() { _(TIOCNXCL, NONE, 0); _(TIOCOUTQ, WRITE, sizeof(int)); _(TIOCPKT, READ, sizeof(int)); -#if !SANITIZER_AIX +# if !SANITIZER_AIX _(TIOCSCTTY, NONE, 0); -#endif +# endif _(TIOCSETD, READ, sizeof(int)); _(TIOCSPGRP, READ, pid_t_sz); _(TIOCSTI, READ, sizeof(char)); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc index e542a6c7b438a..42d387e37ec98 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc @@ -37,7 +37,7 @@ #elif SANITIZER_WINDOWS64 #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 #elif SANITIZER_AIX -#define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 +# define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 #else #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 1 #endif // SANITIZER_APPLE diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h index 43a37037c971d..14e0290aae496 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -140,9 +140,9 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #endif #if SANITIZER_AIX -#define SI_NOT_AIX 0 +# define SI_NOT_AIX 0 #else -#define SI_NOT_AIX 1 +# define SI_NOT_AIX 1 #endif #if SANITIZER_SOLARIS32 @@ -237,11 +237,11 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_ISOC99_SCANF SI_GLIBC #ifndef SANITIZER_INTERCEPT_PRINTF -#define SANITIZER_INTERCEPT_ASPRINTF SI_NOT_AIX -#define SANITIZER_INTERCEPT_VASPRINTF SI_NOT_AIX -#define SANITIZER_INTERCEPT_PRINTF SI_POSIX -#define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD) -#define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC +# define SANITIZER_INTERCEPT_ASPRINTF SI_NOT_AIX +# define SANITIZER_INTERCEPT_VASPRINTF SI_NOT_AIX +# define SANITIZER_INTERCEPT_PRINTF SI_POSIX +# define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD) +# define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC #endif #define SANITIZER_INTERCEPT___PRINTF_CHK \ @@ -512,8 +512,8 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE (SI_LINUX || SI_FREEBSD) #define SI_STAT_LINUX (SI_LINUX && __GLIBC_PREREQ(2, 33)) -#define SANITIZER_INTERCEPT_STAT \ - (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \ +#define SANITIZER_INTERCEPT_STAT \ + (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \ SI_STAT_LINUX || !SI_NOT_AIX) #define SANITIZER_INTERCEPT_STAT64 \ ((SI_STAT_LINUX || !SI_NOT_AIX) && SANITIZER_HAS_STAT64) From dcde67013a3e5cb300f79634ac445a849ada5889 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Wed, 23 Apr 2025 09:47:59 -0400 Subject: [PATCH 06/27] Add asan interceptor part --- compiler-rt/lib/asan/asan_allocator.cpp | 7 ++- compiler-rt/lib/asan/asan_interceptors.cpp | 48 ++++++++++++++++++- compiler-rt/lib/asan/asan_interceptors.h | 31 ++++++++++-- .../asan/asan_interceptors_memintrinsics.cpp | 4 +- compiler-rt/lib/asan/asan_malloc_linux.cpp | 21 +++++++- 5 files changed, 103 insertions(+), 8 deletions(-) diff --git a/compiler-rt/lib/asan/asan_allocator.cpp b/compiler-rt/lib/asan/asan_allocator.cpp index 3a55c2af65653..c09d0fea34572 100644 --- a/compiler-rt/lib/asan/asan_allocator.cpp +++ b/compiler-rt/lib/asan/asan_allocator.cpp @@ -770,11 +770,16 @@ struct Allocator { u8 chunk_state = atomic_load(&m->chunk_state, memory_order_acquire); if (chunk_state != CHUNK_ALLOCATED) ReportInvalidFree(old_ptr, chunk_state, stack); - CHECK_NE(REAL(memcpy), nullptr); uptr memcpy_size = Min(new_size, m->UsedSize()); // If realloc() races with free(), we may start copying freed memory. // However, we will report racy double-free later anyway. +#if !SANITIZER_AIX + CHECK_NE(REAL(memcpy), nullptr); REAL(memcpy)(new_ptr, old_ptr, memcpy_size); +#else + // AIX does not intercept memcpy, we have to use internal_memcpy here. + internal_memcpy(new_ptr, old_ptr, memcpy_size); +#endif Deallocate(old_ptr, 0, 0, stack, FROM_MALLOC); } return new_ptr; diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 247ea1b92f1f4..f73591190fedb 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -56,6 +56,7 @@ namespace __asan { # define ASAN_READ_STRING(ctx, s, n) \ ASAN_READ_STRING_OF_LEN((ctx), (s), internal_strlen(s), (n)) +#if SANITIZER_INTERCEPT_STRCAT || SANITIZER_INTERCEPT_STRCPY static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #if SANITIZER_INTERCEPT_STRNLEN if (REAL(strnlen)) { @@ -64,6 +65,7 @@ static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #endif return internal_strnlen(s, maxlen); } +#endif void SetThreadName(const char *name) { AsanThread *t = GetCurrentThread(); @@ -275,7 +277,12 @@ INTERCEPTOR(int, pthread_create, void *thread, void *attr, # endif asanThreadArgRetval().Create(detached, {start_routine, arg}, [&]() -> uptr { result = REAL(pthread_create)(thread, attr, asan_thread_start, t); +// AIX pthread_t is unsigned int. +#if SANITIZER_AIX + return result ? 0 : *(unsigned int *)(thread); +#else return result ? 0 : *(uptr *)(thread); +#endif }); } if (result != 0) { @@ -432,10 +439,12 @@ INTERCEPTOR(int, swapcontext, struct ucontext_t *oucp, #define siglongjmp __siglongjmp14 #endif +#if ASAN_INTERCEPT_LONGJMP INTERCEPTOR(void, longjmp, void *env, int val) { __asan_handle_no_return(); REAL(longjmp)(env, val); } +#endif #if ASAN_INTERCEPT__LONGJMP INTERCEPTOR(void, _longjmp, void *env, int val) { @@ -508,6 +517,7 @@ DEFINE_REAL(char*, index, const char *string, int c) // For both strcat() and strncat() we need to check the validity of |to| // argument irrespective of the |from| length. +#if SANITIZER_INTERCEPT_STRCAT INTERCEPTOR(char *, strcat, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcat); @@ -528,6 +538,7 @@ DEFINE_REAL(char*, index, const char *string, int c) } return REAL(strcat)(to, from); } +#endif INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { void *ctx; @@ -548,6 +559,7 @@ INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { return REAL(strncat)(to, from, size); } +#if SANITIZER_INTERCEPT_STRCPY INTERCEPTOR(char *, strcpy, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcpy); @@ -569,6 +581,7 @@ INTERCEPTOR(char *, strcpy, char *to, const char *from) { } return REAL(strcpy)(to, from); } +#endif // Windows doesn't always define the strdup identifier, // and when it does it's a macro defined to either _strdup @@ -596,9 +609,16 @@ INTERCEPTOR(char*, strdup, const char *s) { GET_STACK_TRACE_MALLOC; void *new_mem = asan_malloc(length + 1, &stack); if (new_mem) { +# if SANITIZER_AIX + // memcpy is a static function defined in libc.a on AIX. It can not be + // intercepted, so REAL(memcpy) is null on AIX. Use internal_memcpy instead. + internal_memcpy(new_mem, s, length + 1); +# else REAL(memcpy)(new_mem, s, length + 1); +# endif } return reinterpret_cast(new_mem); + } # if ASAN_INTERCEPT___STRDUP @@ -614,12 +634,17 @@ INTERCEPTOR(char*, __strdup, const char *s) { GET_STACK_TRACE_MALLOC; void *new_mem = asan_malloc(length + 1, &stack); if (new_mem) { +#if SANITIZER_AIX + internal_memcpy(new_mem, s, length + 1); +#else REAL(memcpy)(new_mem, s, length + 1); +#endif } return reinterpret_cast(new_mem); } #endif // ASAN_INTERCEPT___STRDUP +#if SANITIZER_INTERCEPT_STRCPY INTERCEPTOR(char*, strncpy, char *to, const char *from, usize size) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strncpy); @@ -632,6 +657,7 @@ INTERCEPTOR(char*, strncpy, char *to, const char *from, usize size) { } return REAL(strncpy)(to, from, size); } +#endif template static ALWAYS_INLINE auto StrtolImpl(void *ctx, Fn real, const char *nptr, @@ -743,6 +769,14 @@ static void AtCxaAtexit(void *unused) { } #endif +#if ASAN_INTERCEPT_EXIT +INTERCEPTOR(void, exit, int status) { + AsanInitFromRtl(); + StopInitOrderChecking(); + REAL(exit)(status); +} +#endif + #if ASAN_INTERCEPT___CXA_ATEXIT INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg, void *dso_handle) { @@ -804,10 +838,14 @@ void InitializeAsanInterceptors() { InitializeSignalInterceptors(); // Intercept str* functions. +#if SANITIZER_INTERCEPT_STRCAT ASAN_INTERCEPT_FUNC(strcat); - ASAN_INTERCEPT_FUNC(strcpy); ASAN_INTERCEPT_FUNC(strncat); +#endif +#if SANITIZER_INTERCEPT_STRCPY + ASAN_INTERCEPT_FUNC(strcpy); ASAN_INTERCEPT_FUNC(strncpy); +#endif ASAN_INTERCEPT_FUNC(strdup); # if ASAN_INTERCEPT___STRDUP ASAN_INTERCEPT_FUNC(__strdup); @@ -826,8 +864,10 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(__isoc23_strtoll); # endif - // Intecept jump-related functions. + // Intercept jump-related functions. +#if ASAN_INTERCEPT_LONGJMP ASAN_INTERCEPT_FUNC(longjmp); +#endif # if ASAN_INTERCEPT_SWAPCONTEXT ASAN_INTERCEPT_FUNC(swapcontext); @@ -894,6 +934,10 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(atexit); #endif +#if ASAN_INTERCEPT_EXIT + ASAN_INTERCEPT_FUNC(exit); +#endif + #if ASAN_INTERCEPT_PTHREAD_ATFORK ASAN_INTERCEPT_FUNC(pthread_atfork); #endif diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 3e2386eaf8092..8ccdfee8c442c 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -31,10 +31,20 @@ void InitializePlatformInterceptors(); // really defined to replace libc functions. #if !SANITIZER_FUCHSIA +#if !SANITIZER_AIX +# define ASAN_INTERCEPT_LONGJMP 1 +#else +# define ASAN_INTERCEPT_LONGJMP 0 +#endif + // Use macro to describe if specific function should be // intercepted on a given platform. #if !SANITIZER_WINDOWS +#if !SANITIZER_AIX # define ASAN_INTERCEPT__LONGJMP 1 +#else +# define ASAN_INTERCEPT__LONGJMP 0 +#endif # define ASAN_INTERCEPT_INDEX 1 # define ASAN_INTERCEPT_PTHREAD_CREATE 1 #else @@ -56,7 +66,7 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT_SWAPCONTEXT 0 #endif -#if !SANITIZER_WINDOWS +#if !SANITIZER_WINDOWS && !SANITIZER_AIX # define ASAN_INTERCEPT_SIGLONGJMP 1 #else # define ASAN_INTERCEPT_SIGLONGJMP 0 @@ -84,12 +94,18 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 0 #endif -#if !SANITIZER_WINDOWS +#if !SANITIZER_WINDOWS && !SANITIZER_AIX # define ASAN_INTERCEPT___CXA_ATEXIT 1 #else # define ASAN_INTERCEPT___CXA_ATEXIT 0 #endif +#if SANITIZER_AIX +# define ASAN_INTERCEPT_EXIT 1 +#else +# define ASAN_INTERCEPT_EXIT 0 +#endif + #if SANITIZER_NETBSD # define ASAN_INTERCEPT_ATEXIT 1 #else @@ -110,6 +126,15 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT_TRYJOIN 0 #endif +#if SANITIZER_AIX +#define SANITIZER_INTERCEPT_STRCAT 0 +#define SANITIZER_INTERCEPT_STRCPY 0 +#else +#define SANITIZER_INTERCEPT_STRCAT 1 +#define SANITIZER_INTERCEPT_STRCPY 1 +#endif + + #if SANITIZER_LINUX && \ (defined(__arm__) || defined(__aarch64__) || defined(__i386__) || \ defined(__x86_64__) || SANITIZER_RISCV64 || SANITIZER_LOONGARCH64) @@ -117,7 +142,7 @@ void InitializePlatformInterceptors(); #else # define ASAN_INTERCEPT_VFORK 0 #endif - +` #if SANITIZER_NETBSD # define ASAN_INTERCEPT_PTHREAD_ATFORK 1 #else diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index bdf328f892063..170d91e47e4cc 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -25,6 +25,7 @@ using namespace __asan; // memcpy is called during __asan_init() from the internals of printf(...). // We do not treat memcpy with to==from as a bug. // See http://llvm.org/bugs/show_bug.cgi?id=11763. +// AIX does not intercept memcpy, so we have to use internal_memcpy. #define ASAN_MEMCPY_IMPL(ctx, to, from, size) \ do { \ if (LIKELY(replace_intrin_cached)) { \ @@ -36,7 +37,8 @@ using namespace __asan; } else if (UNLIKELY(!AsanInited())) { \ return internal_memcpy(to, from, size); \ } \ - return REAL(memcpy)(to, from, size); \ + return SANITIZER_AIX ? internal_memcpy(to, from, size) : \ + REAL(memcpy)(to, from, size); \ } while (0) // memset is called inside Printf. diff --git a/compiler-rt/lib/asan/asan_malloc_linux.cpp b/compiler-rt/lib/asan/asan_malloc_linux.cpp index 3d6b03fefab70..5646a718d3ea0 100644 --- a/compiler-rt/lib/asan/asan_malloc_linux.cpp +++ b/compiler-rt/lib/asan/asan_malloc_linux.cpp @@ -14,8 +14,9 @@ //===----------------------------------------------------------------------===// #include "sanitizer_common/sanitizer_platform.h" +// FIXME: rename this file, this is not just for Linux now, see FUCHSIA and AIX. #if SANITIZER_FREEBSD || SANITIZER_FUCHSIA || SANITIZER_LINUX || \ - SANITIZER_NETBSD || SANITIZER_SOLARIS + SANITIZER_NETBSD || SANITIZER_SOLARIS || SANITIZER_AIX # include "asan_allocator.h" # include "asan_interceptors.h" @@ -61,6 +62,24 @@ INTERCEPTOR(void, cfree, void *ptr) { } #endif // SANITIZER_INTERCEPT_CFREE +#if SANITIZER_AIX +INTERCEPTOR(void*, vec_malloc, uptr size) { + if (DlsymAlloc::Use()) + return DlsymAlloc::Allocate(size); + AsanInitFromRtl(); + GET_STACK_TRACE_MALLOC; + return asan_malloc(size, &stack); +} + +INTERCEPTOR(void*, vec_calloc, uptr nmemb, uptr size) { + if (DlsymAlloc::Use()) + return DlsymAlloc::Callocate(nmemb, size); + AsanInitFromRtl(); + GET_STACK_TRACE_MALLOC; + return asan_calloc(nmemb, size, &stack); +} +#endif + INTERCEPTOR(void*, malloc, uptr size) { if (DlsymAlloc::Use()) return DlsymAlloc::Allocate(size); From 878a567e6e851fef9b268e3e939df26eedc1f730 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Sun, 27 Apr 2025 13:50:06 -0400 Subject: [PATCH 07/27] Remove typo --- compiler-rt/lib/asan/asan_interceptors.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 8ccdfee8c442c..9ad72e71cef97 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -142,7 +142,7 @@ void InitializePlatformInterceptors(); #else # define ASAN_INTERCEPT_VFORK 0 #endif -` + #if SANITIZER_NETBSD # define ASAN_INTERCEPT_PTHREAD_ATFORK 1 #else From 7cc64a1969e2b18edb9f0645f0a6af3af04c82e1 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Sun, 27 Apr 2025 18:34:25 -0400 Subject: [PATCH 08/27] Fix undeclared identifier --- compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 170d91e47e4cc..6842962e00466 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -37,8 +37,11 @@ using namespace __asan; } else if (UNLIKELY(!AsanInited())) { \ return internal_memcpy(to, from, size); \ } \ - return SANITIZER_AIX ? internal_memcpy(to, from, size) : \ - REAL(memcpy)(to, from, size); \ +#if !SANITIZER_AIX + return REAL(memcpy)(to, from, size); \ +#else + return internal_memcpy(to, from, size); \ +#endif } while (0) // memset is called inside Printf. From 4159aa9325c6897bc464cb5828ffcfe81b4638ea Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Sun, 27 Apr 2025 18:43:59 -0400 Subject: [PATCH 09/27] Correct backslash mistake --- compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 6842962e00466..eabf9c08383b0 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -36,11 +36,11 @@ using namespace __asan; ASAN_WRITE_RANGE(ctx, to, size); \ } else if (UNLIKELY(!AsanInited())) { \ return internal_memcpy(to, from, size); \ - } \ + } #if !SANITIZER_AIX - return REAL(memcpy)(to, from, size); \ + return REAL(memcpy)(to, from, size); #else - return internal_memcpy(to, from, size); \ + return internal_memcpy(to, from, size); #endif } while (0) From b0098db6739adac57e81f11ab1e37cb294459026 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Sun, 27 Apr 2025 19:56:06 -0400 Subject: [PATCH 10/27] Fix return --- .../asan/asan_interceptors_memintrinsics.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index eabf9c08383b0..4ac4768852caf 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -22,10 +22,18 @@ using namespace __asan; +// AIX does not intercept memcpy, so we have to use internal_memcpy. +#if !SANITIZER_AIX + #define ASAN_MEMCPY_RETURN(to, from, size) \ + return REAL(memcpy)(to, from, size) +#else + #define ASAN_MEMCPY_RETURN(to, from, size) \ + return internal_memcpy(to, from, size) +#endif + // memcpy is called during __asan_init() from the internals of printf(...). // We do not treat memcpy with to==from as a bug. // See http://llvm.org/bugs/show_bug.cgi?id=11763. -// AIX does not intercept memcpy, so we have to use internal_memcpy. #define ASAN_MEMCPY_IMPL(ctx, to, from, size) \ do { \ if (LIKELY(replace_intrin_cached)) { \ @@ -36,12 +44,8 @@ using namespace __asan; ASAN_WRITE_RANGE(ctx, to, size); \ } else if (UNLIKELY(!AsanInited())) { \ return internal_memcpy(to, from, size); \ - } -#if !SANITIZER_AIX - return REAL(memcpy)(to, from, size); -#else - return internal_memcpy(to, from, size); -#endif + } \ + ASAN_MEMCPY_RETURN(to, from, size); \ } while (0) // memset is called inside Printf. From b159f20b73f46a8a6f29d8b6d1c02111bca1d2f9 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Sun, 27 Apr 2025 20:17:39 -0400 Subject: [PATCH 11/27] Fix formatting --- compiler-rt/lib/asan/asan_interceptors.cpp | 59 +++--- compiler-rt/lib/asan/asan_interceptors.h | 173 +++++++++--------- .../asan/asan_interceptors_memintrinsics.cpp | 5 +- compiler-rt/lib/asan/asan_malloc_linux.cpp | 11 +- 4 files changed, 122 insertions(+), 126 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index f73591190fedb..57b866b29bd00 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -56,7 +56,7 @@ namespace __asan { # define ASAN_READ_STRING(ctx, s, n) \ ASAN_READ_STRING_OF_LEN((ctx), (s), internal_strlen(s), (n)) -#if SANITIZER_INTERCEPT_STRCAT || SANITIZER_INTERCEPT_STRCPY +# if SANITIZER_INTERCEPT_STRCAT || SANITIZER_INTERCEPT_STRCPY static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #if SANITIZER_INTERCEPT_STRNLEN if (REAL(strnlen)) { @@ -65,7 +65,7 @@ static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #endif return internal_strnlen(s, maxlen); } -#endif +# endif void SetThreadName(const char *name) { AsanThread *t = GetCurrentThread(); @@ -278,11 +278,11 @@ INTERCEPTOR(int, pthread_create, void *thread, void *attr, asanThreadArgRetval().Create(detached, {start_routine, arg}, [&]() -> uptr { result = REAL(pthread_create)(thread, attr, asan_thread_start, t); // AIX pthread_t is unsigned int. -#if SANITIZER_AIX +# if SANITIZER_AIX return result ? 0 : *(unsigned int *)(thread); -#else +# else return result ? 0 : *(uptr *)(thread); -#endif +# endif }); } if (result != 0) { @@ -439,14 +439,14 @@ INTERCEPTOR(int, swapcontext, struct ucontext_t *oucp, #define siglongjmp __siglongjmp14 #endif -#if ASAN_INTERCEPT_LONGJMP +# if ASAN_INTERCEPT_LONGJMP INTERCEPTOR(void, longjmp, void *env, int val) { __asan_handle_no_return(); REAL(longjmp)(env, val); } -#endif +# endif -#if ASAN_INTERCEPT__LONGJMP +# if ASAN_INTERCEPT__LONGJMP INTERCEPTOR(void, _longjmp, void *env, int val) { __asan_handle_no_return(); REAL(_longjmp)(env, val); @@ -517,7 +517,7 @@ DEFINE_REAL(char*, index, const char *string, int c) // For both strcat() and strncat() we need to check the validity of |to| // argument irrespective of the |from| length. -#if SANITIZER_INTERCEPT_STRCAT +# if SANITIZER_INTERCEPT_STRCAT INTERCEPTOR(char *, strcat, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcat); @@ -538,7 +538,7 @@ DEFINE_REAL(char*, index, const char *string, int c) } return REAL(strcat)(to, from); } -#endif +# endif INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { void *ctx; @@ -559,7 +559,7 @@ INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { return REAL(strncat)(to, from, size); } -#if SANITIZER_INTERCEPT_STRCPY +# if SANITIZER_INTERCEPT_STRCPY INTERCEPTOR(char *, strcpy, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcpy); @@ -581,7 +581,7 @@ INTERCEPTOR(char *, strcpy, char *to, const char *from) { } return REAL(strcpy)(to, from); } -#endif +# endif // Windows doesn't always define the strdup identifier, // and when it does it's a macro defined to either _strdup @@ -618,7 +618,6 @@ INTERCEPTOR(char*, strdup, const char *s) { # endif } return reinterpret_cast(new_mem); - } # if ASAN_INTERCEPT___STRDUP @@ -634,17 +633,17 @@ INTERCEPTOR(char*, __strdup, const char *s) { GET_STACK_TRACE_MALLOC; void *new_mem = asan_malloc(length + 1, &stack); if (new_mem) { -#if SANITIZER_AIX +# if SANITIZER_AIX internal_memcpy(new_mem, s, length + 1); -#else +# else REAL(memcpy)(new_mem, s, length + 1); -#endif +# endif } return reinterpret_cast(new_mem); } #endif // ASAN_INTERCEPT___STRDUP -#if SANITIZER_INTERCEPT_STRCPY +# if SANITIZER_INTERCEPT_STRCPY INTERCEPTOR(char*, strncpy, char *to, const char *from, usize size) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strncpy); @@ -657,7 +656,7 @@ INTERCEPTOR(char*, strncpy, char *to, const char *from, usize size) { } return REAL(strncpy)(to, from, size); } -#endif +# endif template static ALWAYS_INLINE auto StrtolImpl(void *ctx, Fn real, const char *nptr, @@ -769,15 +768,15 @@ static void AtCxaAtexit(void *unused) { } #endif -#if ASAN_INTERCEPT_EXIT +# if ASAN_INTERCEPT_EXIT INTERCEPTOR(void, exit, int status) { AsanInitFromRtl(); StopInitOrderChecking(); REAL(exit)(status); } -#endif +# endif -#if ASAN_INTERCEPT___CXA_ATEXIT +# if ASAN_INTERCEPT___CXA_ATEXIT INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg, void *dso_handle) { if (SANITIZER_APPLE && UNLIKELY(!AsanInited())) @@ -838,14 +837,14 @@ void InitializeAsanInterceptors() { InitializeSignalInterceptors(); // Intercept str* functions. -#if SANITIZER_INTERCEPT_STRCAT +# if SANITIZER_INTERCEPT_STRCAT ASAN_INTERCEPT_FUNC(strcat); ASAN_INTERCEPT_FUNC(strncat); -#endif -#if SANITIZER_INTERCEPT_STRCPY +# endif +# if SANITIZER_INTERCEPT_STRCPY ASAN_INTERCEPT_FUNC(strcpy); ASAN_INTERCEPT_FUNC(strncpy); -#endif +# endif ASAN_INTERCEPT_FUNC(strdup); # if ASAN_INTERCEPT___STRDUP ASAN_INTERCEPT_FUNC(__strdup); @@ -865,9 +864,9 @@ void InitializeAsanInterceptors() { # endif // Intercept jump-related functions. -#if ASAN_INTERCEPT_LONGJMP +# if ASAN_INTERCEPT_LONGJMP ASAN_INTERCEPT_FUNC(longjmp); -#endif +# endif # if ASAN_INTERCEPT_SWAPCONTEXT ASAN_INTERCEPT_FUNC(swapcontext); @@ -934,11 +933,11 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(atexit); #endif -#if ASAN_INTERCEPT_EXIT +# if ASAN_INTERCEPT_EXIT ASAN_INTERCEPT_FUNC(exit); -#endif +# endif -#if ASAN_INTERCEPT_PTHREAD_ATFORK +# if ASAN_INTERCEPT_PTHREAD_ATFORK ASAN_INTERCEPT_FUNC(pthread_atfork); #endif diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 9ad72e71cef97..bc647419e0050 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -31,22 +31,22 @@ void InitializePlatformInterceptors(); // really defined to replace libc functions. #if !SANITIZER_FUCHSIA -#if !SANITIZER_AIX -# define ASAN_INTERCEPT_LONGJMP 1 -#else -# define ASAN_INTERCEPT_LONGJMP 0 -#endif +# if !SANITIZER_AIX +# define ASAN_INTERCEPT_LONGJMP 1 +# else +# define ASAN_INTERCEPT_LONGJMP 0 +# endif // Use macro to describe if specific function should be // intercepted on a given platform. #if !SANITIZER_WINDOWS -#if !SANITIZER_AIX -# define ASAN_INTERCEPT__LONGJMP 1 -#else -# define ASAN_INTERCEPT__LONGJMP 0 -#endif -# define ASAN_INTERCEPT_INDEX 1 -# define ASAN_INTERCEPT_PTHREAD_CREATE 1 +# if !SANITIZER_AIX +# define ASAN_INTERCEPT__LONGJMP 1 +# else +# define ASAN_INTERCEPT__LONGJMP 0 +# endif +# define ASAN_INTERCEPT_INDEX 1 +# define ASAN_INTERCEPT_PTHREAD_CREATE 1 #else # define ASAN_INTERCEPT__LONGJMP 0 # define ASAN_INTERCEPT_INDEX 0 @@ -66,88 +66,87 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT_SWAPCONTEXT 0 #endif -#if !SANITIZER_WINDOWS && !SANITIZER_AIX -# define ASAN_INTERCEPT_SIGLONGJMP 1 -#else -# define ASAN_INTERCEPT_SIGLONGJMP 0 -#endif - -#if SANITIZER_GLIBC -# define ASAN_INTERCEPT___LONGJMP_CHK 1 -#else -# define ASAN_INTERCEPT___LONGJMP_CHK 0 -#endif - -#if ASAN_HAS_EXCEPTIONS && !SANITIZER_SOLARIS && !SANITIZER_NETBSD && \ - (!SANITIZER_WINDOWS || (defined(__MINGW32__) && defined(__i386__))) -# define ASAN_INTERCEPT___CXA_THROW 1 -# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 -# if defined(_GLIBCXX_SJLJ_EXCEPTIONS) || (SANITIZER_IOS && defined(__arm__)) -# define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 1 -# else -# define ASAN_INTERCEPT__UNWIND_RAISEEXCEPTION 1 -# endif -#else -# define ASAN_INTERCEPT___CXA_THROW 0 -# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 0 -# define ASAN_INTERCEPT__UNWIND_RAISEEXCEPTION 0 -# define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 0 -#endif - -#if !SANITIZER_WINDOWS && !SANITIZER_AIX -# define ASAN_INTERCEPT___CXA_ATEXIT 1 -#else -# define ASAN_INTERCEPT___CXA_ATEXIT 0 -#endif - -#if SANITIZER_AIX -# define ASAN_INTERCEPT_EXIT 1 -#else -# define ASAN_INTERCEPT_EXIT 0 -#endif +# if !SANITIZER_WINDOWS && !SANITIZER_AIX +# define ASAN_INTERCEPT_SIGLONGJMP 1 +# else +# define ASAN_INTERCEPT_SIGLONGJMP 0 +# endif -#if SANITIZER_NETBSD -# define ASAN_INTERCEPT_ATEXIT 1 -#else -# define ASAN_INTERCEPT_ATEXIT 0 -#endif +# if SANITIZER_GLIBC +# define ASAN_INTERCEPT___LONGJMP_CHK 1 +# else +# define ASAN_INTERCEPT___LONGJMP_CHK 0 +# endif + +# if ASAN_HAS_EXCEPTIONS && !SANITIZER_SOLARIS && !SANITIZER_NETBSD && \ + (!SANITIZER_WINDOWS || (defined(__MINGW32__) && defined(__i386__))) +# define ASAN_INTERCEPT___CXA_THROW 1 +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 +# if defined(_GLIBCXX_SJLJ_EXCEPTIONS) || (SANITIZER_IOS && defined(__arm__)) +# define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 1 +# else +# define ASAN_INTERCEPT__UNWIND_RAISEEXCEPTION 1 +# endif +# else +# define ASAN_INTERCEPT___CXA_THROW 0 +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 0 +# define ASAN_INTERCEPT__UNWIND_RAISEEXCEPTION 0 +# define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 0 +# endif + +# if !SANITIZER_WINDOWS && !SANITIZER_AIX +# define ASAN_INTERCEPT___CXA_ATEXIT 1 +# else +# define ASAN_INTERCEPT___CXA_ATEXIT 0 +# endif -#if SANITIZER_GLIBC -# define ASAN_INTERCEPT___STRDUP 1 -#else -# define ASAN_INTERCEPT___STRDUP 0 -#endif +# if SANITIZER_AIX +# define ASAN_INTERCEPT_EXIT 1 +# else +# define ASAN_INTERCEPT_EXIT 0 +# endif -#if SANITIZER_GLIBC && ASAN_INTERCEPT_PTHREAD_CREATE -# define ASAN_INTERCEPT_TIMEDJOIN 1 -# define ASAN_INTERCEPT_TRYJOIN 1 -#else -# define ASAN_INTERCEPT_TIMEDJOIN 0 -# define ASAN_INTERCEPT_TRYJOIN 0 -#endif +# if SANITIZER_NETBSD +# define ASAN_INTERCEPT_ATEXIT 1 +# else +# define ASAN_INTERCEPT_ATEXIT 0 +# endif -#if SANITIZER_AIX -#define SANITIZER_INTERCEPT_STRCAT 0 -#define SANITIZER_INTERCEPT_STRCPY 0 -#else -#define SANITIZER_INTERCEPT_STRCAT 1 -#define SANITIZER_INTERCEPT_STRCPY 1 -#endif +# if SANITIZER_GLIBC +# define ASAN_INTERCEPT___STRDUP 1 +# else +# define ASAN_INTERCEPT___STRDUP 0 +# endif +# if SANITIZER_GLIBC && ASAN_INTERCEPT_PTHREAD_CREATE +# define ASAN_INTERCEPT_TIMEDJOIN 1 +# define ASAN_INTERCEPT_TRYJOIN 1 +# else +# define ASAN_INTERCEPT_TIMEDJOIN 0 +# define ASAN_INTERCEPT_TRYJOIN 0 +# endif -#if SANITIZER_LINUX && \ - (defined(__arm__) || defined(__aarch64__) || defined(__i386__) || \ - defined(__x86_64__) || SANITIZER_RISCV64 || SANITIZER_LOONGARCH64) -# define ASAN_INTERCEPT_VFORK 1 -#else -# define ASAN_INTERCEPT_VFORK 0 -#endif +# if SANITIZER_AIX +# define SANITIZER_INTERCEPT_STRCAT 0 +# define SANITIZER_INTERCEPT_STRCPY 0 +# else +# define SANITIZER_INTERCEPT_STRCAT 1 +# define SANITIZER_INTERCEPT_STRCPY 1 +# endif + +# if SANITIZER_LINUX && \ + (defined(__arm__) || defined(__aarch64__) || defined(__i386__) || \ + defined(__x86_64__) || SANITIZER_RISCV64 || SANITIZER_LOONGARCH64) +# define ASAN_INTERCEPT_VFORK 1 +# else +# define ASAN_INTERCEPT_VFORK 0 +# endif -#if SANITIZER_NETBSD -# define ASAN_INTERCEPT_PTHREAD_ATFORK 1 -#else -# define ASAN_INTERCEPT_PTHREAD_ATFORK 0 -#endif +# if SANITIZER_NETBSD +# define ASAN_INTERCEPT_PTHREAD_ATFORK 1 +# else +# define ASAN_INTERCEPT_PTHREAD_ATFORK 0 +# endif DECLARE_REAL(int, memcmp, const void *a1, const void *a2, SIZE_T size) DECLARE_REAL(char*, strchr, const char *str, int c) diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 4ac4768852caf..008622c415fa6 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -24,10 +24,9 @@ using namespace __asan; // AIX does not intercept memcpy, so we have to use internal_memcpy. #if !SANITIZER_AIX - #define ASAN_MEMCPY_RETURN(to, from, size) \ - return REAL(memcpy)(to, from, size) +# define ASAN_MEMCPY_RETURN(to, from, size) return REAL(memcpy)(to, from, size) #else - #define ASAN_MEMCPY_RETURN(to, from, size) \ +# define ASAN_MEMCPY_RETURN(to, from, size) \ return internal_memcpy(to, from, size) #endif diff --git a/compiler-rt/lib/asan/asan_malloc_linux.cpp b/compiler-rt/lib/asan/asan_malloc_linux.cpp index eaf37718a185d..e2014fe53cac7 100644 --- a/compiler-rt/lib/asan/asan_malloc_linux.cpp +++ b/compiler-rt/lib/asan/asan_malloc_linux.cpp @@ -16,8 +16,7 @@ #include "sanitizer_common/sanitizer_platform.h" // FIXME: rename this file, this is not just for Linux now, see FUCHSIA and AIX. #if SANITIZER_FREEBSD || SANITIZER_FUCHSIA || SANITIZER_LINUX || \ - SANITIZER_NETBSD || SANITIZER_SOLARIS || SANITIZER_HAIKU || \ - SANITIZER_AIX + SANITIZER_NETBSD || SANITIZER_SOLARIS || SANITIZER_HAIKU || SANITIZER_AIX # include "asan_allocator.h" # include "asan_interceptors.h" @@ -63,8 +62,8 @@ INTERCEPTOR(void, cfree, void *ptr) { } #endif // SANITIZER_INTERCEPT_CFREE -#if SANITIZER_AIX -INTERCEPTOR(void*, vec_malloc, uptr size) { +# if SANITIZER_AIX +INTERCEPTOR(void *, vec_malloc, uptr size) { if (DlsymAlloc::Use()) return DlsymAlloc::Allocate(size); AsanInitFromRtl(); @@ -72,14 +71,14 @@ INTERCEPTOR(void*, vec_malloc, uptr size) { return asan_malloc(size, &stack); } -INTERCEPTOR(void*, vec_calloc, uptr nmemb, uptr size) { +INTERCEPTOR(void *, vec_calloc, uptr nmemb, uptr size) { if (DlsymAlloc::Use()) return DlsymAlloc::Callocate(nmemb, size); AsanInitFromRtl(); GET_STACK_TRACE_MALLOC; return asan_calloc(nmemb, size, &stack); } -#endif +# endif INTERCEPTOR(void*, malloc, uptr size) { if (DlsymAlloc::Use()) From 67317ad15d9c2e78cbba5d5d339c9c05d9d0f023 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 28 Apr 2025 00:36:29 -0400 Subject: [PATCH 12/27] Move misplaced endif --- compiler-rt/lib/asan/asan_interceptors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 57b866b29bd00..7e43cc0baff47 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -538,7 +538,6 @@ DEFINE_REAL(char*, index, const char *string, int c) } return REAL(strcat)(to, from); } -# endif INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { void *ctx; @@ -558,6 +557,7 @@ INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { } return REAL(strncat)(to, from, size); } +# endif # if SANITIZER_INTERCEPT_STRCPY INTERCEPTOR(char *, strcpy, char *to, const char *from) { From 16a2d818182e904061d6b232d8bc7f238cc64b43 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 5 May 2025 19:24:12 -0400 Subject: [PATCH 13/27] Split code to different PRs --- compiler-rt/lib/interception/CMakeLists.txt | 2 - compiler-rt/lib/interception/interception.h | 25 ++----- .../lib/interception/interception_aix.cpp | 45 ----------- .../lib/interception/interception_aix.h | 36 --------- .../sanitizer_common_interceptors.inc | 74 ++++++------------- .../sanitizer_common_interceptors_ioctl.inc | 10 --- ...izer_common_interceptors_memintrinsics.inc | 2 - .../sanitizer_platform_interceptors.h | 62 ++++++---------- .../sanitizer_redefine_builtins.h | 2 +- 9 files changed, 52 insertions(+), 206 deletions(-) delete mode 100644 compiler-rt/lib/interception/interception_aix.cpp delete mode 100644 compiler-rt/lib/interception/interception_aix.h diff --git a/compiler-rt/lib/interception/CMakeLists.txt b/compiler-rt/lib/interception/CMakeLists.txt index 57c8c8ba20141..fe7fa27fbc78b 100644 --- a/compiler-rt/lib/interception/CMakeLists.txt +++ b/compiler-rt/lib/interception/CMakeLists.txt @@ -1,7 +1,6 @@ # Build for the runtime interception helper library. set(INTERCEPTION_SOURCES - interception_aix.cpp interception_linux.cpp interception_mac.cpp interception_win.cpp @@ -10,7 +9,6 @@ set(INTERCEPTION_SOURCES set(INTERCEPTION_HEADERS interception.h - interception_aix.h interception_linux.h interception_mac.h interception_win.h diff --git a/compiler-rt/lib/interception/interception.h b/compiler-rt/lib/interception/interception.h index 9fe7d3db308bf..25480120e7ad6 100644 --- a/compiler-rt/lib/interception/interception.h +++ b/compiler-rt/lib/interception/interception.h @@ -19,7 +19,7 @@ #if !SANITIZER_LINUX && !SANITIZER_FREEBSD && !SANITIZER_APPLE && \ !SANITIZER_NETBSD && !SANITIZER_WINDOWS && !SANITIZER_FUCHSIA && \ - !SANITIZER_SOLARIS && !SANITIZER_HAIKU && !SANITIZER_AIX + !SANITIZER_SOLARIS && !SANITIZER_HAIKU # error "Interception doesn't work on this operating system." #endif @@ -168,16 +168,6 @@ const interpose_substitution substitution_##func_name[] \ extern "C" ret_type func(__VA_ARGS__); # define DECLARE_WRAPPER_WINAPI(ret_type, func, ...) \ extern "C" __declspec(dllimport) ret_type __stdcall func(__VA_ARGS__); -#elif SANITIZER_AIX -# define WRAP(x) __interceptor_##x -# define TRAMPOLINE(x) WRAP(x) -// # define WRAPPER_NAME(x) "__interceptor_" #x -# define INTERCEPTOR_ATTRIBUTE __attribute__((visibility("default"))) -// AIX's linker will not select the weak symbol, so don't use weak for the -// interceptors. -# define DECLARE_WRAPPER(ret_type, func, ...) \ - extern "C" ret_type func(__VA_ARGS__) \ - __attribute__((alias("__interceptor_" #func), visibility("default"))); #elif !SANITIZER_FUCHSIA // LINUX, FREEBSD, NETBSD, SOLARIS # define INTERCEPTOR_ATTRIBUTE __attribute__((visibility("default"))) # if ASM_INTERCEPTOR_TRAMPOLINE_SUPPORT @@ -377,17 +367,12 @@ inline void DoesNotSupportStaticLinking() {} #define INCLUDED_FROM_INTERCEPTION_LIB -#if SANITIZER_AIX -# include "interception_aix.h" -# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_AIX(func) -# define INTERCEPT_FUNCTION_VER(func, symver) INTERCEPT_FUNCTION_AIX(func) - -#elif SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ +#if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ SANITIZER_SOLARIS || SANITIZER_HAIKU -# include "interception_linux.h" -# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) -# define INTERCEPT_FUNCTION_VER(func, symver) \ +# include "interception_linux.h" +# define INTERCEPT_FUNCTION(func) INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) +# define INTERCEPT_FUNCTION_VER(func, symver) \ INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) #elif SANITIZER_APPLE # include "interception_mac.h" diff --git a/compiler-rt/lib/interception/interception_aix.cpp b/compiler-rt/lib/interception/interception_aix.cpp deleted file mode 100644 index 953bbad96eb47..0000000000000 --- a/compiler-rt/lib/interception/interception_aix.cpp +++ /dev/null @@ -1,45 +0,0 @@ -//===-- interception_aix.cpp ------------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file is a part of AddressSanitizer, an address sanity checker. -// -// AIX-specific interception methods. -//===----------------------------------------------------------------------===// - -#include "interception.h" -#include "sanitizer_common/sanitizer_common.h" - -#if SANITIZER_AIX - -# include // for dlsym() - -namespace __interception { - -static void *GetFuncAddr(const char *name, uptr wrapper_addr) { - // AIX dlsym can only defect the functions that are exported, so - // on AIX, we can not intercept some basic functions like memcpy. - // FIXME: if we are going to ship dynamic asan library, we may need to search - // all the loaded modules with RTLD_DEFAULT if RTLD_NEXT failed. - void *addr = dlsym(RTLD_NEXT, name); - - // In case `name' is not loaded, dlsym ends up finding the actual wrapper. - // We don't want to intercept the wrapper and have it point to itself. - if ((uptr)addr == wrapper_addr) - addr = nullptr; - return addr; -} - -bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, - uptr wrapper) { - void *addr = GetFuncAddr(name, wrapper); - *ptr_to_real = (uptr)addr; - return addr && (func == wrapper); -} - -} // namespace __interception -#endif // SANITIZER_AIX diff --git a/compiler-rt/lib/interception/interception_aix.h b/compiler-rt/lib/interception/interception_aix.h deleted file mode 100644 index b86ae89f50461..0000000000000 --- a/compiler-rt/lib/interception/interception_aix.h +++ /dev/null @@ -1,36 +0,0 @@ -//===-- interception_aix.h --------------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file is a part of AddressSanitizer, an address sanity checker. -// -// AIX-specific interception methods. -//===----------------------------------------------------------------------===// - -#if SANITIZER_AIX - -# if !defined(INCLUDED_FROM_INTERCEPTION_LIB) -# error \ - "interception_aix.h should be included from interception library only" -# endif - -# ifndef INTERCEPTION_AIX_H -# define INTERCEPTION_AIX_H - -namespace __interception { -bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, - uptr wrapper); -} // namespace __interception - -# define INTERCEPT_FUNCTION_AIX(func) \ - ::__interception::InterceptFunction( \ - #func, (::__interception::uptr *)&REAL(func), \ - (::__interception::uptr) & (func), \ - (::__interception::uptr) & WRAP(func)) - -# endif // INTERCEPTION_AIX_H -#endif // SANITIZER_AIX diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index bdbd9b7637f9f..5a15d75f0c86a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -480,7 +480,7 @@ INTERCEPTOR(char*, textdomain, const char *domainname) { #define INIT_TEXTDOMAIN #endif -#if SANITIZER_INTERCEPT_MEMCMP +#if SANITIZER_INTERCEPT_STRCMP || SANITIZER_INTERCEPT_MEMCMP static inline int CharCmpX(unsigned char c1, unsigned char c2) { return (c1 == c2) ? 0 : (c1 < c2) ? -1 : 1; } @@ -953,7 +953,7 @@ INTERCEPTOR(double, frexp, double x, int *exp) { #define INIT_FREXP #endif // SANITIZER_INTERCEPT_FREXP -#if SANITIZER_INTERCEPT_FREXPF +#if SANITIZER_INTERCEPT_FREXPF_FREXPL INTERCEPTOR(float, frexpf, float x, int *exp) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, frexpf, x, exp); @@ -963,12 +963,6 @@ INTERCEPTOR(float, frexpf, float x, int *exp) { return res; } -# define INIT_FREXPF COMMON_INTERCEPT_FUNCTION(frexpf); -#else -# define INIT_FREXPF -#endif - -#if SANITIZER_INTERCEPT_FREXPL INTERCEPTOR(long double, frexpl, long double x, int *exp) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, frexpl, x, exp); @@ -978,10 +972,12 @@ INTERCEPTOR(long double, frexpl, long double x, int *exp) { return res; } -# define INIT_FREXPL COMMON_INTERCEPT_FUNCTION_LDBL(frexpl) +#define INIT_FREXPF_FREXPL \ + COMMON_INTERCEPT_FUNCTION(frexpf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(frexpl) #else -# define INIT_FREXPL -#endif +#define INIT_FREXPF_FREXPL +#endif // SANITIZER_INTERCEPT_FREXPF_FREXPL #if SI_POSIX static void write_iovec(void *ctx, struct __sanitizer_iovec *iovec, @@ -1350,8 +1346,7 @@ INTERCEPTOR(unsigned long, time, unsigned long *t) { #if SANITIZER_INTERCEPT_LOCALTIME_AND_FRIENDS static void unpoison_tm(void *ctx, __sanitizer_tm *tm) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, tm, sizeof(*tm)); -// AIX tm struct does not have tm_zone field. -# if !SANITIZER_SOLARIS && !SANITIZER_AIX +#if !SANITIZER_SOLARIS if (tm->tm_zone) { // Can not use COMMON_INTERCEPTOR_WRITE_RANGE here, because tm->tm_zone // can point to shared memory and tsan would report a data race. @@ -1736,12 +1731,10 @@ INTERCEPTOR(int, __vsprintf_chk, char *str, int flag, SIZE_T size_to, VSPRINTF_INTERCEPTOR_IMPL(vsprintf, str, format, ap) #endif -# if SANITIZER_INTERCEPT_VASPRINTF INTERCEPTOR(int, vasprintf, char **strp, const char *format, va_list ap) VASPRINTF_INTERCEPTOR_IMPL(vasprintf, strp, format, ap) -# endif -# if SANITIZER_INTERCEPT_ISOC99_PRINTF +#if SANITIZER_INTERCEPT_ISOC99_PRINTF INTERCEPTOR(int, __isoc99_vprintf, const char *format, va_list ap) VPRINTF_INTERCEPTOR_IMPL(__isoc99_vprintf, format, ap) @@ -1790,12 +1783,10 @@ INTERCEPTOR(int, __snprintf_chk, char *str, SIZE_T size, int flag, FORMAT_INTERCEPTOR_IMPL(__snprintf_chk, vsnprintf, str, size, format) #endif -# if SANITIZER_INTERCEPT_ASPRINTF INTERCEPTOR(int, asprintf, char **strp, const char *format, ...) FORMAT_INTERCEPTOR_IMPL(asprintf, vasprintf, strp, format) -# endif -# if SANITIZER_INTERCEPT_ISOC99_PRINTF +#if SANITIZER_INTERCEPT_ISOC99_PRINTF INTERCEPTOR(int, __isoc99_printf, const char *format, ...) FORMAT_INTERCEPTOR_IMPL(__isoc99_printf, __isoc99_vprintf, format) @@ -1816,29 +1807,17 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_snprintf, __isoc99_vsnprintf, str, size, #endif // SANITIZER_INTERCEPT_PRINTF #if SANITIZER_INTERCEPT_PRINTF -# if SANITIZER_AIX -# define INIT_PRINTF \ - COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); -# else -# define INIT_PRINTF \ - COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \ - COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); -# endif +#define INIT_PRINTF \ + COMMON_INTERCEPT_FUNCTION_LDBL(printf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(sprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(snprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(asprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(fprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vsnprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vasprintf); \ + COMMON_INTERCEPT_FUNCTION_LDBL(vfprintf); #else #define INIT_PRINTF #endif @@ -3938,11 +3917,7 @@ INTERCEPTOR(SIZE_T, wcrtomb, char *dest, wchar_t src, void *ps) { if (res != ((SIZE_T)-1)) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); -# if !SANITIZER_AIX REAL(memcpy)(dest, local_dest, res); -# else - internal_memcpy(dest, local_dest, res); -# endif } return res; } @@ -3964,11 +3939,7 @@ INTERCEPTOR(int, wctomb, char *dest, wchar_t src) { if (res != -1) { CHECK_LE(res, sizeof(local_dest)); COMMON_INTERCEPTOR_WRITE_RANGE(ctx, dest, res); -# if !SANITIZER_AIX REAL(memcpy)(dest, local_dest, res); -# else - internal_memcpy(dest, local_dest, res); -# endif } return res; } @@ -10440,8 +10411,7 @@ static void InitializeCommonInterceptors() { INIT_ISOC99_PRINTF; INIT_SETPROCTITLE; INIT_FREXP; - INIT_FREXPF; - INIT_FREXPL; + INIT_FREXPF_FREXPL; INIT_GETPWNAM_AND_FRIENDS; INIT_GETPWNAM_R_AND_FRIENDS; INIT_GETPWENT; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index 8eb0d3492535b..bc8f02826c614 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -79,9 +79,7 @@ static void ioctl_table_fill() { _(TIOCMSET, READ, sizeof(int)); _(TIOCNXCL, NONE, 0); _(TIOCOUTQ, WRITE, sizeof(int)); -# if !SANITIZER_AIX _(TIOCSCTTY, NONE, 0); -# endif _(TIOCSPGRP, READ, pid_t_sz); _(TIOCSWINSZ, READ, struct_winsize_sz); @@ -344,17 +342,9 @@ static void ioctl_table_fill() { _(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int)); _(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int)); _(TCFLSH, NONE, 0); -#if SANITIZER_GLIBC - _(TCGETA, WRITE, struct_termio_sz); -#endif _(TCGETS, WRITE, struct_termios_sz); _(TCSBRK, NONE, 0); _(TCSBRKP, NONE, 0); -#if SANITIZER_GLIBC - _(TCSETA, READ, struct_termio_sz); - _(TCSETAF, READ, struct_termio_sz); - _(TCSETAW, READ, struct_termio_sz); -#endif _(TCSETS, READ, struct_termios_sz); _(TCSETSF, READ, struct_termios_sz); _(TCSETSW, READ, struct_termios_sz); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc index 42d387e37ec98..1565a494140f6 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc @@ -36,8 +36,6 @@ #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 #elif SANITIZER_WINDOWS64 #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 -#elif SANITIZER_AIX -# define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 0 #else #define PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE 1 #endif // SANITIZER_APPLE diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h index edd656c393f83..b8f2f738e7478 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -141,12 +141,6 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SI_SOLARIS 0 #endif -#if SANITIZER_AIX -# define SI_NOT_AIX 0 -#else -# define SI_NOT_AIX 1 -#endif - #if SANITIZER_SOLARIS32 #define SI_SOLARIS32 1 #else @@ -167,20 +161,20 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_STRLEN SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRNLEN (SI_NOT_MAC && SI_NOT_FUCHSIA) -#define SANITIZER_INTERCEPT_STRCMP (SI_NOT_FUCHSIA && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_STRCMP SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRSTR SI_NOT_FUCHSIA -#define SANITIZER_INTERCEPT_STRCASESTR (SI_POSIX && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_STRCASESTR SI_POSIX #define SANITIZER_INTERCEPT_STRTOK SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRCHR SI_NOT_FUCHSIA -#define SANITIZER_INTERCEPT_STRCHRNUL (SI_POSIX_NOT_MAC && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_STRCHRNUL SI_POSIX_NOT_MAC #define SANITIZER_INTERCEPT_STRRCHR SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRSPN SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_STRPBRK SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_TEXTDOMAIN SI_LINUX_NOT_ANDROID || SI_SOLARIS #define SANITIZER_INTERCEPT_STRCASECMP SI_POSIX #define SANITIZER_INTERCEPT_MEMSET 1 -#define SANITIZER_INTERCEPT_MEMMOVE SI_NOT_AIX -#define SANITIZER_INTERCEPT_MEMCPY SI_NOT_AIX +#define SANITIZER_INTERCEPT_MEMMOVE 1 +#define SANITIZER_INTERCEPT_MEMCPY 1 #define SANITIZER_INTERCEPT_MEMCMP SI_NOT_FUCHSIA #define SANITIZER_INTERCEPT_BCMP \ SANITIZER_INTERCEPT_MEMCMP && \ @@ -239,11 +233,9 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_ISOC99_SCANF SI_GLIBC #ifndef SANITIZER_INTERCEPT_PRINTF -# define SANITIZER_INTERCEPT_ASPRINTF SI_NOT_AIX -# define SANITIZER_INTERCEPT_VASPRINTF SI_NOT_AIX -# define SANITIZER_INTERCEPT_PRINTF SI_POSIX -# define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD) -# define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC +#define SANITIZER_INTERCEPT_PRINTF SI_POSIX +#define SANITIZER_INTERCEPT_PRINTF_L (SI_FREEBSD || SI_NETBSD) +#define SANITIZER_INTERCEPT_ISOC99_PRINTF SI_GLIBC #endif #define SANITIZER_INTERCEPT_SETPROCTITLE (SI_FREEBSD || SI_NETBSD) @@ -251,10 +243,8 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT___PRINTF_CHK \ (SANITIZER_INTERCEPT_PRINTF && SI_GLIBC) -// AIX libc does not export FREXP and FREXP. -#define SANITIZER_INTERCEPT_FREXP (SI_NOT_FUCHSIA && SI_NOT_AIX) -#define SANITIZER_INTERCEPT_FREXPF (SI_POSIX && SI_NOT_AIX) -#define SANITIZER_INTERCEPT_FREXPL SI_POSIX +#define SANITIZER_INTERCEPT_FREXP SI_NOT_FUCHSIA +#define SANITIZER_INTERCEPT_FREXPF_FREXPL SI_POSIX #define SANITIZER_INTERCEPT_GETPWNAM_AND_FRIENDS SI_POSIX #define SANITIZER_INTERCEPT_GETPWNAM_R_AND_FRIENDS \ @@ -303,7 +293,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_ACCEPT4 \ (SI_LINUX_NOT_ANDROID || SI_NETBSD || SI_FREEBSD) #define SANITIZER_INTERCEPT_PACCEPT SI_NETBSD -#define SANITIZER_INTERCEPT_MODF (SI_POSIX && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_MODF SI_POSIX #define SANITIZER_INTERCEPT_RECVMSG SI_POSIX #define SANITIZER_INTERCEPT_SENDMSG SI_POSIX #define SANITIZER_INTERCEPT_RECVMMSG SI_LINUX @@ -338,9 +328,8 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT___WCSXFRM_L SI_LINUX #define SANITIZER_INTERCEPT_WCSNRTOMBS \ (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) -#define SANITIZER_INTERCEPT_WCRTOMB \ - (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS || \ - !SI_NOT_AIX) +#define SANITIZER_INTERCEPT_WCRTOMB \ + (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) #define SANITIZER_INTERCEPT_WCTOMB \ (SI_FREEBSD || SI_NETBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) #define SANITIZER_INTERCEPT_TCGETATTR SI_LINUX_NOT_ANDROID || SI_SOLARIS @@ -380,8 +369,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_GETMNTENT_R SI_LINUX_NOT_ANDROID #define SANITIZER_INTERCEPT_STATFS \ (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID || SI_SOLARIS) -#define SANITIZER_INTERCEPT_STATFS64 \ - ((SI_GLIBC || !SI_NOT_AIX) && SANITIZER_HAS_STATFS64) +#define SANITIZER_INTERCEPT_STATFS64 SI_GLIBC && SANITIZER_HAS_STATFS64 #define SANITIZER_INTERCEPT_STATVFS \ (SI_FREEBSD || SI_NETBSD || SI_LINUX_NOT_ANDROID) #define SANITIZER_INTERCEPT_STATVFS64 SI_GLIBC @@ -430,10 +418,10 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_TTYNAME_R SI_POSIX #define SANITIZER_INTERCEPT_TEMPNAM SI_POSIX #define SANITIZER_INTERCEPT_SINCOS SI_LINUX || SI_SOLARIS -#define SANITIZER_INTERCEPT_REMQUO (SI_POSIX && SI_NOT_AIX) -#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD && SI_NOT_AIX) -#define SANITIZER_INTERCEPT_LGAMMA (SI_POSIX && SI_NOT_AIX) -#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD && SI_NOT_AIX) +#define SANITIZER_INTERCEPT_REMQUO SI_POSIX +#define SANITIZER_INTERCEPT_REMQUOL (SI_POSIX && !SI_NETBSD) +#define SANITIZER_INTERCEPT_LGAMMA SI_POSIX +#define SANITIZER_INTERCEPT_LGAMMAL (SI_POSIX && !SI_NETBSD) #define SANITIZER_INTERCEPT_LGAMMA_R (SI_FREEBSD || SI_LINUX || SI_SOLARIS) #define SANITIZER_INTERCEPT_LGAMMAL_R SI_LINUX_NOT_ANDROID || SI_SOLARIS #define SANITIZER_INTERCEPT_DRAND48_R SI_GLIBC @@ -516,13 +504,11 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE (SI_LINUX || SI_FREEBSD) #define SI_STAT_LINUX (SI_LINUX && __GLIBC_PREREQ(2, 33)) -#define SANITIZER_INTERCEPT_STAT \ - (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \ - SI_STAT_LINUX || !SI_NOT_AIX) -#define SANITIZER_INTERCEPT_STAT64 \ - ((SI_STAT_LINUX || !SI_NOT_AIX) && SANITIZER_HAS_STAT64) -#define SANITIZER_INTERCEPT_LSTAT \ - (SI_NETBSD || SI_FREEBSD || SI_STAT_LINUX || !SI_NOT_AIX) +#define SANITIZER_INTERCEPT_STAT \ + (SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS || \ + SI_STAT_LINUX) +#define SANITIZER_INTERCEPT_STAT64 SI_STAT_LINUX && SANITIZER_HAS_STAT64 +#define SANITIZER_INTERCEPT_LSTAT (SI_NETBSD || SI_FREEBSD || SI_STAT_LINUX) #define SANITIZER_INTERCEPT___XSTAT \ ((!SANITIZER_INTERCEPT_STAT && SI_POSIX) || SI_STAT_LINUX) #define SANITIZER_INTERCEPT___XSTAT64 SI_GLIBC @@ -591,7 +577,7 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, #define SANITIZER_INTERCEPT_PROTOENT_R SI_GLIBC #define SANITIZER_INTERCEPT_NETENT (SI_LINUX || SI_NETBSD || SI_FREEBSD) #define SANITIZER_INTERCEPT_SETVBUF \ - (SI_NETBSD || SI_FREEBSD || SI_LINUX || SI_MAC || !SI_NOT_AIX) + (SI_NETBSD || SI_FREEBSD || SI_LINUX || SI_MAC) #define SANITIZER_INTERCEPT_GETMNTINFO (SI_NETBSD || SI_FREEBSD || SI_MAC) #define SANITIZER_INTERCEPT_MI_VECTOR_HASH SI_NETBSD #define SANITIZER_INTERCEPT_GETVFSSTAT SI_NETBSD diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h b/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h index bda0f04687693..41e0613d6fc13 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h @@ -15,7 +15,7 @@ # define SANITIZER_REDEFINE_BUILTINS_H // The asm hack only works with GCC and Clang. -# if !defined(_WIN32) && !defined(_AIX) +# if !defined(_WIN32) asm(R"( .set memcpy, __sanitizer_internal_memcpy From 0935ed2cdda2ec08bbf53d65e9819110d954241c Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 5 May 2025 19:46:09 -0400 Subject: [PATCH 14/27] Use proper naming convention --- compiler-rt/lib/asan/asan_interceptors.cpp | 10 +++++----- compiler-rt/lib/asan/asan_interceptors.h | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 7e43cc0baff47..b6510e76766d4 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -56,7 +56,7 @@ namespace __asan { # define ASAN_READ_STRING(ctx, s, n) \ ASAN_READ_STRING_OF_LEN((ctx), (s), internal_strlen(s), (n)) -# if SANITIZER_INTERCEPT_STRCAT || SANITIZER_INTERCEPT_STRCPY +# if ASAN_INTERCEPT_STRCAT || ASAN_INTERCEPT_STRCPY static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #if SANITIZER_INTERCEPT_STRNLEN if (REAL(strnlen)) { @@ -517,7 +517,7 @@ DEFINE_REAL(char*, index, const char *string, int c) // For both strcat() and strncat() we need to check the validity of |to| // argument irrespective of the |from| length. -# if SANITIZER_INTERCEPT_STRCAT +# if ASAN_INTERCEPT_STRCAT INTERCEPTOR(char *, strcat, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcat); @@ -559,7 +559,7 @@ INTERCEPTOR(char*, strncat, char *to, const char *from, usize size) { } # endif -# if SANITIZER_INTERCEPT_STRCPY +# if ASAN_INTERCEPT_STRCPY INTERCEPTOR(char *, strcpy, char *to, const char *from) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strcpy); @@ -837,11 +837,11 @@ void InitializeAsanInterceptors() { InitializeSignalInterceptors(); // Intercept str* functions. -# if SANITIZER_INTERCEPT_STRCAT +# if ASAN_INTERCEPT_STRCAT ASAN_INTERCEPT_FUNC(strcat); ASAN_INTERCEPT_FUNC(strncat); # endif -# if SANITIZER_INTERCEPT_STRCPY +# if ASAN_INTERCEPT_STRCPY ASAN_INTERCEPT_FUNC(strcpy); ASAN_INTERCEPT_FUNC(strncpy); # endif diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index bc647419e0050..5c4854008a04e 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -127,11 +127,11 @@ void InitializePlatformInterceptors(); # endif # if SANITIZER_AIX -# define SANITIZER_INTERCEPT_STRCAT 0 -# define SANITIZER_INTERCEPT_STRCPY 0 +# define ASAN_INTERCEPT_STRCAT 0 +# define ASAN_INTERCEPT_STRCPY 0 # else -# define SANITIZER_INTERCEPT_STRCAT 1 -# define SANITIZER_INTERCEPT_STRCPY 1 +# define ASAN_INTERCEPT_STRCAT 1 +# define ASAN_INTERCEPT_STRCPY 1 # endif # if SANITIZER_LINUX && \ From 30d1f126c169e8e7a7a098d723377563d9324bb2 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 5 May 2025 19:47:23 -0400 Subject: [PATCH 15/27] Move return --- compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 008622c415fa6..5bf676e9bab00 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -24,10 +24,9 @@ using namespace __asan; // AIX does not intercept memcpy, so we have to use internal_memcpy. #if !SANITIZER_AIX -# define ASAN_MEMCPY_RETURN(to, from, size) return REAL(memcpy)(to, from, size) +# define ASAN_MEMCPY_RETURN(to, from, size) REAL(memcpy)(to, from, size) #else -# define ASAN_MEMCPY_RETURN(to, from, size) \ - return internal_memcpy(to, from, size) +# define ASAN_MEMCPY_RETURN(to, from, size) internal_memcpy(to, from, size) #endif // memcpy is called during __asan_init() from the internals of printf(...). @@ -44,7 +43,7 @@ using namespace __asan; } else if (UNLIKELY(!AsanInited())) { \ return internal_memcpy(to, from, size); \ } \ - ASAN_MEMCPY_RETURN(to, from, size); \ + return ASAN_MEMCPY_RETURN(to, from, size); \ } while (0) // memset is called inside Printf. From 38a520d9ae60bd13a78c3a35318a8dc8dde6f519 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 6 May 2025 09:57:12 -0400 Subject: [PATCH 16/27] Remove accidental change --- .../sanitizer_common_interceptors_ioctl.inc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index bc8f02826c614..ed1eb8b09b76e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -342,9 +342,17 @@ static void ioctl_table_fill() { _(SOUND_PCM_WRITE_CHANNELS, WRITE, sizeof(int)); _(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int)); _(TCFLSH, NONE, 0); +#if SANITIZER_GLIBC + _(TCGETA, WRITE, struct_termio_sz); +#endif _(TCGETS, WRITE, struct_termios_sz); _(TCSBRK, NONE, 0); _(TCSBRKP, NONE, 0); +#if SANITIZER_GLIBC + _(TCSETA, READ, struct_termio_sz); + _(TCSETAF, READ, struct_termio_sz); + _(TCSETAW, READ, struct_termio_sz); + #endif _(TCSETS, READ, struct_termios_sz); _(TCSETSF, READ, struct_termios_sz); _(TCSETSW, READ, struct_termios_sz); From 4c8cd3885fa94e8d5e05efda5eb9e343ec55af46 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 6 May 2025 09:58:17 -0400 Subject: [PATCH 17/27] Remove accidental change --- .../sanitizer_common_interceptors_ioctl.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index ed1eb8b09b76e..f88f914b1d149 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -343,16 +343,16 @@ static void ioctl_table_fill() { _(SOUND_PCM_WRITE_FILTER, WRITE, sizeof(int)); _(TCFLSH, NONE, 0); #if SANITIZER_GLIBC - _(TCGETA, WRITE, struct_termio_sz); + _(TCGETA, WRITE, struct_termio_sz); #endif _(TCGETS, WRITE, struct_termios_sz); _(TCSBRK, NONE, 0); _(TCSBRKP, NONE, 0); #if SANITIZER_GLIBC - _(TCSETA, READ, struct_termio_sz); - _(TCSETAF, READ, struct_termio_sz); - _(TCSETAW, READ, struct_termio_sz); - #endif + _(TCSETA, READ, struct_termio_sz); + _(TCSETAF, READ, struct_termio_sz); + _(TCSETAW, READ, struct_termio_sz); +#endif _(TCSETS, READ, struct_termios_sz); _(TCSETSF, READ, struct_termios_sz); _(TCSETSW, READ, struct_termios_sz); From 8ce7b549cc39206c460ac43de82d5deb25fea38d Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 6 May 2025 13:34:29 -0400 Subject: [PATCH 18/27] Fix build fail --- compiler-rt/lib/asan/asan_interceptors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index b6510e76766d4..47d3f0ddde36c 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -643,7 +643,7 @@ INTERCEPTOR(char*, __strdup, const char *s) { } #endif // ASAN_INTERCEPT___STRDUP -# if SANITIZER_INTERCEPT_STRCPY +# if ASAN_INTERCEPT_STRCPY INTERCEPTOR(char*, strncpy, char *to, const char *from, usize size) { void *ctx; ASAN_INTERCEPTOR_ENTER(ctx, strncpy); From fb70384eab1f249b2c102ce2ece89840af30c4c2 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 26 May 2025 23:41:58 -0400 Subject: [PATCH 19/27] Address comments --- compiler-rt/lib/asan/asan_interceptors.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 47d3f0ddde36c..9c8872e4f57f9 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -56,8 +56,15 @@ namespace __asan { # define ASAN_READ_STRING(ctx, s, n) \ ASAN_READ_STRING_OF_LEN((ctx), (s), internal_strlen(s), (n)) -# if ASAN_INTERCEPT_STRCAT || ASAN_INTERCEPT_STRCPY -static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { +static inline uptr internal_or_real_memcpy(void *new_mem, const char *s, uptr length) { +#if SANITIZER_INTERCEPT_MEMCPY + return REAL(memcpy)(new_mem, s, length + 1); +#else + return internal_memcpy(new_mem, s, length + 1); +#endif +} + +[[maybe_unused]] static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #if SANITIZER_INTERCEPT_STRNLEN if (REAL(strnlen)) { return REAL(strnlen)(s, maxlen); @@ -65,7 +72,6 @@ static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { #endif return internal_strnlen(s, maxlen); } -# endif void SetThreadName(const char *name) { AsanThread *t = GetCurrentThread(); @@ -609,13 +615,7 @@ INTERCEPTOR(char*, strdup, const char *s) { GET_STACK_TRACE_MALLOC; void *new_mem = asan_malloc(length + 1, &stack); if (new_mem) { -# if SANITIZER_AIX - // memcpy is a static function defined in libc.a on AIX. It can not be - // intercepted, so REAL(memcpy) is null on AIX. Use internal_memcpy instead. - internal_memcpy(new_mem, s, length + 1); -# else - REAL(memcpy)(new_mem, s, length + 1); -# endif + internal_or_real_memcpy(new_mem, s, length + 1); } return reinterpret_cast(new_mem); } From b024cac4255c01726f394757287db2d4ba147023 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 27 May 2025 01:29:53 -0400 Subject: [PATCH 20/27] Address comments --- compiler-rt/lib/asan/asan_interceptors.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 9c8872e4f57f9..da8d4d065f3cf 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -56,11 +56,11 @@ namespace __asan { # define ASAN_READ_STRING(ctx, s, n) \ ASAN_READ_STRING_OF_LEN((ctx), (s), internal_strlen(s), (n)) -static inline uptr internal_or_real_memcpy(void *new_mem, const char *s, uptr length) { +static inline void internal_or_real_memcpy(void *new_mem, const char *s, uptr length) { #if SANITIZER_INTERCEPT_MEMCPY - return REAL(memcpy)(new_mem, s, length + 1); + REAL(memcpy)(new_mem, s, length + 1); #else - return internal_memcpy(new_mem, s, length + 1); + internal_memcpy(new_mem, s, length + 1); #endif } From b57eee8616eaa5b3ee1e1b4eae4a112c7f2edce6 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 27 May 2025 01:33:00 -0400 Subject: [PATCH 21/27] Forgot __strdup --- compiler-rt/lib/asan/asan_interceptors.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index da8d4d065f3cf..5c090bbcc8dde 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -633,11 +633,7 @@ INTERCEPTOR(char*, __strdup, const char *s) { GET_STACK_TRACE_MALLOC; void *new_mem = asan_malloc(length + 1, &stack); if (new_mem) { -# if SANITIZER_AIX - internal_memcpy(new_mem, s, length + 1); -# else - REAL(memcpy)(new_mem, s, length + 1); -# endif + internal_or_real_memcpy(new_mem, s, length + 1); } return reinterpret_cast(new_mem); } From c3ff763bfb716845b769cea36488236678cebfd1 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 27 May 2025 01:38:44 -0400 Subject: [PATCH 22/27] Fix formatting --- compiler-rt/lib/asan/asan_interceptors.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 5c090bbcc8dde..437f1b6e6cd00 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -56,16 +56,18 @@ namespace __asan { # define ASAN_READ_STRING(ctx, s, n) \ ASAN_READ_STRING_OF_LEN((ctx), (s), internal_strlen(s), (n)) -static inline void internal_or_real_memcpy(void *new_mem, const char *s, uptr length) { -#if SANITIZER_INTERCEPT_MEMCPY +static inline void internal_or_real_memcpy(void *new_mem, const char *s, + uptr length) { +# if SANITIZER_INTERCEPT_MEMCPY REAL(memcpy)(new_mem, s, length + 1); -#else +# else internal_memcpy(new_mem, s, length + 1); -#endif +# endif } -[[maybe_unused]] static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { -#if SANITIZER_INTERCEPT_STRNLEN +[[maybe_unused]] static inline uptr MaybeRealStrnlen(const char *s, + uptr maxlen) { +# if SANITIZER_INTERCEPT_STRNLEN if (REAL(strnlen)) { return REAL(strnlen)(s, maxlen); } From ab72dfa14d42a6ae308e8152c80341a724c57f35 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Tue, 24 Jun 2025 12:56:45 -0400 Subject: [PATCH 23/27] Swap to unsigned --- compiler-rt/lib/asan/asan_interceptors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.cpp b/compiler-rt/lib/asan/asan_interceptors.cpp index 437f1b6e6cd00..9c95df2798a60 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cpp +++ b/compiler-rt/lib/asan/asan_interceptors.cpp @@ -287,7 +287,7 @@ INTERCEPTOR(int, pthread_create, void *thread, void *attr, result = REAL(pthread_create)(thread, attr, asan_thread_start, t); // AIX pthread_t is unsigned int. # if SANITIZER_AIX - return result ? 0 : *(unsigned int *)(thread); + return result ? 0 : *(unsigned *)(thread); # else return result ? 0 : *(uptr *)(thread); # endif From 72b85c9a72a7fac74c9958fec10454d74a292df2 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 7 Jul 2025 16:20:37 -0400 Subject: [PATCH 24/27] Update comments --- compiler-rt/lib/asan/asan_allocator.cpp | 2 +- compiler-rt/lib/asan/asan_interceptors.h | 4 ++++ compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp | 2 +- compiler-rt/lib/asan/asan_malloc_linux.cpp | 1 - 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/compiler-rt/lib/asan/asan_allocator.cpp b/compiler-rt/lib/asan/asan_allocator.cpp index c09d0fea34572..3d3bdf78031b4 100644 --- a/compiler-rt/lib/asan/asan_allocator.cpp +++ b/compiler-rt/lib/asan/asan_allocator.cpp @@ -777,7 +777,7 @@ struct Allocator { CHECK_NE(REAL(memcpy), nullptr); REAL(memcpy)(new_ptr, old_ptr, memcpy_size); #else - // AIX does not intercept memcpy, we have to use internal_memcpy here. + // AIX currently can't retrieve memcpy's address, we have to use internal_memcpy here. internal_memcpy(new_ptr, old_ptr, memcpy_size); #endif Deallocate(old_ptr, 0, 0, stack, FROM_MALLOC); diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 5c4854008a04e..ec78f69cbc4ad 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -31,6 +31,7 @@ void InitializePlatformInterceptors(); // really defined to replace libc functions. #if !SANITIZER_FUCHSIA +// AIX currently can't retrieve the address of longjmp # if !SANITIZER_AIX # define ASAN_INTERCEPT_LONGJMP 1 # else @@ -40,6 +41,7 @@ void InitializePlatformInterceptors(); // Use macro to describe if specific function should be // intercepted on a given platform. #if !SANITIZER_WINDOWS + // AIX currently can't retrieve the address of _longjmp # if !SANITIZER_AIX # define ASAN_INTERCEPT__LONGJMP 1 # else @@ -94,6 +96,7 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 0 # endif +// AIX currently can't retrieve the address of __cxa_atexit # if !SANITIZER_WINDOWS && !SANITIZER_AIX # define ASAN_INTERCEPT___CXA_ATEXIT 1 # else @@ -126,6 +129,7 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT_TRYJOIN 0 # endif +// AIX currently can't retrieve the address of strcat or strcpy # if SANITIZER_AIX # define ASAN_INTERCEPT_STRCAT 0 # define ASAN_INTERCEPT_STRCPY 0 diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 5bf676e9bab00..60b3ad56aa1ae 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -22,7 +22,7 @@ using namespace __asan; -// AIX does not intercept memcpy, so we have to use internal_memcpy. +// AIX currently can't retrieve memcpy's address, we have to use internal_memcpy here. #if !SANITIZER_AIX # define ASAN_MEMCPY_RETURN(to, from, size) REAL(memcpy)(to, from, size) #else diff --git a/compiler-rt/lib/asan/asan_malloc_linux.cpp b/compiler-rt/lib/asan/asan_malloc_linux.cpp index e2014fe53cac7..ca4885fd95d82 100644 --- a/compiler-rt/lib/asan/asan_malloc_linux.cpp +++ b/compiler-rt/lib/asan/asan_malloc_linux.cpp @@ -14,7 +14,6 @@ //===----------------------------------------------------------------------===// #include "sanitizer_common/sanitizer_platform.h" -// FIXME: rename this file, this is not just for Linux now, see FUCHSIA and AIX. #if SANITIZER_FREEBSD || SANITIZER_FUCHSIA || SANITIZER_LINUX || \ SANITIZER_NETBSD || SANITIZER_SOLARIS || SANITIZER_HAIKU || SANITIZER_AIX From 93a50933e18c6caad2ac506e632ff201c8404224 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 7 Jul 2025 16:24:52 -0400 Subject: [PATCH 25/27] Forgot siglongjmp --- compiler-rt/lib/asan/asan_interceptors.h | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index ec78f69cbc4ad..272dde1e7c7d6 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -68,6 +68,7 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT_SWAPCONTEXT 0 #endif +// // AIX currently can't retrieve the address of siglongjmp # if !SANITIZER_WINDOWS && !SANITIZER_AIX # define ASAN_INTERCEPT_SIGLONGJMP 1 # else From ad0b183cb746e254afde9995191ee6d397a108f3 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 7 Jul 2025 16:27:14 -0400 Subject: [PATCH 26/27] Fix siglongjmp comment --- compiler-rt/lib/asan/asan_interceptors.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 272dde1e7c7d6..c69f24723ed9d 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -68,7 +68,7 @@ void InitializePlatformInterceptors(); # define ASAN_INTERCEPT_SWAPCONTEXT 0 #endif -// // AIX currently can't retrieve the address of siglongjmp +// AIX currently can't retrieve the address of siglongjmp # if !SANITIZER_WINDOWS && !SANITIZER_AIX # define ASAN_INTERCEPT_SIGLONGJMP 1 # else From 1b40995e1a0c6d9608a259db404dc33981045fe8 Mon Sep 17 00:00:00 2001 From: Jake Egan Date: Mon, 7 Jul 2025 16:32:29 -0400 Subject: [PATCH 27/27] Fix formatting --- compiler-rt/lib/asan/asan_allocator.cpp | 3 ++- compiler-rt/lib/asan/asan_interceptors.h | 2 +- compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/compiler-rt/lib/asan/asan_allocator.cpp b/compiler-rt/lib/asan/asan_allocator.cpp index 3d3bdf78031b4..eecf3788c0a6f 100644 --- a/compiler-rt/lib/asan/asan_allocator.cpp +++ b/compiler-rt/lib/asan/asan_allocator.cpp @@ -777,7 +777,8 @@ struct Allocator { CHECK_NE(REAL(memcpy), nullptr); REAL(memcpy)(new_ptr, old_ptr, memcpy_size); #else - // AIX currently can't retrieve memcpy's address, we have to use internal_memcpy here. + // AIX currently can't retrieve memcpy's address, we have to use + // internal_memcpy here. internal_memcpy(new_ptr, old_ptr, memcpy_size); #endif Deallocate(old_ptr, 0, 0, stack, FROM_MALLOC); diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index c69f24723ed9d..013e5af6180ff 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -41,7 +41,7 @@ void InitializePlatformInterceptors(); // Use macro to describe if specific function should be // intercepted on a given platform. #if !SANITIZER_WINDOWS - // AIX currently can't retrieve the address of _longjmp + // AIX currently can't retrieve the address of _longjmp # if !SANITIZER_AIX # define ASAN_INTERCEPT__LONGJMP 1 # else diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 60b3ad56aa1ae..540141e882edf 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -22,7 +22,8 @@ using namespace __asan; -// AIX currently can't retrieve memcpy's address, we have to use internal_memcpy here. +// AIX currently can't retrieve memcpy's address, we have to use internal_memcpy +// here. #if !SANITIZER_AIX # define ASAN_MEMCPY_RETURN(to, from, size) REAL(memcpy)(to, from, size) #else