From a51d7b31eb3402cceed85a3ff9044218b01d0dce Mon Sep 17 00:00:00 2001
From: thierry <thierry@home>
Date: Tue, 26 Sep 2023 14:53:54 +0200
Subject: [PATCH] Port to Apple Silicon + uptodate LLVM. Add capture of OpenMP
 schedule event

---
 includes/kaapi_atomic.h          |  44 +++++------
 tool/CMakeLists.txt              |   6 ++
 tool/ompt_callbacks.cpp          | 130 ++++++++++++++++++++++++-------
 tool/ompt_callbacks.def          |   4 +-
 tool/tool.cpp                    |  36 ---------
 ukilli/kaapi_trace_reader.cpp    |   7 +-
 ukilli/kaapi_trace_reader.h      |   2 +-
 ukilli/kaapi_trace_simulator.cpp |  14 ++--
 ukilli/ukilli.cpp                |  65 ++++++++--------
 9 files changed, 178 insertions(+), 130 deletions(-)

diff --git a/includes/kaapi_atomic.h b/includes/kaapi_atomic.h
index 2fdd0e6..a283f0c 100644
--- a/includes/kaapi_atomic.h
+++ b/includes/kaapi_atomic.h
@@ -62,7 +62,11 @@
 #include "kaapi_error.h"
 #include <stddef.h>
 #include <stdint.h>
-
+#if __cplusplus
+#  include <atomic>
+#else
+#  include <stdatomic.h>
+#endif
   
 /* ========================= Atomic type ============================= */
 /** Atomic type
@@ -246,40 +250,32 @@ static inline void kaapi_slowdown_cpu()
 
 
 #if defined(__APPLE__)
-#  include <libkern/OSAtomic.h>
-static inline void kaapi_writemem_barrier()  
+static inline void kaapi_writemem_barrier()
 {
-#  if defined(__x86_64) || defined(__i386__)
-  /* not need sfence on X86 archi: write are ordered __asm__ __volatile__ ("sfence":::"memory"); */
-  __asm__ __volatile__ ("":::"memory");
-#  else
-  OSMemoryBarrier();
-#  endif
+#if __cplusplus
+  atomic_thread_fence(std::memory_order_release);
+#else
+  atomic_thread_fence(memory_order_release);
+#endif
 }
 
 static inline void kaapi_readmem_barrier()  
 {
-#  if defined(__x86_64) || defined(__i386__)
-  __asm__ __volatile__ ("":::"memory");
-//  __asm__ __volatile__ ("lfence":::"memory");
-#  else
-  OSMemoryBarrier();
-#  endif
+#if __cplusplus
+  atomic_thread_fence(std::memory_order_acquire);
+#else
+  atomic_thread_fence(memory_order_acquire);
+#endif
 }
 
 /* should be both read & write barrier */
 static inline void kaapi_mem_barrier()  
 {
-#  if defined(__x86_64) || defined(__i386__)
-  /** Mac OS 10.6.8 with gcc 4.2.1 has a buggy __sync_synchronize(); 
-      gcc-4.4.4 pass the test with sync_synchronize
-  */
-#if !defined(__MIC__)
-  __asm__ __volatile__ ("mfence":::"memory");
+#if __cplusplus
+  atomic_thread_fence(std::memory_order_seq_cst);
+#else
+  atomic_thread_fence(memory_order_seq_cst);
 #endif
-#  else
-  OSMemoryBarrier();
-#  endif
 }
 
 #elif defined(__linux__)
diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt
index 2db4edd..b19e46a 100644
--- a/tool/CMakeLists.txt
+++ b/tool/CMakeLists.txt
@@ -1,3 +1,9 @@
+find_package(OpenMP REQUIRED)
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+
+
 unset(OMPT_HEADER CACHE)
 find_file(OMPT_HEADER NAMES omp-tools.h HINTS ENV CPLUS_INCLUDE_PATH ENV C_INCLUDE_PATH)
 if (${OMPT_HEADER} STREQUAL "OMPT_HEADER-NOTFOUND")
diff --git a/tool/ompt_callbacks.cpp b/tool/ompt_callbacks.cpp
index 82c7018..1caec3a 100644
--- a/tool/ompt_callbacks.cpp
+++ b/tool/ompt_callbacks.cpp
@@ -70,7 +70,7 @@
 #include "kaapi_trace_lib.h"
 #include "kaapi_error.h"
 
-#define LOG 0
+#define LOG 1
 
 
 std::atomic<uint64_t> unique_thread_id(1);
