1 /*        BEGIN INCLUDE FILE ... stack_frame.incl.pl1 ... */
 2 
 3 /* format: off */
 4 
 5 /* Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr and pl1_ps_ptr */
 6 /* Modified:  3 Feb 1978, P. Krupp - to add run_unit_manager bit & main_proc bit */
 7 /* Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr */
 8 /* Modified: 03/01/84, S. Herbst - Added RETURN_PTR_MASK */
 9 
10 
11 /****^  HISTORY COMMENTS:
12   1) change(86-09-15,Kissel), approve(86-09-15,MCR7473),
13      audit(86-10-01,Fawcett), install(86-11-03,MR12.0-1206):
14      Modified to add constants for the translator_id field in the stack_frame
15      structure.
16                                                    END HISTORY COMMENTS */
17 
18 
19 dcl RETURN_PTR_MASK bit (72) int static options (constant)  /* mask to be AND'd with stack_frame.return_ptr */
20           init ("777777777777777777000000"b3);              /* when copying, to ignore bits that a call fills */
21                                                             /* with indicators (nonzero for Fortran hexfp caller) */
22                               /* say: unspec(ptr) = unspec(stack_frame.return_ptr) & RETURN_PTR_MASK; */
23 
24 dcl TRANSLATOR_ID_PL1V2 bit (18) internal static options (constant) init ("000000"b3);
25 dcl TRANSLATOR_ID_ALM bit (18) internal static options (constant) init ("000001"b3);
26 dcl TRANSLATOR_ID_PL1V1 bit (18) internal static options (constant) init ("000002"b3);
27 dcl TRANSLATOR_ID_SIGNAL_CALLER bit (18) internal static options (constant) init ("000003"b3);
28 dcl TRANSLATOR_ID_SIGNALLER bit (18) internal static options (constant) init ("000004"b3);
29 
30 
31 dcl  sp pointer;                                            /* pointer to beginning of stack frame */
32 
33 dcl  stack_frame_min_length fixed bin static init(48);
34 
35 
36 dcl 1 stack_frame based(sp) aligned,
37     2 pointer_registers(0 : 7) ptr,
38     2 prev_sp pointer,
39     2 next_sp pointer,
40     2 return_ptr pointer,
41     2 entry_ptr pointer,
42     2 operator_and_lp_ptr ptr,                              /* serves as both */
43     2 arg_ptr pointer,
44     2 static_ptr ptr unaligned,
45     2 support_ptr ptr unal, /* only used by fortran I/O */
46     2 on_unit_relp1 bit(18) unaligned,
47     2 on_unit_relp2 bit(18) unaligned,
48     2 translator_id bit(18) unaligned,                      /* Translator ID (see constants above)
49                                                                0 => PL/I version II
50                                                                1 => ALM
51                                                                2 => PL/I version I
52                                                                3 => signal caller frame
53                                                                4 => signaller frame */
54     2 operator_return_offset bit(18) unaligned,
55     2 x(0: 7) bit(18) unaligned,                            /* index registers */
56     2 a bit(36),                                            /* accumulator */
57     2 q bit(36),                                            /* q-register */
58     2 e bit(36),                                            /* exponent */
59     2 timer bit(27) unaligned,                                        /* timer */
60     2 pad bit(6) unaligned,
61     2 ring_alarm_reg bit(3) unaligned;
62 
63 
64 dcl 1 stack_frame_flags based(sp) aligned,
65     2 pad(0 : 7) bit(72),                                   /* skip over prs */
66     2 xx0 bit(22) unal,
67     2 main_proc bit(1) unal,                                /* on if frame belongs to a main procedure */
68     2 run_unit_manager bit(1) unal,                         /* on if frame belongs to run unit manager */
69     2 signal bit(1) unal,                                   /* on if frame belongs to logical signal_ */
70     2 crawl_out bit(1) unal,                                /* on if this is a signal caller frame */
71     2 signaller bit(1) unal,                                /* on if next frame is signaller's */
72     2 link_trap bit(1) unal,                                /* on if this frame was made by the linker */
73     2 support bit(1) unal,                                  /* on if frame belongs to a support proc */
74     2 condition bit(1) unal,                                /* on if condition established in this frame */
75     2 xx0a bit(6) unal,
76     2 xx1 fixed bin,
77     2 xx2 fixed bin,
78     2 xx3 bit(25) unal,
79     2 old_crawl_out bit (1) unal,                           /* on if this is a signal caller frame */
80     2 old_signaller bit(1) unal,                            /* on if next frame is signaller's */
81     2 xx3a bit(9) unaligned,
82     2 xx4(9) bit(72) aligned,
83     2 v2_pl1_op_ret_base ptr,                               /* When a V2 PL/I program calls an operator the
84                                                             *  operator puts a pointer to the base of
85                                                             *  the calling procedure here. (text base ptr)  */
86     2 xx5 bit(72) aligned,
87     2 pl1_ps_ptr ptr;                                       /* ptr to ps for this frame; also used by fio. */
88 
89 /* format: on */
90 
91 /*        END INCLUDE FILE ... stack_frame.incl.pl1 */