Trailing-Edge
-
PDP-10 Archives
-
BB-P363B-SM_1985
-
mcb/mcbda/mdatcb.bli
There is 1 other file named mdatcb.bli in the archive. Click here to see a list.
MODULE TCB ( !Display RSX11 task information.
IDENT = '003010',
LANGUAGE (BLISS16, BLISS36)
) =
BEGIN
!
! COPYRIGHT (c) 1980, 1981, 1982
! DIGITAL EQUIPMENT CORPORATION
! Maynard, Massachusetts
!
! This software is furnished under a license and may be used
! and copied only in accordance with the terms of such license
! and with the inclusion of the above copyright notice. This
! software or any other copies thereof may not be provided or
! otherwise made available to any other person. No title to
! and ownership of the software is hereby transferred.
!
! The information in this software is subject to change
! without notice and should not be construed as a commitment
! by DIGITAL EQUIPMENT CORPORATION.
!
! DIGITAL assumes no responsibility for the use or reliability
! of its software on equipment which is not supplied by
! DIGITAL.
!
!++
! FACILITY: MCBDA - MCB Crash Dump Analyzer.
!
! ABSTRACT:
!
! This module contains the routines to display Task Control Block (TCB)
! information.
!
! ENVIRONMENT: ANY
!
! AUTHOR: ALAN D. PECKHAM , CREATION DATE: 12-SEP-78
!
! MODIFIED BY:
!
! Alan D. Peckham, 10-Jul-80: VERSION 3
! 01 - Update RSX symbol references.
!--
!
! TABLE OF CONTENTS:
!
FORWARD ROUTINE
ATL : NOVALUE, !
STD : NOVALUE, !
FXD : NOVALUE, !
DMPTCB : NOVALUE, !
DMPRCQ : NOVALUE, !
DMPMCR : NOVALUE, !
DMPAST : NOVALUE, !
DMPRRQ : NOVALUE, !
DMPLBN : NOVALUE, !
DMPDEV : NOVALUE; !
!
! INCLUDE FILES:
!
LIBRARY 'MDACOM'; !MDA common definitions.
LIBRARY 'RSXLIB'; !RSX definitions.
!
! MACROS:
!
!
! EQUATED SYMBOLS:
!
literal
R_LGTH = 18*2, !18 wordsin a receive block.
R_LNTH = 18*2, !18 words in receive by reference.
M_LGTH = 80, !80 bytes in MCR buffer.
ATL_FLAG = 0,
STD_FLAG = 1,
FIX_FLAG = 2;
field
PRESTP =
[%fieldexpand (T2_STP, 0), %fieldexpand (T2_STP, 1) + 1, %fieldexpand (T2_STP, 2),
%fieldexpand (T2_STP,
3)], !Pre-AST status bits.
PRESPN =
[%fieldexpand (T2_SPN, 0), %fieldexpand (T2_SPN, 1) + 1, %fieldexpand (T2_SPN, 2),
%fieldexpand (T2_SPN,
3)],
PREWFR =
[%fieldexpand (T2_WFR, 0), %fieldexpand (T2_WFR, 1) + 1, %fieldexpand (T2_WFR, 2),
%fieldexpand (T2_WFR,
3)];
!
! OWN STORAGE:
!
OWN
DISPLAY_FLAGS,
MCRFLG;
BIND
DISPLAY_FLAG = DISPLAY_FLAGS : BITVECTOR [3];
!
! EXTERNAL REFERENCES:
!
EXTERNAL ROUTINE
GETWRD,
GETBYT,
SBTTL : NOVALUE,
SKIP : NOVALUE,
BITLS : NOVALUE,
VMADMP : NOVALUE,
$CBTA;
EXTERNAL
FLAGS : BITVECTOR [M_MAX_BITS];
GLOBAL ROUTINE ATL : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
DISPLAY_FLAGS = 0;
DISPLAY_FLAG [ATL_FLAG] = 1;
SBTTL (CH$ASCIZ ('ACTIVE TASKS'));
DMPTCB (RSX_MAX_ATL);
END; !End of ATL
GLOBAL ROUTINE STD : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
DISPLAY_FLAGS = 0;
DISPLAY_FLAG [STD_FLAG] = 1;
SBTTL (CH$ASCIZ ('SYSTEM TASK DIRECTORY'));
DMPTCB (RSX_MAX_STD);
END; !End of STD
GLOBAL ROUTINE FXD : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
DISPLAY_FLAGS = 0;
DISPLAY_FLAG [FIX_FLAG] = 1;
SBTTL (CH$ASCIZ ('FIXED TASKS'));
DMPTCB (RSX_MAX_FXD);
END; !End of FIX
ROUTINE DMPTCB (RSX_MAX_TCBS) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LOCAL
ENTRY_COUNT,
TCB_ADR;
IF NOT SYMBOL_TABLE ('RSX11S') THEN RETURN;
ENTRY_COUNT = .RSX_MAX_TCBS;
TCB_ADR = SYMBOL ($TSKHD) - FL$OFFSET (T_TCBL);
WHILE GETWRD ((TCB_ADR = GETWRD (.TCB_ADR + FL$OFFSET (T_TCBL))) + FL$OFFSET (T_TCBL)) NEQ 0 DO
BEGIN
IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0 THEN RETURN PUTLN (1, CH$ASCIZ (WARNING, 'TOO MANY TASKS'));
IF (.DISPLAY_FLAG [STD_FLAG]) OR (.DISPLAY_FLAG [ATL_FLAG] AND FL$SET (GETWRD (.TCB_ADR + FL$OFFSET (
T_STAT)), TS_EXE)) OR (.DISPLAY_FLAG [FIX_FLAG] AND FL$SET (GETWRD (.TCB_ADR +
FL$OFFSET (T_ST2)), T2_FXD))
THEN
BEGIN
LOCAL
ADR,
LBN : VECTOR [2];
BIND
NAME_0 = GETWRD (.TCB_ADR + FL$OFFSET (T_NAM) + 0),
NAME_1 = GETWRD (.TCB_ADR + FL$OFFSET (T_NAM) + 2),
STATUS = GETWRD (.TCB_ADR + FL$OFFSET (T_STAT)),
PCB_ADR = GETWRD (.TCB_ADR + FL$OFFSET (T_PCB)),
HEADER_ADR = GETWRD (PCB_ADR + SYMBOL ('P.HDR'));
MCRFLG = FL$SET (GETWRD (.TCB_ADR + FL$OFFSET (T_ST3)), T3_CLI);
IF (NAME_0 EQL RAD50_WORD ('...') AND NAME_1 EQL RAD50_WORD ('MCR')) THEN MCRFLG = 2;
PUTLN (2, CH$ASCIZ (' %2R'), NAME_0, NAME_1);
PUTLN (0, CH$ASCIZ (' ------'));
PUTLN (1, CH$ASCIZ ('%4STCB ADDRESS = %P PAR = %2R PCB ADDRESS = %P'), .TCB_ADR,
GETWRD (PCB_ADR + FL$OFFSET (P_NAM) + 0), GETWRD (PCB_ADR + FL$OFFSET (P_NAM) + 2), PCB_ADR);
LBN [0] = GETBYT (.TCB_ADR + FL$OFFSET (T_LBN));
LBN [1] = GETWRD (.TCB_ADR + FL$OFFSET (T_LBN) + 1);
PUTLN (0, CH$ASCIZ ('%4SLOAD ADDRESS = %P00 LOAD DEVICE = %@ LBN = %@'),
(GETWRD (PCB_ADR + FL$OFFSET (P_REL)) + GETWRD (GETWRD (HEADER_ADR + FL$OFFSET (H_WND)) +
FL$OFFSET (W_BOFF) + 2)), DMPDEV, GETWRD (.TCB_ADR + FL$OFFSET (T_LDV)), DMPLBN, LBN);
PUTLN (0, CH$ASCIZ ('%4SPRI = %D. I/O COUNT = %D. UIC = [%O,%O] TI = %@'),
GETBYT (.TCB_ADR + FL$OFFSET (T_PRI)), GETBYT (.TCB_ADR + FL$OFFSET (T_IOC)),
GETBYT (HEADER_ADR + FL$OFFSET (H_CUIC) + 1), GETBYT (HEADER_ADR + FL$OFFSET (H_CUIC) + 0),
DMPDEV, GETWRD (.TCB_ADR + FL$OFFSET (T_UCB)));
PUTLN (0, CH$ASCIZ ('%4SMAX SIZE = %P EVENT FLAGS = <1-16> %P <17-32> %P'),
GETWRD (.TCB_ADR + FL$OFFSET (T_MXSZ)), GETWRD (.TCB_ADR + FL$OFFSET (T_EFLG) + 0),
GETWRD (.TCB_ADR + FL$OFFSET (T_EFLG) + 2));
BEGIN
BIND
TASK_STAT = FIELDS_LIST (('TS.EXE', '-TS.EXE'), 'TS.RDN', 'TS.MSG', 'TS.NRP', 'TS.OUT',
'TS.CKP', 'TS.CKR');
PUTLN (0, CH$ASCIZ ('%4ST.STAT: %@'), BITLS, TASK_STAT, STATUS)
END;
BEGIN
BIND
TASK_ST2 = FIELDS_LIST ('T2.AST', 'T2.DST', ('T2.CHK', '-T2.CHK'), 'T2.CKD', 'T2.BFX',
'T2.FXD', 'T2.TIO', 'T2.CAF', 'T2.HLT', 'T2.ABO', 'T2.STP', 'T2.SPN', 'T2.WFR'),
TASK_ST2_PRE = FIELD_LIST (('PRESTP', 'T2.STPA'), ('PRESPN', 'T2.SPNA'),
('PREWFR', 'T2.WFRA'));
PUTLN (0,
(IF FL$SET (STATUS, T2_AST) THEN CH$ASCIZ ('%4ST.ST2: %@') ELSE CH$ASCIZ ('%4ST.ST2: %@%@'
)), BITLS, TASK_ST2, (ADR = GETWRD (.TCB_ADR + FL$OFFSET (T_ST2))), BITLS, TASK_ST2_PRE,
.ADR)
END;
BEGIN
BIND
TASK_ST3 = FIELDS_LIST ('T3.ACP', ('T3.PMD', '-T3.PMD'), 'T3.REM', 'T3.PRV', 'T3.MCR',
'T3.SLV', 'T3.CLI', 'T3.RST', 'T3.NSD', 'T3.CAL', 'T3.ROV', 'T3.NET');
PUTLN (0, CH$ASCIZ ('%4ST.ST3: %@'), BITLS, TASK_ST3, GETWRD (.TCB_ADR + FL$OFFSET (T_ST3)))
END;
IF .FLAGS [M_RSX_DUMP]
THEN
BEGIN
SKIP (1);
VMADMP (0, .TCB_ADR, .TCB_ADR + SYMBOL ('T.LGTH'));
SKIP (1);
END;
IF .DISPLAY_FLAG [ATL_FLAG]
THEN
BEGIN
DMPRCQ (.TCB_ADR); !Dump the receive queue.
IF .MCRFLG EQL 2 THEN DMPMCR (.TCB_ADR); !Dump the MCR command buffer.
DMPAST (.TCB_ADR); !Dump the AST queue
DMPRRQ (.TCB_ADR); !Dump the receive by reference queue.
END;
END;
END;
END; !End of DMPTCB
ROUTINE DMPRCQ (TCB_ADDRESS) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LOCAL
ENTRY_COUNT,
RCV_ADDRESS;
IF (RCV_ADDRESS = GETWRD (.TCB_ADDRESS + FL$OFFSET (T_RCVL))) NEQ 0
THEN
BEGIN
PUTLN (1, CH$ASCIZ ('%6SRECEIVE QUEUE'));
PUTLN (0, CH$ASCIZ ('%6S-------------'));
ENTRY_COUNT = RSX_MAX_RCQ;
DO
BEGIN
IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0
THEN
RETURN PUTLN (1,
CH$ASCIZ (WARNING,
'LIST TOO LONG'));
IF .MCRFLG LEQ 0
THEN
BEGIN
PUTLN (1, CH$ASCIZ ('%6SRECEIVE BLOCK ADDRESS = %P'), .RCV_ADDRESS);
SKIP (1);
VMADMP (0, .RCV_ADDRESS, .RCV_ADDRESS + R_LGTH);
END
ELSE
BEGIN
PUTLN (1, CH$ASCIZ ('%6SCOMMAND LINE INPUT BUFFER ADDRESS = %P UCB = %P'), .RCV_ADDRESS,
GETWRD (.RCV_ADDRESS + 2));
SKIP (1);
VMADMP (0, .RCV_ADDRESS, .RCV_ADDRESS + M_LGTH);
END;
END
WHILE (RCV_ADDRESS = GETWRD (.RCV_ADDRESS)) NEQ 0;
END;
END; !End of DMPRCQ
ROUTINE DMPMCR (TCB_ADDRESS) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LOCAL
ENTRY_COUNT,
CMD_ADDRESS,
UCB_ADDRESS;
IF (CMD_ADDRESS = GETWRD (SYMBOL ($MCRCB))) NEQ 0
THEN
BEGIN
PUTLN (1, CH$ASCIZ ('%6SMCR COMMAND BLOCKS'));
PUTLN (0, CH$ASCIZ ('%6S------------------'));
ENTRY_COUNT = RSX_MAX_MCR;
DO
BEGIN
IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0
THEN
RETURN PUTLN (1,
CH$ASCIZ (WARNING,
'LIST TOO LONG'));
PUTLN (1, CH$ASCIZ ('%6SBUFFER ADDRESS = %P UCB = %P'), .CMD_ADDRESS,
(UCB_ADDRESS = GETWRD (.CMD_ADDRESS + 2)));
SKIP (1);
VMADMP (0, .CMD_ADDRESS, .CMD_ADDRESS + (IF .UCB_ADDRESS THEN 2 ELSE 84));
END
WHILE (CMD_ADDRESS = GETWRD (.CMD_ADDRESS)) NEQ 0;
END;
END; !End of DMPMCR
ROUTINE DMPAST (TCB_ADDRESS) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LOCAL
ENTRY_COUNT,
AST_ADDRESS,
PARAMETERS;
IF (AST_ADDRESS = GETWRD (.TCB_ADDRESS + FL$OFFSET (T_ASTL))) NEQ 0
THEN
BEGIN
PUTLN (1, CH$ASCIZ ('%6SAST QUEUE'));
PUTLN (0, CH$ASCIZ ('%6S---------'));
ENTRY_COUNT = RSX_MAX_AST;
DO
BEGIN
IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0
THEN
RETURN PUTLN (1,
CH$ASCIZ (WARNING,
'LIST TOO LONG'));
PUTLN (1, CH$ASCIZ ('%6SAST BLOCK ADDRESS = %P A.CBL = %P'), .AST_ADDRESS,
GETWRD (.AST_ADDRESS + FL$OFFSET (A_CBL)));
PUTLN (0, CH$ASCIZ ('%6SA.BYT = %P A.AST = %P A.NPR = %P'),
GETWRD (.AST_ADDRESS + FL$OFFSET (A_BYT)), GETWRD (.AST_ADDRESS + FL$OFFSET (A_AST)),
(PARAMETERS = GETWRD (.AST_ADDRESS + FL$OFFSET (A_NPR))));
SKIP (1);
VMADMP (0, .AST_ADDRESS, .AST_ADDRESS + A_LGTH^1 + .PARAMETERS);
END
WHILE (AST_ADDRESS = GETWRD (.AST_ADDRESS)) NEQ 0;
END;
END; !End of DMPAST
ROUTINE DMPRRQ (TCB_ADDRESS) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! FORMAL PARAMETERS:
!
! NONE
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS:
!
! NONE
!
!--
BEGIN
LOCAL
ENTRY_COUNT;
ENTRY_COUNT = RSX_MAX_RRQ;
IF (ENTRY_COUNT = .ENTRY_COUNT - 1) LSS 0 THEN RETURN PUTLN (1, CH$ASCIZ (WARNING, 'LIST TOO LONG'));
END; !End of DMPRRQ
ROUTINE DMPLBN (BUF_PTR_ADR, PAT_PTR_ADR, PRM_LST_ADR_ADR) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! The next parameters are:
! VALUE
!
! FORMAL PARAMETERS:
!
! ..BUF_PTR_ADR !Pointer to output buffer.
! ..PAT_PTR_ADR !Pointer to pattern string.
! ..PRM_LST_ADR_ADR !Pointer to next parameter.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
FLAG = 4^11 + 1^9 + 8;
LOCAL
PRM_LST : REF VECTOR,
VALUE : REF BLOCK [2];
PRM_LST = ..PRM_LST_ADR_ADR;
VALUE = .PRM_LST [0];
.PRM_LST_ADR_ADR = PRM_LST [1];
$CBTA (.BUF_PTR_ADR, .VALUE [1, 12, 4, 0] + .VALUE [0, 0, 8, 0]^5, FLAG) + $CBTA (.BUF_PTR_ADR,
.VALUE [1, 0, 12, 0], FLAG)
END; !End of DMPLBN
ROUTINE DMPDEV (BUF_PTR_ADR, PAT_PTR_ADR, PRM_LST_ADR_ADR) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION:
!
!
! The next parameters are:
! UCB_ADDRESS
!
! FORMAL PARAMETERS:
!
! ..BUF_PTR_ADR !Pointer to output buffer.
! ..PAT_PTR_ADR !Pointer to pattern string.
! ..PRM_LST_ADR_ADR !Pointer to next parameter.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! NONE
!
! ROUTINE VALUE:
!
! NONE
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LOCAL
PRM_LST : REF VECTOR,
BUF_PTR_INI,
UCB_ADDRESS;
PRM_LST = ..PRM_LST_ADR_ADR;
UCB_ADDRESS = .PRM_LST [0];
.PRM_LST_ADR_ADR = PRM_LST [1];
BUF_PTR_INI = ..BUF_PTR_ADR;
IF .UCB_ADDRESS NEQ 0
THEN
BEGIN
LOCAL
DCB_ADDRESS,
UNIT;
EXTERNAL ROUTINE
$CBOMG;
DCB_ADDRESS = GETWRD (.UCB_ADDRESS + FL$OFFSET (U_DCB));
CH$WCHAR_A (GETBYT (.DCB_ADDRESS + FL$OFFSET (D_NAM) + 0), .BUF_PTR_ADR);
CH$WCHAR_A (GETBYT (.DCB_ADDRESS + FL$OFFSET (D_NAM) + 1), .BUF_PTR_ADR);
UNIT = ((.UCB_ADDRESS - GETWRD (.DCB_ADDRESS + FL$OFFSET (D_UCB)))/GETWRD (.DCB_ADDRESS + FL$OFFSET (
D_UCBL))) + GETBYT (.DCB_ADDRESS + FL$OFFSET (D_UNIT));
$CBOMG (.BUF_PTR_ADR, .UNIT, 0);
END
ELSE
.BUF_PTR_ADR = CH$MOVE (4, CH$ASCIZ ('NONE'), ..BUF_PTR_ADR);
CH$DIFF (..BUF_PTR_ADR, .BUF_PTR_INI)
END; !End of DMPDEV
END !End of module
ELUDOM