From ee8781f7e17307c02a431aa4571e2dbf3904b176 Mon Sep 17 00:00:00 2001 From: Michael Cook <michael@episci.com> Date: Sun, 11 Oct 2020 12:31:40 -0400 Subject: [PATCH] Support for using gprof profiling --- cmake_targets/CMakeLists.txt | 10 +++++++--- targets/RT/USER/lte-softmodem.c | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 8e9e3114be4..5946407f1d5 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -177,9 +177,13 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${C_FLAGS_PROCESSOR} -Wno-packed-bitfield-compat -fPIC -Wall -fno-strict-aliasing -rdynamic -std=c++11 -D${MKVER}" ) -#set(SANITIZER "-fsanitize=address") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZER}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZER}") +# Uncomment these lines to enable the address sanitizer +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + +# Uncomment these lines to enable gprof profiling +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg -DUSING_GPROF") +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg -DUSING_GPROF") add_definitions("-DASN_DISABLE_OER_SUPPORT") diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 20d151e53c7..74b637157bb 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -95,6 +95,9 @@ unsigned short config_frames[4] = {2,9,11,13}; #include "NB_IoT_interface.h" #include <executables/split_headers.h> +#if USING_GPROF +# include "sys/gmon.h" +#endif pthread_cond_t nfapi_sync_cond; pthread_mutex_t nfapi_sync_mutex; @@ -738,6 +741,14 @@ int main ( int argc, char **argv ) if(IS_SOFTMODEM_DOFORMS) load_softscope("enb"); itti_wait_tasks_end(); + +#if USING_GPROF + // Save the gprof data now (rather than via atexit) in case we crash while shutting down + fprintf(stderr, "Recording gprof data...\n"); + _mcleanup(); + fprintf(stderr, "Recording gprof data...done\n"); +#endif // USING_GPROF + oai_exit=1; LOG_I(ENB_APP,"oai_exit=%d\n",oai_exit); // stop threads -- GitLab