svn commit: r290193 - head/gnu/usr.bin/gdb/kgdb

Zbigniew Bodek zbb at FreeBSD.org
Fri Oct 30 12:37:41 UTC 2015


Author: zbb
Date: Fri Oct 30 12:37:40 2015
New Revision: 290193
URL: https://svnweb.freebsd.org/changeset/base/290193

Log:
  Use PCB/LR from PCB rather from stack on armv7-gdb
  
  The kernel dump does not store these values on the stack.
  Use PCB structure to resolve PC and LR properly.
  
  Submitted by:  Wojciech Macek <wma at semihalf.com>
  Reviewed by:   jhb, kib
  Obtained from: Semihalf
  Sponsored by:  Juniper Networks Inc.
  Differential Revision: https://reviews.freebsd.org/D4013

Modified:
  head/gnu/usr.bin/gdb/kgdb/trgt_arm.c

Modified: head/gnu/usr.bin/gdb/kgdb/trgt_arm.c
==============================================================================
--- head/gnu/usr.bin/gdb/kgdb/trgt_arm.c	Fri Oct 30 12:21:37 2015	(r290192)
+++ head/gnu/usr.bin/gdb/kgdb/trgt_arm.c	Fri Oct 30 12:37:40 2015	(r290193)
@@ -63,7 +63,7 @@ kgdb_trgt_fetch_registers(int regno __un
 #ifndef CROSS_DEBUGGER
 	struct kthr *kt;
 	struct pcb pcb;
-	int i, reg;
+	int i;
 
 	kt = kgdb_thr_lookup_tid(ptid_get_pid(inferior_ptid));
 	if (kt == NULL)
@@ -76,12 +76,8 @@ kgdb_trgt_fetch_registers(int regno __un
 		supply_register(i, (char *)&pcb.pcb_regs.sf_r4 +
 		    (i - (ARM_A1_REGNUM + 4 )) * 4);
 	}
-	if (pcb.pcb_regs.sf_sp != 0) {
-		if (kvm_read(kvm, pcb.pcb_regs.sf_sp + 4 * 4, &reg, 4) != 4)
-			warnx("kvm_read :%s", kvm_geterr(kvm));
-		else
-			supply_register(ARM_PC_REGNUM, (char *)&reg);
-	}
+	supply_register(ARM_PC_REGNUM, (char *)&pcb.pcb_regs.sf_pc);
+	supply_register(ARM_LR_REGNUM, (char *)&pcb.pcb_regs.sf_lr);
 #endif
 }
 


More information about the svn-src-all mailing list