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