/SPARTAN/trunk/arch/ia64/src/ivt.S |
---|
28,6 → 28,331 |
dump_gregs: |
mov r16 = REG_DUMP;; |
st8 [r16] = r0;; |
add r16 = 8,r16 ;; |
st8 [r16] = r1;; |
add r16 = 8,r16 ;; |
st8 [r16] = r2;; |
add r16 = 8,r16 ;; |
st8 [r16] = r3;; |
add r16 = 8,r16 ;; |
st8 [r16] = r4;; |
add r16 = 8,r16 ;; |
st8 [r16] = r5;; |
add r16 = 8,r16 ;; |
st8 [r16] = r6;; |
add r16 = 8,r16 ;; |
st8 [r16] = r7;; |
add r16 = 8,r16 ;; |
st8 [r16] = r8;; |
add r16 = 8,r16 ;; |
st8 [r16] = r9;; |
add r16 = 8,r16 ;; |
st8 [r16] = r10;; |
add r16 = 8,r16 ;; |
st8 [r16] = r11;; |
add r16 = 8,r16 ;; |
st8 [r16] = r12;; |
add r16 = 8,r16 ;; |
st8 [r16] = r13;; |
add r16 = 8,r16 ;; |
st8 [r16] = r14;; |
add r16 = 8,r16 ;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r16;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r17;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r18;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r19;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r20;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r21;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r22;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r23;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r24;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r25;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r26;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r27;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r28;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r29;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r30;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
bsw.1;; |
mov r15 = r31;; |
bsw.0;; |
st8 [r16] = r15;; |
add r16 = 8,r16 ;; |
st8 [r16] = r32;; |
add r16 = 8,r16 ;; |
st8 [r16] = r33;; |
add r16 = 8,r16 ;; |
st8 [r16] = r34;; |
add r16 = 8,r16 ;; |
st8 [r16] = r35;; |
add r16 = 8,r16 ;; |
st8 [r16] = r36;; |
add r16 = 8,r16 ;; |
st8 [r16] = r37;; |
add r16 = 8,r16 ;; |
st8 [r16] = r38;; |
add r16 = 8,r16 ;; |
st8 [r16] = r39;; |
add r16 = 8,r16 ;; |
st8 [r16] = r40;; |
add r16 = 8,r16 ;; |
st8 [r16] = r41;; |
add r16 = 8,r16 ;; |
st8 [r16] = r42;; |
add r16 = 8,r16 ;; |
st8 [r16] = r43;; |
add r16 = 8,r16 ;; |
st8 [r16] = r44;; |
add r16 = 8,r16 ;; |
st8 [r16] = r45;; |
add r16 = 8,r16 ;; |
st8 [r16] = r46;; |
add r16 = 8,r16 ;; |
st8 [r16] = r47;; |
add r16 = 8,r16 ;; |
st8 [r16] = r48;; |
add r16 = 8,r16 ;; |
st8 [r16] = r49;; |
add r16 = 8,r16 ;; |
st8 [r16] = r50;; |
add r16 = 8,r16 ;; |
st8 [r16] = r51;; |
add r16 = 8,r16 ;; |
st8 [r16] = r52;; |
add r16 = 8,r16 ;; |
st8 [r16] = r53;; |
add r16 = 8,r16 ;; |
st8 [r16] = r54;; |
add r16 = 8,r16 ;; |
st8 [r16] = r55;; |
add r16 = 8,r16 ;; |
st8 [r16] = r56;; |
add r16 = 8,r16 ;; |
st8 [r16] = r57;; |
add r16 = 8,r16 ;; |
st8 [r16] = r58;; |
add r16 = 8,r16 ;; |
st8 [r16] = r59;; |
add r16 = 8,r16 ;; |
st8 [r16] = r60;; |
add r16 = 8,r16 ;; |
st8 [r16] = r61;; |
add r16 = 8,r16 ;; |
st8 [r16] = r62;; |
add r16 = 8,r16 ;; |
st8 [r16] = r63;; |
add r16 = 8,r16 ;; |
st8 [r16] = r64;; |
add r16 = 8,r16 ;; |
st8 [r16] = r65;; |
add r16 = 8,r16 ;; |
st8 [r16] = r66;; |
add r16 = 8,r16 ;; |
st8 [r16] = r67;; |
add r16 = 8,r16 ;; |
st8 [r16] = r68;; |
add r16 = 8,r16 ;; |
st8 [r16] = r69;; |
add r16 = 8,r16 ;; |
st8 [r16] = r70;; |
add r16 = 8,r16 ;; |
st8 [r16] = r71;; |
add r16 = 8,r16 ;; |
st8 [r16] = r72;; |
add r16 = 8,r16 ;; |
st8 [r16] = r73;; |
add r16 = 8,r16 ;; |
st8 [r16] = r74;; |
add r16 = 8,r16 ;; |
st8 [r16] = r75;; |
add r16 = 8,r16 ;; |
st8 [r16] = r76;; |
add r16 = 8,r16 ;; |
st8 [r16] = r77;; |
add r16 = 8,r16 ;; |
st8 [r16] = r78;; |
add r16 = 8,r16 ;; |
st8 [r16] = r79;; |
add r16 = 8,r16 ;; |
st8 [r16] = r80;; |
add r16 = 8,r16 ;; |
st8 [r16] = r81;; |
add r16 = 8,r16 ;; |
st8 [r16] = r82;; |
add r16 = 8,r16 ;; |
st8 [r16] = r83;; |
add r16 = 8,r16 ;; |
st8 [r16] = r84;; |
add r16 = 8,r16 ;; |
st8 [r16] = r85;; |
add r16 = 8,r16 ;; |
st8 [r16] = r86;; |
add r16 = 8,r16 ;; |
st8 [r16] = r87;; |
add r16 = 8,r16 ;; |
st8 [r16] = r88;; |
add r16 = 8,r16 ;; |
st8 [r16] = r89;; |
add r16 = 8,r16 ;; |
st8 [r16] = r90;; |
add r16 = 8,r16 ;; |
st8 [r16] = r91;; |
add r16 = 8,r16 ;; |
st8 [r16] = r92;; |
add r16 = 8,r16 ;; |
st8 [r16] = r93;; |
add r16 = 8,r16 ;; |
st8 [r16] = r94;; |
add r16 = 8,r16 ;; |
st8 [r16] = r95;; |
add r16 = 8,r16 ;; |
st8 [r16] = r96;; |
add r16 = 8,r16 ;; |
st8 [r16] = r97;; |
add r16 = 8,r16 ;; |
st8 [r16] = r98;; |
add r16 = 8,r16 ;; |
st8 [r16] = r99;; |
add r16 = 8,r16 ;; |
st8 [r16] = r100;; |
add r16 = 8,r16 ;; |
st8 [r16] = r101;; |
add r16 = 8,r16 ;; |
st8 [r16] = r102;; |
add r16 = 8,r16 ;; |
st8 [r16] = r103;; |
add r16 = 8,r16 ;; |
st8 [r16] = r104;; |
add r16 = 8,r16 ;; |
st8 [r16] = r105;; |
add r16 = 8,r16 ;; |
st8 [r16] = r106;; |
add r16 = 8,r16 ;; |
st8 [r16] = r107;; |
add r16 = 8,r16 ;; |
st8 [r16] = r108;; |
add r16 = 8,r16 ;; |
st8 [r16] = r109;; |
add r16 = 8,r16 ;; |
st8 [r16] = r110;; |
add r16 = 8,r16 ;; |
st8 [r16] = r111;; |
add r16 = 8,r16 ;; |
st8 [r16] = r112;; |
add r16 = 8,r16 ;; |
st8 [r16] = r113;; |
add r16 = 8,r16 ;; |
st8 [r16] = r114;; |
add r16 = 8,r16 ;; |
st8 [r16] = r115;; |
add r16 = 8,r16 ;; |
st8 [r16] = r116;; |
add r16 = 8,r16 ;; |
st8 [r16] = r117;; |
add r16 = 8,r16 ;; |
st8 [r16] = r118;; |
add r16 = 8,r16 ;; |
st8 [r16] = r119;; |
add r16 = 8,r16 ;; |
st8 [r16] = r120;; |
add r16 = 8,r16 ;; |
st8 [r16] = r121;; |
add r16 = 8,r16 ;; |
st8 [r16] = r122;; |
add r16 = 8,r16 ;; |
st8 [r16] = r123;; |
add r16 = 8,r16 ;; |
st8 [r16] = r124;; |
add r16 = 8,r16 ;; |
st8 [r16] = r125;; |
add r16 = 8,r16 ;; |
st8 [r16] = r126;; |
add r16 = 8,r16 ;; |
st8 [r16] = r127;; |
add r16 = 8,r16 ;; |
br.ret.sptk.many b0;; |
.macro Handler o h |
.org IVT + \o |
br \h;; |
35,7 → 360,9 |
.macro Handler2 o |
.org IVT + \o |
mov r12 = \o |
br.call.sptk.many b0 = dump_gregs;; |
mov r16 = \o ;; |
bsw.1;; |
br universal_handler;; |
.endm |
71,7 → 398,8 |
Handler2 0x5100 |
Handler2 0x5200 |
Handler2 0x5300 |
Handler 0x5400 general_exception |
#Handler 0x5400 general_exception |
Handler2 0x5400 |
Handler2 0x5500 |
Handler2 0x5600 |
Handler2 0x5700 |
126,4 → 454,8 |
.align 32768 |
.byte 0 |
.global REG_DUMP |
REG_DUMP: |
.space 128*8 |
/SPARTAN/trunk/arch/ia64/src/cpu/cpu.c |
---|
1,6 → 1,7 |
#include <cpu.h> |
#include <print.h> |
#include <panic.h> |
#include <arch/types.h> |
extern int IVT; |
13,16 → 14,27 |
int *p=&IVT; |
volatile __u64 hlp,hlp2; |
__asm__ ( |
int psr = 0x2000; |
__asm__ volatile ( |
"mov r15 = %0;;" |
"mov cr2 = r15;;" |
"mov psr.l = %1;;" |
: |
: "r" (p) |
: "r" (p), "r" (psr) |
: "r15" |
); |
/*Switch register bank of regs r16 .. r31 to 1 It is automaticly cleared on exception*/ |
__asm__ volatile ("bsw.1;;"); |
} |
/SPARTAN/trunk/arch/ia64/src/interrupt_handler.c |
---|
29,9 → 29,13 |
#include <panic.h> |
#include <print.h> |
#include <arch/types.h> |
#include <arch/asm.h> |
extern __u64 REG_DUMP; |
void general_exception(void); |
void general_exception(void) |
{ |
47,19 → 51,85 |
} |
#define cr_dump(r) {__u64 val; get_control_register(r,val); printf("cr"#r":%Q\n",val);} |
#define ar_dump(r) {__u64 val; get_aplication_register(r,val); printf("ar"#r":%Q\n",val);} |
void universal_handler(void); |
void universal_handler(void) |
{ |
__u64 i; |
__u64 vector,psr; |
__u64 *p; |
int i; |
get_shadow_register(16,vector); |
__asm__ ( |
"mov %0 = r12;;" |
: "=r" (i) |
: |
: "r15" |
); |
p=®_DUMP; |
panic("\nException:%Q\n",i); |
for(i=0;i<128;i+=2) printf("gr%d:%Q\tgr%d:%Q\n",i,p[i],i+1,p[i+1]); |
cr_dump(0); |
cr_dump(1); |
cr_dump(2); |
cr_dump(8); |
cr_dump(16); |
cr_dump(17); |
cr_dump(19); |
cr_dump(20); |
cr_dump(21); |
cr_dump(22); |
cr_dump(23); |
cr_dump(24); |
cr_dump(25); |
cr_dump(64); |
cr_dump(65); |
cr_dump(66); |
cr_dump(67); |
cr_dump(68); |
cr_dump(69); |
cr_dump(70); |
cr_dump(71); |
cr_dump(72); |
cr_dump(73); |
cr_dump(74); |
cr_dump(80); |
cr_dump(81); |
ar_dump(0); |
ar_dump(1); |
ar_dump(2); |
ar_dump(3); |
ar_dump(4); |
ar_dump(5); |
ar_dump(6); |
ar_dump(7); |
ar_dump(16); |
ar_dump(17); |
ar_dump(18); |
ar_dump(19); |
ar_dump(21); |
ar_dump(24); |
ar_dump(25); |
ar_dump(26); |
ar_dump(27); |
ar_dump(28); |
ar_dump(29); |
ar_dump(30); |
ar_dump(32); |
ar_dump(36); |
ar_dump(40); |
ar_dump(44); |
ar_dump(64); |
ar_dump(65); |
ar_dump(66); |
get_psr(psr); |
printf("\nPSR:%Q\n",psr); |
panic("\nException:%Q\n",vector); |
} |