xref: /llvm-project/openmp/libompd/src/omp-debug.h (revision 62fddd5ff5cdd5d66a58a01c46dc58c8ca9cd62e)
1 /*
2  * omp-debug.h
3  *
4  *  Created on: Jan 14, 2015
5  *      Author: Ignacio Laguna
6  *              Joachim Protze
7  *     Contact: ilaguna@llnl.gov
8  *              protze@llnl.gov
9  */
10 //===----------------------------------------------------------------------===//
11 //
12 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
13 // See https://llvm.org/LICENSE.txt for license information.
14 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
15 //
16 //===----------------------------------------------------------------------===//
17 
18 #ifndef SRC_OMP_DEBUG_H_
19 #define SRC_OMP_DEBUG_H_
20 
21 #define OMPD_VERSION 201811
22 
23 #ifdef __cplusplus
24 
25 #include <cstdlib>
26 
27 extern "C" {
28 #endif
29 
30 #define OMPD_IMPLEMENTS_OPENMP 5
31 #define OMPD_IMPLEMENTS_OPENMP_SUBVERSION 0
32 #define OMPD_TR_VERSION 6
33 #define OMPD_TR_SUBVERSION 2
34 #define OMPD_DLL_VERSION                                                       \
35   (OMPD_IMPLEMENTS_OPENMP << 24) + (OMPD_IMPLEMENTS_OPENMP_SUBVERSION << 16) + \
36       (OMPD_TR_VERSION << 8) + OMPD_TR_SUBVERSION
37 
38 #define STR_HELPER(x) #x
39 #define STR(x) STR_HELPER(x)
40 
41 #include "omp-tools.h"
42 #include "ompd-types.h"
43 
44 #ifdef __cplusplus
45 }
46 #endif
47 /******************************************************************************
48  * General helper functions
49  ******************************************************************************/
50 ompd_rc_t initTypeSizes(ompd_address_space_context_t *context);
51 
52 // NOLINTNEXTLINE "Used in below Macro:OMPD_CALLBACK."
53 static const ompd_callbacks_t *callbacks = nullptr;
54 
55 // Invoke callback function and return if it fails
56 #define OMPD_CALLBACK(fn, ...)                                                 \
57   do {                                                                         \
58     ompd_rc_t _rc = callbacks->fn(__VA_ARGS__);                                \
59     if (_rc != ompd_rc_ok)                                                     \
60       return _rc;                                                              \
61   } while (0)
62 
63 // Read the memory contents located at the given symbol
64 #define OMPD_GET_VALUE(context, th_context, name, size, buf)                   \
65   do {                                                                         \
66     ompd_address_t _addr;                                                      \
67     OMPD_CALLBACK(symbol_addr_lookup, context, th_context, name, &_addr,       \
68                   NULL);                                                       \
69     OMPD_CALLBACK(read_memory, context, th_context, &_addr, size, buf);        \
70   } while (0)
71 
72 typedef struct _ompd_aspace_cont ompd_address_space_context_t;
73 
74 typedef struct _ompd_aspace_handle {
75   ompd_address_space_context_t *context;
76   ompd_device_t kind;
77   uint64_t id;
78 } ompd_address_space_handle_t;
79 
80 typedef struct _ompd_thread_handle {
81   ompd_address_space_handle_t *ah;
82   ompd_thread_context_t *thread_context;
83   ompd_address_t th; /* target handle */
84 } ompd_thread_handle_t;
85 
86 typedef struct _ompd_parallel_handle {
87   ompd_address_space_handle_t *ah;
88   ompd_address_t th;  /* target handle */
89   ompd_address_t lwt; /* lwt handle */
90 } ompd_parallel_handle_t;
91 
92 typedef struct _ompd_task_handle {
93   ompd_address_space_handle_t *ah;
94   ompd_address_t th;  /* target handle */
95   ompd_address_t lwt; /* lwt handle */
_ompd_task_handle_ompd_task_handle96   _ompd_task_handle() {
97     ah = NULL;
98     th.segment = OMPD_SEGMENT_UNSPECIFIED;
99     lwt.segment = OMPD_SEGMENT_UNSPECIFIED;
100     th.address = 0;
101     lwt.address = 0;
102   }
103 } ompd_task_handle_t;
104 
105 void __ompd_init_icvs(const ompd_callbacks_t *table);
106 void __ompd_init_states(const ompd_callbacks_t *table);
107 
108 #endif /* SRC_OMP_DEBUG_H_ */
109