CAC 2015-08-27
tape archive
Breakpoint 1, brkbrk (arg=0, buf=0x0) at dps8_sys.c:533
533 return SCPE_OK;
(gdb) n
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4770
4770 bool ovp = (e->N1 < e->N2) && (fill & 0400) && (e->TA1 == 1) && (e->TA2 == 2); // (6-4 move)
(gdb) n
4772 bool bOvp = false; // true when a negative overpunch character has been found @ N1-1
(gdb) n
4787 if (e -> TA1 == CTA9 && // src and dst are both char 9
(gdb) n
4794 sim_debug (DBG_TRACE, & cpu_dev, "MLR special case #1\n");
(gdb) n
4795 uint nwords = e -> N2 / 4;
(gdb) n
4796 for (uint i = 0 ; i < nwords; i ++)
(gdb) p i
$1 = 8
(gdb) p nwords
$2 = 2800
(gdb) n
4798 word36 w = EISRead (& e -> ADDR1);
(gdb) s
EISRead (p=0x1987a00 <currentInstruction+3200>) at dps8_eis.c:1041
1041 word3 saveTRR = TPR . TRR;
(gdb) s
1045 if (p -> cacheValid && p -> cachedAddr == p -> address)
(gdb) s
1049 if (p -> cacheValid && p -> cacheDirty)
(gdb) s
1053 p -> cacheDirty = false;
(gdb) s
1057 if (p->mat == viaPR) //&& get_addr_mode() == APPEND_mode)
(gdb) s
1059 TPR.TRR = p->RNR;
(gdb) s
1060 TPR.TSR = p->SNR;
(gdb) s
1062 sim_debug (DBG_TRACEEXT, & cpu_dev, "%s: read %o:%06o\n", __func__, TPR . TSR, p -> address);
(gdb) p TPR
$3 = {TRR = 4 '\004', TSR = 212, TBR = 0 '\000', CA = 29604}
(gdb) n
1063 Read (p->address, &data, EIS_OPERAND_READ, true); // read data via AR/PR. TPR.{TRR,TSR} already set up
(gdb) n
1064 sim_debug (DBG_TRACEEXT, & cpu_dev, "%s: read* %012llo@%o:%06o\n", __func__, data, TPR . TSR, p -> address);
(gdb) p/o data
$4 = 0254475141424
(gdb) n
1065 }
(gdb)
1092 p -> cacheValid = true;
(gdb)
1093 p -> cachedAddr = p -> address;
(gdb)
1094 p -> cachedWord = data;
(gdb)
1096 TPR . TRR = saveTRR;
(gdb)
1097 return data;
(gdb)
1098 }
(gdb)
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4799
4799 e -> ADDR1 . address += 1;
(gdb)
4800 e -> ADDR1 . address &= AMASK;
(gdb)
4801 EISWrite (& e -> ADDR2, w);
(gdb) s
EISWrite (p=0x1987a58 <currentInstruction+3288>, data=23168598804)
at dps8_eis.c:638
638 word3 saveTRR = TPR . TRR;
(gdb) p/o *p
$6 = {address = 0242, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0311,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) n
640 if (p -> cacheValid && p -> cacheDirty && p -> cachedAddr != p -> address)
(gdb) n
644 p -> cacheValid = true;
(gdb) n
645 p -> cacheDirty = true;
(gdb) n
646 p -> cachedAddr = p -> address;
(gdb) n
647 p -> cachedWord = data;
(gdb) n
673 TPR . TRR = saveTRR;
(gdb) n
674 }
(gdb) n
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4802
4802 e -> ADDR2 . address += 1;
(gdb) n
4803 e -> ADDR2 . address &= AMASK;
(gdb) n
4796 for (uint i = 0 ; i < nwords; i ++)
(gdb) n
4798 word36 w = EISRead (& e -> ADDR1);
(gdb) n
4799 e -> ADDR1 . address += 1;
(gdb) n
4800 e -> ADDR1 . address &= AMASK;
(gdb) n
4801 EISWrite (& e -> ADDR2, w);
(gdb) s
EISWrite (p=0x1987a58 <currentInstruction+3288>, data=27100389408)
at dps8_eis.c:638
638 word3 saveTRR = TPR . TRR;
(gdb) n
640 if (p -> cacheValid && p -> cacheDirty && p -> cachedAddr != p -> address)
(gdb)
642 EISWriteCache (p);
(gdb) s
EISWriteCache (p=0x1987a58 <currentInstruction+3288>) at dps8_eis.c:598
598 word3 saveTRR = TPR . TRR;
(gdb) n
600 if (p -> cacheValid && p -> cacheDirty)
(gdb) n
602 if (p->mat == viaPR)
(gdb) n
604 TPR.TRR = p->RNR;
(gdb) n
605 TPR.TSR = p->SNR;
(gdb) n
607 sim_debug (DBG_TRACEEXT, & cpu_dev,
(gdb) n
610 Write (p->cachedAddr, p -> cachedWord, EIS_OPERAND_STORE, true); // write data
(gdb) p/o p->cachedAddr
$7 = 0242
(gdb) p/o TPR
$8 = {TRR = 04, TSR = 0311, TBR = 0, CA = 0213}
(gdb) n
611 }
(gdb) n
629 }
(gdb) n
630 p -> cacheDirty = false;
(gdb) n
631 TPR . TRR = saveTRR;
(gdb) n
632 }
(gdb)
EISWrite (p=0x1987a58 <currentInstruction+3288>, data=27100389408)
at dps8_eis.c:644
644 p -> cacheValid = true;
(gdb)
645 p -> cacheDirty = true;
(gdb)
646 p -> cachedAddr = p -> address;
(gdb)
647 p -> cachedWord = data;
(gdb)
673 TPR . TRR = saveTRR;
(gdb)
674 }
(gdb)
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4802
4802 e -> ADDR2 . address += 1;
(gdb) list
4797 {
4798 word36 w = EISRead (& e -> ADDR1);
4799 e -> ADDR1 . address += 1;
4800 e -> ADDR1 . address &= AMASK;
4801 EISWrite (& e -> ADDR2, w);
4802 e -> ADDR2 . address += 1;
4803 e -> ADDR2 . address &= AMASK;
4804 }
4805 #ifdef EIS_CACHE
4806 cleanupOperandDescriptor(1, e);
(gdb) b 4806
Breakpoint 2 at 0x425c41: file dps8_eis.c, line 4806.
(gdb) c
Continuing.
Breakpoint 1, brkbrk (arg=0, buf=0x0) at dps8_sys.c:533
533 return SCPE_OK;
(gdb)
What? It didn't get to cleanupOperandDescriptor(). It must have faulted?
Does mlr() handle restart correctly??????
(gdb) b brkbrk
Breakpoint 1 at 0x46cbc0: file dps8_sys.c, line 533.
(gdb) c
Continuing.
Breakpoint 1, brkbrk (arg=0, buf=0x0) at dps8_sys.c:533
533 return SCPE_OK;
(gdb) n
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4770
4770 bool ovp = (e->N1 < e->N2) && (fill & 0400) && (e->TA1 == 1) && (e->TA2 == 2); // (6-4 move)
(gdb) p/o e->addr[0]
$1 = {address = 0212, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0324,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) p/o e->addr[1]
$2 = {address = 0242, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0311,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) c
Continuing.
Breakpoint 1, brkbrk (arg=0, buf=0x0) at dps8_sys.c:533
533 return SCPE_OK;
(gdb) n
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4770
4770 bool ovp = (e->N1 < e->N2) && (fill & 0400) && (e->TA1 == 1) && (e->TA2 == 2); // (6-4 move)
(gdb) p/o e->addr[0]
$3 = {address = 0212, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0324,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) p/o e->addr[1]
$4 = {address = 0242, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0311,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) c
Continuing.
Breakpoint 1, brkbrk (arg=0, buf=0x0) at dps8_sys.c:533
533 return SCPE_OK;
(gdb) n
mlr (ins=0x1986d80 <currentInstruction>) at dps8_eis.c:4770
4770 bool ovp = (e->N1 < e->N2) && (fill & 0400) && (e->TA1 == 1) && (e->TA2 == 2); // (6-4 move)
(gdb) p/o e->addr[0]
$5 = {address = 0212, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0324,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) p/o e->addr[1]
$6 = {address = 0242, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0311,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) c
Continuing.
I can't catch the OOB in the MLR; it must be coming from somewhere else…
This looks bad….
mlr srcCN:0 dstCN:0 srcSZ:9 dstSZ:9 T:0 fill:000/000 N1:2086024 N2:2086024 ADDR1:000242 ADDR2:000000
(gdb) p/o e->addr[0]
$1 = {address = 0242, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0311,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) p/o e->addr[1]
$2 = {address = 0, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0326,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}
(gdb) p/o *e
$4 = {ins = 0146066600, op0 = 0140100540, op = {0100000000006, 0300000000006,
0}, P = 0, T = 0, F = 0, R = 0, BOLR = 0, MF = {0140, 0140, 0}, YBit = {0,
0, 0}, CN = {0, 0, 0}, C = {0, 0, 0}, B = {0, 0, 0}, N = {07752210,
07752210, 0}, TN = {0, 0, 0}, TA = {0, 0, 0}, S = {0, 0, 0}, SF = {0, 0,
0}, effBITNO = 0, effCHAR = 0, effWORDNO = 0, _flags = 0, _faults = 0,
x = 00000000000000000000000000000000000000000000,
y = 00000000000000000000000000000000000000000000,
z = 00000000000000000000000000000000000000000000, buff = {
0 <repeats 2560 times>}, p = 0, q = 0, editInsertionTable = {0, 0, 0, 0,
0, 0, 0, 0}, mop9 = 0, mop = 0, mopIF = 0, m = 0, inBuffer = {
0 <repeats 64 times>}, in = 0, outBuffer = {0 <repeats 64 times>},
out = 0, outPos = 0, exponent = 0, sign = 0, mopAddress = 0, mopTally = 0,
mopCN = 0, mopPos = 0, mopES = 0, mopSN = 0, mopZ = 0, mopBZ = 0, addr = {{
address = 0242, data = 0, bit = 0, incr = 0, decr = 0, mode = 0,
_type = 01, TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0311,
RNR = 04, mat = 011, cacheValid = 0, cacheDirty = 0, cachedWord = 0,
cachedAddr = 0, e = 0146066640}, {address = 0, data = 0, bit = 0,
incr = 0, decr = 0, mode = 0, _type = 01, TA = 0, TN = 0, SZ = 0,
cPos = 0, bPos = 0, SNR = 0326, RNR = 04, mat = 011, cacheValid = 0,
cacheDirty = 0, cachedWord = 0, cachedAddr = 0, e = 0146066640}, {
address = 0, data = 0, bit = 0, incr = 0, decr = 0, mode = 0, _type = 0,
TA = 0, TN = 0, SZ = 0, cPos = 0, bPos = 0, SNR = 0, RNR = 0, mat = 05,
cacheValid = 0, cacheDirty = 0, cachedWord = 0, cachedAddr = 0,
e = 0146066640}}, srcTally = 0, srcTA = 0, srcTN = 0, srcSZ = 011,
srcCN = 0, srcTA2 = 0, srcTN2 = 0, srcSZ2 = 0, srcCN2 = 0, dstTally = 0,
dstTA = 0, dstTN = 0, dstSZ = 011, dstCN = 0, mvne = 0}
(gdb) p/o PPR.PSR
$5 = 0310
(gdb) p/o PPR.IC
$6 = 04605
pbm bound_nstd_
bound_nstd_ 08/27/93 1654.6 pdt Fri
Bindmap for >user_dir_dir>SysEng>Anthony>bound_nstd_
Created on 08/26/93 1746.9 pdt Thu, by Anthony.SysEng.a
using Multics Binder, Version 12 of Tuesday, March 26, 1985
>user_dir_dir>SysEng>Anthony>bound_nstd_.archive
Object Text Defs Link Symb Static
Start 0 0 5112 5530 5622 5540
Length 14000 5112 416 72 5150 6
Component Text Int-Stat Symbol
Start Length Start Length Start Length
nstd_ 0 32 0 0 100 102
nstd_dim 32 5060 0 6 202 4652
Bindfile
bound_nstd_.bind
04605-32 -> 4553
Huh. That is the MLR is was originally looking for. Got my wires crossed somewhere…
(gdb) p rQ
$9 = 68719465608
(gdb) p/o rQ
$10 = 0777777752210
Okay, tseg.buffer_size is clearly wrong.
Stopped before line 406 of tape_nstd_attach. (level 6)
sc
call iox_$ios_call (addr (ics), bufptr, 0, (min (blkptr -> blk.maxbuf
\c, divide (buflen, 4, 17, 0))), nn, status);
step
Error: out_of_bounds at nstd_dim$nstd_read|4166
(>system_library_standard>bound_nstd_)
referencing nstd_sdb1_|776000 (in process dir)
Attempt to access beyond end of segment.
Meh.
probe
Condition out_of_bounds raised at nstd_read|4220 (level 7).
sk
12 command_processor_
11 release_stack
10 unclaimed_signal
9 wall
8 any_other.2
7 nstd_read out_of_bounds
6 tape_nstd_attach (line 406)
5 read_record
4 io_call
3 command_processor_
2 listen_
1 initialize_process_
page revision: 1, last edited: 28 Aug 2015 02:03