Annotation of lucent/sys/src/9/pc/fault386.c, revision 1.1.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.