svn commit: r287487 - head/sys/arm64/arm64

Andrew Turner andrew at FreeBSD.org
Sat Sep 5 17:29:08 UTC 2015


Author: andrew
Date: Sat Sep  5 17:29:07 2015
New Revision: 287487
URL: https://svnweb.freebsd.org/changeset/base/287487

Log:
  Add ddb show commands to print the special registers and to ask the
  hardware to perform address translation for us. These are useful to help
  track down what caused us to enter the debugger.
  
  Sponsored by:	ABT Systems Ltd

Modified:
  head/sys/arm64/arm64/machdep.c

Modified: head/sys/arm64/arm64/machdep.c
==============================================================================
--- head/sys/arm64/arm64/machdep.c	Sat Sep  5 17:02:01 2015	(r287486)
+++ head/sys/arm64/arm64/machdep.c	Sat Sep  5 17:29:07 2015	(r287487)
@@ -26,6 +26,7 @@
  */
 
 #include "opt_platform.h"
+#include "opt_ddb.h"
 
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
@@ -868,3 +869,89 @@ initarm(struct arm64_bootparams *abp)
 	early_boot = 0;
 }
 
+#ifdef DDB
+#include <ddb/ddb.h>
+
+DB_SHOW_COMMAND(specialregs, db_show_spregs)
+{
+#define	PRINT_REG(reg)	\
+    db_printf(__STRING(reg) " = %#016lx\n", READ_SPECIALREG(reg))
+
+	PRINT_REG(actlr_el1);
+	PRINT_REG(afsr0_el1);
+	PRINT_REG(afsr1_el1);
+	PRINT_REG(aidr_el1);
+	PRINT_REG(amair_el1);
+	PRINT_REG(ccsidr_el1);
+	PRINT_REG(clidr_el1);
+	PRINT_REG(contextidr_el1);
+	PRINT_REG(cpacr_el1);
+	PRINT_REG(csselr_el1);
+	PRINT_REG(ctr_el0);
+	PRINT_REG(currentel);
+	PRINT_REG(daif);
+	PRINT_REG(dczid_el0);
+	PRINT_REG(elr_el1);
+	PRINT_REG(esr_el1);
+	PRINT_REG(far_el1);
+	PRINT_REG(fpcr);
+	PRINT_REG(fpsr);
+	PRINT_REG(id_aa64afr0_el1);
+	PRINT_REG(id_aa64afr1_el1);
+	PRINT_REG(id_aa64dfr0_el1);
+	PRINT_REG(id_aa64dfr1_el1);
+	PRINT_REG(id_aa64isar0_el1);
+	PRINT_REG(id_aa64isar1_el1);
+	PRINT_REG(id_aa64pfr0_el1);
+	PRINT_REG(id_aa64pfr1_el1);
+	PRINT_REG(id_afr0_el1);
+	PRINT_REG(id_dfr0_el1);
+	PRINT_REG(id_isar0_el1);
+	PRINT_REG(id_isar1_el1);
+	PRINT_REG(id_isar2_el1);
+	PRINT_REG(id_isar3_el1);
+	PRINT_REG(id_isar4_el1);
+	PRINT_REG(id_isar5_el1);
+	PRINT_REG(id_mmfr0_el1);
+	PRINT_REG(id_mmfr1_el1);
+	PRINT_REG(id_mmfr2_el1);
+	PRINT_REG(id_mmfr3_el1);
+#if 0
+	/* Missing from llvm */
+	PRINT_REG(id_mmfr4_el1);
+#endif
+	PRINT_REG(id_pfr0_el1);
+	PRINT_REG(id_pfr1_el1);
+	PRINT_REG(isr_el1);
+	PRINT_REG(mair_el1);
+	PRINT_REG(midr_el1);
+	PRINT_REG(mpidr_el1);
+	PRINT_REG(mvfr0_el1);
+	PRINT_REG(mvfr1_el1);
+	PRINT_REG(mvfr2_el1);
+	PRINT_REG(revidr_el1);
+	PRINT_REG(sctlr_el1);
+	PRINT_REG(sp_el0);
+	PRINT_REG(spsel);
+	PRINT_REG(spsr_el1);
+	PRINT_REG(tcr_el1);
+	PRINT_REG(tpidr_el0);
+	PRINT_REG(tpidr_el1);
+	PRINT_REG(tpidrro_el0);
+	PRINT_REG(ttbr0_el1);
+	PRINT_REG(ttbr1_el1);
+	PRINT_REG(vbar_el1);
+#undef PRINT_REG
+}
+
+DB_SHOW_COMMAND(vtop, db_show_vtop)
+{
+	uint64_t phys;
+
+	if (have_addr) {
+		phys = arm64_address_translate_s1e1r(addr);
+		db_printf("Physical address reg: 0x%016lx\n", phys);
+	} else
+		db_printf("show vtop <virt_addr>\n");
+}
+#endif


More information about the svn-src-all mailing list