Close #18596: Support address sanity checking in clang/GCC

This patch appropriately marks known false alarms in the
small object allocator when address sanity checking is
enabled (patch contributed by Dhiru Kholia).
This commit is contained in:
Nick Coghlan 2013-09-29 00:28:55 +10:00
parent 4cc2afa0ec
commit 6ba64f454d
3 changed files with 28 additions and 0 deletions

View File

@ -650,6 +650,7 @@ Jim Kerr
Magnus Kessler
Lawrence Kesteloot
Vivek Khera
Dhiru Kholia
Mads Kiilerich
Jason Killen
Jan Kim

View File

@ -94,6 +94,13 @@ Documentation
- Issue #17003: Unified the size argument names in the io module with common
practice.
Build
-----
- Issue #18596: Support the use of address sanity checking in recent versions
of clang and GCC by appropriately marking known false alarms in the small
object allocator. Patch contributed by Dhiru Kholia.
Tools/Demos
-----------

View File

@ -12,6 +12,24 @@ static void _PyObject_DebugDumpAddress(const void *p);
static void _PyMem_DebugCheckAddress(char api_id, const void *p);
#endif
#if defined(__has_feature) /* Clang */
#if __has_feature(address_sanitizer) /* is ASAN enabled? */
#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \
__attribute__((no_address_safety_analysis)) \
__attribute__ ((noinline))
#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 \
__attribute__((no_address_safety_analysis)) \
__attribute__ ((noinline))
#else
#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
#endif
#endif
#ifdef WITH_PYMALLOC
#ifdef MS_WINDOWS
@ -1300,6 +1318,7 @@ redirect:
/* free */
ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
static void
_PyObject_Free(void *ctx, void *p)
{
@ -1528,6 +1547,7 @@ redirect:
* return a non-NULL result.
*/
ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
static void *
_PyObject_Realloc(void *ctx, void *p, size_t nbytes)
{