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 <[email protected]>
  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
 }
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to