Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Apr 2004 19:33:32 -0800 (PST)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 50302 for review
Message-ID:  <200404040333.i343XWR8061618@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=50302

Change 50302 by marcel@marcel_nfs on 2004/04/03 19:33:17

	We don't set tf_esp and tf_ss when we were already in
	kernel mode. We don't fixup the trapframe. We deal with
	it when we return the register values in gdb_cpu_getreg().
	It's easier because it it works when we switch threads.

Affected files ...

.. //depot/projects/gdb/sys/i386/i386/gdb_machdep.c#6 edit

Differences ...

==== //depot/projects/gdb/sys/i386/i386/gdb_machdep.c#6 (text+ko) ====

@@ -45,6 +45,7 @@
 void *
 gdb_cpu_getreg(int regnum, size_t *regsz)
 {
+	static register_t synth;
 	struct trapframe *tf = kdb_frame;
 
 	*regsz = gdb_cpu_regsz(regnum);
@@ -53,16 +54,21 @@
 	case 1:  return (&tf->tf_ecx);
 	case 2:  return (&tf->tf_edx);
 	case 3:  return (&tf->tf_ebx);
-	case 4:  return (&tf->tf_esp);
 	case 5:  return (&tf->tf_ebp);
 	case 6:  return (&tf->tf_esi);
 	case 7:  return (&tf->tf_edi);
 	case 8:  return (&tf->tf_eip);
 	case 9:  return (&tf->tf_eflags);
 	case 10: return (&tf->tf_cs);
-	case 11: return (&tf->tf_ss);
 	case 12: return (&tf->tf_ds);
 	case 13: return (&tf->tf_es);
+	case 4:
+		synth = (!ISPL(tf->tf_cs)) ?
+		    (int)&(kdb_thread->td_frame->tf_esp) : tf->tf_esp;
+		return (&synth);
+	case 11:
+		synth = (!ISPL(tf->tf_cs)) ? rss() : tf->tf_ss;
+		return (&synth);
 	}
 	return (NULL);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404040333.i343XWR8061618>