From 252062fbaceb1a432e079c4065fdfddbd15db041 Mon Sep 17 00:00:00 2001 From: Lukas Rothenberger Date: Fri, 17 May 2024 17:30:13 +0200 Subject: [PATCH] fix(profiler): potential segfault after main function --- rtlib/functions/dp_add_bb_deps.cpp | 2 +- rtlib/functions/dp_alloca.cpp | 2 +- rtlib/functions/dp_call.cpp | 2 +- rtlib/functions/dp_decl.cpp | 2 +- rtlib/functions/dp_delete.cpp | 2 +- rtlib/functions/dp_finalize.cpp | 4 ++++ rtlib/functions/dp_func_exit.cpp | 17 +++++++++-------- rtlib/functions/dp_loop_entry.cpp | 2 +- rtlib/functions/dp_loop_exit.cpp | 2 +- rtlib/functions/dp_new.cpp | 2 +- rtlib/functions/dp_read.cpp | 2 +- rtlib/functions/dp_report_bb.cpp | 2 +- rtlib/functions/dp_report_bb_pair.cpp | 2 +- rtlib/functions/dp_write.cpp | 2 +- 14 files changed, 25 insertions(+), 20 deletions(-) diff --git a/rtlib/functions/dp_add_bb_deps.cpp b/rtlib/functions/dp_add_bb_deps.cpp index d6defc62..8832338d 100644 --- a/rtlib/functions/dp_add_bb_deps.cpp +++ b/rtlib/functions/dp_add_bb_deps.cpp @@ -29,7 +29,7 @@ namespace __dp { extern "C" { // hybrid analysis void __dp_add_bb_deps(char *depStringPtr) { - if(!dpInited){ + if((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_alloca.cpp b/rtlib/functions/dp_alloca.cpp index 2e801c3c..e48aa38c 100644 --- a/rtlib/functions/dp_alloca.cpp +++ b/rtlib/functions/dp_alloca.cpp @@ -32,7 +32,7 @@ extern "C" { void __dp_alloca(LID lid, char *var, ADDR startAddr, ADDR endAddr, int64_t numBytes, int64_t numElements) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_call.cpp b/rtlib/functions/dp_call.cpp index c8b98ce7..19c90393 100644 --- a/rtlib/functions/dp_call.cpp +++ b/rtlib/functions/dp_call.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_call(LID lid) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_decl.cpp b/rtlib/functions/dp_decl.cpp index b91065a3..a086fbb2 100644 --- a/rtlib/functions/dp_decl.cpp +++ b/rtlib/functions/dp_decl.cpp @@ -36,7 +36,7 @@ void __dp_decl(LID lid, ADDR addr, char *var, ADDR lastaddr, int64_t count) { void __dp_decl(LID lid, ADDR addr, char *var) { #endif - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_delete.cpp b/rtlib/functions/dp_delete.cpp index cc527429..c4663fb1 100644 --- a/rtlib/functions/dp_delete.cpp +++ b/rtlib/functions/dp_delete.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_delete(LID lid, ADDR startAddr) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_finalize.cpp b/rtlib/functions/dp_finalize.cpp index e973cde3..989990c3 100644 --- a/rtlib/functions/dp_finalize.cpp +++ b/rtlib/functions/dp_finalize.cpp @@ -33,6 +33,10 @@ namespace __dp { extern "C" { void __dp_finalize(LID lid) { + if(targetTerminated){ + return; + } + #ifdef DP_PTHREAD_COMPATIBILITY_MODE pthread_compatibility_mutex.lock(); #endif diff --git a/rtlib/functions/dp_func_exit.cpp b/rtlib/functions/dp_func_exit.cpp index 6f77c42f..93e86920 100644 --- a/rtlib/functions/dp_func_exit.cpp +++ b/rtlib/functions/dp_func_exit.cpp @@ -31,13 +31,6 @@ namespace __dp { extern "C" { void __dp_func_exit(LID lid, int32_t isExit) { -#ifdef DP_PTHREAD_COMPATIBILITY_MODE - std::lock_guard guard(pthread_compatibility_mutex); -#endif -#ifdef DP_RTLIB_VERBOSE - cout << "__dp_func_exit\n"; -#endif - timers->start(TimerRegion::FUNC_EXIT); if (targetTerminated) { if (DP_DEBUG) { @@ -45,10 +38,18 @@ void __dp_func_exit(LID lid, int32_t isExit) { cout << " but target program has returned from main(). Destructors?" << endl; } - timers->stop_and_add(TimerRegion::FUNC_EXIT); return; } +#ifdef DP_PTHREAD_COMPATIBILITY_MODE + std::lock_guard guard(pthread_compatibility_mutex); +#endif +#ifdef DP_RTLIB_VERBOSE + cout << "__dp_func_exit\n"; +#endif + timers->start(TimerRegion::FUNC_EXIT); + + lastCallOrInvoke = 0; lastProcessedLine = lid; diff --git a/rtlib/functions/dp_loop_entry.cpp b/rtlib/functions/dp_loop_entry.cpp index 67bd7c09..301163e9 100644 --- a/rtlib/functions/dp_loop_entry.cpp +++ b/rtlib/functions/dp_loop_entry.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_loop_entry(LID lid, int32_t loopID) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_loop_exit.cpp b/rtlib/functions/dp_loop_exit.cpp index eb908aed..344b3bc2 100644 --- a/rtlib/functions/dp_loop_exit.cpp +++ b/rtlib/functions/dp_loop_exit.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_loop_exit(LID lid, int32_t loopID) { - if(!dpInited){ + if((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_new.cpp b/rtlib/functions/dp_new.cpp index 5f0ec0c3..89b85be0 100644 --- a/rtlib/functions/dp_new.cpp +++ b/rtlib/functions/dp_new.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_new(LID lid, ADDR startAddr, ADDR endAddr, int64_t numBytes) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_read.cpp b/rtlib/functions/dp_read.cpp index 39329017..deddc8c4 100644 --- a/rtlib/functions/dp_read.cpp +++ b/rtlib/functions/dp_read.cpp @@ -35,7 +35,7 @@ void __dp_read(LID lid, ADDR addr, char *var, ADDR lastaddr, int64_t count) { void __dp_read(LID lid, ADDR addr, char *var) { #endif - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_report_bb.cpp b/rtlib/functions/dp_report_bb.cpp index 73d73045..94637726 100644 --- a/rtlib/functions/dp_report_bb.cpp +++ b/rtlib/functions/dp_report_bb.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_report_bb(uint32_t bbIndex) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_report_bb_pair.cpp b/rtlib/functions/dp_report_bb_pair.cpp index c93dfbe5..5c1cb81d 100644 --- a/rtlib/functions/dp_report_bb_pair.cpp +++ b/rtlib/functions/dp_report_bb_pair.cpp @@ -30,7 +30,7 @@ namespace __dp { extern "C" { void __dp_report_bb_pair(int32_t semaphore, uint32_t bbIndex) { - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; } diff --git a/rtlib/functions/dp_write.cpp b/rtlib/functions/dp_write.cpp index 5e9ed9a9..066c3d29 100644 --- a/rtlib/functions/dp_write.cpp +++ b/rtlib/functions/dp_write.cpp @@ -36,7 +36,7 @@ void __dp_write(LID lid, ADDR addr, char *var, ADDR lastaddr, int64_t count) { void __dp_write(LID lid, ADDR addr, char *var) { #endif - if (!dpInited){ + if ((!dpInited) || (targetTerminated)){ return; }