From ea272adc0ac5a87325ca9436d51e37f655d06be9 Mon Sep 17 00:00:00 2001 From: Coldwings Date: Tue, 12 Aug 2025 11:33:02 +0800 Subject: [PATCH 1/2] Fix PHOTON_BUILD_WITH_ASAN --- CMakeLists.txt | 1 + thread/thread.cpp | 90 +++++++++++++++++++++++------------------------ 2 files changed, 46 insertions(+), 45 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf87dd1d9..80386cc56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,6 +68,7 @@ if (PHOTON_BUILD_WITH_ASAN) if ((NOT CMAKE_BUILD_TYPE STREQUAL "Debug") OR (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")) message(FATAL_ERROR "Wrong environment") endif () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -static-libasan") add_link_options(-fsanitize=address -static-libasan) endif () diff --git a/thread/thread.cpp b/thread/thread.cpp index 3aea95552..600392c4e 100644 --- a/thread/thread.cpp +++ b/thread/thread.cpp @@ -169,51 +169,6 @@ namespace photon void* _ptr; }; - #if defined(__has_feature) - # if __has_feature(address_sanitizer) // for clang - # define __SANITIZE_ADDRESS__ // GCC already sets this - # endif - #endif - - #ifdef __SANITIZE_ADDRESS__ - extern "C" { - // Check out sanitizer/asan-interface.h in compiler-rt for documentation. - void __sanitizer_start_switch_fiber(void** fake_stack_save, const void* bottom, - size_t size); - void __sanitizer_finish_switch_fiber(void* fake_stack_save, - const void** bottom_old, size_t* size_old); - } - - static void asan_start(void** save, thread* to) { - void* bottom = to->buf ? to->buf : to->stackful_alloc_top; - __sanitizer_start_switch_fiber(save, bottom, - to->stack_size); - } - - static void asan_finish(void* save) { - __sanitizer_finish_switch_fiber(save, nullptr, nullptr); - } - -#define ASAN_START() asan_finish((void*)nullptr); - -#define ASAN_SWITCH(to) \ - void* __save; \ - asan_start(&__save, to); \ - DEFER({ asan_finish(__save); }); - -#define ASAN_DIE_SWITCH(to) \ - asan_start(nullptr, to); - -#else -#define ASAN_START(ptr) -#define ASAN_SWITCH(to) -#define ASAN_DIE_SWITCH(to) -#endif - - static void _asan_start() asm("_asan_start"); - - __attribute__((used)) static void _asan_start() { ASAN_START(); } - struct thread_list; struct thread : public intrusive_list_node { volatile vcpu_t* vcpu; @@ -335,6 +290,51 @@ namespace photon } }; +#if defined(__has_feature) +# if __has_feature(address_sanitizer) // for clang +# define __SANITIZE_ADDRESS__ // GCC already sets this +# endif +#endif + +#ifdef __SANITIZE_ADDRESS__ + extern "C" { + // Check out sanitizer/asan-interface.h in compiler-rt for documentation. + void __sanitizer_start_switch_fiber(void** fake_stack_save, const void* bottom, + size_t size); + void __sanitizer_finish_switch_fiber(void* fake_stack_save, + const void** bottom_old, size_t* size_old); + } + + static void asan_start(void** save, thread* to) { + void* bottom = to->buf ? to->buf : to->stackful_alloc_top; + __sanitizer_start_switch_fiber(save, bottom, + to->stack_size); + } + + static void asan_finish(void* save) { + __sanitizer_finish_switch_fiber(save, nullptr, nullptr); + } + +#define ASAN_START() asan_finish((void*)nullptr); + +#define ASAN_SWITCH(to) \ + void* __save; \ + asan_start(&__save, to); \ + DEFER({ asan_finish(__save); }); + +#define ASAN_DIE_SWITCH(to) \ + asan_start(nullptr, to); + +#else +#define ASAN_START(ptr) +#define ASAN_SWITCH(to) +#define ASAN_DIE_SWITCH(to) +#endif + + static void _asan_start() asm("_asan_start"); + + __attribute__((used)) static void _asan_start() { ASAN_START(); } + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Winvalid-offsetof" static_assert(offsetof(thread, vcpu) == offsetof(partial_thread, vcpu), "..."); From 609299c2de0eb7bcd125522562b6399075631a6b Mon Sep 17 00:00:00 2001 From: Coldwings Date: Tue, 12 Aug 2025 15:13:49 +0800 Subject: [PATCH 2/2] Fix autopr title --- .github/workflows/auto-pr-precise.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/auto-pr-precise.yml b/.github/workflows/auto-pr-precise.yml index 659933aff..b3ef053cb 100644 --- a/.github/workflows/auto-pr-precise.yml +++ b/.github/workflows/auto-pr-precise.yml @@ -59,6 +59,7 @@ jobs: git checkout -b ${{steps.create_branch.outputs.PRBRANCH}} echo "TITLE<<__AUTOPR_EOF" >> $GITHUB_OUTPUT git log --format="| %s" ${{ github.event.commits[0].id }}~..${{ github.event.after }} | tr '\n' ' ' >> $GITHUB_OUTPUT + echo "\n" >> $GITHUB_OUTPUT echo "__AUTOPR_EOF" >> $GITHUB_OUTPUT echo "MESSAGE<<__AUTOPR_EOF" >> $GITHUB_OUTPUT git log --format="> %B" ${{ github.event.commits[0].id }}~..${{ github.event.after }} >> $GITHUB_OUTPUT