[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-ia64
Subject: [Linux-ia64] another kdb patch
From: David Mosberger <davidm () hpl ! hp ! com>
Date: 2001-03-29 21:36:22
[Download RAW message or body]
The attached patch does some more kdb cleanup and adds a command ("rd
k") to print the kernel regs. I found this to be useful while
debugging the page-size related bug mentined in my earlier mail.
BTW: Thanks to Keith for maintaining kdb. It would have been a lot
harder to track this bug down without kdb!
--david
--- arch/ia64/kdb/kdbasupport.c~ Thu Mar 29 00:25:52 2001
+++ arch/ia64/kdb/kdbasupport.c Thu Mar 29 09:13:23 2001
@@ -421,6 +421,22 @@
ia64_srlz_d();
}
+static void
+show_kernel_regs (void)
+{
+ unsigned long kr[8];
+ int i;
+
+ asm ("mov %0=ar.k0" : "=r"(kr[0])); asm ("mov %0=ar.k1" : "=r"(kr[1]));
+ asm ("mov %0=ar.k2" : "=r"(kr[2])); asm ("mov %0=ar.k3" : "=r"(kr[3]));
+ asm ("mov %0=ar.k4" : "=r"(kr[4])); asm ("mov %0=ar.k5" : "=r"(kr[5]));
+ asm ("mov %0=ar.k6" : "=r"(kr[6])); asm ("mov %0=ar.k7" : "=r"(kr[7]));
+
+ for (i = 0; i < 4; ++i)
+ kdb_printf(" kr%d: %016lx kr%d: %016lx\n", 2*i, kr[2*i], 2*i+1, kr[2*i+1]);
+ kdb_printf("\n");
+}
+
static int
show_cur_stack_frame(struct pt_regs *regs, int regno, unsigned long *contents)
{
@@ -576,9 +592,7 @@
static const int nkdbreglist = sizeof(kdbreglist) / sizeof(struct kdbregs);
int
-kdba_getregcontents(const char *regname,
- struct pt_regs *regs,
- unsigned long *contents)
+kdba_getregcontents(const char *regname, struct pt_regs *regs, unsigned long *contents)
{
int i;
@@ -597,23 +611,13 @@
get_fault_regs(&fr) ;
*contents = fr.isr ;
return 0 ;
- }
+ }
if (strcmp(regname, "ksp") == 0) {
*contents = (unsigned long) (regs + 1);
return 0;
}
-#if i386_sample_code
- /* XXX need to verify this */
- if (regname[0] == '%') {
- /* User registers: %%e[a-c]x, etc */
- regname++;
- regs = (struct pt_regs *)
- (current->thread.ksp - sizeof(struct pt_regs));
- }
-#endif /* i386_sample_code */
-
for (i=0; i<nkdbreglist; i++) {
if (strstr(kdbreglist[i].reg_name, regname))
break;
@@ -721,6 +725,7 @@
* rd s - valid stacked regs
* rd %sstk - gets switch stack addr. dump memory and search
* rd d - debug regs, may not be too useful
+ * rd k - dump kernel regs
*
* ARs TB Done
* OTHERS TB Decided ??
@@ -778,7 +783,7 @@
for(i=0; i<8; i+=2) {
kdb_printf("idr%d: 0x%16.16lx idr%d: 0x%16.16lx\n", i,
kdba_getdr(i), i+1, kdba_getdr(i+1));
-
+
}
return 0;
}
@@ -797,6 +802,9 @@
#endif /* i386_sample_code */
case 'i':
kdba_show_intregs();
+ break;
+ case 'k':
+ show_kernel_regs();
break;
case 'm':
break;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic