RSP value incorrect on x86_kdb

Jim Houston jim.houston at comcast.net
Tue Oct 4 07:36:07 PDT 2005


Hi Jack, Everyone,

The existing x86_64 kdb has two blocks of code which adjust the RSP
value based on the assumption that the RSP and SS are not saved.
I don't think this code is ever need.  Once the processor is in
"Long-Mode" it always saves the SS:RSP.

I was having problems with stack trace backs when stopped at a
breakpoint at a function entry.  Fixing the RSP values made the
stack trace back work for this case.

The attached patch removes this unnecessary stack adjustment.

Jim Houston - Concurrent Computer Corp.

--

--- arch/x86_64/kdb/kdbasupport.c.0	2005-08-22 17:30:22.000000000 -0400
+++ arch/x86_64/kdb/kdbasupport.c	2005-10-04 10:31:05.000000000 -0400
@@ -699,10 +699,6 @@
 
 	if (strcmp(regname, "krsp") == 0) {
 		*contents = (unsigned long)regs + sizeof(struct pt_regs);
-		if ((regs->cs & 0xffff) == __KERNEL_CS) {
-			/* rsp and ss are not on stack */
-			*contents -= 2*4;
-		}
 		return 0;
 	}
 
@@ -734,22 +730,6 @@
 
 	if ((i < nkdbreglist)
 	 && (strlen(kdbreglist[i].reg_name) == strlen(regname))) {
-		if ((regs->cs & 0xffff) == __KERNEL_CS) {
-			/* No cpl switch, rsp is not on stack */
-			if (strcmp(kdbreglist[i].reg_name, "rsp") == 0) {
-				*contents = (kdb_machreg_t)regs +
-					sizeof(struct pt_regs) - 2*8;
-				return(0);
-			}
-			if (strcmp(kdbreglist[i].reg_name, "ss") == 0) {
-				kdb_machreg_t r;
-
-				r = (kdb_machreg_t)regs +
-					sizeof(struct pt_regs) - 2*8;
-				*contents = (kdb_machreg_t)SS(r);	/* XXX */
-				return(0);
-			}
-		}
 		*contents = *(unsigned long *)((unsigned long)regs +
 				kdbreglist[i].reg_offset);
 		return(0);



---------------------------
Use http://oss.sgi.com/ecartis to modify your settings or to unsubscribe.


More information about the kdb mailing list