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