Annotation of cci/d/memman/vbit_limit.s, revision 1.1.1.1

1.1       root        1: LL0:
                      2:        .data
                      3:        .set SBR,0
                      4:        .set SLR,1
                      5:        .set P0BR,2
                      6:        .set P0LR,3
                      7:        .set P1BR,4
                      8:        .set P1LR,5
                      9:        .set P2BR,6
                     10:        .set P2LR,7
                     11:        .set IPL,8
                     12:        .set MAPEN,9
                     13:        .set MME,9
                     14:        .set TBIA,10
                     15:        .set TBIS,11
                     16:        .set DCK,12
                     17:        .set CCK,13
                     18:        .set PCBB,14
                     19:        .set KSP,19
                     20:        .set USP,20
                     21:        .set CPMDCB,21
                     22:        .set PADC,25
                     23:        .set DCR,27
                     24:        .set DC_ON,1
                     25:        .set DC_OFF,2
                     26:        .set TB_ON,256
                     27:        .set TB_OFF,512
                     28:        .text
                     29:        .align  1
                     30:        .globl  _vl_test
                     31: _vl_test:
                     32:        .word   L39
                     33:  # 
                     34:  # 
                     35:  # #include "definitions"
                     36:  # 
                     37:  # extern long iob0, iob1, iob2, iob3, ss1;
                     38:  # extern long unused, u0p1pt, u0p2pt, scb, savvec4, savvec5, savvec6, savvec7;
                     39:  # extern long *p_ptr, ret_adr, exp_par0, exp_par1, exp_par2, exp_par3;
                     40:  # extern long savvec3 ,act_par0, act_par1, act_par2, act_par3;
                     41:  # extern long Failpc, test_va, Tpsl;
                     42:  # 
                     43:  # vl_test()
                     44:  # {   long *temp;
                     45:        jbr     L41
                     46: L42:
                     47:  # 
                     48:  #     if (ss1) writes("** Subtest3 : Limit and translation fault\n");
                     49:        tstl    _ss1
                     50:        jeql    L43
                     51:        .data   1
                     52: L45:
                     53:        .ascii  "** Subtest3 : Limit and translation fault\12\0"
                     54:        .text
                     55:        pushl   $L45
                     56:        callf   $8,_writes
                     57:  #     temp = (long *)0;
                     58: L43:
                     59:        clrl    -56(fp)
                     60:  #     asm("mfpr $SBR,_savvec4");
                     61: mfpr $SBR,_savvec4
                     62:  #     savvec4 |= 0xc0000000;
                     63:        orl2    $-1073741824,_savvec4
                     64:  #     asm("mtpr _savvec4,$P0BR");     /* Double map P0 into System space */
                     65: mtpr _savvec4,$P0BR
                     66:  #     asm("mfpr $SLR,_savvec4");
                     67: mfpr $SLR,_savvec4
                     68:  #     asm("mtpr _savvec4,$P0LR");
                     69: mtpr _savvec4,$P0LR
                     70:  # 
                     71:  #     /* Set up P1PT  */
                     72:  #     temp = &u0p1pt;
                     73:        movl    $_u0p1pt,-56(fp)
                     74:  #     *temp = IOB2;           /* 1st PTE in P1 map to IOB2 */
                     75:        andl3   $1073740800,$_iob2,r0
                     76:        shrl    $10,r0,r0
                     77:        andl2   $1048575,r0
                     78:        movl    r0,*-56(fp)
                     79:  #     savvec4 = ((long)temp) | SADDR;
                     80:        orl3    $-1073741824,-56(fp),r0
                     81:        movl    r0,_savvec4
                     82:  #     asm("mtpr _savvec4,$P1BR");
                     83: mtpr _savvec4,$P1BR
                     84:  #     asm("mtpr $1,$P1LR");
                     85: mtpr $1,$P1LR
                     86:  # 
                     87:  #     /* Set up P2PT  */
                     88:  #     temp = &u0p2pt;
                     89:        movl    $_u0p2pt,-56(fp)
                     90:  #     *temp = IOB3;           /* 1st PTE in P2 map to IOB3 */
                     91:        andl3   $1073740800,$_iob3,r0
                     92:        shrl    $10,r0,r0
                     93:        andl2   $1048575,r0
                     94:        movl    r0,*-56(fp)
                     95:  #     savvec4 = ((long)temp) | SADDR;
                     96:        orl3    $-1073741824,-56(fp),r0
                     97:        movl    r0,_savvec4
                     98:  #     savvec4 -= (LAST_VPGNO << 2);
                     99:        subl2   $4194300,_savvec4
                    100:  #     asm("mtpr _savvec4, $P2BR");
                    101: mtpr _savvec4, $P2BR
                    102:  #     asm("mtpr $0xffffe, $P2LR");    /* Use only 1 entry */
                    103: mtpr $0xffffe, $P2LR
                    104:  # 
                    105:  #     asm("mtpr $0,$TBIA");
                    106: mtpr $0,$TBIA
                    107:  #     asm("mtpr $0,$PADC");
                    108: mtpr $0,$PADC
                    109:  #     asm("mtpr $1,$MME");
                    110: mtpr $1,$MME
                    111:  #     asm("jmp  *$0f");               /* Go virtual */
                    112: jmp  *$0f
                    113:  # asm("0:");
                    114: 0:
                    115:  #     limit_chk();            /* Limit test */
                    116:        callf   $4,_limit_chk
                    117:  #     vbit_chk();             /* valid bit test */
                    118:        callf   $4,_vbit_chk
                    119:  # 
                    120:  #     asm("mtpr $0,$MME");    /* back to physical */
                    121: mtpr $0,$MME
                    122:  #     asm("mtpr $0,$P0LR");   /* Invalidate P0 space */
                    123: mtpr $0,$P0LR
                    124:  # }
                    125:        ret
                    126:        .set    L39,0x0
                    127: L41:
                    128:        subl3   $56,fp,sp
                    129:        jbr     L42
                    130:        .data
                    131:        .text
                    132:        .align  1
                    133:        .globl  _limit_chk
                    134: _limit_chk:
                    135:        .word   L48
                    136:  # 
                    137:  # 
                    138:  # limit_chk()
                    139:  # /* this test will validate that TAHOE will detect any off limit
                    140:  #    access to SPT, P0PT, P1PT, P2PT.
                    141:  # */
                    142:  # { 
                    143:        jbr     L50
                    144: L51:
                    145:  #     long sys_vadr, fault_vadr, pte_ref, fault_type;
                    146:  # 
                    147:  #     length_chk(SLR, SADDR);                 /* Test on SPT */
                    148:        pushl   $-1073741824
                    149:        pushl   $1
                    150:        callf   $12,_length_chk
                    151:  #     length_chk(P0LR, P0ADDR);               /* Test on P0PT */
                    152:        pushl   $0
                    153:        pushl   $3
                    154:        callf   $12,_length_chk
                    155:  #     length_chk(P1LR, P1ADDR);               /* Test on P1PT */
                    156:        pushl   $1073741824
                    157:        pushl   $5
                    158:        callf   $12,_length_chk
                    159:  #     length_chk(P2LR, P2ADDR);               /* Test on P2PT */
                    160:        pushl   $-2147483648
                    161:        pushl   $7
                    162:        callf   $12,_length_chk
                    163:  # 
                    164:  #     /* Check limit fault on SPT when access P1 space */
                    165:  #     asm("mfpr $P1LR,_savvec7");     /* save P1LR */
                    166: mfpr $P1LR,_savvec7
                    167:  #     asm("mtpr $0x1ffff,$P1LR");     /* set P1LR to very large value */
                    168: mtpr $0x1ffff,$P1LR
                    169:  # 
                    170:  #     asm("mfpr $SLR,_savvec4");
                    171: mfpr $SLR,_savvec4
                    172:  #     sys_vadr = ((savvec4+1) << PGSHIFT) | SADDR;
                    173:        addl3   $1,_savvec4,r0
                    174:        shll    $10,r0,r0
                    175:        orl2    $-1073741824,r0
                    176:        movl    r0,-56(fp)
                    177:  #     asm("mfpr $P1BR,_savvec4");
                    178: mfpr $P1BR,_savvec4
                    179:  #     fault_vadr = (((unsigned)(sys_vadr-savvec4) >> 2) << PGSHIFT) | P1ADDR;
                    180:        subl3   _savvec4,-56(fp),r0
                    181:        shrl    $2,r0,r0
                    182:        shll    $10,r0,r0
                    183:        orl2    $1073741824,r0
                    184:        movl    r0,-60(fp)
                    185:  #     pte_ref = TRUE;
                    186:        movl    $1,-64(fp)
                    187:  #     fault_type = LENGTH;
                    188:        movl    $1,-68(fp)
                    189:  #     lmt_fault(fault_vadr, pte_ref, fault_type);
                    190:        pushl   -68(fp)
                    191:        pushl   -64(fp)
                    192:        pushl   -60(fp)
                    193:        callf   $16,_lmt_fault
                    194:  # 
                    195:  #     /* restore original SLR, P1LR */
                    196:  #     asm("mtpr _savvec7,$P1LR");
                    197: mtpr _savvec7,$P1LR
                    198:  # }
                    199:        ret
                    200:        .set    L48,0x0
                    201: L50:
                    202:        subl3   $68,fp,sp
                    203:        jbr     L51
                    204:        .data
                    205:        .text
                    206:        .align  1
                    207:        .globl  _length_chk
                    208: _length_chk:
                    209:        .word   L54
                    210:  # 
                    211:  # length_chk(table, space)
                    212:  # long table, space;
                    213:  # {   long fault_vadr, pte_ref, fault_type;
                    214:        jbr     L56
                    215: L57:
                    216:  # 
                    217:  #     savvec6 = table;
                    218:        movl    4(fp),_savvec6
                    219:  #     asm("mfpr  _savvec6,_savvec4");         /* Get length of table */
                    220: mfpr  _savvec6,_savvec4
                    221:  #     if (table==P2LR) savvec4--;
                    222:        cmpl    4(fp),$7
                    223:        jneq    L58
                    224:        decl    _savvec4
                    225:  #             else savvec4++;
                    226:        jbr     L59
                    227: L58:
                    228:        incl    _savvec4
                    229: L59:
                    230:  #     fault_vadr = (savvec4<<PGSHIFT)|space;
                    231:        shll    $10,_savvec4,r0
                    232:        orl2    8(fp),r0
                    233:        movl    r0,-56(fp)
                    234:  #     fault_type = LENGTH;
                    235:        movl    $1,-64(fp)
                    236:  #     pte_ref = FALSE;
                    237:        clrl    -60(fp)
                    238:  #     lmt_fault(fault_vadr, pte_ref, fault_type);
                    239:        pushl   -64(fp)
                    240:        pushl   -60(fp)
                    241:        pushl   -56(fp)
                    242:        callf   $16,_lmt_fault
                    243:  # 
                    244:  # }
                    245:        ret
                    246:        .set    L54,0x0
                    247: L56:
                    248:        subl3   $64,fp,sp
                    249:        jbr     L57
                    250:        .data
                    251:        .text
                    252:        .align  1
                    253:        .globl  _vbit_chk
                    254: _vbit_chk:
                    255:        .word   L60
                    256:  # 
                    257:  # 
                    258:  # vbit_chk()
                    259:  # /* This test force translation not valid fault on SPT, P0PT,
                    260:  #    P1PT, P2PT.
                    261:  # */
                    262:  # {
                    263:        jbr     L62
                    264: L63:
                    265:  #     long fault_vadr, t_pgno, *pt_base, fault_type, pte_ref;
                    266:  #     long saved_p1lr;
                    267:  # 
                    268:  #     valid_chk(SBR, TEST_PTESYS, SADDR);             /* Test on SPT */
                    269:        pushl   $-1073741824
                    270:        pushl   _unused
                    271:        pushl   $0
                    272:        callf   $16,_valid_chk
                    273:  #     valid_chk(P0BR, TEST_PTEP0, P0ADDR);            /* Test on P0PT */
                    274:        pushl   $0
                    275:        pushl   $68
                    276:        pushl   $2
                    277:        callf   $16,_valid_chk
                    278:  #     valid_chk(P1BR, TEST_PTEP1, P1ADDR);            /* Test on P1PT */
                    279:        pushl   $1073741824
                    280:        pushl   $0
                    281:        pushl   $4
                    282:        callf   $16,_valid_chk
                    283:  #     valid_chk(P2BR, TEST_PTEP2, P2ADDR);            /* Test on P2PT */
                    284:        pushl   $-2147483648
                    285:        pushl   $1048575
                    286:        pushl   $6
                    287:        callf   $16,_valid_chk
                    288:  # 
                    289:  #     /* Check translation not valid fault on SPT when access P1 space */
                    290:  # 
                    291:  #     asm("mfpr $P1LR,_savvec5");     
                    292: mfpr $P1LR,_savvec5
                    293:  #     saved_p1lr = savvec5;                   /* save P1LR */
                    294:        movl    _savvec5,-76(fp)
                    295:  #     asm("mtpr $768,$P1LR");         /* Set P1LR to have 768 PTEs which */
                    296: mtpr $768,$P1LR
                    297:  #                                     /* is 3 page long.                 */
                    298:  #     /* Virtual addr used to force the fault will need PTE #512 in P1PT */
                    299:  #     fault_vadr = (long)((512<<PGSHIFT)|P1ADDR);
                    300:        movl    $1074266112,-56(fp)
                    301:  #     /* invalidate PTE in SPT which map 3rd page of P1PT */
                    302:  #     asm("mfpr $SBR,_savvec5");
                    303: mfpr $SBR,_savvec5
                    304:  #     pt_base = (long *)savvec5;
                    305:        movl    _savvec5,-64(fp)
                    306:  #     t_pgno = (U0_P1PT) + 2;
                    307:        andl3   $1073740800,$_u0p1pt,r0
                    308:        shrl    $10,r0,r0
                    309:        andl2   $1048575,r0
                    310:        addl2   $2,r0
                    311:        movl    r0,-60(fp)
                    312:  #     pt_base += t_pgno;              /* address of PTE in SPT that  */
                    313:        shll    $2,-60(fp),r0
                    314:        addl2   r0,-64(fp)
                    315:  #                                     /* mapped the 3rd page of P1PT */
                    316:  #     *pt_base = *pt_base & 0x7fffffff;       /* Turn off valid bit */
                    317:        andl3   $2147483647,*-64(fp),r0
                    318:        movl    r0,*-64(fp)
                    319:  # 
                    320:  #     fault_type = VALID;
                    321:        clrl    -68(fp)
                    322:  #     pte_ref = TRUE;
                    323:        movl    $1,-72(fp)
                    324:  #     lmt_fault(fault_vadr, pte_ref, fault_type);
                    325:        pushl   -68(fp)
                    326:        pushl   -72(fp)
                    327:        pushl   -56(fp)
                    328:        callf   $16,_lmt_fault
                    329:  # 
                    330:  #     /* restore original SLR, P1LR */
                    331:  #     *pt_base = *pt_base | 0x80000000;       /* Turn on valid bit */
                    332:        orl3    $-2147483648,*-64(fp),r0
                    333:        movl    r0,*-64(fp)
                    334:  #     savvec5 = saved_p1lr;
                    335:        movl    -76(fp),_savvec5
                    336:  #     asm("mtpr _savvec5,$P1LR");
                    337: mtpr _savvec5,$P1LR
                    338:  # }
                    339:        ret
                    340:        .set    L60,0x0
                    341: L62:
                    342:        subl3   $76,fp,sp
                    343:        jbr     L63
                    344:        .data
                    345:        .text
                    346:        .align  1
                    347:        .globl  _valid_chk
                    348: _valid_chk:
                    349:        .word   L65
                    350:  # 
                    351:  # valid_chk(table, test_pte, space)
                    352:  # long table, test_pte, space;
                    353:  # {   long *pt_base, saved_pte, fault_vadr, pte_ref, fault_type;
                    354:        jbr     L67
                    355: L68:
                    356:  # 
                    357:  #     savvec6 = table;
                    358:        movl    4(fp),_savvec6
                    359:  #     asm("mfpr _savvec6,_savvec5");
                    360: mfpr _savvec6,_savvec5
                    361:  #     pt_base = (long *)savvec5;
                    362:        movl    _savvec5,-56(fp)
                    363:  #     pt_base += test_pte;                    /* address of test PTE */
                    364:        shll    $2,8(fp),r0
                    365:        addl2   r0,-56(fp)
                    366:  #     fault_vadr = (test_pte<<PGSHIFT)|space;
                    367:        shll    $10,8(fp),r0
                    368:        orl2    12(fp),r0
                    369:        movl    r0,-64(fp)
                    370:  #     saved_pte = *pt_base;                   /* save  original PTE */
                    371:        movl    *-56(fp),-60(fp)
                    372:  #     /* Turn off valid bit and set access to User,Kernel R/W */
                    373:  #     *pt_base = (*pt_base & 0x7ffffff) | PTE_UW;     
                    374:        andl3   $134217727,*-56(fp),r0
                    375:        orl2    $2013265920,r0
                    376:        movl    r0,*-56(fp)
                    377:  #     fault_type = VALID;
                    378:        clrl    -72(fp)
                    379:  #     pte_ref = FALSE;
                    380:        clrl    -68(fp)
                    381:  #     lmt_fault(fault_vadr, pte_ref, fault_type);
                    382:        pushl   -72(fp)
                    383:        pushl   -68(fp)
                    384:        pushl   -64(fp)
                    385:        callf   $16,_lmt_fault
                    386:  #     *pt_base = saved_pte;                   /* Restore original PTE */
                    387:        movl    -60(fp),*-56(fp)
                    388:  # }
                    389:        ret
                    390:        .set    L65,0x0
                    391: L67:
                    392:        subl3   $72,fp,sp
                    393:        jbr     L68
                    394:        .data
                    395:        .text
                    396:        .align  1
                    397:        .globl  _lmt_fault
                    398: _lmt_fault:
                    399:        .word   L69
                    400:  # 
                    401:  # 
                    402:  # /* Force limit and valid fault */
                    403:  # 
                    404:  # lmt_fault(fault_vadr, pte_ref, fault_type)
                    405:  # long fault_vadr, pte_ref, fault_type;
                    406:  # {
                    407:        jbr     L71
                    408: L72:
                    409:  #     long saved_vec, *scb_base, lx, *lptr, access;
                    410:  # 
                    411:  #     scb_base = &scb; 
                    412:        movl    $_scb,-60(fp)
                    413:  #     if (fault_type == LENGTH)
                    414:        cmpl    12(fp),$1
                    415:        jneq    L73
                    416:  #             {
                    417:  #             scb_base += PROT_VEC;
                    418:        addl2   $188,-60(fp)
                    419:  # 
                    420:  #             /* Make new PTE  : If this logic "mkpte" is taken out */
                    421:  #             /* and this test passed that imply TAHOE will generate */
                    422:  #             /* limit fault before access prot. and translation not */
                    423:  #             /* valid fault.                                         */
                    424:  # 
                    425:  #             if (pte_ref==FALSE) mkpte(fault_vadr);
                    426:        tstl    8(fp)
                    427:        jneq    L74
                    428:        pushl   4(fp)
                    429:        callf   $8,_mkpte
                    430:  #             }
                    431: L74:
                    432:  #         else scb_base += TRANS_VEC;
                    433:        jbr     L76
                    434: L73:
                    435:        addl2   $192,-60(fp)
                    436: L76:
                    437:  # 
                    438:  #     saved_vec = *scb_base;          /* save old protection fault vector */
                    439:        movl    *-60(fp),-56(fp)
                    440:  #     asm("movab handler1,_savvec4");
                    441: movab handler1,_savvec4
                    442:  # 
                    443:  #     exp_par1 = fault_vadr;          /* Set up expect fault parameters */
                    444:        movl    4(fp),_exp_par1
                    445:  #     test_va = exp_par1;
                    446:        movl    _exp_par1,_test_va
                    447:  #     asm("movpsl _exp_par3");        /* PSL at time of fault */
                    448: movpsl _exp_par3
                    449:  #     exp_par3 &= 0xffffffc0;         /* Mask out PSW flags   */
                    450:        andl2   $-64,_exp_par3
                    451:  #     Tpsl = exp_par3;
                    452:        movl    _exp_par3,_Tpsl
                    453:  #     asm("movab okret,_ret_adr");
                    454: movab okret,_ret_adr
                    455:  #     for (access = READ; access <= WRITE; access++)
                    456:        clrl    -72(fp)
                    457: L79:
                    458:        cmpl    -72(fp),$1
                    459:        jgtr    L78
                    460:  #             {
                    461:  #             /* length ,R/W violation   */
                    462:  #             if (fault_type == LENGTH)
                    463:        cmpl    12(fp),$1
                    464:        jneq    L80
                    465:  #                     exp_par0 = 1 | (access<<2) | (pte_ref<<1);
                    466:        shll    $2,-72(fp),r0
                    467:        orl2    $1,r0
                    468:        shll    $1,8(fp),r1
                    469:        orl2    r1,r0
                    470:        movl    r0,_exp_par0
                    471:  #                 else
                    472:        jbr     L81
                    473: L80:
                    474:  #                     exp_par0 = (access<<2) | (pte_ref<<1);
                    475:        shll    $2,-72(fp),r0
                    476:        shll    $1,8(fp),r1
                    477:        orl2    r1,r0
                    478:        movl    r0,_exp_par0
                    479: L81:
                    480:  #             *scb_base = savvec4;            /* Set new handler */
                    481:        movl    _savvec4,*-60(fp)
                    482:  #             asm("movl _exp_par1,r0");
                    483: movl _exp_par1,r0
                    484:  #             if (access==WRITE)
                    485:        cmpl    -72(fp),$1
                    486:        jneq    L82
                    487:  #                     {
                    488:  #                     asm("movab pc_fault1,_exp_par2");   /* PC at fault */
                    489: movab pc_fault1,_exp_par2
                    490:  #                     Failpc = exp_par2;
                    491:        movl    _exp_par2,_Failpc
                    492:  #                     asm("pc_fault1:");
                    493: pc_fault1:
                    494:  #                     asm("movl $0,(r0)");    /* Try with write access */
                    495: movl $0,(r0)
                    496:  #                     }
                    497:  #                 else
                    498:        jbr     L83
                    499: L82:
                    500:  #                     {
                    501:  #                     asm("movab pc_fault2,_exp_par2");   /* PC at fault */
                    502: movab pc_fault2,_exp_par2
                    503:  #                     Failpc = exp_par2;
                    504:        movl    _exp_par2,_Failpc
                    505:  #                     asm("pc_fault2:");
                    506: pc_fault2:
                    507:  #                     asm("movl (r0),r12");   /* Try with read access */
                    508: movl (r0),r12
                    509:  #                     }
                    510: L83:
                    511:  #             /* Error if program comes to this point */
                    512:  #             if (fault_type == LENGTH)
                    513:        cmpl    12(fp),$1
                    514:        jneq    L84
                    515:  #                     writes("** Expected limit fault didnot happen\n");
                    516:        .data   1
                    517: L85:
                    518:        .ascii  "** Expected limit fault didnot happen\12\0"
                    519:        .text
                    520:        pushl   $L85
                    521:        callf   $8,_writes
                    522:  #                else
                    523:        jbr     L86
                    524: L84:
                    525:  #                     writes("** Expected translation fault didnot happen\n");
                    526:        .data   1
                    527: L87:
                    528:        .ascii  "** Expected translation fault didnot happen\12\0"
                    529:        .text
                    530:        pushl   $L87
                    531:        callf   $8,_writes
                    532: L86:
                    533:  #             ac_error1();
                    534:        callf   $4,_ac_error1
                    535:  #             *scb_base = saved_vec;          /* Restore ILL_ACCESS vector */
                    536:        movl    -56(fp),*-60(fp)
                    537:  #             asm("halt");
                    538: halt
                    539:  # asm("okret:");
                    540: okret:
                    541:  #             *scb_base = saved_vec;          /* Restore ILL_ACCESS vector */
                    542:        movl    -56(fp),*-60(fp)
                    543:  #             if (fault_type == LENGTH)
                    544:        cmpl    12(fp),$1
                    545:        jneq    L89
                    546:  #                     chk_fpars("** Page Table Limit exception\n");
                    547:        .data   1
                    548: L91:
                    549:        .ascii  "** Page Table Limit exception\12\0"
                    550:        .text
                    551:        pushl   $L91
                    552:        callf   $8,_chk_fpars
                    553:  #                  else
                    554:        jbr     L92
                    555: L89:
                    556:  #                     chk_fpars("** Translation not valid exception\n");
                    557:        .data   1
                    558: L93:
                    559:        .ascii  "** Translation not valid exception\12\0"
                    560:        .text
                    561:        pushl   $L93
                    562:        callf   $8,_chk_fpars
                    563: L92:
                    564:  #             }
                    565: L77:
                    566:        incl    -72(fp)
                    567:        jbr     L79
                    568: L78:
                    569:  # }
                    570:        ret
                    571:        .set    L69,0x0
                    572: L71:
                    573:        subl3   $72,fp,sp
                    574:        jbr     L72
                    575:        .data
                    576:        .text
                    577:        .align  1
                    578:        .globl  _mkpte
                    579: _mkpte:
                    580:        .word   L94
                    581:  # 
                    582:  # mkpte(flt_vadr)
                    583:  # long flt_vadr;
                    584:  # {   long space, oldpte, pteno, regno;
                    585:        jbr     L96
                    586: L97:
                    587:  # 
                    588:  #     space = (flt_vadr >> 30) & 0x3;
                    589:        shar    $30,4(fp),r0
                    590:        andl2   $3,r0
                    591:        movl    r0,-56(fp)
                    592:  #     pteno = (flt_vadr >> PGSHIFT) & 0xfffff;
                    593:        shar    $10,4(fp),r0
                    594:        andl2   $1048575,r0
                    595:        movl    r0,-64(fp)
                    596:  #     if (space==3) regno = SBR;      /* System */
                    597:        cmpl    -56(fp),$3
                    598:        jneq    L98
                    599:        clrl    -68(fp)
                    600:  #     if (space==2) { regno = P2BR;   /* P2     */
                    601: L98:
                    602:        cmpl    -56(fp),$2
                    603:        jneq    L99
                    604:        movl    $6,-68(fp)
                    605:  #                     pteno = LAST_VPGNO - 2; }
                    606:        movl    $1048573,-64(fp)
                    607:  #     if (space==1) regno = P1BR;     /* P1 */
                    608: L99:
                    609:        cmpl    -56(fp),$1
                    610:        jneq    L100
                    611:        movl    $4,-68(fp)
                    612:  #     if (space==0) regno = P0BR;     /* P0 */
                    613: L100:
                    614:        tstl    -56(fp)
                    615:        jneq    L101
                    616:        movl    $2,-68(fp)
                    617:  # 
                    618:  #     /* All access, V_BIT on */
                    619:  #     fixpv_pte(regno,pteno,&oldpte,PTE_KW | PTE_V);
                    620: L101:
                    621:        pushl   $-536870912
                    622:        subl3   $60,fp,r0
                    623:        pushl   r0
                    624:        pushl   -64(fp)
                    625:        pushl   -68(fp)
                    626:        callf   $20,_fixpv_pte
                    627:  #             
                    628:  # }
                    629:        ret
                    630:        .set    L94,0x0
                    631: L96:
                    632:        subl3   $68,fp,sp
                    633:        jbr     L97
                    634:        .data
                    635:        .text
                    636:        .align  1
                    637:        .globl  _prot_handler
                    638: _prot_handler:
                    639:        .word   L104
                    640:  # 
                    641:  # prot_handler()
                    642:  # {
                    643:        jbr     L106
                    644: L107:
                    645:  # asm(".align 2");
                    646: .align 2
                    647:  # asm("handler1:");
                    648: handler1:
                    649:  #     asm("movab _act_par0,_p_ptr");  /* Set pointer to fault parameters */
                    650: movab _act_par0,_p_ptr
                    651:  #     asm("movl  (sp)+,_act_par0");
                    652: movl  (sp)+,_act_par0
                    653:  #     asm("movl  (sp)+,_act_par1");
                    654: movl  (sp)+,_act_par1
                    655:  #     asm("movl  (sp)+,_act_par2");
                    656: movl  (sp)+,_act_par2
                    657:  #     asm("movl  (sp)+,_act_par3");
                    658: movl  (sp)+,_act_par3
                    659:  #     asm("jmp *_ret_adr");
                    660: jmp *_ret_adr
                    661:  # }
                    662:        ret
                    663:        .set    L104,0x0
                    664: L106:
                    665:        jbr     L107
                    666:        .data
                    667:  # 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.