aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/kernel/traps.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68k/kernel/traps.c')
-rw-r--r--arch/m68k/kernel/traps.c126
1 files changed, 68 insertions, 58 deletions
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
index 837a88709902..9adf378f8f1e 100644
--- a/arch/m68k/kernel/traps.c
+++ b/arch/m68k/kernel/traps.c
@@ -927,66 +927,88 @@ void show_trace(unsigned long *stack)
927void show_registers(struct pt_regs *regs) 927void show_registers(struct pt_regs *regs)
928{ 928{
929 struct frame *fp = (struct frame *)regs; 929 struct frame *fp = (struct frame *)regs;
930 mm_segment_t old_fs = get_fs();
931 u16 c, *cp;
930 unsigned long addr; 932 unsigned long addr;
931 int i; 933 int i;
932 934
935 print_modules();
936 printk("PC: [<%08lx>]",regs->pc);
937 print_symbol(" %s", regs->pc);
938 printk("\nSR: %04x SP: %p a2: %08lx\n",
939 regs->sr, regs, regs->a2);
940 printk("d0: %08lx d1: %08lx d2: %08lx d3: %08lx\n",
941 regs->d0, regs->d1, regs->d2, regs->d3);
942 printk("d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n",
943 regs->d4, regs->d5, regs->a0, regs->a1);
944
945 printk("Process %s (pid: %d, task=%p)\n",
946 current->comm, current->pid, current);
933 addr = (unsigned long)&fp->un; 947 addr = (unsigned long)&fp->un;
934 printk("Frame format=%X ", fp->ptregs.format); 948 printk("Frame format=%X ", regs->format);
935 switch (fp->ptregs.format) { 949 switch (regs->format) {
936 case 0x2: 950 case 0x2:
937 printk("instr addr=%08lx\n", fp->un.fmt2.iaddr); 951 printk("instr addr=%08lx\n", fp->un.fmt2.iaddr);
938 addr += sizeof(fp->un.fmt2); 952 addr += sizeof(fp->un.fmt2);
939 break; 953 break;
940 case 0x3: 954 case 0x3:
941 printk("eff addr=%08lx\n", fp->un.fmt3.effaddr); 955 printk("eff addr=%08lx\n", fp->un.fmt3.effaddr);
942 addr += sizeof(fp->un.fmt3); 956 addr += sizeof(fp->un.fmt3);
943 break; 957 break;
944 case 0x4: 958 case 0x4:
945 printk((CPU_IS_060 ? "fault addr=%08lx fslw=%08lx\n" 959 printk((CPU_IS_060 ? "fault addr=%08lx fslw=%08lx\n"
946 : "eff addr=%08lx pc=%08lx\n"), 960 : "eff addr=%08lx pc=%08lx\n"),
947 fp->un.fmt4.effaddr, fp->un.fmt4.pc); 961 fp->un.fmt4.effaddr, fp->un.fmt4.pc);
948 addr += sizeof(fp->un.fmt4); 962 addr += sizeof(fp->un.fmt4);
949 break; 963 break;
950 case 0x7: 964 case 0x7:
951 printk("eff addr=%08lx ssw=%04x faddr=%08lx\n", 965 printk("eff addr=%08lx ssw=%04x faddr=%08lx\n",
952 fp->un.fmt7.effaddr, fp->un.fmt7.ssw, fp->un.fmt7.faddr); 966 fp->un.fmt7.effaddr, fp->un.fmt7.ssw, fp->un.fmt7.faddr);
953 printk("wb 1 stat/addr/data: %04x %08lx %08lx\n", 967 printk("wb 1 stat/addr/data: %04x %08lx %08lx\n",
954 fp->un.fmt7.wb1s, fp->un.fmt7.wb1a, fp->un.fmt7.wb1dpd0); 968 fp->un.fmt7.wb1s, fp->un.fmt7.wb1a, fp->un.fmt7.wb1dpd0);
955 printk("wb 2 stat/addr/data: %04x %08lx %08lx\n", 969 printk("wb 2 stat/addr/data: %04x %08lx %08lx\n",
956 fp->un.fmt7.wb2s, fp->un.fmt7.wb2a, fp->un.fmt7.wb2d); 970 fp->un.fmt7.wb2s, fp->un.fmt7.wb2a, fp->un.fmt7.wb2d);
957 printk("wb 3 stat/addr/data: %04x %08lx %08lx\n", 971 printk("wb 3 stat/addr/data: %04x %08lx %08lx\n",
958 fp->un.fmt7.wb3s, fp->un.fmt7.wb3a, fp->un.fmt7.wb3d); 972 fp->un.fmt7.wb3s, fp->un.fmt7.wb3a, fp->un.fmt7.wb3d);
959 printk("push data: %08lx %08lx %08lx %08lx\n", 973 printk("push data: %08lx %08lx %08lx %08lx\n",
960 fp->un.fmt7.wb1dpd0, fp->un.fmt7.pd1, fp->un.fmt7.pd2, 974 fp->un.fmt7.wb1dpd0, fp->un.fmt7.pd1, fp->un.fmt7.pd2,
961 fp->un.fmt7.pd3); 975 fp->un.fmt7.pd3);
962 addr += sizeof(fp->un.fmt7); 976 addr += sizeof(fp->un.fmt7);
963 break; 977 break;
964 case 0x9: 978 case 0x9:
965 printk("instr addr=%08lx\n", fp->un.fmt9.iaddr); 979 printk("instr addr=%08lx\n", fp->un.fmt9.iaddr);
966 addr += sizeof(fp->un.fmt9); 980 addr += sizeof(fp->un.fmt9);
967 break; 981 break;
968 case 0xa: 982 case 0xa:
969 printk("ssw=%04x isc=%04x isb=%04x daddr=%08lx dobuf=%08lx\n", 983 printk("ssw=%04x isc=%04x isb=%04x daddr=%08lx dobuf=%08lx\n",
970 fp->un.fmta.ssw, fp->un.fmta.isc, fp->un.fmta.isb, 984 fp->un.fmta.ssw, fp->un.fmta.isc, fp->un.fmta.isb,
971 fp->un.fmta.daddr, fp->un.fmta.dobuf); 985 fp->un.fmta.daddr, fp->un.fmta.dobuf);
972 addr += sizeof(fp->un.fmta); 986 addr += sizeof(fp->un.fmta);
973 break; 987 break;
974 case 0xb: 988 case 0xb:
975 printk("ssw=%04x isc=%04x isb=%04x daddr=%08lx dobuf=%08lx\n", 989 printk("ssw=%04x isc=%04x isb=%04x daddr=%08lx dobuf=%08lx\n",
976 fp->un.fmtb.ssw, fp->un.fmtb.isc, fp->un.fmtb.isb, 990 fp->un.fmtb.ssw, fp->un.fmtb.isc, fp->un.fmtb.isb,
977 fp->un.fmtb.daddr, fp->un.fmtb.dobuf); 991 fp->un.fmtb.daddr, fp->un.fmtb.dobuf);
978 printk("baddr=%08lx dibuf=%08lx ver=%x\n", 992 printk("baddr=%08lx dibuf=%08lx ver=%x\n",
979 fp->un.fmtb.baddr, fp->un.fmtb.dibuf, fp->un.fmtb.ver); 993 fp->un.fmtb.baddr, fp->un.fmtb.dibuf, fp->un.fmtb.ver);
980 addr += sizeof(fp->un.fmtb); 994 addr += sizeof(fp->un.fmtb);
981 break; 995 break;
982 default: 996 default:
983 printk("\n"); 997 printk("\n");
984 } 998 }
985 show_stack(NULL, (unsigned long *)addr); 999 show_stack(NULL, (unsigned long *)addr);
986 1000
987 printk("Code: "); 1001 printk("Code:");
988 for (i = 0; i < 10; i++) 1002 set_fs(KERNEL_DS);
989 printk("%04x ", 0xffff & ((short *) fp->ptregs.pc)[i]); 1003 cp = (u16 *)regs->pc;
1004 for (i = -8; i < 16; i++) {
1005 if (get_user(c, cp + i) && i >= 0) {
1006 printk(" Bad PC value.");
1007 break;
1008 }
1009 printk(i ? " %04x" : " <%04x>", c);
1010 }
1011 set_fs(old_fs);
990 printk ("\n"); 1012 printk ("\n");
991} 1013}
992 1014
@@ -1190,19 +1212,7 @@ void die_if_kernel (char *str, struct pt_regs *fp, int nr)
1190 1212
1191 console_verbose(); 1213 console_verbose();
1192 printk("%s: %08x\n",str,nr); 1214 printk("%s: %08x\n",str,nr);
1193 print_modules(); 1215 show_registers(fp);
1194 printk("PC: [<%08lx>]",fp->pc);
1195 print_symbol(" %s\n", fp->pc);
1196 printk("\nSR: %04x SP: %p a2: %08lx\n",
1197 fp->sr, fp, fp->a2);
1198 printk("d0: %08lx d1: %08lx d2: %08lx d3: %08lx\n",
1199 fp->d0, fp->d1, fp->d2, fp->d3);
1200 printk("d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n",
1201 fp->d4, fp->d5, fp->a0, fp->a1);
1202
1203 printk("Process %s (pid: %d, stackpage=%08lx)\n",
1204 current->comm, current->pid, PAGE_SIZE+(unsigned long)current);
1205 show_stack(NULL, (unsigned long *)fp);
1206 do_exit(SIGSEGV); 1216 do_exit(SIGSEGV);
1207} 1217}
1208 1218