From owner-p4-projects@FreeBSD.ORG Sun Apr 27 11:47:28 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2F0A037B404; Sun, 27 Apr 2003 11:47:25 -0700 (PDT) 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 CF25737B401 for ; Sun, 27 Apr 2003 11:47:24 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4B34243F3F for ; Sun, 27 Apr 2003 11:47:24 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h3RIlO0U089449 for ; Sun, 27 Apr 2003 11:47:24 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h3RIlN43089443 for perforce@freebsd.org; Sun, 27 Apr 2003 11:47:23 -0700 (PDT) Date: Sun, 27 Apr 2003 11:47:23 -0700 (PDT) Message-Id: <200304271847.h3RIlN43089443@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 29884 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: Sun, 27 Apr 2003 18:47:29 -0000 http://perforce.freebsd.org/chv.cgi?CH=29884 Change 29884 by marcel@marcel_nfs on 2003/04/27 11:46:42 Make DDB usable again. This is not complete yet. Handling of stacked registers has been left out (just like for the handling of the unaligned accesses). Also, we don't print the preserved registers because we have to unwind to get them. This all begs for some thought and planning. While typing commit logs, I may as well add that it would be nice to more clearly see which registers have NaT bits set. Affected files ... .. //depot/projects/ia64_epc/sys/ia64/ia64/db_interface.c#5 edit .. //depot/projects/ia64_epc/sys/ia64/ia64/db_trace.c#3 edit Differences ... ==== //depot/projects/ia64_epc/sys/ia64/ia64/db_interface.c#5 (text+ko) ==== @@ -69,71 +69,61 @@ int db_active; db_regs_t ddb_regs; -static u_int64_t zero; static int db_get_rse_reg(struct db_variable *vp, db_expr_t *valuep, int op); -static int db_get_pc_reg(struct db_variable *vp, db_expr_t *valuep, int op); +static int db_get_ip_reg(struct db_variable *vp, db_expr_t *valuep, int op); struct db_variable db_regs[] = { /* Misc control/app registers */ #define DB_MISC_REGS 13 /* make sure this is correct */ - {"pc", (db_expr_t*) 0, db_get_pc_reg}, - {"ip", (db_expr_t*) &ddb_regs.tf_special.iip, FCN_NULL}, + {"ip", NULL, db_get_ip_reg}, {"psr", (db_expr_t*) &ddb_regs.tf_special.psr, FCN_NULL}, {"cr.isr", (db_expr_t*) &ddb_regs.tf_special.isr, FCN_NULL}, {"cr.ifa", (db_expr_t*) &ddb_regs.tf_special.ifa, FCN_NULL}, {"pr", (db_expr_t*) &ddb_regs.tf_special.pr, FCN_NULL}, {"ar.rsc", (db_expr_t*) &ddb_regs.tf_special.rsc, FCN_NULL}, {"ar.pfs", (db_expr_t*) &ddb_regs.tf_special.pfs, FCN_NULL}, - {"cr.ifs", (db_expr_t*) &ddb_regs.tf_special.ifs, FCN_NULL}, + {"cr.ifs", (db_expr_t*) &ddb_regs.tf_special.cfm, FCN_NULL}, {"ar.bspstore", (db_expr_t*) &ddb_regs.tf_special.bspstore, FCN_NULL}, + {"ndirty", (db_expr_t*) &ddb_regs.tf_special.ndirty, FCN_NULL}, {"ar.rnat", (db_expr_t*) &ddb_regs.tf_special.rnat, FCN_NULL}, - {"ar.unat", (db_expr_t*) &ddb_regs.tf_special.nat, FCN_NULL}, + {"ar.unat", (db_expr_t*) &ddb_regs.tf_special.unat, FCN_NULL}, {"ar.fpsr", (db_expr_t*) &ddb_regs.tf_special.fpsr, FCN_NULL}, /* Branch registers */ - {"rp", (db_expr_t*) &ddb_regs.tf_b[0], FCN_NULL}, - {"b1", (db_expr_t*) &ddb_regs.tf_b[1], FCN_NULL}, - {"b2", (db_expr_t*) &ddb_regs.tf_b[2], FCN_NULL}, - {"b3", (db_expr_t*) &ddb_regs.tf_b[3], FCN_NULL}, - {"b4", (db_expr_t*) &ddb_regs.tf_b[4], FCN_NULL}, - {"b5", (db_expr_t*) &ddb_regs.tf_b[5], FCN_NULL}, - {"b6", (db_expr_t*) &ddb_regs.tf_b[6], FCN_NULL}, - {"b7", (db_expr_t*) &ddb_regs.tf_b[7], FCN_NULL}, + {"rp", (db_expr_t*) &ddb_regs.tf_special.rp, FCN_NULL}, + /* b1, b2, b3, b4, b5 are preserved */ + {"b6", (db_expr_t*) &ddb_regs.tf_scratch.br6, FCN_NULL}, + {"b7", (db_expr_t*) &ddb_regs.tf_scratch.br7, FCN_NULL}, /* Static registers */ - {"r0", (db_expr_t*) &zero, FCN_NULL}, - {"gp", (db_expr_t*) &ddb_regs.tf_r[FRAME_R1], FCN_NULL}, - {"r2", (db_expr_t*) &ddb_regs.tf_r[FRAME_R2], FCN_NULL}, - {"r3", (db_expr_t*) &ddb_regs.tf_r[FRAME_R3], FCN_NULL}, - {"r4", (db_expr_t*) &ddb_regs.tf_r[FRAME_R4], FCN_NULL}, - {"r5", (db_expr_t*) &ddb_regs.tf_r[FRAME_R5], FCN_NULL}, - {"r6", (db_expr_t*) &ddb_regs.tf_r[FRAME_R6], FCN_NULL}, - {"r7", (db_expr_t*) &ddb_regs.tf_r[FRAME_R7], FCN_NULL}, - {"r8", (db_expr_t*) &ddb_regs.tf_r[FRAME_R8], FCN_NULL}, - {"r9", (db_expr_t*) &ddb_regs.tf_r[FRAME_R9], FCN_NULL}, - {"r10", (db_expr_t*) &ddb_regs.tf_r[FRAME_R10], FCN_NULL}, - {"r11", (db_expr_t*) &ddb_regs.tf_r[FRAME_R11], FCN_NULL}, - {"sp", (db_expr_t*) &ddb_regs.tf_r[FRAME_R12], FCN_NULL}, - {"r13", (db_expr_t*) &ddb_regs.tf_r[FRAME_R13], FCN_NULL}, - {"r14", (db_expr_t*) &ddb_regs.tf_r[FRAME_R14], FCN_NULL}, - {"r15", (db_expr_t*) &ddb_regs.tf_r[FRAME_R15], FCN_NULL}, - {"r16", (db_expr_t*) &ddb_regs.tf_r[FRAME_R16], FCN_NULL}, - {"r17", (db_expr_t*) &ddb_regs.tf_r[FRAME_R17], FCN_NULL}, - {"r18", (db_expr_t*) &ddb_regs.tf_r[FRAME_R18], FCN_NULL}, - {"r19", (db_expr_t*) &ddb_regs.tf_r[FRAME_R19], FCN_NULL}, - {"r20", (db_expr_t*) &ddb_regs.tf_r[FRAME_R20], FCN_NULL}, - {"r21", (db_expr_t*) &ddb_regs.tf_r[FRAME_R21], FCN_NULL}, - {"r22", (db_expr_t*) &ddb_regs.tf_r[FRAME_R22], FCN_NULL}, - {"r23", (db_expr_t*) &ddb_regs.tf_r[FRAME_R23], FCN_NULL}, - {"r24", (db_expr_t*) &ddb_regs.tf_r[FRAME_R24], FCN_NULL}, - {"r25", (db_expr_t*) &ddb_regs.tf_r[FRAME_R25], FCN_NULL}, - {"r26", (db_expr_t*) &ddb_regs.tf_r[FRAME_R26], FCN_NULL}, - {"r27", (db_expr_t*) &ddb_regs.tf_r[FRAME_R27], FCN_NULL}, - {"r28", (db_expr_t*) &ddb_regs.tf_r[FRAME_R28], FCN_NULL}, - {"r29", (db_expr_t*) &ddb_regs.tf_r[FRAME_R29], FCN_NULL}, - {"r30", (db_expr_t*) &ddb_regs.tf_r[FRAME_R30], FCN_NULL}, - {"r31", (db_expr_t*) &ddb_regs.tf_r[FRAME_R31], FCN_NULL}, + {"gp", (db_expr_t*) &ddb_regs.tf_special.gp, FCN_NULL}, + {"r2", (db_expr_t*) &ddb_regs.tf_scratch.gr2, FCN_NULL}, + {"r3", (db_expr_t*) &ddb_regs.tf_scratch.gr3, FCN_NULL}, + {"r8", (db_expr_t*) &ddb_regs.tf_scratch.gr8, FCN_NULL}, + {"r9", (db_expr_t*) &ddb_regs.tf_scratch.gr9, FCN_NULL}, + {"r10", (db_expr_t*) &ddb_regs.tf_scratch.gr10, FCN_NULL}, + {"r11", (db_expr_t*) &ddb_regs.tf_scratch.gr11, FCN_NULL}, + {"sp", (db_expr_t*) &ddb_regs.tf_special.sp, FCN_NULL}, + {"tp", (db_expr_t*) &ddb_regs.tf_special.tp, FCN_NULL}, + {"r14", (db_expr_t*) &ddb_regs.tf_scratch.gr14, FCN_NULL}, + {"r15", (db_expr_t*) &ddb_regs.tf_scratch.gr15, FCN_NULL}, + {"r16", (db_expr_t*) &ddb_regs.tf_scratch.gr16, FCN_NULL}, + {"r17", (db_expr_t*) &ddb_regs.tf_scratch.gr17, FCN_NULL}, + {"r18", (db_expr_t*) &ddb_regs.tf_scratch.gr18, FCN_NULL}, + {"r19", (db_expr_t*) &ddb_regs.tf_scratch.gr19, FCN_NULL}, + {"r20", (db_expr_t*) &ddb_regs.tf_scratch.gr20, FCN_NULL}, + {"r21", (db_expr_t*) &ddb_regs.tf_scratch.gr21, FCN_NULL}, + {"r22", (db_expr_t*) &ddb_regs.tf_scratch.gr22, FCN_NULL}, + {"r23", (db_expr_t*) &ddb_regs.tf_scratch.gr23, FCN_NULL}, + {"r24", (db_expr_t*) &ddb_regs.tf_scratch.gr24, FCN_NULL}, + {"r25", (db_expr_t*) &ddb_regs.tf_scratch.gr25, FCN_NULL}, + {"r26", (db_expr_t*) &ddb_regs.tf_scratch.gr26, FCN_NULL}, + {"r27", (db_expr_t*) &ddb_regs.tf_scratch.gr27, FCN_NULL}, + {"r28", (db_expr_t*) &ddb_regs.tf_scratch.gr28, FCN_NULL}, + {"r29", (db_expr_t*) &ddb_regs.tf_scratch.gr29, FCN_NULL}, + {"r30", (db_expr_t*) &ddb_regs.tf_scratch.gr30, FCN_NULL}, + {"r31", (db_expr_t*) &ddb_regs.tf_scratch.gr31, FCN_NULL}, /* Stacked registers */ {"r32", (db_expr_t*) 32, db_get_rse_reg}, @@ -238,28 +228,37 @@ static int db_get_rse_reg(struct db_variable *vp, db_expr_t *valuep, int op) { - int sof = ddb_regs.tf_cr_ifs & 0x7f; + int sof = ddb_regs.tf_special.cfm & 0x7f; int regno = (db_expr_t) vp->valuep; - u_int64_t *bsp = (u_int64_t *) (ddb_regs.tf_ar_bspstore + ddb_regs.tf_ndirty); +#if 0 + u_int64_t *bsp; u_int64_t *reg; +#endif if (regno - 32 >= sof) { if (op == DB_VAR_GET) *valuep = 0xdeadbeefdeadbeef; } else { +#if 0 + bsp = (u_int64_t *)(ddb_regs.tf_special.bspstore + + ddb_regs.tf_special.ndirty); bsp = ia64_rse_previous_frame(bsp, sof); reg = ia64_rse_register_address(bsp, regno); if (op == DB_VAR_GET) *valuep = *reg; else *reg = *valuep; +#else + if (op == DB_VAR_GET) + *valuep = 0xdeadbeefdeadbeef; +#endif } return 0; } static int -db_get_pc_reg(struct db_variable *vp, db_expr_t *valuep, int op) +db_get_ip_reg(struct db_variable *vp, db_expr_t *valuep, int op) { /* Read only */ if (op == DB_VAR_GET) @@ -350,8 +349,8 @@ /* * XXX pretend that registers outside the current frame don't exist. */ - db_eregs = db_regs + DB_MISC_REGS + 8 + 32 - + (ddb_regs.tf_cr_ifs & 0x7f); + db_eregs = db_regs + DB_MISC_REGS + 3 + 27 + + (ddb_regs.tf_special.cfm & 0x7f); __asm __volatile("flushrs"); /* so we can look at them */ @@ -462,10 +461,13 @@ return (0); if (regno < 32) { - return (regs->tf_r[regno - 1]); + return (0xdeadbeefdeadbeef); + /* return (regs->tf_r[regno - 1]); */ } else { - int sof = ddb_regs.tf_cr_ifs & 0x7f; - u_int64_t *bsp = (u_int64_t *) (ddb_regs.tf_ar_bspstore + ddb_regs.tf_ndirty); +#if 0 + int sof = ddb_regs.tf_special.cfm & 0x7f; + u_int64_t *bsp = (u_int64_t *)(ddb_regs.tf_special.bspstore + + ddb_regs.tf_special.ndirty); u_int64_t *reg; if (regno - 32 >= sof) { @@ -475,6 +477,9 @@ reg = ia64_rse_register_address(bsp, regno); return *reg; } +#else + return 0xdeadbeefdeadbeef; +#endif } } @@ -536,10 +541,10 @@ /* * Skip past the break instruction. */ - ddb_regs.tf_cr_ipsr += IA64_PSR_RI_1; - if ((ddb_regs.tf_cr_ipsr & IA64_PSR_RI) > IA64_PSR_RI_2) { - ddb_regs.tf_cr_ipsr &= ~IA64_PSR_RI; - ddb_regs.tf_cr_iip += 16; + ddb_regs.tf_special.psr += IA64_PSR_RI_1; + if ((ddb_regs.tf_special.psr & IA64_PSR_RI) > IA64_PSR_RI_2) { + ddb_regs.tf_special.psr &= ~IA64_PSR_RI; + ddb_regs.tf_special.iip += 16; } } ==== //depot/projects/ia64_epc/sys/ia64/ia64/db_trace.c#3 (text+ko) ==== @@ -49,6 +49,7 @@ void db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count, char *modif) { +#if 0 struct ia64_unwind_state *us; if (count == -1) @@ -112,6 +113,7 @@ } ia64_free_unwind_state(us); +#endif } void