+ .name = "expr",
+ .jim_handler = jim_expr_command,
+ .mode = COMMAND_ANY,
+ .help = "",
+ .usage = "",
+ },
+ COMMAND_REGISTRATION_DONE
+};
+
+static int workaround_for_jimtcl_expr(struct command_context *cmd_ctx)
+{
+ return register_commands(cmd_ctx, NULL, expr_handler);
+}
+
+struct command_context *global_cmd_ctx;
+
+static struct command_context *setup_command_handler(Jim_Interp *interp)
+{
+ log_init();
+ LOG_DEBUG("log_init: complete");
+
+ struct command_context *cmd_ctx = command_init(openocd_startup_tcl, interp);
+
+ /* register subsystem commands */
+ typedef int (*command_registrant_t)(struct command_context *cmd_ctx_value);
+ static const command_registrant_t command_registrants[] = {
+ &workaround_for_jimtcl_expr,
+ &openocd_register_commands,
+ &server_register_commands,
+ &gdb_register_commands,
+ &log_register_commands,
+ &rtt_server_register_commands,
+ &transport_register_commands,
+ &adapter_register_commands,
+ &target_register_commands,
+ &flash_register_commands,
+ &nand_register_commands,
+ &pld_register_commands,
+ &cti_register_commands,
+ &dap_register_commands,
+ &arm_tpiu_swo_register_commands,
+ NULL
+ };
+ for (unsigned i = 0; command_registrants[i]; i++) {
+ int retval = (*command_registrants[i])(cmd_ctx);
+ if (retval != ERROR_OK) {
+ command_done(cmd_ctx);
+ return NULL;
+ }