Annotation of lucent/sys/src/9/pc/fault386.c, revision 1.1

1.1     ! root        1: #include       "u.h"
        !             2: #include       "../port/lib.h"
        !             3: #include       "mem.h"
        !             4: #include       "dat.h"
        !             5: #include       "fns.h"
        !             6: #include       "ureg.h"
        !             7: #include       "io.h"
        !             8: 
        !             9: int faulting;
        !            10: 
        !            11: void
        !            12: fault386(Ureg *ur, void *a)
        !            13: {
        !            14:        ulong addr;
        !            15:        int read;
        !            16:        int user;
        !            17:        int n;
        !            18:        int insyscall;
        !            19:        char buf[ERRLEN];
        !            20: 
        !            21:        USED(a);
        !            22: 
        !            23:        insyscall = u->p->insyscall;
        !            24:        u->p->insyscall = 1;
        !            25:        addr = getcr2();
        !            26:        read = !(ur->ecode & 2);
        !            27:        user = (ur->cs&0xffff) == UESEL;
        !            28:        spllo();
        !            29: /* print("F%d:A#%lux:U%d:R%d|", u->p->pid, addr, user, read);/**/
        !            30:        n = fault(addr, read);
        !            31:        if(n < 0){
        !            32:                if(user){
        !            33:                        sprint(buf, "sys: trap: fault %s addr=0x%lux",
        !            34:                                read? "read" : "write", addr);
        !            35:                        postnote(u->p, 1, buf, NDebug);
        !            36:                        return;
        !            37:                }
        !            38:                dumpregs(ur);
        !            39:                panic("fault: 0x%lux", addr);
        !            40:        }
        !            41:        u->p->insyscall = insyscall;
        !            42: }
        !            43: 
        !            44: void
        !            45: faultinit(void)
        !            46: {
        !            47:        setvec(Faultvec, fault386, 0);
        !            48: }

unix.superglobalmegacorp.com

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