From owner-p4-projects@FreeBSD.ORG Mon Jun 14 01:15:35 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 37CC516A4D1; Mon, 14 Jun 2004 01:15:35 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EF87116A4CE for ; Mon, 14 Jun 2004 01:15:34 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id E927643D39 for ; Mon, 14 Jun 2004 01:15:34 +0000 (GMT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i5E1FOX1022601 for ; Mon, 14 Jun 2004 01:15:24 GMT (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i5E1FNO4022598 for perforce@freebsd.org; Mon, 14 Jun 2004 01:15:23 GMT (envelope-from marcel@freebsd.org) Date: Mon, 14 Jun 2004 01:15:23 GMT Message-Id: <200406140115.i5E1FNO4022598@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 54879 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Jun 2004 01:15:35 -0000 http://perforce.freebsd.org/chv.cgi?CH=54879 Change 54879 by marcel@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 #include #include +#include -#include #include +#include +#include #include #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 }