234 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
	
| #if USE_DEBUGGER
 | |
| /*
 | |
|  * kmp_omp.h -- OpenMP definition for kmp_omp_struct_info_t.
 | |
|  *              This is for information about runtime library structures.
 | |
|  */
 | |
| 
 | |
| 
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is dual licensed under the MIT and the University of Illinois Open
 | |
| // Source Licenses. See LICENSE.txt for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| 
 | |
| /* THIS FILE SHOULD NOT BE MODIFIED IN IDB INTERFACE LIBRARY CODE
 | |
|  * It should instead be modified in the OpenMP runtime and copied
 | |
|  * to the interface library code.  This way we can minimize the
 | |
|  * problems that this is sure to cause having two copies of the
 | |
|  * same file.
 | |
|  *
 | |
|  * files live in libomp and libomp_db/src/include
 | |
|  */
 | |
| 
 | |
| /* CHANGE THIS WHEN STRUCTURES BELOW CHANGE
 | |
|  * Before we release this to a customer, please don't change this value.  After it is released and
 | |
|  * stable, then any new updates to the structures or data structure traversal algorithms need to
 | |
|  * change this value.
 | |
|  */
 | |
| #define KMP_OMP_VERSION 9
 | |
| 
 | |
| typedef struct {
 | |
|     kmp_int32  offset;
 | |
|     kmp_int32  size;
 | |
| } offset_and_size_t;
 | |
| 
 | |
| typedef struct {
 | |
|     kmp_uint64    addr;
 | |
|     kmp_int32     size;
 | |
|     kmp_int32     padding;
 | |
| } addr_and_size_t;
 | |
| 
 | |
| typedef struct {
 | |
|     kmp_uint64   flags;         // Flags for future extensions.
 | |
|     kmp_uint64   file;          // Pointer to name of source file where the parallel region is.
 | |
|     kmp_uint64   func;          // Pointer to name of routine where the parallel region is.
 | |
|     kmp_int32    begin;         // Beginning of source line range.
 | |
|     kmp_int32    end;           // End of source line range.
 | |
|     kmp_int32    num_threads;   // Specified number of threads.
 | |
| } kmp_omp_nthr_item_t;
 | |
| 
 | |
| typedef struct {
 | |
|     kmp_int32     num;          // Number of items in the arrray.
 | |
|     kmp_uint64    array;        // Address of array of kmp_omp_num_threads_item_t.
 | |
| } kmp_omp_nthr_info_t;
 | |
| 
 | |
| 
 | |
| /* This structure is known to the idb interface library */
 | |
