Module Name: src Committed By: christos Date: Sat Feb 18 15:56:31 UTC 2012
Modified Files: src/sys/arch/sparc64/conf: files.sparc64 src/sys/arch/sparc64/sparc64: db_interface.c Added Files: src/sys/arch/sparc64/sparc64: db_machdep.c Log Message: Move the ddb registers and empty command table into a separate file, like other archs do for the benefit of crash. To generate a diff of this commit: cvs rdiff -u -r1.136 -r1.137 src/sys/arch/sparc64/conf/files.sparc64 cvs rdiff -u -r1.129 -r1.130 src/sys/arch/sparc64/sparc64/db_interface.c cvs rdiff -u -r0 -r1.1 src/sys/arch/sparc64/sparc64/db_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc64/conf/files.sparc64 diff -u src/sys/arch/sparc64/conf/files.sparc64:1.136 src/sys/arch/sparc64/conf/files.sparc64:1.137 --- src/sys/arch/sparc64/conf/files.sparc64:1.136 Tue Oct 4 06:35:33 2011 +++ src/sys/arch/sparc64/conf/files.sparc64 Sat Feb 18 10:56:30 2012 @@ -1,4 +1,4 @@ -# $NetBSD: files.sparc64,v 1.136 2011/10/04 10:35:33 nakayama Exp $ +# $NetBSD: files.sparc64,v 1.137 2012/02/18 15:56:30 christos Exp $ # @(#)files.sparc64 8.1 (Berkeley) 7/19/93 # sparc64-specific configuration info @@ -245,6 +245,7 @@ file arch/sparc64/sparc64/ipifuncs.c mu file arch/sparc64/sparc64/lock_stubs.s file arch/sparc64/sparc64/db_interface.c ddb | kgdb +file arch/sparc64/sparc64/db_machdep.c ddb file arch/sparc64/sparc64/db_trace.c ddb file arch/sparc64/sparc64/db_disasm.c ddb file arch/sparc64/sparc64/db_tlb_access.S ddb Index: src/sys/arch/sparc64/sparc64/db_interface.c diff -u src/sys/arch/sparc64/sparc64/db_interface.c:1.129 src/sys/arch/sparc64/sparc64/db_interface.c:1.130 --- src/sys/arch/sparc64/sparc64/db_interface.c:1.129 Wed Jun 22 01:50:47 2011 +++ src/sys/arch/sparc64/sparc64/db_interface.c Sat Feb 18 10:56:30 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: db_interface.c,v 1.129 2011/06/22 05:50:47 mrg Exp $ */ +/* $NetBSD: db_interface.c,v 1.130 2012/02/18 15:56:30 christos Exp $ */ /* * Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.129 2011/06/22 05:50:47 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.130 2012/02/18 15:56:30 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -93,8 +93,6 @@ extern struct traptrace { /* * Helpers for ddb variables. */ -static uint64_t nil; - #ifdef MULTIPROCESSOR #define pmap_ctx(PM) ((PM)->pm_ctx[cpu_number()]) #else @@ -105,183 +103,6 @@ void fill_ddb_regs_from_tf(struct trapfr void ddb_restore_state(void); bool ddb_running_on_this_cpu(void); -static int -db_sparc_charop(const struct db_variable *vp, db_expr_t *val, int opcode) -{ - char *regaddr = - (char *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); - - switch (opcode) { - case DB_VAR_GET: - *val = *regaddr; - break; - case DB_VAR_SET: - *regaddr = *val; - break; -#ifdef DIAGNOSTIC - default: - printf("db_sparc_charop: opcode %d\n", opcode); - break; -#endif - } - - return 0; -} - -#ifdef not_used -static int -db_sparc_shortop(const struct db_variable *vp, db_expr_t *val, int opcode) -{ - short *regaddr = - (short *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); - - switch (opcode) { - case DB_VAR_GET: - *val = *regaddr; - break; - case DB_VAR_SET: - *regaddr = *val; - break; -#ifdef DIAGNOSTIC - default: - printf("sparc_shortop: opcode %d\n", opcode); - break; -#endif - } - - return 0; -} -#endif - -static int -db_sparc_intop(const struct db_variable *vp, db_expr_t *val, int opcode) -{ - int *regaddr = - (int *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); - - switch (opcode) { - case DB_VAR_GET: - *val = *regaddr; - break; - case DB_VAR_SET: - *regaddr = *val; - break; -#ifdef DIAGNOSTIC - default: - printf("db_sparc_intop: opcode %d\n", opcode); - break; -#endif - } - - return 0; -} - -static int -db_sparc_regop(const struct db_variable *vp, db_expr_t *val, int opcode) -{ - db_expr_t *regaddr = - (db_expr_t *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); - - switch (opcode) { - case DB_VAR_GET: - *val = *regaddr; - break; - case DB_VAR_SET: - *regaddr = *val; - break; -#ifdef DIAGNOSTIC - default: - printf("db_sparc_regop: unknown op %d\n", opcode); - break; -#endif - } - return 0; -} - -/* - * Machine register set. - */ -#define dbreg(xx) (long *)offsetof(db_regs_t, db_tf.tf_ ## xx) -#define dbregfr(xx) (long *)offsetof(db_regs_t, db_fr.fr_ ## xx) -#define dbregfp(xx) (long *)offsetof(db_regs_t, db_fpstate.fs_ ## xx) - -static int db_sparc_regop(const struct db_variable *, db_expr_t *, int); - -const struct db_variable db_regs[] = { - { "tstate", dbreg(tstate), db_sparc_regop, 0 }, - { "pc", dbreg(pc), db_sparc_regop, 0 }, - { "npc", dbreg(npc), db_sparc_regop, 0 }, - { "ipl", dbreg(oldpil), db_sparc_charop, 0 }, - { "y", dbreg(y), db_sparc_intop, 0 }, - { "g0", (void *)&nil, FCN_NULL, 0 }, - { "g1", dbreg(global[1]), db_sparc_regop, 0 }, - { "g2", dbreg(global[2]), db_sparc_regop, 0 }, - { "g3", dbreg(global[3]), db_sparc_regop, 0 }, - { "g4", dbreg(global[4]), db_sparc_regop, 0 }, - { "g5", dbreg(global[5]), db_sparc_regop, 0 }, - { "g6", dbreg(global[6]), db_sparc_regop, 0 }, - { "g7", dbreg(global[7]), db_sparc_regop, 0 }, - { "o0", dbreg(out[0]), db_sparc_regop, 0 }, - { "o1", dbreg(out[1]), db_sparc_regop, 0 }, - { "o2", dbreg(out[2]), db_sparc_regop, 0 }, - { "o3", dbreg(out[3]), db_sparc_regop, 0 }, - { "o4", dbreg(out[4]), db_sparc_regop, 0 }, - { "o5", dbreg(out[5]), db_sparc_regop, 0 }, - { "o6", dbreg(out[6]), db_sparc_regop, 0 }, - { "o7", dbreg(out[7]), db_sparc_regop, 0 }, - { "l0", dbregfr(local[0]), db_sparc_regop, 0 }, - { "l1", dbregfr(local[1]), db_sparc_regop, 0 }, - { "l2", dbregfr(local[2]), db_sparc_regop, 0 }, - { "l3", dbregfr(local[3]), db_sparc_regop, 0 }, - { "l4", dbregfr(local[4]), db_sparc_regop, 0 }, - { "l5", dbregfr(local[5]), db_sparc_regop, 0 }, - { "l6", dbregfr(local[6]), db_sparc_regop, 0 }, - { "l7", dbregfr(local[7]), db_sparc_regop, 0 }, - { "i0", dbregfr(arg[0]), db_sparc_regop, 0 }, - { "i1", dbregfr(arg[1]), db_sparc_regop, 0 }, - { "i2", dbregfr(arg[2]), db_sparc_regop, 0 }, - { "i3", dbregfr(arg[3]), db_sparc_regop, 0 }, - { "i4", dbregfr(arg[4]), db_sparc_regop, 0 }, - { "i5", dbregfr(arg[5]), db_sparc_regop, 0 }, - { "i6", dbregfr(fp), db_sparc_regop, 0 }, - { "i7", dbregfr(pc), db_sparc_regop, 0 }, - { "f0", dbregfp(regs[0]), db_sparc_regop, 0 }, - { "f2", dbregfp(regs[2]), db_sparc_regop, 0 }, - { "f4", dbregfp(regs[4]), db_sparc_regop, 0 }, - { "f6", dbregfp(regs[6]), db_sparc_regop, 0 }, - { "f8", dbregfp(regs[8]), db_sparc_regop, 0 }, - { "f10", dbregfp(regs[10]), db_sparc_regop, 0 }, - { "f12", dbregfp(regs[12]), db_sparc_regop, 0 }, - { "f14", dbregfp(regs[14]), db_sparc_regop, 0 }, - { "f16", dbregfp(regs[16]), db_sparc_regop, 0 }, - { "f18", dbregfp(regs[18]), db_sparc_regop, 0 }, - { "f20", dbregfp(regs[20]), db_sparc_regop, 0 }, - { "f22", dbregfp(regs[22]), db_sparc_regop, 0 }, - { "f24", dbregfp(regs[24]), db_sparc_regop, 0 }, - { "f26", dbregfp(regs[26]), db_sparc_regop, 0 }, - { "f28", dbregfp(regs[28]), db_sparc_regop, 0 }, - { "f30", dbregfp(regs[30]), db_sparc_regop, 0 }, - { "f32", dbregfp(regs[32]), db_sparc_regop, 0 }, - { "f34", dbregfp(regs[34]), db_sparc_regop, 0 }, - { "f36", dbregfp(regs[36]), db_sparc_regop, 0 }, - { "f38", dbregfp(regs[38]), db_sparc_regop, 0 }, - { "f40", dbregfp(regs[40]), db_sparc_regop, 0 }, - { "f42", dbregfp(regs[42]), db_sparc_regop, 0 }, - { "f44", dbregfp(regs[44]), db_sparc_regop, 0 }, - { "f46", dbregfp(regs[46]), db_sparc_regop, 0 }, - { "f48", dbregfp(regs[48]), db_sparc_regop, 0 }, - { "f50", dbregfp(regs[50]), db_sparc_regop, 0 }, - { "f52", dbregfp(regs[52]), db_sparc_regop, 0 }, - { "f54", dbregfp(regs[54]), db_sparc_regop, 0 }, - { "f56", dbregfp(regs[56]), db_sparc_regop, 0 }, - { "f58", dbregfp(regs[58]), db_sparc_regop, 0 }, - { "f60", dbregfp(regs[60]), db_sparc_regop, 0 }, - { "f62", dbregfp(regs[62]), db_sparc_regop, 0 }, - { "fsr", dbregfp(fsr), db_sparc_regop, 0 }, - { "gsr", dbregfp(gsr), db_sparc_intop, 0 }, -}; -const struct db_variable * const db_eregs = db_regs + sizeof(db_regs)/sizeof(db_regs[0]); - int db_active = 0; extern char *trap_type[]; @@ -1318,14 +1139,6 @@ const struct db_command db_machine_comma "[no]", " no:\tstack frame number (0, i.e. top, if missing)") }, { DDB_ADD_CMD(NULL, NULL, 0, NULL,NULL,NULL) } }; - -#else /* DDB */ - -/* XXX */ -const struct db_command db_machine_command_table[] = { - { DDB_ADD_CMD(NULL, NULL, 0, NULL,NULL,NULL) } -}; - #endif /* DDB */ /* Added files: Index: src/sys/arch/sparc64/sparc64/db_machdep.c diff -u /dev/null src/sys/arch/sparc64/sparc64/db_machdep.c:1.1 --- /dev/null Sat Feb 18 10:56:31 2012 +++ src/sys/arch/sparc64/sparc64/db_machdep.c Sat Feb 18 10:56:31 2012 @@ -0,0 +1,228 @@ +/* $NetBSD: db_machdep.c,v 1.1 2012/02/18 15:56:31 christos Exp $ */ + +/* + * Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved. + * Mach Operating System + * Copyright (c) 1991,1990 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or software.distribut...@cs.cmu.edu + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + * + * From: db_interface.c,v 2.4 1991/02/05 17:11:13 mrt (CMU) + */ + +/* + * Interface to new debugger. + */ + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: db_machdep.c,v 1.1 2012/02/18 15:56:31 christos Exp $"); + +#ifdef _KERNEL_OPT +#include "opt_ddb.h" +#endif + +#include <sys/param.h> +#include <sys/cpu.h> +#include <ddb/ddb.h> + +static int +db_sparc_charop(const struct db_variable *vp, db_expr_t *val, int opcode) +{ + char *regaddr = + (char *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); + + switch (opcode) { + case DB_VAR_GET: + *val = *regaddr; + break; + case DB_VAR_SET: + *regaddr = *val; + break; +#ifdef DIAGNOSTIC + default: + printf("db_sparc_charop: opcode %d\n", opcode); + break; +#endif + } + + return 0; +} + +#ifdef not_used +static int +db_sparc_shortop(const struct db_variable *vp, db_expr_t *val, int opcode) +{ + short *regaddr = + (short *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); + + switch (opcode) { + case DB_VAR_GET: + *val = *regaddr; + break; + case DB_VAR_SET: + *regaddr = *val; + break; +#ifdef DIAGNOSTIC + default: + printf("sparc_shortop: opcode %d\n", opcode); + break; +#endif + } + + return 0; +} +#endif + +static int +db_sparc_intop(const struct db_variable *vp, db_expr_t *val, int opcode) +{ + int *regaddr = + (int *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); + + switch (opcode) { + case DB_VAR_GET: + *val = *regaddr; + break; + case DB_VAR_SET: + *regaddr = *val; + break; +#ifdef DIAGNOSTIC + default: + printf("db_sparc_intop: opcode %d\n", opcode); + break; +#endif + } + + return 0; +} + +static int +db_sparc_regop(const struct db_variable *vp, db_expr_t *val, int opcode) +{ + db_expr_t *regaddr = + (db_expr_t *)(((uint8_t *)DDB_REGS) + (size_t)vp->valuep); + + switch (opcode) { + case DB_VAR_GET: + *val = *regaddr; + break; + case DB_VAR_SET: + *regaddr = *val; + break; +#ifdef DIAGNOSTIC + default: + printf("db_sparc_regop: unknown op %d\n", opcode); + break; +#endif + } + return 0; +} + +/* + * Machine register set. + */ +#define dbreg(xx) (long *)offsetof(db_regs_t, db_tf.tf_ ## xx) +#define dbregfr(xx) (long *)offsetof(db_regs_t, db_fr.fr_ ## xx) +#define dbregfp(xx) (long *)offsetof(db_regs_t, db_fpstate.fs_ ## xx) + +static uint64_t nil; + +const struct db_variable db_regs[] = { + { "tstate", dbreg(tstate), db_sparc_regop, 0 }, + { "pc", dbreg(pc), db_sparc_regop, 0 }, + { "npc", dbreg(npc), db_sparc_regop, 0 }, + { "ipl", dbreg(oldpil), db_sparc_charop, 0 }, + { "y", dbreg(y), db_sparc_intop, 0 }, + { "g0", (void *)&nil, FCN_NULL, 0 }, + { "g1", dbreg(global[1]), db_sparc_regop, 0 }, + { "g2", dbreg(global[2]), db_sparc_regop, 0 }, + { "g3", dbreg(global[3]), db_sparc_regop, 0 }, + { "g4", dbreg(global[4]), db_sparc_regop, 0 }, + { "g5", dbreg(global[5]), db_sparc_regop, 0 }, + { "g6", dbreg(global[6]), db_sparc_regop, 0 }, + { "g7", dbreg(global[7]), db_sparc_regop, 0 }, + { "o0", dbreg(out[0]), db_sparc_regop, 0 }, + { "o1", dbreg(out[1]), db_sparc_regop, 0 }, + { "o2", dbreg(out[2]), db_sparc_regop, 0 }, + { "o3", dbreg(out[3]), db_sparc_regop, 0 }, + { "o4", dbreg(out[4]), db_sparc_regop, 0 }, + { "o5", dbreg(out[5]), db_sparc_regop, 0 }, + { "o6", dbreg(out[6]), db_sparc_regop, 0 }, + { "o7", dbreg(out[7]), db_sparc_regop, 0 }, + { "l0", dbregfr(local[0]), db_sparc_regop, 0 }, + { "l1", dbregfr(local[1]), db_sparc_regop, 0 }, + { "l2", dbregfr(local[2]), db_sparc_regop, 0 }, + { "l3", dbregfr(local[3]), db_sparc_regop, 0 }, + { "l4", dbregfr(local[4]), db_sparc_regop, 0 }, + { "l5", dbregfr(local[5]), db_sparc_regop, 0 }, + { "l6", dbregfr(local[6]), db_sparc_regop, 0 }, + { "l7", dbregfr(local[7]), db_sparc_regop, 0 }, + { "i0", dbregfr(arg[0]), db_sparc_regop, 0 }, + { "i1", dbregfr(arg[1]), db_sparc_regop, 0 }, + { "i2", dbregfr(arg[2]), db_sparc_regop, 0 }, + { "i3", dbregfr(arg[3]), db_sparc_regop, 0 }, + { "i4", dbregfr(arg[4]), db_sparc_regop, 0 }, + { "i5", dbregfr(arg[5]), db_sparc_regop, 0 }, + { "i6", dbregfr(fp), db_sparc_regop, 0 }, + { "i7", dbregfr(pc), db_sparc_regop, 0 }, + { "f0", dbregfp(regs[0]), db_sparc_regop, 0 }, + { "f2", dbregfp(regs[2]), db_sparc_regop, 0 }, + { "f4", dbregfp(regs[4]), db_sparc_regop, 0 }, + { "f6", dbregfp(regs[6]), db_sparc_regop, 0 }, + { "f8", dbregfp(regs[8]), db_sparc_regop, 0 }, + { "f10", dbregfp(regs[10]), db_sparc_regop, 0 }, + { "f12", dbregfp(regs[12]), db_sparc_regop, 0 }, + { "f14", dbregfp(regs[14]), db_sparc_regop, 0 }, + { "f16", dbregfp(regs[16]), db_sparc_regop, 0 }, + { "f18", dbregfp(regs[18]), db_sparc_regop, 0 }, + { "f20", dbregfp(regs[20]), db_sparc_regop, 0 }, + { "f22", dbregfp(regs[22]), db_sparc_regop, 0 }, + { "f24", dbregfp(regs[24]), db_sparc_regop, 0 }, + { "f26", dbregfp(regs[26]), db_sparc_regop, 0 }, + { "f28", dbregfp(regs[28]), db_sparc_regop, 0 }, + { "f30", dbregfp(regs[30]), db_sparc_regop, 0 }, + { "f32", dbregfp(regs[32]), db_sparc_regop, 0 }, + { "f34", dbregfp(regs[34]), db_sparc_regop, 0 }, + { "f36", dbregfp(regs[36]), db_sparc_regop, 0 }, + { "f38", dbregfp(regs[38]), db_sparc_regop, 0 }, + { "f40", dbregfp(regs[40]), db_sparc_regop, 0 }, + { "f42", dbregfp(regs[42]), db_sparc_regop, 0 }, + { "f44", dbregfp(regs[44]), db_sparc_regop, 0 }, + { "f46", dbregfp(regs[46]), db_sparc_regop, 0 }, + { "f48", dbregfp(regs[48]), db_sparc_regop, 0 }, + { "f50", dbregfp(regs[50]), db_sparc_regop, 0 }, + { "f52", dbregfp(regs[52]), db_sparc_regop, 0 }, + { "f54", dbregfp(regs[54]), db_sparc_regop, 0 }, + { "f56", dbregfp(regs[56]), db_sparc_regop, 0 }, + { "f58", dbregfp(regs[58]), db_sparc_regop, 0 }, + { "f60", dbregfp(regs[60]), db_sparc_regop, 0 }, + { "f62", dbregfp(regs[62]), db_sparc_regop, 0 }, + { "fsr", dbregfp(fsr), db_sparc_regop, 0 }, + { "gsr", dbregfp(gsr), db_sparc_intop, 0 }, +}; +const struct db_variable * const db_eregs = db_regs + sizeof(db_regs)/sizeof(db_regs[0]); + +#ifndef DDB +const struct db_command db_machine_command_table[] = { + { DDB_ADD_CMD(NULL, NULL, 0, NULL,NULL,NULL) } +}; +#endif /* DDB */