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