1*23173ec1SDavid du Colombier// amd64 2*23173ec1SDavid du Colombier 3*23173ec1SDavid du Colombierdefn acidinit() 4*23173ec1SDavid du Colombier{ 5*23173ec1SDavid du Colombier bplist = {}; 6*23173ec1SDavid du Colombier bpfmt = 'b'; 7*23173ec1SDavid du Colombier 8*23173ec1SDavid du Colombier srcpath = { 9*23173ec1SDavid du Colombier "./", 10*23173ec1SDavid du Colombier "/sys/src/libc/port/", 11*23173ec1SDavid du Colombier "/sys/src/libc/9sys/", 12*23173ec1SDavid du Colombier "/sys/src/libc/amd64/" 13*23173ec1SDavid du Colombier }; 14*23173ec1SDavid du Colombier 15*23173ec1SDavid du Colombier srcfiles = {}; // list of loaded files 16*23173ec1SDavid du Colombier srctext = {}; // the text of the files 17*23173ec1SDavid du Colombier} 18*23173ec1SDavid du Colombier 19*23173ec1SDavid du Colombierdefn gpr() 20*23173ec1SDavid du Colombier{ 21*23173ec1SDavid du Colombier print("AX ", *AX, "\n"); 22*23173ec1SDavid du Colombier print("BX ", *BX, "\n"); 23*23173ec1SDavid du Colombier print("CX ", *CX, "\n"); 24*23173ec1SDavid du Colombier print("DX ", *DX, "\n"); 25*23173ec1SDavid du Colombier print("DI ", *DI, "\n"); 26*23173ec1SDavid du Colombier print("SI ", *SI, "\n"); 27*23173ec1SDavid du Colombier print("BP ", *BP, "\n"); 28*23173ec1SDavid du Colombier print("R8 ", *R8, "\n"); 29*23173ec1SDavid du Colombier print("R9 ", *R9, "\n"); 30*23173ec1SDavid du Colombier print("R10 ", *R10, "\n"); 31*23173ec1SDavid du Colombier print("R11 ", *R11, "\n"); 32*23173ec1SDavid du Colombier print("R12 ", *R12, "\n"); 33*23173ec1SDavid du Colombier print("R13 ", *R13, "\n"); 34*23173ec1SDavid du Colombier print("R14 ", *R14, "\n"); 35*23173ec1SDavid du Colombier print("R15 ", *R15, "\n"); 36*23173ec1SDavid du Colombier} 37*23173ec1SDavid du Colombier 38*23173ec1SDavid du Colombierdefn spr() 39*23173ec1SDavid du Colombier{ 40*23173ec1SDavid du Colombier print("DS ", *DS, " ES ", *ES, " FS ", *FS, " GS ", *GS, "\n"); 41*23173ec1SDavid du Colombier print("TYPE ", *TYPE, "\n"); 42*23173ec1SDavid du Colombier print("ERROR ", *ERROR, "\n"); 43*23173ec1SDavid du Colombier print("PC ", *PC, "\n"); 44*23173ec1SDavid du Colombier print("CS ", *CS, "\n"); 45*23173ec1SDavid du Colombier print("FLAGS ", *FLAGS, "\n"); 46*23173ec1SDavid du Colombier print("SP ", *SP, "\n"); 47*23173ec1SDavid du Colombier print("SS ", *SS, "\n"); 48*23173ec1SDavid du Colombier} 49*23173ec1SDavid du Colombier 50*23173ec1SDavid du Colombierdefn x87r() 51*23173ec1SDavid du Colombier{ 52*23173ec1SDavid du Colombier print("FCW ", *FCW, " FSW ", *FSW, " FTW ", *FTW, " FOP ", *FOP, "\n"); 53*23173ec1SDavid du Colombier print("RIP ", *RIP, " RDP ", *RDP, "\n"); 54*23173ec1SDavid du Colombier print("M0 ", *M0, "\n"); 55*23173ec1SDavid du Colombier print("M1 ", *M1, "\n"); 56*23173ec1SDavid du Colombier print("M2 ", *M2, "\n"); 57*23173ec1SDavid du Colombier print("M3 ", *M3, "\n"); 58*23173ec1SDavid du Colombier print("M4 ", *M4, "\n"); 59*23173ec1SDavid du Colombier print("M5 ", *M5, "\n"); 60*23173ec1SDavid du Colombier print("M6 ", *M6, "\n"); 61*23173ec1SDavid du Colombier print("M7 ", *M7, "\n"); 62*23173ec1SDavid du Colombier} 63*23173ec1SDavid du Colombier 64*23173ec1SDavid du Colombierdefn xmmr() 65*23173ec1SDavid du Colombier{ 66*23173ec1SDavid du Colombier print("MXCSR ", *MXCSR, " MXCSRMASK ", *MXCSRMASK, "\n"); 67*23173ec1SDavid du Colombier print("X0 ", *X0, "\n"); 68*23173ec1SDavid du Colombier print("X1 ", *X1, "\n"); 69*23173ec1SDavid du Colombier print("X2 ", *X2, "\n"); 70*23173ec1SDavid du Colombier print("X3 ", *X3, "\n"); 71*23173ec1SDavid du Colombier print("X4 ", *X4, "\n"); 72*23173ec1SDavid du Colombier print("X5 ", *X5, "\n"); 73*23173ec1SDavid du Colombier print("X6 ", *X6, "\n"); 74*23173ec1SDavid du Colombier print("X7 ", *X7, "\n"); 75*23173ec1SDavid du Colombier print("X8 ", *X8, "\n"); 76*23173ec1SDavid du Colombier print("X9 ", *X9, "\n"); 77*23173ec1SDavid du Colombier print("X10 ", *X10, "\n"); 78*23173ec1SDavid du Colombier print("X11 ", *X11, "\n"); 79*23173ec1SDavid du Colombier print("X12 ", *X12, "\n"); 80*23173ec1SDavid du Colombier print("X13 ", *X13, "\n"); 81*23173ec1SDavid du Colombier print("X14 ", *X14, "\n"); 82*23173ec1SDavid du Colombier print("X15 ", *X15, "\n"); 83*23173ec1SDavid du Colombier} 84*23173ec1SDavid du Colombier 85*23173ec1SDavid du Colombierdefn fpr() 86*23173ec1SDavid du Colombier{ 87*23173ec1SDavid du Colombier xmmr(); 88*23173ec1SDavid du Colombier} 89*23173ec1SDavid du Colombier 90*23173ec1SDavid du Colombierdefn regs() 91*23173ec1SDavid du Colombier{ 92*23173ec1SDavid du Colombier gpr(); 93*23173ec1SDavid du Colombier spr(); 94*23173ec1SDavid du Colombier} 95*23173ec1SDavid du Colombier 96*23173ec1SDavid du Colombierdefn pstop(pid) 97*23173ec1SDavid du Colombier{ 98*23173ec1SDavid du Colombier local l; 99*23173ec1SDavid du Colombier local pc; 100*23173ec1SDavid du Colombier 101*23173ec1SDavid du Colombier pc = *PC; 102*23173ec1SDavid du Colombier 103*23173ec1SDavid du Colombier print(pid,": ", reason(*TRAP), "\t"); 104*23173ec1SDavid du Colombier print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n"); 105*23173ec1SDavid du Colombier 106*23173ec1SDavid du Colombier if notes then { 107*23173ec1SDavid du Colombier if notes[0] != "sys: breakpoint" then { 108*23173ec1SDavid du Colombier print("Notes pending:\n"); 109*23173ec1SDavid du Colombier l = notes; 110*23173ec1SDavid du Colombier while l do { 111*23173ec1SDavid du Colombier print("\t", head l, "\n"); 112*23173ec1SDavid du Colombier l = tail l; 113*23173ec1SDavid du Colombier } 114*23173ec1SDavid du Colombier } 115*23173ec1SDavid du Colombier } 116*23173ec1SDavid du Colombier} 117*23173ec1SDavid du Colombier 118*23173ec1SDavid du Colombierdefn lstk() // trace with locals 119*23173ec1SDavid du Colombier{ 120*23173ec1SDavid du Colombier _stk(*PC, *SP, 0, 1); 121*23173ec1SDavid du Colombier} 122*23173ec1SDavid du Colombier 123*23173ec1SDavid du Colombierdefn stk() 124*23173ec1SDavid du Colombier{ 125*23173ec1SDavid du Colombier _stk(*PC, *SP, 0, 0); 126*23173ec1SDavid du Colombier} 127*23173ec1SDavid du Colombier 128*23173ec1SDavid du Colombieraggr Ureg 129*23173ec1SDavid du Colombier{ 130*23173ec1SDavid du Colombier 'W' 0 ax; 131*23173ec1SDavid du Colombier 'W' 8 bx; 132*23173ec1SDavid du Colombier 'W' 16 cx; 133*23173ec1SDavid du Colombier 'W' 24 dx; 134*23173ec1SDavid du Colombier 'W' 32 si; 135*23173ec1SDavid du Colombier 'W' 40 di; 136*23173ec1SDavid du Colombier 'W' 48 bp; 137*23173ec1SDavid du Colombier 'W' 56 r8; 138*23173ec1SDavid du Colombier 'W' 64 r9; 139*23173ec1SDavid du Colombier 'W' 72 r10; 140*23173ec1SDavid du Colombier 'W' 80 r11; 141*23173ec1SDavid du Colombier 'W' 88 r12; 142*23173ec1SDavid du Colombier 'W' 96 r13; 143*23173ec1SDavid du Colombier 'W' 104 r14; 144*23173ec1SDavid du Colombier 'W' 112 r15; 145*23173ec1SDavid du Colombier 'u' 120 ds; 146*23173ec1SDavid du Colombier 'u' 122 es; 147*23173ec1SDavid du Colombier 'u' 124 fs; 148*23173ec1SDavid du Colombier 'u' 126 gs; 149*23173ec1SDavid du Colombier 'W' 128 type; 150*23173ec1SDavid du Colombier 'W' 136 error; 151*23173ec1SDavid du Colombier 'W' 144 ip; 152*23173ec1SDavid du Colombier 'W' 152 cs; 153*23173ec1SDavid du Colombier 'W' 160 flags; 154*23173ec1SDavid du Colombier 'W' 168 sp; 155*23173ec1SDavid du Colombier 'W' 176 ss; 156*23173ec1SDavid du Colombier}; 157*23173ec1SDavid du Colombier 158*23173ec1SDavid du Colombierdefn 159*23173ec1SDavid du ColombierUreg(addr) { 160*23173ec1SDavid du Colombier complex Ureg addr; 161*23173ec1SDavid du Colombier print(" ax ", addr.ax, "\n"); 162*23173ec1SDavid du Colombier print(" bx ", addr.bx, "\n"); 163*23173ec1SDavid du Colombier print(" cx ", addr.cx, "\n"); 164*23173ec1SDavid du Colombier print(" dx ", addr.dx, "\n"); 165*23173ec1SDavid du Colombier print(" si ", addr.si, "\n"); 166*23173ec1SDavid du Colombier print(" di ", addr.di, "\n"); 167*23173ec1SDavid du Colombier print(" bp ", addr.bp, "\n"); 168*23173ec1SDavid du Colombier print(" r8 ", addr.r8, "\n"); 169*23173ec1SDavid du Colombier print(" r9 ", addr.r9, "\n"); 170*23173ec1SDavid du Colombier print(" r10 ", addr.r10, "\n"); 171*23173ec1SDavid du Colombier print(" r11 ", addr.r11, "\n"); 172*23173ec1SDavid du Colombier print(" r12 ", addr.r12, "\n"); 173*23173ec1SDavid du Colombier print(" r13 ", addr.r13, "\n"); 174*23173ec1SDavid du Colombier print(" r14 ", addr.r14, "\n"); 175*23173ec1SDavid du Colombier print(" r15 ", addr.r15, "\n"); 176*23173ec1SDavid du Colombier print(" ds ", addr.ds, "\n"); 177*23173ec1SDavid du Colombier print(" es ", addr.es, "\n"); 178*23173ec1SDavid du Colombier print(" fs ", addr.fs, "\n"); 179*23173ec1SDavid du Colombier print(" gs ", addr.gs, "\n"); 180*23173ec1SDavid du Colombier print(" type ", addr.type, "\n"); 181*23173ec1SDavid du Colombier print(" error ", addr.error, "\n"); 182*23173ec1SDavid du Colombier print(" ip ", addr.ip, "\n"); 183*23173ec1SDavid du Colombier print(" cs ", addr.cs, "\n"); 184*23173ec1SDavid du Colombier print(" flags ", addr.flags, "\n"); 185*23173ec1SDavid du Colombier print(" sp ", addr.sp, "\n"); 186*23173ec1SDavid du Colombier print(" ss ", addr.ss, "\n"); 187*23173ec1SDavid du Colombier}; 188*23173ec1SDavid du ColombiersizeofUreg = 184; 189*23173ec1SDavid du Colombier 190*23173ec1SDavid du Colombierprint("/sys/lib/acid/amd64"); 191