| typedef struct {
 | |
| 
 | |
|     /* Change this only if you make a fundamental data structure change here */
 | |
|     kmp_int32          lib_version;
 | |
| 
 | |
|     /* sanity check.  Only should be checked if versions are identical
 | |
|      * This is also used for backward compatibility to get the runtime
 | |
|      * structure size if it the runtime is older than the interface */
 | |
|     kmp_int32          sizeof_this_structure;
 | |
| 
 | |
|     /* OpenMP RTL version info. */
 | |
|     addr_and_size_t    major;
 | |
|     addr_and_size_t    minor;
 | |
|     addr_and_size_t    build;
 | |
|     addr_and_size_t    openmp_version;
 | |
|     addr_and_size_t    banner;
 | |
| 
 | |
|     /* Various globals. */
 | |
|     addr_and_size_t  threads;            // Pointer to __kmp_threads.
 | |
|     addr_and_size_t  roots;              // Pointer to __kmp_root.
 | |
|     addr_and_size_t  capacity;           // Pointer to __kmp_threads_capacity.
 | |
|     addr_and_size_t  monitor;            // Pointer to __kmp_monitor.
 | |
| #if ! KMP_USE_DYNAMIC_LOCK
 | |
|     addr_and_size_t  lock_table;         // Pointer to __kmp_lock_table.
 | |
| #endif
 | |
|     addr_and_size_t  func_microtask;
 | |
|     addr_and_size_t  func_fork;
 | |
|     addr_and_size_t  func_fork_teams;
 | |
|     addr_and_size_t  team_counter;
 | |
|     addr_and_size_t  task_counter;
 | |
|     addr_and_size_t  nthr_info;
 | |
|     kmp_int32        address_width;
 | |
|     kmp_int32        indexed_locks;
 | |
|     kmp_int32        last_barrier;       // The end in enum barrier_type
 | |
|     kmp_int32        deque_size;         // TASK_DEQUE_SIZE
 | |
| 
 | |
|     /* thread structure information. */
 | |
|     kmp_int32          th_sizeof_struct;
 | |
|     offset_and_size_t  th_info;          // descriptor for thread
 | |
|     offset_and_size_t  th_team;          // team for this thread
 | |
|     offset_and_size_t  th_root;          // root for this thread
 | |
|     offset_and_size_t  th_serial_team;   // serial team under this thread
 | |
|     offset_and_size_t  th_ident;         // location for this thread (if available)
 | |
|     offset_and_size_t  th_spin_here;     // is thread waiting for lock (if available)
 | |
|     offset_and_size_t  th_next_waiting;  // next thread waiting for lock (if available)
 | |
|     offset_and_size_t  th_task_team;     // task team struct
 | |
|     offset_and_size_t  th_current_task;  // innermost task being executed
 | |
|     offset_and_size_t  th_task_state;    // alternating 0/1 for task team identification
 | |
|     offset_and_size_t  th_bar;
 | |
|     offset_and_size_t  th_b_worker_arrived; // the worker increases it by 1 when it arrives to the barrier
 | |
| 
 | |
| #if OMP_40_ENABLED
 | |
|     /* teams information */
 | |
|     offset_and_size_t th_teams_microtask;// entry address for teams construct
 | |
|     offset_and_size_t th_teams_level;    // initial level of teams construct
 | |
|     offset_and_size_t th_teams_nteams;   // number of teams in a league
 | |
|     offset_and_size_t th_teams_nth;      // number of threads in each team of the league
 | |
| #endif
 | |
| 
 | |
|     /* kmp_desc structure (for info field above) */
 | |
|     kmp_int32          ds_sizeof_struct;
 | |
|     offset_and_size_t  ds_tid;           // team thread id
 | |
|     offset_and_size_t  ds_gtid;          // global thread id
 | |
|     offset_and_size_t  ds_thread;        // native thread id
 | |
| 
 | |
|     /* team structure information */
 | |
|     kmp_int32          t_sizeof_struct;
 | |
|     offset_and_size_t  t_master_tid;     // tid of master in parent team
 | |
|     offset_and_size_t  t_ident;          // location of parallel region
 | |
|     offset_and_size_t  t_parent;         // parent team
 | |
|     offset_and_size_t  t_nproc;          // # team threads
 | |
|     offset_and_size_t  t_threads;        // array of threads
 | |
|     offset_and_size_t  t_serialized;     // # levels of serialized teams
 | |
|     offset_and_size_t  t_id;             // unique team id
 | |
|     offset_and_size_t  t_pkfn;
 | |
|     offset_and_size_t  t_task_team;      // task team structure
 | |
|     offset_and_size_t  t_implicit_task;  // taskdata for the thread's implicit task
 | |
| #if OMP_40_ENABLED
 | |
|     offset_and_size_t  t_cancel_request;
 | |
| #endif
 | |
|     offset_and_size_t  t_bar;
 | |
|     offset_and_size_t  t_b_master_arrived; // increased by 1 when master arrives to a barrier
 | |
|     offset_and_size_t  t_b_team_arrived;   // increased by one when all the threads arrived
 | |
| 
 | |
|     /* root structure information */
 | |
|     kmp_int32          r_sizeof_struct;
 | |
|     offset_and_size_t  r_root_team;      // team at root
 | |
|     offset_and_size_t  r_hot_team;       // hot team for this root
 | |
|     offset_and_size_t  r_uber_thread;    // root thread
 | |
|     offset_and_size_t  r_root_id;        // unique root id (if available)
 | |
| 
 | |
|     /* ident structure information */
 | |
|     kmp_int32          id_sizeof_struct;
 | |
|     offset_and_size_t  id_psource;       /* address of string ";file;func;line1;line2;;". */
 | |
|     offset_and_size_t  id_flags;
 | |
| 
 | |
|     /* lock structure information */
 | |
|     kmp_int32          lk_sizeof_struct;
 | |
|     offset_and_size_t  lk_initialized;
 | |
|     offset_and_size_t  lk_location;
 | |
|     offset_and_size_t  lk_tail_id;
 | |
|     offset_and_size_t  lk_head_id;
 | |
|     offset_and_size_t  lk_next_ticket;
 | |
|     offset_and_size_t  lk_now_serving;
 | |
|     offset_and_size_t  lk_owner_id;
 | |
|     offset_and_size_t  lk_depth_locked;
 | |
|     offset_and_size_t  lk_lock_flags;
 | |
| 
 | |
| #if ! KMP_USE_DYNAMIC_LOCK
 | |
|     /* lock_table_t */
 | |
|     kmp_int32          lt_size_of_struct;    /* Size and layout of kmp_lock_table_t. */
 | |
|     offset_and_size_t  lt_used;
 | |
|     offset_and_size_t  lt_allocated;
 | |
|     offset_and_size_t  lt_table;
 | |
| #endif
 | |
| 
 | |
|     /* task_team_t */
 | |
|     kmp_int32          tt_sizeof_struct;
 | |
|     offset_and_size_t  tt_threads_data;
 | |
|     offset_and_size_t  tt_found_tasks;
 | |
|     offset_and_size_t  tt_nproc;
 | |
|     offset_and_size_t  tt_unfinished_threads;
 | |
|     offset_and_size_t  tt_active;
 | |
| 
 | |
|     /* kmp_taskdata_t */
 | |
|     kmp_int32          td_sizeof_struct;
 | |
|     offset_and_size_t  td_task_id;                  // task id
 | |
|     offset_and_size_t  td_flags;                    // task flags
 | |
|     offset_and_size_t  td_team;                     // team for this task
 | |
|     offset_and_size_t  td_parent;                   // parent task
 | |
|     offset_and_size_t  td_level;                    // task testing level
 | |
|     offset_and_size_t  td_ident;                    // task identifier
 | |
|     offset_and_size_t  td_allocated_child_tasks;    // child tasks (+ current task) not yet deallocated
 | |
|     offset_and_size_t  td_incomplete_child_tasks;   // child tasks not yet complete
 | |
| 
 | |
|     /* Taskwait */
 | |
|     offset_and_size_t  td_taskwait_ident;
 | |
|     offset_and_size_t  td_taskwait_counter;
 | |
|     offset_and_size_t  td_taskwait_thread;          // gtid + 1 of thread encountered taskwait
 | |
| 
 | |
| #if OMP_40_ENABLED
 | |
|     /* Taskgroup */
 | |
|     offset_and_size_t  td_taskgroup;                // pointer to the current taskgroup
 | |
|     offset_and_size_t  td_task_count;               // number of allocated and not yet complete tasks
 | |
|     offset_and_size_t  td_cancel;                   // request for cancellation of this taskgroup
 | |
| 
 | |
|     /* Task dependency */
 | |
|     offset_and_size_t  td_depnode;                  // pointer to graph node if the task has dependencies
 | |
|     offset_and_size_t  dn_node;
 | |
|     offset_and_size_t  dn_next;
 | |
|     offset_and_size_t  dn_successors;
 | |
|     offset_and_size_t  dn_task;
 | |
|     offset_and_size_t  dn_npredecessors;
 | |
|     offset_and_size_t  dn_nrefs;
 | |
| #endif
 | |
|     offset_and_size_t  dn_routine;
 | |
| 
 | |
|     /* kmp_thread_data_t */
 | |
|     kmp_int32          hd_sizeof_struct;
 | |
|     offset_and_size_t  hd_deque;
 | |
|     offset_and_size_t  hd_deque_head;
 | |
|     offset_and_size_t  hd_deque_tail;
 | |
|     offset_and_size_t  hd_deque_ntasks;
 | |
|     offset_and_size_t  hd_deque_last_stolen;
 | |
| 
 | |
|     // The last field of stable version.
 | |
|     kmp_uint64         last_field;
 | |
| 
 | |
| } kmp_omp_struct_info_t;
 | |
| 
 | |
| #endif /* USE_DEBUGGER */
 | |
| 
 | |
| /* end of file */
 |