1 #if USE_DEBUGGER 2 /* 3 * kmp_omp.h -- OpenMP definition for kmp_omp_struct_info_t. 4 * This is for information about runtime library structures. 5 */ 6 7 //===----------------------------------------------------------------------===// 8 // 9 // The LLVM Compiler Infrastructure 10 // 11 // This file is dual licensed under the MIT and the University of Illinois Open 12 // Source Licenses. See LICENSE.txt for details. 13 // 14 //===----------------------------------------------------------------------===// 15 16 /* THIS FILE SHOULD NOT BE MODIFIED IN IDB INTERFACE LIBRARY CODE 17 It should instead be modified in the OpenMP runtime and copied to the 18 interface library code. This way we can minimize the problems that this is 19 sure to cause having two copies of the same file. 20 21 Files live in libomp and libomp_db/src/include */ 22 23 /* CHANGE THIS WHEN STRUCTURES BELOW CHANGE 24 Before we release this to a customer, please don't change this value. After 25 it is released and stable, then any new updates to the structures or data 26 structure traversal algorithms need to change this value. */ 27 #define KMP_OMP_VERSION 9 28 29 typedef struct { 30 kmp_int32 offset; 31 kmp_int32 size; 32 } offset_and_size_t; 33 34 typedef struct { 35 kmp_uint64 addr; 36 kmp_int32 size; 37 kmp_int32 padding; 38 } addr_and_size_t; 39 40 typedef struct { 41 kmp_uint64 flags; // Flags for future extensions. 42 kmp_uint64 43 file; // Pointer to name of source file where the parallel region is. 44 kmp_uint64 func; // Pointer to name of routine where the parallel region is. 45 kmp_int32 begin; // Beginning of source line range. 46 kmp_int32 end; // End of source line range. 47 kmp_int32 num_threads; // Specified number of threads. 48 } kmp_omp_nthr_item_t; 49 50 typedef struct { 51 kmp_int32 num; // Number of items in the arrray. 52 kmp_uint64 array; // Address of array of kmp_omp_num_threads_item_t. 53 } kmp_omp_nthr_info_t; 54 55 /* This structure is known to the idb interface library */ 56 typedef struct { 57 58 /* Change this only if you make a fundamental data structure change here */ 59 kmp_int32 lib_version; 60 61 /* sanity check. Only should be checked if versions are identical 62 * This is also used for backward compatibility to get the runtime 63 * structure size if it the runtime is older than the interface */ 64 kmp_int32 sizeof_this_structure; 65 66 /* OpenMP RTL version info. */ 67 addr_and_size_t major; 68 addr_and_size_t minor; 69 addr_and_size_t build; 70 addr_and_size_t openmp_version; 71 addr_and_size_t banner; 72 73 /* Various globals. */ 74 addr_and_size_t threads; // Pointer to __kmp_threads. 75 addr_and_size_t roots; // Pointer to __kmp_root. 76 addr_and_size_t capacity; // Pointer to __kmp_threads_capacity. 77 #if KMP_USE_MONITOR 78 addr_and_size_t monitor; // Pointer to __kmp_monitor. 79 #endif 80 #if !KMP_USE_DYNAMIC_LOCK 81 addr_and_size_t lock_table; // Pointer to __kmp_lock_table. 82 #endif 83 addr_and_size_t func_microtask; 84 addr_and_size_t func_fork; 85 addr_and_size_t func_fork_teams; 86 addr_and_size_t team_counter; 87 addr_and_size_t task_counter; 88 addr_and_size_t nthr_info; 89 kmp_int32 address_width; 90 kmp_int32 indexed_locks; 91 kmp_int32 last_barrier; // The end in enum barrier_type 92 kmp_int32 deque_size; // TASK_DEQUE_SIZE 93 94 /* thread structure information. */ 95 kmp_int32 th_sizeof_struct; 96 offset_and_size_t th_info; // descriptor for thread 97 offset_and_size_t th_team; // team for this thread 98 offset_and_size_t th_root; // root for this thread 99 offset_and_size_t th_serial_team; // serial team under this thread 100 offset_and_size_t th_ident; // location for this thread (if available) 101 offset_and_size_t th_spin_here; // is thread waiting for lock (if available) 102 offset_and_size_t 103 th_next_waiting; // next thread waiting for lock (if available) 104 offset_and_size_t th_task_team; // task team struct 105 offset_and_size_t th_current_task; // innermost task being executed 106 offset_and_size_t 107 th_task_state; // alternating 0/1 for task team identification 108 offset_and_size_t th_bar; 109 offset_and_size_t th_b_worker_arrived; // the worker increases it by 1 when it 110 // arrives to the barrier 111 112 #if OMP_40_ENABLED 113 /* teams information */ 114 offset_and_size_t th_teams_microtask; // entry address for teams construct 115 offset_and_size_t th_teams_level; // initial level of teams construct 116 offset_and_size_t th_teams_nteams; // number of teams in a league 117 offset_and_size_t 118 th_teams_nth; // number of threads in each team of the league 119 #endif 120 121 /* kmp_desc structure (for info field above) */ 122 kmp_int32 ds_sizeof_struct; 123 offset_and_size_t ds_tid; // team thread id 124 offset_and_size_t ds_gtid; // global thread id 125 offset_and_size_t ds_thread; // native thread id 126 127 /* team structure information */ 128 kmp_int32 t_sizeof_struct; 129 offset_and_size_t t_master_tid; // tid of master in parent team 130 offset_and_size_t t_ident; // location of parallel region 131 offset_and_size_t t_parent; // parent team 132 offset_and_size_t t_nproc; // # team threads 133 offset_and_size_t t_threads; // array of threads 134 offset_and_size_t t_serialized; // # levels of serialized teams 135 offset_and_size_t t_id; // unique team id 136 offset_and_size_t t_pkfn; 137 offset_and_size_t t_task_team; // task team structure 138 offset_and_size_t t_implicit_task; // taskdata for the thread's implicit task 139 #if OMP_40_ENABLED 140 offset_and_size_t t_cancel_request; 141 #endif 142 offset_and_size_t t_bar; 143 offset_and_size_t 144 t_b_master_arrived; // increased by 1 when master arrives to a barrier 145 offset_and_size_t 146 t_b_team_arrived; // increased by one when all the threads arrived 147 148 /* root structure information */ 149 kmp_int32 r_sizeof_struct; 150 offset_and_size_t r_root_team; // team at root 151 offset_and_size_t r_hot_team; // hot team for this root 152 offset_and_size_t r_uber_thread; // root thread 153 offset_and_size_t r_root_id; // unique root id (if available) 154 155 /* ident structure information */ 156 kmp_int32 id_sizeof_struct; 157 offset_and_size_t 158 id_psource; /* address of string ";file;func;line1;line2;;". */ 159 offset_and_size_t id_flags; 160 161 /* lock structure information */ 162 kmp_int32 lk_sizeof_struct; 163 offset_and_size_t lk_initialized; 164 offset_and_size_t lk_location; 165 offset_and_size_t lk_tail_id; 166 offset_and_size_t lk_head_id; 167 offset_and_size_t lk_next_ticket; 168 offset_and_size_t lk_now_serving; 169 offset_and_size_t lk_owner_id; 170 offset_and_size_t lk_depth_locked; 171 offset_and_size_t lk_lock_flags; 172 173 #if !KMP_USE_DYNAMIC_LOCK 174 /* lock_table_t */ 175 kmp_int32 lt_size_of_struct; /* Size and layout of kmp_lock_table_t. */ 176 offset_and_size_t lt_used; 177 offset_and_size_t lt_allocated; 178 offset_and_size_t lt_table; 179 #endif 180 181 /* task_team_t */ 182 kmp_int32 tt_sizeof_struct; 183 offset_and_size_t tt_threads_data; 184 offset_and_size_t tt_found_tasks; 185 offset_and_size_t tt_nproc; 186 offset_and_size_t tt_unfinished_threads; 187 offset_and_size_t tt_active; 188 189 /* kmp_taskdata_t */ 190 kmp_int32 td_sizeof_struct; 191 offset_and_size_t td_task_id; // task id 192 offset_and_size_t td_flags; // task flags 193 offset_and_size_t td_team; // team for this task 194 offset_and_size_t td_parent; // parent task 195 offset_and_size_t td_level; // task testing level 196 offset_and_size_t td_ident; // task identifier 197 offset_and_size_t td_allocated_child_tasks; // child tasks (+ current task) 198 // not yet deallocated 199 offset_and_size_t td_incomplete_child_tasks; // child tasks not yet complete 200 201 /* Taskwait */ 202 offset_and_size_t td_taskwait_ident; 203 offset_and_size_t td_taskwait_counter; 204 offset_and_size_t 205 td_taskwait_thread; // gtid + 1 of thread encountered taskwait 206 207 #if OMP_40_ENABLED 208 /* Taskgroup */ 209 offset_and_size_t td_taskgroup; // pointer to the current taskgroup 210 offset_and_size_t 211 td_task_count; // number of allocated and not yet complete tasks 212 offset_and_size_t td_cancel; // request for cancellation of this taskgroup 213 214 /* Task dependency */ 215 offset_and_size_t 216 td_depnode; // pointer to graph node if the task has dependencies 217 offset_and_size_t dn_node; 218 offset_and_size_t dn_next; 219 offset_and_size_t dn_successors; 220 offset_and_size_t dn_task; 221 offset_and_size_t dn_npredecessors; 222 offset_and_size_t dn_nrefs; 223 #endif 224 offset_and_size_t dn_routine; 225 226 /* kmp_thread_data_t */ 227 kmp_int32 hd_sizeof_struct; 228 offset_and_size_t hd_deque; 229 offset_and_size_t hd_deque_size; 230 offset_and_size_t hd_deque_head; 231 offset_and_size_t hd_deque_tail; 232 offset_and_size_t hd_deque_ntasks; 233 offset_and_size_t hd_deque_last_stolen; 234 235 // The last field of stable version. 236 kmp_uint64 last_field; 237 238 } kmp_omp_struct_info_t; 239 240 #endif /* USE_DEBUGGER */ 241 242 /* end of file */ 243