diff options
Diffstat (limited to 'Objects/obmalloc.c')
-rw-r--r-- | Objects/obmalloc.c | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index 6a65a15..2cf024c 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -30,19 +30,36 @@ static void _PyMem_DebugCheckAddress(char api_id, const void *p); static void _PyMem_SetupDebugHooksDomain(PyMemAllocatorDomain domain); #if defined(__has_feature) /* Clang */ - #if __has_feature(address_sanitizer) /* is ASAN enabled? */ - #define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \ +# if __has_feature(address_sanitizer) /* is ASAN enabled? */ +# define _Py_NO_ADDRESS_SAFETY_ANALYSIS \ __attribute__((no_address_safety_analysis)) - #else - #define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS - #endif -#else - #if defined(__SANITIZE_ADDRESS__) /* GCC 4.8.x, is ASAN enabled? */ - #define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \ +# endif +# if __has_feature(thread_sanitizer) /* is TSAN enabled? */ +# define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) +# endif +# if __has_feature(memory_sanitizer) /* is MSAN enabled? */ +# define _Py_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) +# endif +#elif defined(__GNUC__) +# if defined(__SANITIZE_ADDRESS__) /* GCC 4.8+, is ASAN enabled? */ +# define _Py_NO_ADDRESS_SAFETY_ANALYSIS \ __attribute__((no_address_safety_analysis)) - #else - #define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS - #endif +# endif + // TSAN is supported since GCC 4.8, but __SANITIZE_THREAD__ macro + // is provided only since GCC 7. +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) +# define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) +# endif +#endif + +#ifndef _Py_NO_ADDRESS_SAFETY_ANALYSIS +# define _Py_NO_ADDRESS_SAFETY_ANALYSIS +#endif +#ifndef _Py_NO_SANITIZE_THREAD +# define _Py_NO_SANITIZE_THREAD +#endif +#ifndef _Py_NO_SANITIZE_MEMORY +# define _Py_NO_SANITIZE_MEMORY #endif #ifdef WITH_PYMALLOC @@ -1301,7 +1318,9 @@ obmalloc controls. Since this test is needed at every entry point, it's extremely desirable that it be this fast. */ -static bool ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS +static bool _Py_NO_ADDRESS_SAFETY_ANALYSIS + _Py_NO_SANITIZE_THREAD + _Py_NO_SANITIZE_MEMORY address_in_range(void *p, poolp pool) { // Since address_in_range may be reading from memory which was not allocated |