1*46439007SCharles.Forsyth// ARM support 2*46439007SCharles.Forsyth 3*46439007SCharles.Forsythdefn acidinit() // Called after all the init modules are loaded 4*46439007SCharles.Forsyth{ 5*46439007SCharles.Forsyth bpl = {}; 6*46439007SCharles.Forsyth bpid = -1; 7*46439007SCharles.Forsyth bpfmt = 'X'; 8*46439007SCharles.Forsyth nopstop = 0; 9*46439007SCharles.Forsyth 10*46439007SCharles.Forsyth srcpath = { 11*46439007SCharles.Forsyth "./", 12*46439007SCharles.Forsyth }; 13*46439007SCharles.Forsyth 14*46439007SCharles.Forsyth srcfiles = {}; // list of loaded files 15*46439007SCharles.Forsyth srctext = {}; // the text of the files 16*46439007SCharles.Forsyth} 17*46439007SCharles.Forsyth 18*46439007SCharles.Forsythdefn linkreg(addr) 19*46439007SCharles.Forsyth{ 20*46439007SCharles.Forsyth return 0; 21*46439007SCharles.Forsyth} 22*46439007SCharles.Forsyth 23*46439007SCharles.Forsythdefn stk() // trace 24*46439007SCharles.Forsyth{ 25*46439007SCharles.Forsyth _stk(*PC, *SP, linkreg(0), 0); 26*46439007SCharles.Forsyth} 27*46439007SCharles.Forsyth 28*46439007SCharles.Forsythdefn lstk() // trace with locals 29*46439007SCharles.Forsyth{ 30*46439007SCharles.Forsyth _stk(*PC, *SP, linkreg(0), 1); 31*46439007SCharles.Forsyth} 32*46439007SCharles.Forsyth 33*46439007SCharles.Forsythdefn kstk() 34*46439007SCharles.Forsyth{ 35*46439007SCharles.Forsyth local lab; 36*46439007SCharles.Forsyth complex Proc proc; 37*46439007SCharles.Forsyth lab = proc.sched; 38*46439007SCharles.Forsyth complex Label lab; 39*46439007SCharles.Forsyth _stk(lab.pc\X, lab.sp\X, linkreg(0), 0); 40*46439007SCharles.Forsyth} 41*46439007SCharles.Forsyth 42*46439007SCharles.Forsythdefn lkstk() 43*46439007SCharles.Forsyth{ 44*46439007SCharles.Forsyth local lab; 45*46439007SCharles.Forsyth complex Proc proc; 46*46439007SCharles.Forsyth lab = proc.sched; 47*46439007SCharles.Forsyth complex Label lab; 48*46439007SCharles.Forsyth _stk(lab.pc\X, lab.sp\X, linkreg(0), 1); 49*46439007SCharles.Forsyth} 50*46439007SCharles.Forsyth 51*46439007SCharles.Forsythdefn gpr() // print general purpose registers 52*46439007SCharles.Forsyth{ 53*46439007SCharles.Forsyth print("R0\t", *R0, " R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n"); 54*46439007SCharles.Forsyth print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, " R7\t", *R7, "\n"); 55*46439007SCharles.Forsyth print("R8\t", *R8, " R9\t", *R9, " R10\t", *R10, " R11\t", *R11, "\n"); 56*46439007SCharles.Forsyth print("R12\t", *R12, "\n"); 57*46439007SCharles.Forsyth return 0; 58*46439007SCharles.Forsyth} 59*46439007SCharles.Forsyth 60*46439007SCharles.Forsythdefn spr() // print special processor registers 61*46439007SCharles.Forsyth{ 62*46439007SCharles.Forsyth local pc; 63*46439007SCharles.Forsyth local cause; 64*46439007SCharles.Forsyth local lr; 65*46439007SCharles.Forsyth 66*46439007SCharles.Forsyth pc = *PC; 67*46439007SCharles.Forsyth lr = *LINK; 68*46439007SCharles.Forsyth print("PC\t", pc, " ", fmt(pc, 'a'), " "); 69*46439007SCharles.Forsyth pfl(pc); 70*46439007SCharles.Forsyth print("LINK\t", lr, " ", fmt(lr, 'a'), " "); 71*46439007SCharles.Forsyth pfl(lr); 72*46439007SCharles.Forsyth print("TYPE: ", reason(*TYPE), "\n"); 73*46439007SCharles.Forsyth print("SP\t", *SP, "\n"); 74*46439007SCharles.Forsyth 75*46439007SCharles.Forsyth return 0; 76*46439007SCharles.Forsyth} 77*46439007SCharles.Forsyth 78*46439007SCharles.Forsythdefn regs() // print all registers 79*46439007SCharles.Forsyth{ 80*46439007SCharles.Forsyth spr(); 81*46439007SCharles.Forsyth gpr(); 82*46439007SCharles.Forsyth} 83*46439007SCharles.Forsyth 84*46439007SCharles.Forsythprint("$ROOT/lib/acid/arm"); 85