Most of our architectures implement a "machine" command as a MD
extension in ddb(4).
Currently that is handled in this way:
* A define is placed in a MD header.
* The MI ddb code checks for the define, creates an incomplete
entry in the command table, and provides an initialization function.
* MD code calls this function to patch a pointer to the MD sub-command
into the MI command table.
I guess it made sense in 1990?
We can simplify this:
Define a consistently named db_machine_command_table[] across all
archs that implement the MD "machine" command and hook this into
the main command table instead of patching it at runtime.
Most archs already use the name db_machine_command_table[].
This will allow constifying the ddb command tables in a subsequent
step.
I have tested amd64, arm64, and i386.
Comments, ok?
M sys/arch/alpha/alpha/db_interface.c
M sys/arch/amd64/amd64/db_interface.c
M sys/arch/arm/arm/db_interface.c
M sys/arch/arm64/arm64/db_interface.c
M sys/arch/i386/i386/db_interface.c
M sys/arch/m88k/m88k/db_interface.c
M sys/arch/mips64/mips64/db_machdep.c
M sys/arch/powerpc/ddb/db_interface.c
M sys/arch/powerpc64/powerpc64/db_interface.c
M sys/arch/riscv64/riscv64/db_interface.c
M sys/arch/sh/sh/db_interface.c
M sys/arch/sparc64/sparc64/db_interface.c
M sys/ddb/db_command.c
M sys/ddb/db_command.h
diff 7e559a9c431834a0b3471b1fa86985ca220b83ba
c5fcb00219e59f5bbd0cb5171af7fe5d01f0a0c3
blob - fd83cb898bcddb466570b0c531b0b34171a1363f
blob + 7e9ce6cc9803586260886d5c16ff2e1219cc2c77
--- sys/arch/alpha/alpha/db_interface.c
+++ sys/arch/alpha/alpha/db_interface.c
@@ -527,5 +527,4 @@ db_mach_cpu(db_expr_t addr, int have_addr, db_expr_t c
void
db_machine_init()
{
- db_machine_commands_install(db_machine_command_table);
}
blob - 186fb4d83fb4d5f849e88297c311f37eaf4638c6
blob + b12b9c48cf147c1525c19e11fac84b35b02bc19f
--- sys/arch/amd64/amd64/db_interface.c
+++ sys/arch/amd64/amd64/db_interface.c
@@ -422,10 +422,7 @@ db_machine_init(void)
{
#ifdef MULTIPROCESSOR
int i;
-#endif
- db_machine_commands_install(db_machine_command_table);
-#ifdef MULTIPROCESSOR
for (i = 0; i < MAXCPUS; i++) {
if (cpu_info[i] != NULL)
cpu_info[i]->ci_ddb_paused = CI_DDB_RUNNING;
blob - a8d7805cd6f73e9d281b448e8bb03fb77e210df2
blob + 719da88249590509dabb734794daedc7c2a3dd61
--- sys/arch/arm/arm/db_interface.c
+++ sys/arch/arm/arm/db_interface.c
@@ -378,8 +378,6 @@ db_machine_init(void)
*/
db_uh.uh_handler = db_trapper;
install_coproc_handler_static(0, &db_uh);
-
- db_machine_commands_install(db_machine_command_table);
}
u_int
blob - ed28376be206f5eb55ae034981680025b2717513
blob + 1645b49186bed36130ffd73a933e45f8f9fc5e18
--- sys/arch/arm64/arm64/db_interface.c
+++ sys/arch/arm64/arm64/db_interface.c
@@ -499,10 +499,7 @@ db_machine_init(void)
{
#ifdef MULTIPROCESSOR
int i;
-#endif
- db_machine_commands_install(db_machine_command_table);
-#ifdef MULTIPROCESSOR
for (i = 0; i < MAXCPUS; i++) {
if (cpu_info[i] != NULL)
cpu_info[i]->ci_ddb_paused = CI_DDB_RUNNING;
blob - b4c6a02021c944ddea37cb8add864ee1f65a454b
blob + 1807bc890744e4f32ef839e73e5647fd5488b901
--- sys/arch/i386/i386/db_interface.c
+++ sys/arch/i386/i386/db_interface.c
@@ -342,10 +342,7 @@ db_machine_init(void)
{
#ifdef MULTIPROCESSOR
int i;
-#endif /* MULTIPROCESSOR */
- db_machine_commands_install(db_machine_command_table);
-#ifdef MULTIPROCESSOR
for (i = 0; i < MAXCPUS; i++) {
if (cpu_info[i] != NULL)
cpu_info[i]->ci_ddb_paused = CI_DDB_RUNNING;
blob - 4d540ea2ad0e5b2d0b8a3c15837309bfe5f8db8c
blob + 55d5e5ba78719c954c4d6d1f5ffa9083e941a932
--- sys/arch/m88k/m88k/db_interface.c
+++ sys/arch/m88k/m88k/db_interface.c
@@ -654,7 +654,7 @@ m88k_db_cpu_cmd(db_expr_t addr, int have_addr, db_expr
/* COMMAND TABLE / INIT */
/************************/
-struct db_command db_machine_cmds[] = {
+struct db_command db_machine_command_table[] = {
#ifdef MULTIPROCESSOR
{ "ddbcpu", m88k_db_cpu_cmd, 0, NULL },
#endif
@@ -671,7 +671,6 @@ struct db_command db_machine_cmds[] = {
void
db_machine_init()
{
- db_machine_commands_install(db_machine_cmds);
#ifdef MULTIPROCESSOR
__mp_lock_init(&ddb_mp_lock);
#endif
blob - bbdf2462b57e310bb79ee1890d7a5495f9487226
blob + 2c7d67c597c2a237420af198985aaa20781f124e
--- sys/arch/mips64/mips64/db_machdep.c
+++ sys/arch/mips64/mips64/db_machdep.c
@@ -492,7 +492,7 @@ db_dump_tlb_cmd(db_expr_t addr, int have_addr, db_expr
}
-struct db_command mips_db_command_table[] = {
+struct db_command db_machine_command_table[] = {
{ "tlb", db_dump_tlb_cmd, 0, NULL },
{ "trap", db_trap_trace_cmd, 0, NULL },
#ifdef MULTIPROCESSOR
@@ -510,10 +510,7 @@ db_machine_init(void)
extern char *ssym;
#ifdef MULTIPROCESSOR
int i;
-#endif
- db_machine_commands_install(mips_db_command_table);
-#ifdef MULTIPROCESSOR
for (i = 0; i < ncpus; i++) {
get_cpu_info(i)->ci_ddb = CI_DDB_RUNNING;
}
blob - da7249e3b9956943537ee5eaab0209f0f071d522
blob + 079c4056ecd8ec4a4cf499410bd6c24d3d9d569c
--- sys/arch/powerpc/ddb/db_interface.c
+++ sys/arch/powerpc/ddb/db_interface.c
@@ -236,10 +236,7 @@ db_machine_init(void)
{
#ifdef MULTIPROCESSOR
int i;
-#endif
- db_machine_commands_install(db_machine_command_table);
-#ifdef MULTIPROCESSOR
for (i = 0; i < ncpus; i++) {
cpu_info[i].ci_ddb_paused = CI_DDB_RUNNING;
}
blob - e86b1d664bd4d88c6369ebe341fab28ac945ba94
blob + 7c4f03640bf86fb5afea3c109554805d59806c8d
--- sys/arch/powerpc64/powerpc64/db_interface.c
+++ sys/arch/powerpc64/powerpc64/db_interface.c
@@ -120,7 +120,6 @@ db_machine_init(void)
}
}
- db_machine_commands_install(db_machine_command_table);
#ifdef MULTIPROCESSOR
for (i = 0; i < ncpus; i++) {
cpu_info[i].ci_ddb_paused = CI_DDB_RUNNING;
blob - d5f880b74b54777087f2b1b2617e9e8f36dbb94a
blob + 958d60076a78906b70a859f48f577f8c9bae72da
--- sys/arch/riscv64/riscv64/db_interface.c
+++ sys/arch/riscv64/riscv64/db_interface.c
@@ -446,10 +446,7 @@ db_machine_init(void)
{
#ifdef MULTIPROCESSOR
int i;
-#endif
- db_machine_commands_install(db_machine_command_table);
-#ifdef MULTIPROCESSOR
for (i = 0; i < MAXCPUS; i++) {
if (cpu_info[i] != NULL)
cpu_info[i]->ci_ddb_paused = CI_DDB_RUNNING;
blob - b01fdfead60bb04b19a72aba4809734d8d2f0903
blob + 4ff8543e198e66fe4dedcab0f649939815e610fd
--- sys/arch/sh/sh/db_interface.c
+++ sys/arch/sh/sh/db_interface.c
@@ -86,8 +86,6 @@ struct db_command db_machine_command_table[] = {
void
db_machine_init(void)
{
-
- db_machine_commands_install(db_machine_command_table);
}
void
blob - fc2382cf0cf51c5dba9385685cb0ee7fa3a2859a
blob + ebc6e20f0a8327c2b8fc3128a030460d4ecc9e8b
--- sys/arch/sparc64/sparc64/db_interface.c
+++ sys/arch/sparc64/sparc64/db_interface.c
@@ -1363,5 +1363,4 @@ db_inst_trap_return(int inst)
void
db_machine_init(void)
{
- db_machine_commands_install(db_machine_command_table);
}
blob - f89595531f609f9fd32b6a9c26457c7a05fbb4b5
blob + 98c629cc808f62fcec89478bc9a2819bdb5804dc
--- sys/ddb/db_command.c
+++ sys/ddb/db_command.c
@@ -628,7 +628,7 @@ struct db_command db_boot_cmds[] = {
struct db_command db_command_table[] = {
#ifdef DB_MACHINE_COMMANDS
/* this must be the first entry, if it exists */
- { "machine", NULL, 0, NULL},
+ { "machine", NULL, 0, db_machine_command_table },
#endif
{ "kill", db_kill_cmd, 0, NULL },
{ "print", db_print_cmd, 0, NULL },
@@ -666,18 +666,6 @@ struct db_command db_command_table[] = {
{ NULL, NULL, 0, NULL }
};
-#ifdef DB_MACHINE_COMMANDS
-
-/* this function should be called to install the machine dependent
- commands. It should be called before the debugger is enabled */
-void
-db_machine_commands_install(struct db_command *ptr)
-{
- db_command_table[0].more = ptr;
-}
-
-#endif
-
struct db_command *db_last_command = NULL;
void
blob - 45800424d35d40208d85ed98651dca98904e4f50
blob + 41bb4e3a7027ef12efe426b8bd9bfcebaea6e47d
--- sys/ddb/db_command.h
+++ sys/ddb/db_command.h
@@ -39,7 +39,6 @@ void db_error(char *);
void db_skip_to_eol(void);
void db_command_loop(void);
void db_command(struct db_command **, struct db_command *);
-void db_machine_commands_install(struct db_command *);
extern vaddr_t db_dot, db_last_addr, db_prev, db_next;
@@ -57,3 +56,7 @@ struct db_command {
#define CS_SET_DOT 0x100 /* set dot after command */
struct db_command *more; /* another level of command */
};
+
+#ifdef DB_MACHINE_COMMANDS
+extern struct db_command db_machine_command_table[];
+#endif
--
Christian "naddy" Weisgerber [email protected]