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