From 66ee303456910f684244a20a0ac2e958d40b78cb Mon Sep 17 00:00:00 2001 From: Zachary T Welch Date: Mon, 23 Nov 2009 08:17:01 -0800 Subject: [PATCH] remove target_type register_command callback Uses chaining of command_registration structures to eliminate all target_type register_callback routines. Exports the command_handler registration arrays for those target types that are used by others. --- src/target/arm11.c | 15 +++++++-------- src/target/arm720t.c | 11 ++++------- src/target/arm7_9_common.c | 15 +++++++-------- src/target/arm7_9_common.h | 2 +- src/target/arm7tdmi.c | 2 +- src/target/arm920t.c | 14 +++++--------- src/target/arm920t.h | 3 ++- src/target/arm926ejs.c | 14 +++++--------- src/target/arm926ejs.h | 3 ++- src/target/arm966e.c | 14 +++++--------- src/target/arm966e.h | 3 ++- src/target/arm9tdmi.c | 13 +++++-------- src/target/arm9tdmi.h | 2 +- src/target/armv4_5.c | 7 +------ src/target/armv4_5.h | 5 ++++- src/target/armv7a.c | 6 +----- src/target/armv7a.h | 3 ++- src/target/armv7m.c | 7 +------ src/target/armv7m.h | 3 ++- src/target/avrt.c | 10 ---------- src/target/cortex_a8.c | 15 +++++++-------- src/target/cortex_m3.c | 14 +++++++------- src/target/etm.c | 7 +------ src/target/etm.h | 2 +- src/target/fa526.c | 2 +- src/target/feroceon.c | 4 ++-- src/target/mips32.c | 5 ----- src/target/mips_m4k.c | 10 ---------- src/target/target.c | 12 +++++++----- src/target/target_type.h | 2 +- src/target/xscale.c | 13 ++++--------- 31 files changed, 89 insertions(+), 149 deletions(-) diff --git a/src/target/arm11.c b/src/target/arm11.c index 835234cecd..7c6d39c9d4 100644 --- a/src/target/arm11.c +++ b/src/target/arm11.c @@ -1616,6 +1616,12 @@ static const struct command_registration arm11_any_command_handlers[] = { COMMAND_REGISTRATION_DONE }; static const struct command_registration arm11_command_handlers[] = { + { + .chain = arm_command_handlers, + }, + { + .chain = etm_command_handlers, + }, { .name = "arm11", .mode = COMMAND_ANY, @@ -1625,13 +1631,6 @@ static const struct command_registration arm11_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -static int arm11_register_commands(struct command_context *cmd_ctx) -{ - armv4_5_register_commands(cmd_ctx); - etm_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm11_command_handlers); -} - /** Holds methods for ARM11xx targets. */ struct target_type arm11_target = { .name = "arm11", @@ -1666,7 +1665,7 @@ struct target_type arm11_target = { .run_algorithm = armv4_5_run_algorithm, - .register_commands = arm11_register_commands, + .commands = arm11_command_handlers, .target_create = arm11_target_create, .init_target = arm11_init_target, .examine = arm11_examine, diff --git a/src/target/arm720t.c b/src/target/arm720t.c index 52a311c420..bae2561aea 100644 --- a/src/target/arm720t.c +++ b/src/target/arm720t.c @@ -503,6 +503,9 @@ static const struct command_registration arm720t_exec_command_handlers[] = { }; static const struct command_registration arm720t_command_handlers[] = { + { + .chain = arm7_9_command_handlers, + }, { .name = "arm720t", .mode = COMMAND_ANY, @@ -512,12 +515,6 @@ static const struct command_registration arm720t_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -static int arm720t_register_commands(struct command_context *cmd_ctx) -{ - arm7_9_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm720t_command_handlers); -} - /** Holds methods for ARM720 targets. */ struct target_type arm720t_target = { @@ -555,7 +552,7 @@ struct target_type arm720t_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm720t_register_commands, + .commands = arm720t_command_handlers, .target_create = arm720t_target_create, .init_target = arm720t_init_target, .examine = arm7_9_examine, diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c index b40be8d4dc..c4775e8a81 100644 --- a/src/target/arm7_9_common.c +++ b/src/target/arm7_9_common.c @@ -2873,7 +2873,13 @@ static const struct command_registration arm7_9_any_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration arm7_9_command_handlers[] = { +const struct command_registration arm7_9_command_handlers[] = { + { + .chain = arm_command_handlers, + }, + { + .chain = etm_command_handlers, + }, { .name = "arm7_9", .mode = COMMAND_ANY, @@ -2882,10 +2888,3 @@ static const struct command_registration arm7_9_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; - -int arm7_9_register_commands(struct command_context *cmd_ctx) -{ - armv4_5_register_commands(cmd_ctx); - etm_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm7_9_command_handlers); -} diff --git a/src/target/arm7_9_common.h b/src/target/arm7_9_common.h index 2f7132a15b..d43eaa6d5a 100644 --- a/src/target/arm7_9_common.h +++ b/src/target/arm7_9_common.h @@ -120,7 +120,7 @@ static inline bool is_arm7_9(struct arm7_9_common *arm7_9) return arm7_9->common_magic == ARM7_9_COMMON_MAGIC; } -int arm7_9_register_commands(struct command_context *cmd_ctx); +extern const struct command_registration arm7_9_command_handlers[]; int arm7_9_poll(struct target *target); diff --git a/src/target/arm7tdmi.c b/src/target/arm7tdmi.c index 742eace77c..7d14ed6149 100644 --- a/src/target/arm7tdmi.c +++ b/src/target/arm7tdmi.c @@ -747,7 +747,7 @@ struct target_type arm7tdmi_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm7_9_register_commands, + .commands = arm7_9_command_handlers, .target_create = arm7tdmi_target_create, .init_target = arm7tdmi_init_target, .examine = arm7_9_examine, diff --git a/src/target/arm920t.c b/src/target/arm920t.c index 1e6019cb1c..e6c2eed82d 100644 --- a/src/target/arm920t.c +++ b/src/target/arm920t.c @@ -1396,7 +1396,10 @@ static const struct command_registration arm920t_exec_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration arm920t_command_handlers[] = { +const struct command_registration arm920t_command_handlers[] = { + { + .chain = arm9tdmi_command_handlers, + }, { .name = "arm920t", .mode = COMMAND_ANY, @@ -1406,13 +1409,6 @@ static const struct command_registration arm920t_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -/** Registers commands to access coprocessor, cache, and MMU resources. */ -int arm920t_register_commands(struct command_context *cmd_ctx) -{ - arm9tdmi_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm920t_command_handlers); -} - /** Holds methods for ARM920 targets. */ struct target_type arm920t_target = { @@ -1452,7 +1448,7 @@ struct target_type arm920t_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm920t_register_commands, + .commands = arm920t_command_handlers, .target_create = arm920t_target_create, .init_target = arm9tdmi_init_target, .examine = arm7_9_examine, diff --git a/src/target/arm920t.h b/src/target/arm920t.h index ca6be7ea96..a75f01ab16 100644 --- a/src/target/arm920t.h +++ b/src/target/arm920t.h @@ -71,6 +71,7 @@ void arm920t_disable_mmu_caches(struct target *target, int mmu, int d_u_cache, int i_cache); void arm920t_enable_mmu_caches(struct target *target, int mmu, int d_u_cache, int i_cache); -int arm920t_register_commands(struct command_context *cmd_ctx); + +extern const struct command_registration arm920t_command_handlers[]; #endif /* ARM920T_H */ diff --git a/src/target/arm926ejs.c b/src/target/arm926ejs.c index 329aa12a43..408ede9deb 100644 --- a/src/target/arm926ejs.c +++ b/src/target/arm926ejs.c @@ -766,7 +766,10 @@ static const struct command_registration arm926ejs_exec_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration arm926ejs_command_handlers[] = { +const struct command_registration arm926ejs_command_handlers[] = { + { + .chain = arm9tdmi_command_handlers, + }, { .name = "arm926ejs", .mode = COMMAND_ANY, @@ -776,13 +779,6 @@ static const struct command_registration arm926ejs_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -/** Registers commands to access coprocessor, cache, and debug resources. */ -int arm926ejs_register_commands(struct command_context *cmd_ctx) -{ - arm9tdmi_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm926ejs_command_handlers); -} - /** Holds methods for ARM926 targets. */ struct target_type arm926ejs_target = { @@ -817,7 +813,7 @@ struct target_type arm926ejs_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm926ejs_register_commands, + .commands = arm926ejs_command_handlers, .target_create = arm926ejs_target_create, .init_target = arm9tdmi_init_target, .examine = arm7_9_examine, diff --git a/src/target/arm926ejs.h b/src/target/arm926ejs.h index 514f054376..274733bfd2 100644 --- a/src/target/arm926ejs.h +++ b/src/target/arm926ejs.h @@ -48,10 +48,11 @@ target_to_arm926(struct target *target) int arm926ejs_init_arch_info(struct target *target, struct arm926ejs_common *arm926ejs, struct jtag_tap *tap); -int arm926ejs_register_commands(struct command_context *cmd_ctx); int arm926ejs_arch_state(struct target *target); int arm926ejs_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer); int arm926ejs_soft_reset_halt(struct target *target); +extern const struct command_registration arm926ejs_command_handlers[]; + #endif /* ARM926EJS_H */ diff --git a/src/target/arm966e.c b/src/target/arm966e.c index 70cc3c4b70..9fe513c9ea 100644 --- a/src/target/arm966e.c +++ b/src/target/arm966e.c @@ -232,7 +232,10 @@ static const struct command_registration arm966e_exec_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -static const struct command_registration arm966e_command_handlers[] = { +const struct command_registration arm966e_command_handlers[] = { + { + .chain = arm9tdmi_command_handlers, + }, { .name = "arm966e", .mode = COMMAND_ANY, @@ -242,13 +245,6 @@ static const struct command_registration arm966e_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -/** Registers commands used to access coprocessor resources. */ -int arm966e_register_commands(struct command_context *cmd_ctx) -{ - arm9tdmi_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm966e_command_handlers); -} - /** Holds methods for ARM966 targets. */ struct target_type arm966e_target = { @@ -283,7 +279,7 @@ struct target_type arm966e_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm966e_register_commands, + .commands = arm966e_command_handlers, .target_create = arm966e_target_create, .init_target = arm9tdmi_init_target, .examine = arm7_9_examine, diff --git a/src/target/arm966e.h b/src/target/arm966e.h index 45aeb4ef1e..24dcec3064 100644 --- a/src/target/arm966e.h +++ b/src/target/arm966e.h @@ -43,7 +43,8 @@ target_to_arm966(struct target *target) int arm966e_init_arch_info(struct target *target, struct arm966e_common *arm966e, struct jtag_tap *tap); -int arm966e_register_commands(struct command_context *cmd_ctx); int arm966e_write_cp15(struct target *target, int reg_addr, uint32_t value); +extern const struct command_registration arm966e_command_handlers[]; + #endif /* ARM966E_H */ diff --git a/src/target/arm9tdmi.c b/src/target/arm9tdmi.c index 87ace05606..7eb5641de9 100644 --- a/src/target/arm9tdmi.c +++ b/src/target/arm9tdmi.c @@ -917,7 +917,10 @@ static const struct command_registration arm9tdmi_exec_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration arm9tdmi_command_handlers[] = { +const struct command_registration arm9tdmi_command_handlers[] = { + { + .chain = arm7_9_command_handlers, + }, { .name = "arm9tdmi", .mode = COMMAND_ANY, @@ -927,12 +930,6 @@ static const struct command_registration arm9tdmi_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -int arm9tdmi_register_commands(struct command_context *cmd_ctx) -{ - arm7_9_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, arm9tdmi_command_handlers); -} - /** Holds methods for ARM9TDMI targets. */ struct target_type arm9tdmi_target = { @@ -967,7 +964,7 @@ struct target_type arm9tdmi_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm9tdmi_register_commands, + .commands = arm9tdmi_command_handlers, .target_create = arm9tdmi_target_create, .init_target = arm9tdmi_init_target, .examine = arm7_9_examine, diff --git a/src/target/arm9tdmi.h b/src/target/arm9tdmi.h index 351b00adfc..aff9fc5f41 100644 --- a/src/target/arm9tdmi.h +++ b/src/target/arm9tdmi.h @@ -29,7 +29,7 @@ int arm9tdmi_init_target(struct command_context *cmd_ctx, struct target *target); int arm9tdmi_init_arch_info(struct target *target, struct arm7_9_common *arm7_9, struct jtag_tap *tap); -int arm9tdmi_register_commands(struct command_context *cmd_ctx); +extern const struct command_registration arm9tdmi_command_handlers[]; int arm9tdmi_clock_out(struct arm_jtag *jtag_info, uint32_t instr, uint32_t out, uint32_t *in, int sysspeed); diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c index dfb7094b66..7e5bb0a171 100644 --- a/src/target/armv4_5.c +++ b/src/target/armv4_5.c @@ -809,7 +809,7 @@ static const struct command_registration arm_exec_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration arm_command_handlers[] = { +const struct command_registration arm_command_handlers[] = { { .name = "arm", .mode = COMMAND_ANY, @@ -819,11 +819,6 @@ static const struct command_registration arm_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -int armv4_5_register_commands(struct command_context *cmd_ctx) -{ - return register_commands(cmd_ctx, NULL, arm_command_handlers); -} - int armv4_5_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size) { struct arm *armv4_5 = target_to_armv4_5(target); diff --git a/src/target/armv4_5.h b/src/target/armv4_5.h index 7a6cb61865..822d14393b 100644 --- a/src/target/armv4_5.h +++ b/src/target/armv4_5.h @@ -27,6 +27,8 @@ #define ARMV4_5_H #include "target.h" +#include "command.h" + typedef enum armv4_5_mode { @@ -155,7 +157,8 @@ int armv4_5_arch_state(struct target *target); int armv4_5_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size); -int armv4_5_register_commands(struct command_context *cmd_ctx); +extern const struct command_registration arm_command_handlers[]; + int armv4_5_init_arch_info(struct target *target, struct arm *armv4_5); int armv4_5_run_algorithm(struct target *target, diff --git a/src/target/armv7a.c b/src/target/armv7a.c index 7cc22736e3..3d94329fd2 100644 --- a/src/target/armv7a.c +++ b/src/target/armv7a.c @@ -181,7 +181,7 @@ static const struct command_registration armv7a_exec_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration armv7a_command_handlers[] = { +const struct command_registration armv7a_command_handlers[] = { { .name = "dap", .mode = COMMAND_ANY, @@ -191,7 +191,3 @@ static const struct command_registration armv7a_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -int armv7a_register_commands(struct command_context *cmd_ctx) -{ - return register_commands(cmd_ctx, NULL, armv7a_command_handlers); -} diff --git a/src/target/armv7a.h b/src/target/armv7a.h index 942bf8bff7..f843f03bdc 100644 --- a/src/target/armv7a.h +++ b/src/target/armv7a.h @@ -103,7 +103,8 @@ struct armv7a_core_reg int armv7a_arch_state(struct target *target); struct reg_cache *armv7a_build_reg_cache(struct target *target, struct armv7a_common *armv7a_common); -int armv7a_register_commands(struct command_context *cmd_ctx); int armv7a_init_arch_info(struct target *target, struct armv7a_common *armv7a); +extern const struct command_registration armv7a_command_handlers[]; + #endif /* ARMV4_5_H */ diff --git a/src/target/armv7m.c b/src/target/armv7m.c index 6d8ad5f1a0..9d89086eb2 100644 --- a/src/target/armv7m.c +++ b/src/target/armv7m.c @@ -832,7 +832,7 @@ static const struct command_registration armv7m_exec_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration armv7m_command_handlers[] = { +const struct command_registration armv7m_command_handlers[] = { { .name = "dap", .mode = COMMAND_ANY, @@ -841,8 +841,3 @@ static const struct command_registration armv7m_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; - -int armv7m_register_commands(struct command_context *cmd_ctx) -{ - return register_commands(cmd_ctx, NULL, armv7m_command_handlers); -} diff --git a/src/target/armv7m.h b/src/target/armv7m.h index 9dd4ddbb82..7299bdf9f2 100644 --- a/src/target/armv7m.h +++ b/src/target/armv7m.h @@ -143,7 +143,6 @@ int armv7m_arch_state(struct target *target); int armv7m_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size); -int armv7m_register_commands(struct command_context *cmd_ctx); int armv7m_init_arch_info(struct target *target, struct armv7m_common *armv7m); int armv7m_run_algorithm(struct target *target, @@ -161,6 +160,8 @@ int armv7m_checksum_memory(struct target *target, int armv7m_blank_check_memory(struct target *target, uint32_t address, uint32_t count, uint32_t* blank); +extern const struct command_registration armv7m_command_handlers[]; + /* Thumb mode instructions */ diff --git a/src/target/avrt.c b/src/target/avrt.c index cabb2725fa..dc527f5e54 100644 --- a/src/target/avrt.c +++ b/src/target/avrt.c @@ -28,9 +28,6 @@ #define AVR_JTAG_INS_LEN 4 -/* cli handling */ -int avr_register_commands(struct command_context *cmd_ctx); - /* forward declarations */ int avr_target_create(struct target *target, Jim_Interp *interp); int avr_init_target(struct command_context *cmd_ctx, struct target *target); @@ -91,17 +88,10 @@ struct target_type avr_target = .add_watchpoint = avr_add_watchpoint, .remove_watchpoint = avr_remove_watchpoint, */ - .register_commands = avr_register_commands, .target_create = avr_target_create, .init_target = avr_init_target, }; -int avr_register_commands(struct command_context *cmd_ctx) -{ - LOG_DEBUG("%s", __FUNCTION__); - return ERROR_OK; -} - int avr_target_create(struct target *target, Jim_Interp *interp) { struct avr_common *avr = calloc(1, sizeof(struct avr_common)); diff --git a/src/target/cortex_a8.c b/src/target/cortex_a8.c index 325a54b521..b85481a961 100644 --- a/src/target/cortex_a8.c +++ b/src/target/cortex_a8.c @@ -1641,6 +1641,12 @@ static const struct command_registration cortex_a8_exec_command_handlers[] = { COMMAND_REGISTRATION_DONE }; static const struct command_registration cortex_a8_command_handlers[] = { + { + .chain = arm_command_handlers, + }, + { + .chain = armv7a_command_handlers, + }, { .name = "cortex_a8", .mode = COMMAND_ANY, @@ -1650,13 +1656,6 @@ static const struct command_registration cortex_a8_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -static int cortex_a8_register_commands(struct command_context *cmd_ctx) -{ - armv4_5_register_commands(cmd_ctx); - armv7a_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, cortex_a8_command_handlers); -} - struct target_type cortexa8_target = { .name = "cortex_a8", @@ -1689,7 +1688,7 @@ struct target_type cortexa8_target = { .add_watchpoint = NULL, .remove_watchpoint = NULL, - .register_commands = cortex_a8_register_commands, + .commands = cortex_a8_command_handlers, .target_create = cortex_a8_target_create, .init_target = cortex_a8_init_target, .examine = cortex_a8_examine, diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c index be81af98a1..7cfe540a38 100644 --- a/src/target/cortex_m3.c +++ b/src/target/cortex_m3.c @@ -1937,6 +1937,12 @@ static const struct command_registration cortex_m3_exec_command_handlers[] = { COMMAND_REGISTRATION_DONE }; static const struct command_registration cortex_m3_command_handlers[] = { + { + .chain = arm_command_handlers, + }, + { + .chain = armv7m_command_handlers, + }, { .name = "cortex_m3", .mode = COMMAND_ANY, @@ -1946,12 +1952,6 @@ static const struct command_registration cortex_m3_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -static int cortex_m3_register_commands(struct command_context *cmd_ctx) -{ - armv7m_register_commands(cmd_ctx); - return register_commands(cmd_ctx, NULL, cortex_m3_command_handlers); -} - struct target_type cortexm3_target = { .name = "cortex_m3", @@ -1984,7 +1984,7 @@ struct target_type cortexm3_target = .add_watchpoint = cortex_m3_add_watchpoint, .remove_watchpoint = cortex_m3_remove_watchpoint, - .register_commands = cortex_m3_register_commands, + .commands = cortex_m3_command_handlers, .target_create = cortex_m3_target_create, .init_target = cortex_m3_init_target, .examine = cortex_m3_examine, diff --git a/src/target/etm.c b/src/target/etm.c index 0f7b41ec0a..2465d5c1a4 100644 --- a/src/target/etm.c +++ b/src/target/etm.c @@ -2103,7 +2103,7 @@ static const struct command_registration etm_config_command_handlers[] = { }, COMMAND_REGISTRATION_DONE }; -static const struct command_registration etm_command_handlers[] = { +const struct command_registration etm_command_handlers[] = { { .name = "etm", .mode = COMMAND_ANY, @@ -2113,11 +2113,6 @@ static const struct command_registration etm_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -int etm_register_commands(struct command_context *cmd_ctx) -{ - return register_commands(cmd_ctx, NULL, etm_command_handlers); -} - static const struct command_registration etm_exec_command_handlers[] = { { .name = "tracemode", handle_etm_tracemode_command, diff --git a/src/target/etm.h b/src/target/etm.h index b74c6d9049..05e54959a0 100644 --- a/src/target/etm.h +++ b/src/target/etm.h @@ -212,7 +212,7 @@ struct reg_cache* etm_build_reg_cache(struct target *target, int etm_setup(struct target *target); -int etm_register_commands(struct command_context *cmd_ctx); +extern const struct command_registration etm_command_handlers[]; #define ERROR_ETM_INVALID_DRIVER (-1300) #define ERROR_ETM_PORTMODE_NOT_SUPPORTED (-1301) diff --git a/src/target/fa526.c b/src/target/fa526.c index 9c22a750b6..32469d0d23 100644 --- a/src/target/fa526.c +++ b/src/target/fa526.c @@ -385,7 +385,7 @@ struct target_type fa526_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm920t_register_commands, + .commands = arm920t_command_handlers, .target_create = fa526_target_create, .init_target = arm9tdmi_init_target, .examine = arm7_9_examine, diff --git a/src/target/feroceon.c b/src/target/feroceon.c index 8c05276692..432d49d1b0 100644 --- a/src/target/feroceon.c +++ b/src/target/feroceon.c @@ -709,7 +709,7 @@ struct target_type feroceon_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm926ejs_register_commands, + .commands = arm926ejs_command_handlers, .target_create = feroceon_target_create, .init_target = feroceon_init_target, .examine = feroceon_examine, @@ -748,7 +748,7 @@ struct target_type dragonite_target = .add_watchpoint = arm7_9_add_watchpoint, .remove_watchpoint = arm7_9_remove_watchpoint, - .register_commands = arm966e_register_commands, + .commands = arm966e_command_handlers, .target_create = dragonite_target_create, .init_target = feroceon_init_target, .examine = feroceon_examine, diff --git a/src/target/mips32.c b/src/target/mips32.c index 0b8ebb4a1f..48d072021c 100644 --- a/src/target/mips32.c +++ b/src/target/mips32.c @@ -320,11 +320,6 @@ int mips32_init_arch_info(struct target *target, struct mips32_common *mips32, s return ERROR_OK; } -int mips32_register_commands(struct command_context *cmd_ctx) -{ - return ERROR_OK; -} - int mips32_run_algorithm(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_params, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info) { /*TODO*/ diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c index 0a566c3444..a83217ff95 100644 --- a/src/target/mips_m4k.c +++ b/src/target/mips_m4k.c @@ -41,7 +41,6 @@ int mips_m4k_resume(struct target *target, int current, uint32_t address, int ha int mips_m4k_step(struct target *target, int current, uint32_t address, int handle_breakpoints); int mips_m4k_read_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer); int mips_m4k_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer); -int mips_m4k_register_commands(struct command_context *cmd_ctx); int mips_m4k_init_target(struct command_context *cmd_ctx, struct target *target); int mips_m4k_target_create(struct target *target, Jim_Interp *interp); @@ -82,7 +81,6 @@ struct target_type mips_m4k_target = .add_watchpoint = mips_m4k_add_watchpoint, .remove_watchpoint = mips_m4k_remove_watchpoint, - .register_commands = mips_m4k_register_commands, .target_create = mips_m4k_target_create, .init_target = mips_m4k_init_target, .examine = mips_m4k_examine, @@ -902,14 +900,6 @@ int mips_m4k_write_memory(struct target *target, uint32_t address, uint32_t size return mips32_dmaacc_write_mem(ejtag_info, address, size, count, (void *)buffer); } -int mips_m4k_register_commands(struct command_context *cmd_ctx) -{ - int retval; - - retval = mips32_register_commands(cmd_ctx); - return retval; -} - int mips_m4k_init_target(struct command_context *cmd_ctx, struct target *target) { mips32_build_reg_cache(target); diff --git a/src/target/target.c b/src/target/target.c index 6f48808faf..e999e68c19 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -4353,9 +4353,14 @@ static int target_create(Jim_GetOptInfo *goi) if (!target->variant) target->variant = strdup(""); + cp = Jim_GetString(new_cmd, NULL); + target->cmd_name = strdup(cp); + /* create the target specific commands */ - if (target->type->register_commands) { - (*(target->type->register_commands))(cmd_ctx); + if (target->type->commands) { + e = register_commands(cmd_ctx, NULL, target->type->commands); + if (ERROR_OK != e) + LOG_ERROR("unable to register '%s' commands", cp); } if (target->type->target_create) { (*(target->type->target_create))(target, goi->interp); @@ -4371,9 +4376,6 @@ static int target_create(Jim_GetOptInfo *goi) *tpp = target; } - cp = Jim_GetString(new_cmd, NULL); - target->cmd_name = strdup(cp); - /* now - create the new target name command */ e = Jim_CreateCommand(goi->interp, /* name */ diff --git a/src/target/target_type.h b/src/target/target_type.h index aa87a74495..9a0709d859 100644 --- a/src/target/target_type.h +++ b/src/target/target_type.h @@ -148,7 +148,7 @@ struct target_type */ int (*run_algorithm)(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info); - int (*register_commands)(struct command_context *cmd_ctx); + const struct command_registration *commands; /* called when target is created */ int (*target_create)(struct target *target, Jim_Interp *interp); diff --git a/src/target/xscale.c b/src/target/xscale.c index 965ac52e73..e402a11cb1 100644 --- a/src/target/xscale.c +++ b/src/target/xscale.c @@ -3652,6 +3652,9 @@ static const struct command_registration xscale_any_command_handlers[] = { COMMAND_REGISTRATION_DONE }; static const struct command_registration xscale_command_handlers[] = { + { + .chain = arm_command_handlers, + }, { .name = "xscale", .mode = COMMAND_ANY, @@ -3661,14 +3664,6 @@ static const struct command_registration xscale_command_handlers[] = { COMMAND_REGISTRATION_DONE }; -static int xscale_register_commands(struct command_context *cmd_ctx) -{ - - armv4_5_register_commands(cmd_ctx); - - return ERROR_OK; -} - struct target_type xscale_target = { .name = "xscale", @@ -3702,7 +3697,7 @@ struct target_type xscale_target = .add_watchpoint = xscale_add_watchpoint, .remove_watchpoint = xscale_remove_watchpoint, - .register_commands = xscale_register_commands, + .commands = xscale_command_handlers, .target_create = xscale_target_create, .init_target = xscale_init_target, -- 2.30.2