177737d7aSDavid du Colombier// ARM support 27dd7cddfSDavid du Colombier 37dd7cddfSDavid du Colombierdefn acidinit() // Called after all the init modules are loaded 47dd7cddfSDavid du Colombier{ 57dd7cddfSDavid du Colombier bplist = {}; 677737d7aSDavid du Colombier bpfmt = 'X'; 77dd7cddfSDavid du Colombier 87dd7cddfSDavid du Colombier srcpath = { 97dd7cddfSDavid du Colombier "./", 107dd7cddfSDavid du Colombier "/sys/src/libc/port/", 117dd7cddfSDavid du Colombier "/sys/src/libc/9sys/", 127dd7cddfSDavid du Colombier "/sys/src/libc/arm/" 137dd7cddfSDavid du Colombier }; 147dd7cddfSDavid du Colombier 157dd7cddfSDavid du Colombier srcfiles = {}; // list of loaded files 167dd7cddfSDavid du Colombier srctext = {}; // the text of the files 177dd7cddfSDavid du Colombier} 187dd7cddfSDavid du Colombier 197dd7cddfSDavid du Colombierdefn linkreg(addr) 207dd7cddfSDavid du Colombier{ 2177737d7aSDavid du Colombier return *R14; 227dd7cddfSDavid du Colombier} 237dd7cddfSDavid du Colombier 247dd7cddfSDavid du Colombierdefn stk() // trace 257dd7cddfSDavid du Colombier{ 2677737d7aSDavid du Colombier _stk(*PC, *SP, linkreg(0), 0); 277dd7cddfSDavid du Colombier} 287dd7cddfSDavid du Colombier 297dd7cddfSDavid du Colombierdefn lstk() // trace with locals 307dd7cddfSDavid du Colombier{ 3177737d7aSDavid du Colombier _stk(*PC, *SP, linkreg(0), 1); 327dd7cddfSDavid du Colombier} 337dd7cddfSDavid du Colombier 347dd7cddfSDavid du Colombierdefn gpr() // print general purpose registers 357dd7cddfSDavid du Colombier{ 3680ee5cbfSDavid du Colombier print("R0\t", *R0, " R1\t", *R1, " R2\t", *R2, "\n"); 3780ee5cbfSDavid du Colombier print("R3\t", *R3, " R4\t", *R4, " R5\t", *R5, "\n"); 3880ee5cbfSDavid du Colombier print("R6\t", *R6, " R7\t", *R7, " R8\t", *R8, "\n"); 3980ee5cbfSDavid du Colombier print("R9\t", *R9, " R10\t", *R10, " R11\t", *R11, "\n"); 4080ee5cbfSDavid du Colombier print("R12\t", *R12, " R13\t", *R13, " R14\t", *R14, "\n"); 4180ee5cbfSDavid du Colombier print("R15\t", *R15, "\n"); 427dd7cddfSDavid du Colombier} 437dd7cddfSDavid du Colombier 447dd7cddfSDavid du Colombierdefn regs() // print all registers 457dd7cddfSDavid du Colombier{ 467dd7cddfSDavid du Colombier gpr(); 477dd7cddfSDavid du Colombier} 487dd7cddfSDavid du Colombier 497dd7cddfSDavid du Colombierdefn pstop(pid) 507dd7cddfSDavid du Colombier{ 5177737d7aSDavid du Colombier local l; 5277737d7aSDavid du Colombier local pc; 5377737d7aSDavid du Colombier 5477737d7aSDavid du Colombier pc = *PC; 5577737d7aSDavid du Colombier 5677737d7aSDavid du Colombier print(pid,": ", reason(*TYPE), "\t"); 5777737d7aSDavid du Colombier print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n"); 5877737d7aSDavid du Colombier 5977737d7aSDavid du Colombier if notes then { 6077737d7aSDavid du Colombier if notes[0] != "sys: breakpoint" then { 6177737d7aSDavid du Colombier print("Notes pending:\n"); 6277737d7aSDavid du Colombier l = notes; 6377737d7aSDavid du Colombier while l do { 6477737d7aSDavid du Colombier print("\t", head l, "\n"); 6577737d7aSDavid du Colombier l = tail l; 6677737d7aSDavid du Colombier } 6777737d7aSDavid du Colombier } 6877737d7aSDavid du Colombier } 697dd7cddfSDavid du Colombier} 707dd7cddfSDavid du Colombier 71*23173ec1SDavid du ColombiersizeofUreg=72; 727dd7cddfSDavid du Colombieraggr Ureg 737dd7cddfSDavid du Colombier{ 747dd7cddfSDavid du Colombier 'U' 0 r0; 757dd7cddfSDavid du Colombier 'U' 4 r1; 767dd7cddfSDavid du Colombier 'U' 8 r2; 777dd7cddfSDavid du Colombier 'U' 12 r3; 787dd7cddfSDavid du Colombier 'U' 16 r4; 797dd7cddfSDavid du Colombier 'U' 20 r5; 807dd7cddfSDavid du Colombier 'U' 24 r6; 817dd7cddfSDavid du Colombier 'U' 28 r7; 827dd7cddfSDavid du Colombier 'U' 32 r8; 837dd7cddfSDavid du Colombier 'U' 36 r9; 847dd7cddfSDavid du Colombier 'U' 40 r10; 857dd7cddfSDavid du Colombier 'U' 44 r11; 867dd7cddfSDavid du Colombier 'U' 48 r12; 877dd7cddfSDavid du Colombier 'U' 52 r13; 887dd7cddfSDavid du Colombier 'U' 56 r14; 8980ee5cbfSDavid du Colombier 'U' 60 type; 9080ee5cbfSDavid du Colombier 'U' 64 psr; 9180ee5cbfSDavid du Colombier 'U' 68 pc; 927dd7cddfSDavid du Colombier}; 937dd7cddfSDavid du Colombier 947dd7cddfSDavid du Colombierdefn 957dd7cddfSDavid du ColombierUreg(addr) { 967dd7cddfSDavid du Colombier complex Ureg addr; 977dd7cddfSDavid du Colombier print(" r0 ", addr.r0, "\n"); 987dd7cddfSDavid du Colombier print(" r1 ", addr.r1, "\n"); 997dd7cddfSDavid du Colombier print(" r2 ", addr.r2, "\n"); 1007dd7cddfSDavid du Colombier print(" r3 ", addr.r3, "\n"); 1017dd7cddfSDavid du Colombier print(" r4 ", addr.r4, "\n"); 1027dd7cddfSDavid du Colombier print(" r5 ", addr.r5, "\n"); 1037dd7cddfSDavid du Colombier print(" r6 ", addr.r6, "\n"); 1047dd7cddfSDavid du Colombier print(" r7 ", addr.r7, "\n"); 1057dd7cddfSDavid du Colombier print(" r8 ", addr.r8, "\n"); 1067dd7cddfSDavid du Colombier print(" r9 ", addr.r9, "\n"); 1077dd7cddfSDavid du Colombier print(" r10 ", addr.r10, "\n"); 1087dd7cddfSDavid du Colombier print(" r11 ", addr.r11, "\n"); 1097dd7cddfSDavid du Colombier print(" r12 ", addr.r12, "\n"); 1107dd7cddfSDavid du Colombier print(" r13 ", addr.r13, "\n"); 1117dd7cddfSDavid du Colombier print(" r14 ", addr.r14, "\n"); 1127dd7cddfSDavid du Colombier print(" type ", addr.type, "\n"); 1137dd7cddfSDavid du Colombier print(" psr ", addr.psr, "\n"); 1147dd7cddfSDavid du Colombier print(" pc ", addr.pc, "\n"); 1157dd7cddfSDavid du Colombier}; 1167dd7cddfSDavid du Colombier 1177dd7cddfSDavid du Colombierprint("/sys/lib/acid/arm"); 118