PERFORCE change 53842 for review

Marcel Moolenaar marcel at FreeBSD.org
Sun May 30 20:37:30 PDT 2004


http://perforce.freebsd.org/chv.cgi?CH=53842

Change 53842 by marcel at marcel_nfs on 2004/05/30 20:36:38

	Have get_esp() take a pointer to a trapframe so that it
	works with any thread, not just the one that entered the
	debugger.

Affected files ...

.. //depot/projects/gdb/sys/i386/i386/db_trace.c#5 edit

Differences ...

==== //depot/projects/gdb/sys/i386/i386/db_trace.c#5 (text+ko) ====

@@ -59,10 +59,10 @@
 static db_varfcn_t db_esp;
 
 static __inline int
-get_esp(void)
+get_esp(struct trapframe *tf)
 {
-	return ((ISPL(ddb_regs.tf_cs)) ? ddb_regs.tf_esp :
-	    (db_expr_t)kdb_frame + offsetof(struct trapframe, tf_esp));
+	return ((ISPL(tf->tf_cs)) ? tf->tf_esp :
+	    (db_expr_t)tf + offsetof(struct trapframe, tf_esp));
 }
 
 /*
@@ -125,7 +125,7 @@
 db_esp (struct db_variable *vp, db_expr_t *valuep, int op)
 {
 	if (op == DB_VAR_GET)
-		*valuep = get_esp();
+		*valuep = get_esp(kdb_frame);
 	else if (ISPL(ddb_regs.tf_cs))
 		ddb_regs.tf_esp = *valuep;
 	return (0);
@@ -300,7 +300,7 @@
 		tf = (struct trapframe *)((int)*fp + 8);
 
 	if (INKERNEL((int) tf)) {
-		esp = get_esp();
+		esp = get_esp(tf);
 		eip = tf->tf_eip;
 		ebp = tf->tf_ebp;
 		switch (frame_type) {
@@ -366,20 +366,20 @@
 				instr = db_get_value(pc, 4, FALSE);
 				if ((instr & 0xffffff) == 0x00e58955) {
 					/* pushl %ebp; movl %esp, %ebp */
-					actframe = (void *)(get_esp() - 4);
+					actframe = (void *)(get_esp(tf) - 4);
 				} else if ((instr & 0xffff) == 0x0000e589) {
 					/* movl %esp, %ebp */
-					actframe = (void *)get_esp();
+					actframe = (void *)get_esp(tf);
 					if (ddb_regs.tf_ebp == 0) {
 						/* Fake frame better. */
 						frame = actframe;
 					}
 				} else if ((instr & 0xff) == 0x000000c3) {
 					/* ret */
-					actframe = (void *)(get_esp() - 4);
+					actframe = (void *)(get_esp(tf) - 4);
 				} else if (offset == 0) {
 					/* Probably an assembler symbol. */
-					actframe = (void *)(get_esp() - 4);
+					actframe = (void *)(get_esp(tf) - 4);
 				}
 			} else if (strcmp(name, "fork_trampoline") == 0) {
 				/*


More information about the p4-projects mailing list