public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
From: David Mosberger <davidm@hpl.hp.com>
To: linux-ia64@vger.kernel.org
Subject: [Linux-ia64] kdb patch
Date: Thu, 29 Mar 2001 08:50:23 +0000	[thread overview]
Message-ID: <marc-linux-ia64-105590693005367@msgid-missing> (raw)

Here is a patch to make "rd s" and "rd %rN" (N>2) work again.
Without this patch, kdb dies when trying to access the stacked
registers, which isn't very useful.

	--david

--- arch/ia64/kdb/kdbasupport.c~	Wed Mar 28 21:59:06 2001
+++ arch/ia64/kdb/kdbasupport.c	Thu Mar 29 00:25:52 2001
@@ -424,48 +424,57 @@
 static int
 show_cur_stack_frame(struct pt_regs *regs, int regno, unsigned long *contents)
 {
-	/* FIXME: convert to unwind */
-        long sof = regs->cr_ifs & ((1<<7)-1) ;	/* size of frame */
-        unsigned long   i ;
-	int j;
-	struct switch_stack *prs_regs = getprsregs(regs) ;
-        unsigned long *sofptr = (prs_regs? ia64_rse_skip_regs(
-			(unsigned long *)prs_regs->ar_bspstore, -sof) : NULL) ;
+        unsigned long sof, i, cfm, val, sp, *bsp;
+	struct unw_frame_info info;
+	mm_segment_t old_fs;
+
+	/* XXX It would be better to simply create a copy of an unw_frame_info structure
+	 * that is set up in kdba_main_loop().  That way, we could avoid having to skip
+	 * over the first few frames every time...
+	 */
+	unw_init_frame_info(&info, current, kdb_sw[smp_processor_id()]);
+	do {
+		if (unw_unwind(&info) < 0) {
+			kdb_printf("Failed to unwind\n");
+			return 0;
+		}
+		unw_get_sp(&info, &sp);
+	} while (sp <= (unsigned long) regs);
+	unw_get_bsp(&info, (unsigned long *) &bsp);
+	unw_get_cfm(&info, &cfm);
 
-	if (!sofptr) {
-		kdb_printf("Unable to display Current Stack Frame\n") ;
-		return 0 ;
+	if (!bsp) {
+		kdb_printf("Unable to display Current Stack Frame\n");
+		return 0;
 	}
 
-	if (regno < 0) 
-		return 0 ;
+	sof = (cfm & 0x7f);
 
-	for (i=sof, j=0;i;i--,j++) {
-		/* remember to skip the nat collection dword */
-		if ((((unsigned long)sofptr>>3) & (((1<<6)-1))) 
-				= ((1<<6)-1))
-			sofptr++ ;
-
-		/* return the value in the reg if regno is non zero */
-
-		if (regno) {
-			if ((j+1) = regno) {
-				if (contents)
-					*contents = *sofptr ;
-				return -1;
-			}
-			sofptr++ ;
-		} else {
-			kdb_printf(" r%d: %016lx ", 32+j, *sofptr++) ;
-			if (!((j+1)%3)) kdb_printf("\n") ;
+	if (regno) {
+		if ((unsigned) regno - 32 >= sof)
+			return 0;
+		bsp = ia64_rse_skip_regs(bsp, regno - 32);
+		old_fs = set_fs(KERNEL_DS);
+		{
+			get_user(val, bsp);
 		}
+		set_fs(old_fs);
+		*contents = val;
+		return 1;
 	}
 
-	if (regno) {
-		if (!i) /* bogus rse number */
-			return 0 ;
-	} else
-		kdb_printf("\n") ;
+	old_fs = set_fs(KERNEL_DS);
+	{
+		for (i = 0; i < sof; ++i) {
+			get_user(val, bsp);
+			kdb_printf(" r%lu: %016lx ", 32 + i, val);
+			if (!((i + 1) % 3))
+				kdb_printf("\n");
+			bsp = ia64_rse_skip_regs(bsp, 1);
+		}
+		kdb_printf("\n");
+	}
+	set_fs(old_fs);
 
 	return 0 ;
 }
@@ -613,8 +622,7 @@
 	if (i = nkdbreglist) {
 		/* Lets check the rse maybe */
 		if (regname[0] = 'r')
-			if (show_cur_stack_frame(regs, simple_strtoul(regname+1, 0, 0) - 31, 
-					contents))
+			if (show_cur_stack_frame(regs, simple_strtoul(regname+1, 0, 0), contents))
 				return 0 ;
 		return KDB_BADREG;
 	}


                 reply	other threads:[~2001-03-29  8:50 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-ia64-105590693005367@msgid-missing \
    --to=davidm@hpl.hp.com \
    --cc=linux-ia64@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox