| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 4596666 commit da6730c
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -189,8 +189,11 @@ _PyFrame_SetStackPointer(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer) | |||
| 189 | 189 | * Frames on the frame stack are incomplete until the | |
| 190 | 190 | * first RESUME instruction. | |
| 191 | 191 | * Frames owned by a generator are always complete. | |
| 192 | + * | ||
| 193 | + * NOTE: We allow racy accesses to the instruction pointer | ||
| 194 | + * from other threads for sys._current_frames() and similar APIs. | ||
| 192 | 195 | */ | |
| 193 | - static inline bool | ||
| 196 | + static inline bool _Py_NO_SANITIZE_THREAD | ||
| 194 | 197 | _PyFrame_IsIncomplete(_PyInterpreterFrame *frame) | |
| 195 | 198 | { | |
| 196 | 199 | if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -565,27 +565,45 @@ extern "C" { | |||
| 565 | 565 | # if __has_feature(memory_sanitizer) | |
| 566 | 566 | # if !defined(_Py_MEMORY_SANITIZER) | |
| 567 | 567 | # define _Py_MEMORY_SANITIZER | |
| 568 | + # define _Py_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) | ||
| 568 | 569 | # endif | |
| 569 | 570 | # endif | |
| 570 | 571 | # if __has_feature(address_sanitizer) | |
| 571 | 572 | # if !defined(_Py_ADDRESS_SANITIZER) | |
| 572 | 573 | # define _Py_ADDRESS_SANITIZER | |
| 574 | + # define _Py_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) | ||
| 573 | 575 | # endif | |
| 574 | 576 | # endif | |
| 575 | 577 | # if __has_feature(thread_sanitizer) | |
| 576 | 578 | # if !defined(_Py_THREAD_SANITIZER) | |
| 577 | 579 | # define _Py_THREAD_SANITIZER | |
| 580 | + # define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) | ||
| 578 | 581 | # endif | |
| 579 | 582 | # endif | |
| 580 | 583 | #elif defined(__GNUC__) | |
| 581 | 584 | # if defined(__SANITIZE_ADDRESS__) | |
| 582 | 585 | # define _Py_ADDRESS_SANITIZER | |
| 586 | + # define _Py_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) | ||
| 583 | 587 | # endif | |
| 584 | 588 | # if defined(__SANITIZE_THREAD__) | |
| 585 | 589 | # define _Py_THREAD_SANITIZER | |
| 590 | + # define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) | ||
| 591 | + # elif __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ >= 1) | ||
| 592 | + // TSAN is supported since GCC 5.1, but __SANITIZE_THREAD__ macro | ||
| 593 | + // is provided only since GCC 7. | ||
| 594 | + # define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) | ||
| 586 | 595 | # endif | |
| 587 | 596 | #endif | |
| 588 | 597 | ||
| 598 | + #ifndef _Py_NO_SANITIZE_ADDRESS | ||
| 599 | + # define _Py_NO_SANITIZE_ADDRESS | ||
| 600 | + #endif | ||
| 601 | + #ifndef _Py_NO_SANITIZE_THREAD | ||
| 602 | + # define _Py_NO_SANITIZE_THREAD | ||
| 603 | + #endif | ||
| 604 | + #ifndef _Py_NO_SANITIZE_MEMORY | ||
| 605 | + # define _Py_NO_SANITIZE_MEMORY | ||
| 606 | + #endif | ||
| 589 | 607 | ||
| 590 | 608 | /* AIX has __bool__ redefined in it's system header file. */ | |
| 591 | 609 | #if defined(_AIX) && defined(__bool__) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -470,40 +470,6 @@ _PyMem_ArenaFree(void *Py_UNUSED(ctx), void *ptr, | |||
| 470 | 470 | /*******************************************/ | |
| 471 | 471 | ||
| 472 | 472 | ||
| 473 | - #if defined(__has_feature) /* Clang */ | ||
| 474 | - # if __has_feature(address_sanitizer) /* is ASAN enabled? */ | ||
| 475 | - # define _Py_NO_SANITIZE_ADDRESS \ | ||
| 476 | - __attribute__((no_sanitize("address"))) | ||
| 477 | - # endif | ||
| 478 | - # if __has_feature(thread_sanitizer) /* is TSAN enabled? */ | ||
| 479 | - # define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) | ||
| 480 | - # endif | ||
| 481 | - # if __has_feature(memory_sanitizer) /* is MSAN enabled? */ | ||
| 482 | - # define _Py_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) | ||
| 483 | - # endif | ||
| 484 | - #elif defined(__GNUC__) | ||
| 485 | - # if defined(__SANITIZE_ADDRESS__) /* GCC 4.8+, is ASAN enabled? */ | ||
| 486 | - # define _Py_NO_SANITIZE_ADDRESS \ | ||
| 487 | - __attribute__((no_sanitize_address)) | ||
| 488 | - # endif | ||
| 489 | - // TSAN is supported since GCC 5.1, but __SANITIZE_THREAD__ macro | ||
| 490 | - // is provided only since GCC 7. | ||
| 491 | - # if __GNUC__ > 5 || (__GNUC__ == 5 && __GNUC_MINOR__ >= 1) | ||
| 492 | - # define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) | ||
| 493 | - # endif | ||
| 494 | - #endif | ||
| 495 | - | ||
| 496 | - #ifndef _Py_NO_SANITIZE_ADDRESS | ||
| 497 | - # define _Py_NO_SANITIZE_ADDRESS | ||
| 498 | - #endif | ||
| 499 | - #ifndef _Py_NO_SANITIZE_THREAD | ||
| 500 | - # define _Py_NO_SANITIZE_THREAD | ||
| 501 | - #endif | ||
| 502 | - #ifndef _Py_NO_SANITIZE_MEMORY | ||
| 503 | - # define _Py_NO_SANITIZE_MEMORY | ||
| 504 | - #endif | ||
| 505 | - | ||
| 506 | - | ||
| 507 | 473 | #define ALLOCATORS_MUTEX (_PyRuntime.allocators.mutex) | |
| 508 | 474 | #define _PyMem_Raw (_PyRuntime.allocators.standard.raw) | |
| 509 | 475 | #define _PyMem (_PyRuntime.allocators.standard.mem) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -139,7 +139,9 @@ PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame) | |||
| 139 | 139 | return _PyInterpreterFrame_LASTI(frame) * sizeof(_Py_CODEUNIT); | |
| 140 | 140 | } | |
| 141 | 141 | ||
| 142 | - int | ||
| 142 | + // NOTE: We allow racy accesses to the instruction pointer from other threads | ||
| 143 | + // for sys._current_frames() and similar APIs. | ||
| 144 | + int _Py_NO_SANITIZE_THREAD | ||
| 143 | 145 | PyUnstable_InterpreterFrame_GetLine(_PyInterpreterFrame *frame) | |
| 144 | 146 | { | |
| 145 | 147 | int addr = _PyInterpreterFrame_LASTI(frame) * sizeof(_Py_CODEUNIT); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments