1 #ifndef _STACK_HEADER_H
2 #define _STACK_HEADER_H
6 // see pl1/stack_header.incl.pl1
8 // dcl sb ptr; /* the main pointer to the stack header */
10 // dcl 1 stack_header based (sb) aligned,
12 // 2 pad1 (4) fixed bin, /* (0) also used as arg list by outward_call_handler */
15 // 2 cpm_data_ptr ptr, /* (4) pointer to control point which owns this stack */
16 struct its_pointer cpm_data_ptr;
18 // 2 combined_stat_ptr ptr, /* (6) pointer to area containing separate static */
19 struct its_pointer combined_stat_ptr;
21 // 2 clr_ptr ptr, /* (8) pointer to area containing linkage sections */
22 struct its_pointer clr_ptr;
24 // 2 max_lot_size fixed bin (17) unal, /* (10) DU number of words allowed in lot */
25 // 2 main_proc_invoked fixed bin (11) unal, /* (10) DL nonzero if main procedure invoked in run unit */
26 // 2 have_static_vlas bit (1) unal, /* (10) DL "1"b if (very) large arrays are being used in static */
27 // 2 pad4 bit (2) unal,
28 // 2 run_unit_depth fixed bin (2) unal, /* (10) DL number of active run units stacked */
29 int64_t unit_depth : 3;
31 uint64_t have_static_vlas : 1;
32 int64_t main_proc_invoked : 12;
33 int64_t max_lot_size : 18;
36 // 2 cur_lot_size fixed bin (17) unal, /* (11) DU number of words (entries) in lot */
37 // 2 cpm_enabled bit (18) unal, /* (11) DL non-zero if control point management is enabled */
38 uint64_t cpm_enabled : 18;
39 int64_t cur_lot_size : 18;
42 // 2 system_free_ptr ptr, /* (12) pointer to system storage area */
43 struct its_pointer system_free_ptr;
45 // 2 user_free_ptr ptr, /* (14) pointer to user storage area */
46 struct its_pointer user_free_ptr;
48 // 2 null_ptr ptr, /* (16) */
49 struct its_pointer null_ptr;
51 // 2 stack_begin_ptr ptr, /* (18) pointer to first stack frame on the stack */
52 struct its_pointer stack_begin_ptr;
54 // 2 stack_end_ptr ptr, /* (20) pointer to next useable stack frame */
55 struct its_pointer stack_end_ptr;
57 // 2 lot_ptr ptr, /* (22) pointer to the lot for the current ring */
58 struct its_pointer lot_ptr;
60 // 2 signal_ptr ptr, /* (24) pointer to signal procedure for current ring */
61 struct its_pointer signal_ptr;
63 // 2 bar_mode_sp ptr, /* (26) value of sp before entering bar mode */
64 struct its_pointer bar_mode_sp;
66 // 2 pl1_operators_ptr ptr, /* (28) pointer to pl1_operators_$operator_table */
67 struct its_pointer pl1_operators_ptr;
69 // 2 call_op_ptr ptr, /* (30) pointer to standard call operator */
70 struct its_pointer call_op_ptr;
72 // 2 push_op_ptr ptr, /* (32) pointer to standard push operator */
73 struct its_pointer push_op_ptr;
75 // 2 return_op_ptr ptr, /* (34) pointer to standard return operator */
76 struct its_pointer return_op_ptr;
78 // 2 return_no_pop_op_ptr
79 // ptr, /* (36) pointer to standard return / no pop operator */
80 struct its_pointer no_pop_op_ptr;
82 // 2 entry_op_ptr ptr, /* (38) pointer to standard entry operator */
83 struct its_pointer entry_op_ptr;
85 // 2 trans_op_tv_ptr ptr, /* (40) pointer to translator operator ptrs */
86 struct its_pointer trans_op_tv_ptr;
88 // 2 isot_ptr ptr, /* (42) pointer to ISOT */
89 struct its_pointer isot_ptr;
91 // 2 sct_ptr ptr, /* (44) pointer to System Condition Table */
92 struct its_pointer sct_ptr;
94 // 2 unwinder_ptr ptr, /* (46) pointer to unwinder for current ring */
95 struct its_pointer unwinder_ptr;
97 // 2 sys_link_info_ptr ptr, /* (48) pointer to *system link name table */
98 struct its_pointer sys_link_info_ptr;
100 // 2 rnt_ptr ptr, /* (50) pointer to Reference Name Table */
101 struct its_pointer rnt_ptr;
103 // 2 ect_ptr ptr, /* (52) pointer to event channel table */
104 struct its_pointer ect_ptr;
106 // 2 assign_linkage_ptr ptr, /* (54) pointer to storage for (obsolete) hcs_$assign_linkage */
107 struct its_pointer assign_linkage_ptr;
109 // 2 heap_header_ptr ptr, /* (56) pointer to the heap header for this ring */
110 struct its_pointer heap_header_ptr;
114 // 4 count fixed bin, /* (58) number of trace frames */
115 int64_t trace_frames_count;
117 // 4 top_ptr ptr unal, /* (59) pointer to last trace frame */
118 uint64_t trace_frames_top_ptr;
120 // 3 in_trace bit (36) aligned, /* (60) trace antirecursion flag */
121 uint64_t trace_in_trace;
123 // 2 pad2 bit (36), /* (61) */
126 // 2 pad5 pointer; /* (62) pointer to future stuff */
127 struct its_pointer pad5;
130 /* The following offset refers to a table within the pl1 operator table. */
132 // dcl tv_offset fixed bin init (361) internal static;
134 #define TV_OFFSET 361
136 /* The following constants are offsets within this transfer vector table. */
140 // call_offset fixed bin init (271),
143 // push_offset fixed bin init (272),
146 // return_offset fixed bin init (273),
149 // return_no_pop_offset fixed bin init (274),
152 // entry_offset fixed bin init (275)
154 // ) internal static;
157 /* The following declaration is an overlay of the whole stack header. Procedures which
158 move the whole stack header should use this overlay.
161 // dcl stack_header_overlay (size (stack_header)) fixed bin based (sb);