Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions .github/workflows/auto-pr-precise.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,17 @@ jobs:
set -x
git checkout ${{steps.branch_info.outputs.NEXT_BRANCH}}
git checkout -b ${{steps.create_branch.outputs.PRBRANCH}}
TITLE=$(git log --format="| %s" ${{ github.event.commits[0].id }}~..${{ github.event.after }} | xargs -0)
echo "TITLE=$TITLE" >> $GITHUB_OUTPUT
echo "MESSAGE<<__EOF" >> $GITHUB_OUTPUT
echo "TITLE<<__AUTOPR_EOF" >> $GITHUB_OUTPUT
git log --format="| %s" ${{ github.event.commits[0].id }}~..${{ github.event.after }} | tr '\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
<<<<<<< HEAD
echo "__EOF" >> $GITHUB_OUTPUT
=======
echo "__AUTOPR_EOF" >> $GITHUB_OUTPUT
cat $GITHUB_OUTPUT
>>>>>>> 79228b2 (Fix autopr (#933) (#934))
REVS=$(git rev-list --reverse ${{ github.event.commits[0].id }}~..${{ github.event.after }} )
for rev in "$REVS"; do
if ! git cherry-pick ${rev} ; then
Expand All @@ -84,4 +90,3 @@ jobs:
base: `${{steps.branch_info.outputs.NEXT_BRANCH}}`,
body: `${{steps.merge-changes.outputs.MESSAGE}}\nGenerated by Auto PR, by cherry-pick related commits`,
});

1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,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 ()

Expand Down
91 changes: 46 additions & 45 deletions thread/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<thread> {
volatile vcpu_t* vcpu;
Expand Down Expand Up @@ -338,6 +293,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), "...");
Expand Down Expand Up @@ -763,6 +763,7 @@ R"(

DEF_ASM_FUNC(_photon_thread_stub)
R"(
call _asan_start
mov 0x40(%rbp), %rdi
movq $0, 0x40(%rbp)
call *0x48(%rbp)
Expand Down
Loading