From owner-svn-src-all@freebsd.org Sun Dec 1 21:29:35 2019 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 386901B9F68; Sun, 1 Dec 2019 21:29:35 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47R1bg0h95z4JKJ; Sun, 1 Dec 2019 21:29:35 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EE8C61CE3E; Sun, 1 Dec 2019 21:29:34 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id xB1LTYDO048790; Sun, 1 Dec 2019 21:29:34 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id xB1LTYMl048789; Sun, 1 Dec 2019 21:29:34 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201912012129.xB1LTYMl048789@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sun, 1 Dec 2019 21:29:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355275 - head/sys/powerpc/powerpc X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: head/sys/powerpc/powerpc X-SVN-Commit-Revision: 355275 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Dec 2019 21:29:35 -0000 Author: jhibbits Date: Sun Dec 1 21:29:34 2019 New Revision: 355275 URL: https://svnweb.freebsd.org/changeset/base/355275 Log: powerpc: Add 'show frame ' to show an arbitrary trap frame This lets us print, for example, the user's trap frame when a panic occurs. The frame address is given in the backtrace at the trap point, which can then be passed to 'show frame'. This is useful for debugging as it can show inputs that lead to a panic or fault. It can also be used to print trap frames from other CPUs that get stuck. i386 already has a similar command, but no others do. Modified: head/sys/powerpc/powerpc/machdep.c Modified: head/sys/powerpc/powerpc/machdep.c ============================================================================== --- head/sys/powerpc/powerpc/machdep.c Sun Dec 1 21:27:09 2019 (r355274) +++ head/sys/powerpc/powerpc/machdep.c Sun Dec 1 21:29:34 2019 (r355275) @@ -557,6 +557,50 @@ DB_SHOW_COMMAND(spr, db_show_spr) db_printf("SPR %d(%x): %lx\n", saved_sprno, saved_sprno, (unsigned long)spr); } + +DB_SHOW_COMMAND(frame, db_show_frame) +{ + struct trapframe *tf; + long reg; + int i; + + tf = have_addr ? (struct trapframe *)addr : curthread->td_frame; + + /* + * Everything casts through long to simplify the printing. + * 'long' is native register size anyway. + */ + db_printf("trap frame %p\n", tf); + for (i = 0; i < nitems(tf->fixreg); i++) { + reg = tf->fixreg[i]; + db_printf(" r%d:\t%#lx (%ld)\n", i, reg, reg); + } + reg = tf->lr; + db_printf(" lr:\t%#lx\n", reg); + reg = tf->cr; + db_printf(" cr:\t%#lx\n", reg); + reg = tf->xer; + db_printf(" xer:\t%#lx\n", reg); + reg = tf->ctr; + db_printf(" ctr:\t%#lx (%ld)\n", reg, reg); + reg = tf->srr0; + db_printf(" srr0:\t%#lx\n", reg); + reg = tf->srr1; + db_printf(" srr1:\t%#lx\n", reg); + reg = tf->exc; + db_printf(" exc:\t%#lx\n", reg); + reg = tf->dar; + db_printf(" dar:\t%#lx\n", reg); +#ifdef AIM + reg = tf->cpu.aim.dsisr; + db_printf(" dsisr:\t%#lx\n", reg); +#else + reg = tf->cpu.booke.esr; + db_printf(" esr:\t%#lx\n", reg); + reg = tf->cpu.booke.dbcr0; + db_printf(" dbcr0:\t%#lx\n", reg); +#endif +} #endif #undef bzero