PERFORCE change 54879 for review
Marcel Moolenaar
marcel at FreeBSD.org
Mon Jun 14 01:15:35 GMT 2004
http://perforce.freebsd.org/chv.cgi?CH=54879
Change 54879 by marcel at marcel_nfs on 2004/06/14 01:15:08
Port ia64 to the PCB world. This uses the new convencience foo
in md_var.h, as well as the support for synthesized info.
Affected files ...
.. //depot/projects/gdb/usr.bin/kgdb/md_ia64.c#5 edit
Differences ...
==== //depot/projects/gdb/usr.bin/kgdb/md_ia64.c#5 (text+ko) ====
@@ -37,9 +37,11 @@
#include <kvm.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
-#include <machine/frame.h>
#include <machine/gdb_machdep.h>
+#include <machine/md_var.h>
+#include <machine/pcb.h>
#include <machine/vmparam.h>
#include "kgdb.h"
@@ -56,91 +58,63 @@
void *
gdb_cpu_getreg(int regnum, size_t *regsz)
{
- static uint64_t synth;
- struct trapframe *tf = curkthr->td_frame;
- uint64_t bspstore;
+ uint64_t bsp, cfm;
*regsz = gdb_cpu_regsz(regnum);
switch (regnum) {
/* Registers 0-127: general registers. */
- case 1: return (&tf->tf_special.gp);
- case 2: return (&tf->tf_scratch.gr2);
- case 3: return (&tf->tf_scratch.gr3);
- case 8: return (&tf->tf_scratch.gr8);
- case 9: return (&tf->tf_scratch.gr9);
- case 10: return (&tf->tf_scratch.gr10);
- case 11: return (&tf->tf_scratch.gr11);
- case 12: return (&tf->tf_special.sp);
- case 13: return (&tf->tf_special.tp);
- case 14: return (&tf->tf_scratch.gr14);
- case 15: return (&tf->tf_scratch.gr15);
- case 16: return (&tf->tf_scratch.gr16);
- case 17: return (&tf->tf_scratch.gr17);
- case 18: return (&tf->tf_scratch.gr18);
- case 19: return (&tf->tf_scratch.gr19);
- case 20: return (&tf->tf_scratch.gr20);
- case 21: return (&tf->tf_scratch.gr21);
- case 22: return (&tf->tf_scratch.gr22);
- case 23: return (&tf->tf_scratch.gr23);
- case 24: return (&tf->tf_scratch.gr24);
- case 25: return (&tf->tf_scratch.gr25);
- case 26: return (&tf->tf_scratch.gr26);
- case 27: return (&tf->tf_scratch.gr27);
- case 28: return (&tf->tf_scratch.gr28);
- case 29: return (&tf->tf_scratch.gr29);
- case 30: return (&tf->tf_scratch.gr30);
- case 31: return (&tf->tf_scratch.gr31);
+ case 1: return (&curkthr->td_pcb->pcb_special.gp);
+ case 4: return (&curkthr->td_pcb->pcb_preserved.gr4);
+ case 5: return (&curkthr->td_pcb->pcb_preserved.gr5);
+ case 6: return (&curkthr->td_pcb->pcb_preserved.gr6);
+ case 7: return (&curkthr->td_pcb->pcb_preserved.gr7);
+ case 12: return (&curkthr->td_pcb->pcb_special.sp);
+ case 13: return (&curkthr->td_pcb->pcb_special.tp);
/* Registers 128-255: floating-point registers. */
- case 134: return (&tf->tf_scratch_fp.fr6);
- case 135: return (&tf->tf_scratch_fp.fr7);
- case 136: return (&tf->tf_scratch_fp.fr8);
- case 137: return (&tf->tf_scratch_fp.fr9);
- case 138: return (&tf->tf_scratch_fp.fr10);
- case 139: return (&tf->tf_scratch_fp.fr11);
- case 140: return (&tf->tf_scratch_fp.fr12);
- case 141: return (&tf->tf_scratch_fp.fr13);
- case 142: return (&tf->tf_scratch_fp.fr14);
- case 143: return (&tf->tf_scratch_fp.fr15);
+ case 130: return (&curkthr->td_pcb->pcb_preserved_fp.fr2);
+ case 131: return (&curkthr->td_pcb->pcb_preserved_fp.fr3);
+ case 132: return (&curkthr->td_pcb->pcb_preserved_fp.fr4);
+ case 133: return (&curkthr->td_pcb->pcb_preserved_fp.fr5);
+ case 144: return (&curkthr->td_pcb->pcb_preserved_fp.fr16);
+ case 145: return (&curkthr->td_pcb->pcb_preserved_fp.fr17);
+ case 146: return (&curkthr->td_pcb->pcb_preserved_fp.fr18);
+ case 147: return (&curkthr->td_pcb->pcb_preserved_fp.fr19);
+ case 148: return (&curkthr->td_pcb->pcb_preserved_fp.fr20);
+ case 149: return (&curkthr->td_pcb->pcb_preserved_fp.fr21);
+ case 150: return (&curkthr->td_pcb->pcb_preserved_fp.fr22);
+ case 151: return (&curkthr->td_pcb->pcb_preserved_fp.fr23);
+ case 152: return (&curkthr->td_pcb->pcb_preserved_fp.fr24);
+ case 153: return (&curkthr->td_pcb->pcb_preserved_fp.fr25);
+ case 154: return (&curkthr->td_pcb->pcb_preserved_fp.fr26);
+ case 155: return (&curkthr->td_pcb->pcb_preserved_fp.fr27);
+ case 156: return (&curkthr->td_pcb->pcb_preserved_fp.fr28);
+ case 157: return (&curkthr->td_pcb->pcb_preserved_fp.fr29);
+ case 158: return (&curkthr->td_pcb->pcb_preserved_fp.fr30);
+ case 159: return (&curkthr->td_pcb->pcb_preserved_fp.fr31);
/* Registers 320-327: branch registers. */
- case 320: return (&tf->tf_special.rp);
- case 326: return (&tf->tf_scratch.br6);
- case 327: return (&tf->tf_scratch.br7);
+ case 321: return (&curkthr->td_pcb->pcb_preserved.br1);
+ case 322: return (&curkthr->td_pcb->pcb_preserved.br2);
+ case 323: return (&curkthr->td_pcb->pcb_preserved.br3);
+ case 324: return (&curkthr->td_pcb->pcb_preserved.br4);
+ case 325: return (&curkthr->td_pcb->pcb_preserved.br5);
/* Registers 328-333: misc. other registers. */
- case 330: return (&tf->tf_special.pr);
- case 331: return (&tf->tf_special.iip);
- case 332: return (&tf->tf_special.psr);
- case 333: return (&tf->tf_special.cfm);
+ case 330: return (&curkthr->td_pcb->pcb_special.pr);
+ case 331: return (&curkthr->td_pcb->pcb_special.rp);
+ case 333: return (&curkthr->td_pcb->pcb_special.pfs);
/* Registers 334-461: application registers. */
- case 350: return (&tf->tf_special.rsc);
- case 353: return (&tf->tf_special.rnat);
- case 359: return (&tf->tf_scratch.csd);
- case 360: return (&tf->tf_scratch.ssd);
- case 366: return (&tf->tf_scratch.ccv);
- case 370: return (&tf->tf_special.unat);
- case 374: return (&tf->tf_special.fpsr);
- case 398: return (&tf->tf_special.pfs);
- /* Synthesized registers. */
+ case 350: return (&curkthr->td_pcb->pcb_special.rsc);
case 351: /* bsp */
- /*
- * If the trapframe belongs to a kernel entry from user
- * space, setup bspstore to point to the base of the
- * kernel stack.
- */
- bspstore = getreg(&tf->tf_special.bspstore);
- synth = (bspstore >= IA64_RR_BASE(5)) ? bspstore :
- (curkthr->td_kstack + (bspstore & 0x1ffUL));
- synth += getreg(&tf->tf_special.ndirty);
- return (&synth);
- case 352: /* bspstore. */
- /*
- * If the trapframe belongs to a kernel entry from user
- * space, setup bacpstore to point to the base of the
- * kernel stack.
- */
- bspstore = getreg(&tf->tf_special.bspstore);
- synth = (bspstore >= IA64_RR_BASE(5)) ? bspstore :
- (curkthr->td_kstack + (bspstore & 0x1ffUL));
- return (&synth);
+ case 352: /* bspstore */
+ bsp = getreg(&curkthr->td_pcb->pcb_special.bspstore);
+ cfm = getreg(&curkthr->td_pcb->pcb_special.pfs);
+ bsp = ia64_bsp_adjust(bsp,
+ IA64_CFM_SOF(cfm) - IA64_CFM_SOL(cfm));
+ memcpy(gdb_membuf, &bsp, sizeof(bsp));
+ return (gdb_membuf);
+ case 353: return (&curkthr->td_pcb->pcb_special.rnat);
+ case 370: return (&curkthr->td_pcb->pcb_special.unat);
+ case 374: return (&curkthr->td_pcb->pcb_special.fpsr);
+ case 399: return (&curkthr->td_pcb->pcb_preserved.lc);
}
return (NULL);
}
@@ -157,7 +131,9 @@
int
gdb_cpu_query(void)
{
+#if 0
uint64_t bspstore, *kstack;
+#endif
uintmax_t slot;
if (!gdb_rx_equal("Part:dirty:read::"))
@@ -168,6 +144,10 @@
return (-1);
}
+ gdb_tx_err(EINVAL);
+ return (-1);
+
+#if 0
/* slot is unsigned. No need to test for negative values. */
if (slot >= (getreg(&curkthr->td_frame->tf_special.ndirty) >> 3)) {
gdb_tx_err(EINVAL);
@@ -186,4 +166,5 @@
gdb_tx_mem((void*)(kstack + slot), 8);
gdb_tx_end();
return (1);
+#endif
}
More information about the p4-projects
mailing list