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_
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License