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