@@ -473,7 +473,7 @@ ompt_callback_task_create_action(
     printf("%" PRIu64 ": ompt_task_create: parent_id=<null>, task_id=%" PRIu64\
            ", type=%i, has_dep=%i, ptr=%" PRIu64 "\n", thread_id,
            task->id, type,
-           has_dependences, task->task_ptr);
+           has_dependences, (uint64_t)task->task_ptr);
   }
 #endif
 }
@@ -486,11 +486,17 @@ ompt_callback_task_schedule_action(
     ompt_data_t *next_task_data)
 {
   uint64_t thread_id = ompt_get_thread_data()->value;
+  tikki_task_id_t *prior_task =0;
+  if (prior_task_data->ptr) prior_task = (tikki_task_id_t *)prior_task_data->ptr;
+  tikki_task_id_t *next_task = 0;
+  if (next_task_data->ptr) next_task = (tikki_task_id_t *)next_task_data->ptr;
+#if LOG
+  printf("%" PRIu64 ": ompt_callback_task_schedule: prior_task=%" PRIu64 ", status=%i, next_task: %" PRIu64 "\n", thread_id, prior_task->id, prior_task_status, next_task->id);
+#endif
   if (prior_task_data->ptr) {
-    tikki_task_id_t *prior_task = (tikki_task_id_t *)prior_task_data->ptr;
     // We are ending a task
 #if LOG
-    printf("%" PRIu64 ": ompt_event_task_end: task_id=%" PRIu64 "\n", thread_id, prior_task->id );
+    printf("%" PRIu64 ": ompt_callback_task_schedule-> task_end: task_id=%" PRIu64 "\n", thread_id, prior_task->id );
 #endif
     /* thread 0 ends the parallel region
        But because the end of implicit task is not related to
@@ -514,11 +520,10 @@ ompt_callback_task_schedule_action(
     //free(prior_task);
   }
   if (next_task_data->ptr) 
-{
-    tikki_task_id_t *new_task = (tikki_task_id_t *)next_task_data->ptr;
+  {
     // We are starting a task
 #if LOG
-    printf("%" PRIu64 ": ompt_event_task_begin: task_id=%" PRIu64 ", status=%i, deps: %p\n", thread_id, new_task->id, prior_task_status, new_task->deps);
+    printf("%" PRIu64 ": ompt_callback_task_schedule-> task_begin: task_id=%" PRIu64 ", status=%i, deps: %p\n", thread_id, next_task->id, prior_task_status, next_task->deps);
 #endif
     /* This is code for explicit task begin.
     */
@@ -526,28 +531,28 @@ ompt_callback_task_schedule_action(
     kaapi_tracelib_thread_switchstate(koti->kproc);
     char buff[30];
     const char* taskname = 0;
-    if (new_task->name == 0)
+    if (next_task->name == 0)
     {
-      sprintf(buff, "<undef-%p-%i>\0", new_task->task_ptr, new_task->id);
+      snprintf(buff, 30, "<undef-%p-%" PRIu64 ">", next_task->task_ptr, next_task->id);
       taskname = buff;
     }
     else
-      taskname = new_task->name;
+      taskname = next_task->name;
     kaapi_descrformat_t* fdescr = kaapi_tracelib_register_fmtdescr(
         0,
         // TODO: get codeptr_ra there
-        (void *)new_task->task_ptr,
+        (void *)next_task->task_ptr,
         0, //loc
         taskname,
         libomp_filter_func
         );
     int idxtop = koti->pstack.top;
     koti->pstack.stack[idxtop].fdescr = fdescr;
-    koti->pstack.stack[idxtop].task   = (void*)new_task->id;
+    koti->pstack.stack[idxtop].task   = (void*)next_task->id;
 
     kaapi_tracelib_task_begin(
         koti->kproc,
-        (kaapi_task_id_t)new_task->id,
+        (kaapi_task_id_t)next_task->id,
         fdescr->fmtid,
         1,
         0, 0, 0,
@@ -556,29 +561,29 @@ ompt_callback_task_schedule_action(
         koti->pstack.top ==0 ? 0 : koti->pstack.stack[idxtop-1].accum
         );
     ++koti->pstack.top;
-    if (new_task->ndeps > 0) {
+    if (next_task->ndeps > 0) {
       kaapi_tracelib_task_access(
           koti->kproc,
-          (kaapi_task_id_t)new_task->id,
-          new_task->ndeps,
-          (void*)new_task->deps,
+          (kaapi_task_id_t)next_task->id,
+          next_task->ndeps,
+          (void*)next_task->deps,
           0,
           (void*)0,
           (void (*)(void*, int, void**, size_t*, int*))ompt_decoder
       );
     }
-    if (new_task->datainfo.count)
+    if (next_task->datainfo.count)
     {
       kaapi_tracelib_task_data(
           koti->kproc,
-          (kaapi_task_id_t)new_task->id,
-          new_task->datainfo.count,
-          new_task->datainfo.data,
-          new_task->datainfo.size,
-          new_task->datainfo.mode,
+          (kaapi_task_id_t)next_task->id,
+          next_task->datainfo.count,
+          next_task->datainfo.data,
+          next_task->datainfo.size,
+          next_task->datainfo.mode,
           (void (*)(int, int*))ompt_mode_decoder
       );
-      new_task->datainfo.count = 0;
+      next_task->datainfo.count = 0;
     }
   }
 }
@@ -594,7 +599,8 @@ ompt_callback_implicit_task_action (
     )
 {
   uint64_t thread_id = ompt_get_thread_data()->value;
-  if (endpoint == ompt_scope_begin) {
+  if (endpoint == ompt_scope_begin)
+  {
     tikki_task_id_t *task = (tikki_task_id_t *)malloc(sizeof(tikki_task_id_t));
     task->id = ompt_get_unique_id();
     task->task_ptr = 0;
@@ -604,7 +610,7 @@ ompt_callback_implicit_task_action (
     printf("%" PRIu64 ": ompt_event_implicit_task_action: begin. parallel_id=%" PRIu64 ", task_id=%" PRIu64 "\n", thread_id, parallel_data->value, task->id);
 #endif
     char buff[30];
-    sprintf(buff, "<implicit>") ;
+    snprintf(buff, 30, "<implicit>") ;
     kaapi_ompt_thread_info_t* koti = &__kaapi_oth_info[thread_id];
     kaapi_descrformat_t* fdescr = kaapi_tracelib_register_fmtdescr(
         1,
@@ -651,7 +657,7 @@ ompt_callback_implicit_task_action (
         );
     //free(task);
   } else {
-    fprintf(stderr, "%" PRIu64 ": ompt_event_implicit_task_action: unknown endpoint. task_id=%" PRIu64 "\n", thread_id, task_data->ptr);
+    fprintf(stderr, "%" PRIu64 ": ompt_event_implicit_task_action: unknown endpoint. task_id=%" PRIu64 "\n", thread_id, (uint64_t)task_data->ptr);
   }
   /* This is code for implicit task begin.
   */
@@ -727,3 +733,73 @@ ompt_callback_task_dependence_action (
 #endif
 }
 
+void ompt_callback_sync_region_action (
+  ompt_sync_region_t kind,
+  ompt_scope_endpoint_t endpoint,
+  ompt_data_t *parallel_data,
+  ompt_data_t *task_data,
+  const void *codeptr_ra
+)
+{
+#if LOG
+  uint64_t thread_id = ompt_get_thread_data()->value;
+  tikki_task_id_t *task = (tikki_task_id_t *)task_data->ptr;
+  printf("%" PRIu64 ": ompt_callback_sync_region: ", thread_id );
+  switch (endpoint) {
+    case ompt_scope_begin:
+      printf("BEGIN of kind <");
+      break;
+
+    case ompt_scope_end:
+      printf("END of kind <");
+      break;
+
+    case ompt_scope_beginend:
+      printf("BEGINEND of kind <");
+      break;
+  }
+
+  switch (kind) {
+    case ompt_sync_region_barrier:
+      printf("barrier");
+      break;
+
+    case ompt_sync_region_barrier_implicit:
+      printf("barrier implicit");
+      break;
+
+    case ompt_sync_region_barrier_explicit:
+      printf("barrier explicit");
+      break;
+
+    case ompt_sync_region_barrier_implicit_workshare:
+      printf("barrier implicit workshare");
+      break;
+
+    case ompt_sync_region_barrier_implicit_parallel:
+      printf("barrier implicit parallel");
+      break;
+
+    case ompt_sync_region_barrier_teams:
+      printf("barrier teams");
+      break;
+
+    case ompt_sync_region_barrier_implementation:
+      printf("barrier implementation");
+      break;
+
+    case ompt_sync_region_taskwait:
+      printf("taskwait");
+      break;
+
+    case ompt_sync_region_taskgroup:
+      printf("taskgroup");
+      break;
+
+    case ompt_sync_region_reduction:
+      printf("reduction");
+      break;
+  };
+  printf(">, parallel_data:%p, task_data: %p, task_id:%" PRIu64 ",  codeptr_ra: %p\n", parallel_data, task_data, task->id, codeptr_ra);
+#endif
+}
diff --git a/tool/ompt_callbacks.def b/tool/ompt_callbacks.def
index e4b2b71..afc18ea 100644
--- a/tool/ompt_callbacks.def
+++ b/tool/ompt_callbacks.def
@@ -14,6 +14,9 @@ CALLBACK(ompt_callback_task_schedule, ompt_data_t *, ompt_task_status_t, ompt_da
 CALLBACK(ompt_callback_implicit_task, ompt_scope_endpoint_t, ompt_data_t *, ompt_data_t*, unsigned int, unsigned int, int)
 CALLBACK(ompt_callback_dependences, ompt_data_t *, const ompt_dependence_t *, int)
 CALLBACK(ompt_callback_task_dependence, ompt_data_t *, ompt_data_t * )
+CALLBACK(ompt_callback_sync_region, ompt_sync_region_t kind, ompt_scope_endpoint_t endpoint, ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra  )
+CALLBACK(ompt_callback_sync_region, ompt_sync_region_t, ompt_scope_endpoint_t, ompt_data_t *, ompt_data_t *, const void * )
+
 UNUSED(ompt_callback_target)
 UNUSED(ompt_callback_target_data_op)
 UNUSED(ompt_callback_target_submit)
@@ -27,7 +30,6 @@ UNUSED(ompt_callback_mutex_released)
 UNUSED(ompt_callback_work)
 UNUSED(ompt_callback_master)
 UNUSED(ompt_callback_target_map)
-UNUSED(ompt_callback_sync_region)
 UNUSED(ompt_callback_lock_init)
 UNUSED(ompt_callback_lock_destroy)
 UNUSED(ompt_callback_mutex_acquire)
diff --git a/tool/tool.cpp b/tool/tool.cpp
index 1f68149..41e2c57 100644
--- a/tool/tool.cpp
+++ b/tool/tool.cpp
@@ -107,39 +107,3 @@ extern "C" {
   }
 }
 
-
-
-#if 0
-struct F {
-  void operator() ( ... )
-  {
-    Inst0;
-    Fork<F1>() ( e1 );
-    Inst1;
-    Fork<F2>() ( e2 );
-    Inst2;
-    ...
-    Fork<Fn>() ( en );
-    Instn;
-  }
-};
-
-struct F {
-  void operator() ( ... )
-  {
-    Inst0;
-    e1 = eval(e1);
-    Inst1;
-    e2 = eval(e2);
-    Inst2;
-    ...
-    en= eval(en);
-    Instn;
-
-    Fork<F1>() ( e1 );
-    Fork<F2>() ( e2 );
-    ...
-    Fork<Fn>() ( en );
-  }
-};
-#endif
diff --git a/ukilli/kaapi_trace_reader.cpp b/ukilli/kaapi_trace_reader.cpp
index 77c8cb1..f30bc67 100644
--- a/ukilli/kaapi_trace_reader.cpp
+++ b/ukilli/kaapi_trace_reader.cpp
@@ -62,9 +62,10 @@
 #include "kaapi_trace_reader.h"
 
 /* Reader for one file */
+#define FILE_EVENT_NAME_SIZE 128
 struct file_event {
   int                        fd;
-  char                       name[128]; /* container name */
+  char                       name[FILE_EVENT_NAME_SIZE]; /* container name */
   kaapi_eventfile_header_t*  header;    /* pointer to the header of the file, at least format v1, may be new format */
   kaapi_event_t*             base;      /* base for event */
   size_t                     rpos;      /* next position to read event */
@@ -267,7 +268,7 @@ std::cout << "In vector = " << fdset->perfcounter_name[kk] << std::endl;
 int ReadFiles(
   FileSet* fdset,
   void* arg,
-  void (*callback)( void* arg, char* name, const kaapi_event_t* event)
+  void (*callback)( void* arg, char* name, int size, const kaapi_event_t* event)
 )
 {
   if (callback ==0) return EINVAL;
@@ -281,7 +282,7 @@ int ReadFiles(
     
 
     /* The container name is passed in/out: first event can initialize them */
-    callback( arg, fe->name, &fe->base[fe->rpos++] );
+    callback( arg, fe->name, FILE_EVENT_NAME_SIZE, &fe->base[fe->rpos++] );
     
     if (fe->rpos < fe->end)
       fdset->eventqueue.push( next_event_t(fe->base[fe->rpos].date, ne.fds) );
diff --git a/ukilli/kaapi_trace_reader.h b/ukilli/kaapi_trace_reader.h
index 218b7e1..59dadcb 100644
--- a/ukilli/kaapi_trace_reader.h
+++ b/ukilli/kaapi_trace_reader.h
@@ -93,7 +93,7 @@ extern const char** GetPerfCounterName(struct FileSet* fdset, int* size );
    event.
    Return 0 in case of success.
 */
-extern int ReadFiles(struct FileSet* fdset, void* arg, void (*callback)( void* arg, char* name, const kaapi_event_t* event) );
+extern int ReadFiles(struct FileSet* fdset, void* arg, void (*callback)( void* arg, char* name, int sz, const kaapi_event_t* event) );
 
 /* Return true iff no more event
 */
diff --git a/ukilli/kaapi_trace_simulator.cpp b/ukilli/kaapi_trace_simulator.cpp
index 8773a58..828d2c1 100644
--- a/ukilli/kaapi_trace_simulator.cpp
+++ b/ukilli/kaapi_trace_simulator.cpp
@@ -251,8 +251,8 @@ Simulator* OpenSimulator( FileSet* fds,
         char* buffer = comment;
         /* write format for the file */
         char unitdate[15];
-        sprintf(unitdate,"date(%s)",header.event_date_unit);
-        int c = sprintf(buffer, "%5s %12s %12s %8s", "kid", unitdate, "duration", "task_id");
+        snprintf(unitdate, 15, "date(%s)",header.event_date_unit);
+        int c = snprintf(buffer, size, "%5s %12s %12s %8s", "kid", unitdate, "duration", "task_id");
         buffer += c;
 
         int i, count_perfcounter = header.perfcounter_count & 0xFF;
@@ -265,7 +265,7 @@ Simulator* OpenSimulator( FileSet* fds,
              kaapi_assert( comment - buffer < size );
            }
         }
-        c = sprintf(buffer, "\n");
+        c = snprintf(buffer, comment+size-buffer, "\n");
         buffer += c;
         kaapi_assert( comment - buffer < size );
         write(sim->fd_taskdump, comment, strlen(comment));
@@ -670,7 +670,7 @@ static void processor_simulate_event(
       {
         static char tmp[2048];
         char* buffer = tmp;
-        int c = sprintf(buffer, "%5lu %12llu %12lld %8u",
+        int c = snprintf(buffer, 2048, "%5lu %12llu %12lld %8u",
             (unsigned long)event->kid,                            /* kid */
             (unsigned long long) proc->stacktask[proc->sp].date,  /* start date */
             (long long) (event->date - proc->stacktask[proc->sp].date),  /* duration */
@@ -687,14 +687,14 @@ static void processor_simulate_event(
             kaapi_perf_idset_clear(&proc->lasttask_perfctr_mask, idx );
 //printf("PerfIdx: %i ->%s\n", idx, kaapi_perfctr_info[idx].name );
             if (kaapi_perfctr_info[idx].ns2s)
-              c = sprintf(buffer, " %16e", 1e-9*(double)proc->lasttask_perfctr[idx] );
+              c = snprintf(buffer, tmp+2048-buffer, " %16e", 1e-9*(double)proc->lasttask_perfctr[idx] );
             else
-              c = sprintf(buffer, " %16" PRIi64, proc->lasttask_perfctr[idx]);
+              c = snprintf(buffer, tmp+2048-buffer, " %16" PRIi64, proc->lasttask_perfctr[idx]);
             buffer += c;
             kaapi_assert( buffer <= tmp + 256);
           }
         }
-        c = sprintf(buffer, "\n");
+        c = snprintf(buffer, tmp+2048-buffer, "\n");
         write(proc->sim->fd_taskdump,tmp, strlen(tmp));
       }
       kaapi_perf_idset_zero(&proc->lasttask_perfctr_mask);
diff --git a/ukilli/ukilli.cpp b/ukilli/ukilli.cpp
index b57d3cc..6909646 100644
--- a/ukilli/ukilli.cpp
+++ b/ukilli/ukilli.cpp
@@ -238,6 +238,7 @@ static inline const char* int2affinitykind(uint8_t v)
 static void callback_print_event(
   void* context,
   char* container_name,
+  int sz_name,
   const kaapi_event_t* event
 )
 {
@@ -727,7 +728,7 @@ static void callback_display_paje_event_gpuevent(
     case KAAPI_EVT_OFFLOAD_DTOH_BEG:
       if(katracereader_options.gputransfer){
         kid = event->kid;
-        sprintf(tmp,"d2h-%i",kid);
+        snprintf(tmp,128,"d2h-%i",kid);
         kaapi_trace_poti_PushState (d0, tmp, "STATE", "kd2h");
       }
       break;
@@ -735,7 +736,7 @@ static void callback_display_paje_event_gpuevent(
     case KAAPI_EVT_OFFLOAD_DTOH_END:
       if(katracereader_options.gputransfer){
         kid = event->kid;
-        sprintf(tmp,"d2h-%i",kid);
+        snprintf(tmp,128,"d2h-%i",kid);
         kaapi_trace_poti_PopState (d0, tmp, "STATE");
       }
       break;
@@ -743,7 +744,7 @@ static void callback_display_paje_event_gpuevent(
     case KAAPI_EVT_OFFLOAD_HTOD_BEG:
       if(katracereader_options.gputransfer){
         kid = event->kid;
-        sprintf(tmp,"h2d-%i",kid);
+        snprintf(tmp,128,"h2d-%i",kid);
         kaapi_trace_poti_PushState (d0, tmp, "STATE", "kh2d");
       }
       break;
@@ -751,20 +752,20 @@ static void callback_display_paje_event_gpuevent(
     case KAAPI_EVT_OFFLOAD_HTOD_END:
       if(katracereader_options.gputransfer){
         kid = event->kid;
-        sprintf(tmp,"h2d-%i",kid);
+        snprintf(tmp,128,"h2d-%i",kid);
         kaapi_trace_poti_PopState (d0, tmp, "STATE");
       }
       break;
       
     case KAAPI_EVT_OFFLOAD_KERNEL_BEG:
       kid = event->kid;
-      sprintf(tmp,"gpu-%i",kid);
+      snprintf(tmp,128,"gpu-%i",kid);
       kaapi_trace_poti_PushState (d0, tmp, "STATE", "kgpu");
       break;
       
     case KAAPI_EVT_OFFLOAD_KERNEL_END:
       kid = event->kid;
-      sprintf(tmp,"gpu-%i",kid);
+      snprintf(tmp,128,"gpu-%i",kid);
       kaapi_trace_poti_PopState (d0, tmp, "STATE");
       break;
       
@@ -801,14 +802,14 @@ static void callback_display_paje_event_stealevent(
   case KAAPI_EVT_REQUEST_BEG:
     kid = (unsigned int)KAAPI_EVENT_DATA(event,0,i);
     serial = (int)KAAPI_EVENT_DATA(event,1,i);
-    sprintf(tmp,"thief-%i",kid);
+    snprintf(tmp,128,"thief-%i",kid);
     kaapi_trace_poti_PushState (d0, tmp, "STEAL", "r");
     break;
     
   case KAAPI_EVT_REQUEST_END:
     kid = (unsigned int)KAAPI_EVENT_DATA(event,0,i);
     serial = (int)KAAPI_EVENT_DATA(event,1,i);
-    sprintf(tmp,"thief-%i",kid);
+    snprintf(tmp,128,"thief-%i",kid);
     kaapi_trace_poti_PopState (d0, tmp, "STEAL");
     break;
     
@@ -882,6 +883,7 @@ static void callback_display_paje_event_stealevent(
 static void callback_display_paje_event(
   void* context,
   char* name,
+  int sz_name,
   const kaapi_event_t* event
 )
 {
@@ -898,9 +900,9 @@ static void callback_display_paje_event(
     case KAAPI_EVT_KPROC_START:
       if (gantt_container_created.find( kid ) == gantt_container_created.end())
       {
-        sprintf(name,"thread-%i",kid);
+        snprintf(name,sz_name,"thread-%i",kid);
         char rootname[64];
-        sprintf(rootname,"NUMA-%i", (int)KAAPI_EVENT_DATA(event,1,i));
+        snprintf(rootname,64,"NUMA-%i", (int)KAAPI_EVENT_DATA(event,1,i));
 	//printf("NUMA %i %i %lu\n", kid,(int)KAAPI_EVENT_DATA(event,1,i), (unsigned long)KAAPI_EVENT_DATA(event,1,u));
         kaapi_trace_poti_CreateContainer (d0, name, "THREAD", rootname, name);
         gantt_container_created.insert( std::make_pair( kid, event->date ) );
@@ -937,7 +939,7 @@ static void callback_display_paje_event(
       if (KAAPI_EVENT_DATA(event,1,u) !=0)
       {
         char stateid[64];
-        sprintf(stateid, "t%lu", (unsigned long)KAAPI_EVENT_DATA(event,1,u));
+        snprintf(stateid, 64, "t%lu", (unsigned long)KAAPI_EVENT_DATA(event,1,u));
         kaapi_trace_poti_PushState (d0, name, "STATE", stateid);
       }
       else
@@ -1195,7 +1197,7 @@ static int fnc_paje_gantt_header(kaapi_eventfile_header_t* header)
   for (i=0; i<header->taskfmt_count;++i)
   {
     char tmpident[64];
-    sprintf(tmpident, "t%" PRIu64, header->fmtdefs[i].fmtid );
+    snprintf(tmpident, 64, "t%" PRIu64, header->fmtdefs[i].fmtid );
     kaapi_trace_poti_DefineEntityValue(tmpident, "STATE",
         convert2paje(header->fmtdefs[i].name),
         goodcolor[i%MAX_COLOR]/*header->fmtdefs[i].color*/);
@@ -1259,7 +1261,7 @@ static int fnc_paje_gantt_header(kaapi_eventfile_header_t* header)
   for (int i=0; i<header->numacount; ++i)
   {
     char tmpident[64];
-    sprintf(tmpident, "NUMA-%i", i );
+    snprintf(tmpident, 64, "NUMA-%i", i );
     kaapi_trace_poti_CreateContainer (0.00, tmpident, "ROOT", "0", tmpident);
   }
 
@@ -1274,7 +1276,7 @@ static int fnc_paje_gantt_close(kaapi_eventfile_header_t* header, uint64_t gantt
   while (ibeg != iend)
   {
     char name[64];
-    sprintf(name, "thread-%i", (int)ibeg->first );
+    snprintf(name, 64, "thread-%i", (int)ibeg->first );
     kaapi_trace_poti_DestroyContainer (1e-9*(double)(ibeg->second-gantt_tmin), "THREAD", name);
     ++ibeg;
   }
@@ -1648,6 +1650,7 @@ rastello_parallel_region_t* rastello_parallel_region_factory_t::create(uintptr_t
 static void callback_display_rastello(
   void* context,
   char* name,
+  int sz_name,
   const kaapi_event_t* event
 )
 {
@@ -2144,7 +2147,7 @@ printf("pred[id:%i/%p] = {id:%i}/%p\n", succ->id, (void*)succ->addr, task->id, (
 */
 int rastello_parallel_region_t::openfile(kaapi_eventfile_header_t* header)
 {
-  sprintf(filename, "rastello_%i.c", (int)parallel_id);
+  snprintf(filename, 128, "rastello_%i.c", (int)parallel_id);
   fout = fopen(filename,"w");
   if (fout ==0)
   {
@@ -2287,7 +2290,7 @@ parallel_region_t* dot_parallel_region_factory_t::create(uintptr_t prid)
 int dot_parallel_region_t::openfile(kaapi_eventfile_header_t* header)
 {
   FILE* file = 0;
-  sprintf(filename, "graph_%i.dot", (int)parallel_id);
+  snprintf(filename, 128, "graph_%i.dot", (int)parallel_id);
   fout = file = fopen(filename,"w");
   if (file ==0)
   {
@@ -2538,7 +2541,7 @@ int csv_parallel_region_t::openfile(kaapi_eventfile_header_t* header)
   if (csv_parallel_region_t::fout_pr ==0)
   {
     char filename[128];
-    sprintf(filename, "parallels.csv");
+    snprintf(filename, 128, "parallels.csv");
     csv_parallel_region_t::fout_pr = fopen(filename,"w");
     if (csv_parallel_region_t::fout_pr ==0)
     {
@@ -2572,7 +2575,7 @@ int csv_parallel_region_t::closefile(int cpucount)
   if (csv_parallel_region_t::fout ==0)
   {
     char filename[128];
-    sprintf(filename, "tasks.csv");
+    snprintf(filename, 128, "tasks.csv");
     csv_parallel_region_t::fout = fopen(filename,"w");
     if (csv_parallel_region_t::fout ==0)
     {
@@ -2613,7 +2616,7 @@ int csv_parallel_region_t::closefile(int cpucount)
   if (csv_parallel_region_t::fout_complexity ==0)
   {
     char filename[128];
-    sprintf(filename, "complexity.csv");
+    snprintf(filename, 128, "complexity.csv");
     csv_parallel_region_t::fout_complexity = fopen(filename,"w");
     if (csv_parallel_region_t::fout_complexity ==0)
     {
@@ -2672,7 +2675,7 @@ int csv_parallel_region_t::closefile(int cpucount)
   if (csv_parallel_region_t::fout_threads ==0)
   {
     char filename[128];
-    sprintf(filename, "threads.csv");
+    snprintf(filename, 128, "threads.csv");
     csv_parallel_region_t::fout_threads = fopen(filename,"w");
     if (csv_parallel_region_t::fout_threads ==0)
     {
@@ -2717,7 +2720,7 @@ int csv_parallel_region_t::closefile(int cpucount)
   if (csv_parallel_region_t::fout_loops ==0)
   {
     char filename[128];
-    sprintf(filename, "loops.csv");
+    snprintf(filename, 128, "loops.csv");
     csv_parallel_region_t::fout_loops = fopen(filename,"w");
     if (csv_parallel_region_t::fout_loops ==0)
     {
@@ -2746,7 +2749,7 @@ int csv_parallel_region_t::closefile(int cpucount)
   if (csv_parallel_region_t::fout_memory ==0)
   {
     char filename[128];
-    sprintf(filename, "memory.csv");
+    snprintf(filename, 128, "memory.csv");
     csv_parallel_region_t::fout_memory = fopen(filename,"w");
     if (csv_parallel_region_t::fout_memory ==0)
     {
@@ -2772,7 +2775,7 @@ int csv_parallel_region_t::closefile(int cpucount)
   if (csv_parallel_region_t::fout_counter ==0)
   {
     char filename[128];
-    sprintf(filename, "counters.csv");
+    snprintf(filename, 128, "counters.csv");
     csv_parallel_region_t::fout_counter = fopen(filename,"w");
     if (csv_parallel_region_t::fout_counter ==0)
     {
@@ -2798,7 +2801,7 @@ int csv_parallel_region_t::closefile(int cpucount)
     fclose(csv_parallel_region_t::fout_counter);
     csv_parallel_region_t::fout_counter = 0;
 
-    sprintf(filename, "uncoreperfctr.csv");
+    snprintf(filename, 128, "uncoreperfctr.csv");
     csv_parallel_region_t::fout_counter = fopen(filename,"w");
     if (csv_parallel_region_t::fout_counter ==0)
     {
@@ -2988,7 +2991,7 @@ parallel_region_t* somp_parallel_region_factory_t::create(uintptr_t prid)
 int somp_parallel_region_t::openfile(kaapi_eventfile_header_t* header)
 {
   FILE* file = 0;
-  sprintf(filename, "trace_%i.rec", (int)parallel_id);
+  snprintf(filename, 128, "trace_%i.rec", (int)parallel_id);
   fout = file = fopen(filename,"w");
   if (file ==0)
   {
@@ -3055,10 +3058,10 @@ void somp_parallel_region_t::dump_task_info( task_info* ti )
     fprintf(stdout, "cannot find fmtid: %" PRIu64 "\n", ti->fmtid);
 
   fprintf(fout,"Name: %s\n"
-               "JobId: %li\n"
+               "JobId: %" PRIu64 "\n"
                "StartTime: %f\n"
                "EndTime: %f\n"
-               "MemoryNode: %li\n",
+               "MemoryNode: %i\n",
     (fmt == rastello_fmtname.end() ? "<unknown>" : fmt->second ),
     ti->id,
     (double)ti->start*1e-6 /* ns -> millis */,
@@ -3071,7 +3074,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti )
   for (int i=0; i<ti->param.size(); ++i)
   {
     uint64_t            ptr    = ti->param[i].ptr;
-    fprintf(fout," %p", ptr);
+    fprintf(fout," %p", (void*)ptr);
   }
   fprintf(fout,"\n");
 
@@ -3104,7 +3107,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti )
     for (int i=0; i<ti->data.size(); ++i)
     {
       uint64_t            ptr    = ti->data[i].ptr;
-      fprintf(fout," %p", ptr);
+      fprintf(fout," %p", (void*)ptr);
     }
     fprintf(fout,"\n");
   
@@ -3113,7 +3116,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti )
     for (int i=0; i<ti->data.size(); ++i)
     {
       uint64_t            ptr    = ti->data[i].size;
-      fprintf(fout," %li", ptr);
+      fprintf(fout," %" PRIu64, ptr);
     }
     fprintf(fout,"\n");
   
@@ -3140,7 +3143,7 @@ void somp_parallel_region_t::dump_task_info( task_info* ti )
   fprintf(fout,"DependsOn:");
   for (int i=0; i<ti->pred.size(); ++i)
   {
-    fprintf(fout," %li", ti->pred[i]->id);
+    fprintf(fout," %" PRIu64, ti->pred[i]->id);
   }
   fprintf(fout,"\n\n");
 }
-- 
GitLab