+
+COMMAND_HANDLER(default_handle_smp_command)
+{
+ struct target *target = get_current_target(CMD_CTX);
+ struct target_list *head;
+
+ if (CMD_ARGC > 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ if (!CMD_ARGC) {
+ command_print(CMD, "%s", target->smp ? "on" : "off");
+ return ERROR_OK;
+ }
+
+ if (!strcmp(CMD_ARGV[0], "on")) {
+ foreach_smp_target(head, target->smp_targets)
+ head->target->smp = 1;
+
+ return ERROR_OK;
+ }
+
+ if (!strcmp(CMD_ARGV[0], "off")) {
+ foreach_smp_target(head, target->smp_targets)
+ head->target->smp = 0;
+
+ /* fixes the target display to the debugger */
+ if (!list_empty(target->smp_targets) && target->gdb_service)
+ target->gdb_service->target = target;
+
+ return ERROR_OK;
+ }
+
+ return ERROR_COMMAND_SYNTAX_ERROR;
+}
+
+COMMAND_HANDLER(handle_smp_gdb_command)
+{
+ struct target *target = get_current_target(CMD_CTX);
+ int retval = ERROR_OK;
+
+ LOG_WARNING(DEPRECATED_MSG);
+
+ if (!list_empty(target->smp_targets)) {
+ if (CMD_ARGC == 1) {
+ int coreid = 0;
+ COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], coreid);
+ if (retval != ERROR_OK)
+ return retval;
+ target->gdb_service->core[1] = coreid;
+
+ }
+ command_print(CMD, "gdb coreid %" PRId32 " -> %" PRId32, target->gdb_service->core[0]
+ , target->gdb_service->core[1]);
+ }
+ return ERROR_OK;
+}
+
+const struct command_registration smp_command_handlers[] = {
+ {
+ .name = "smp",
+ .handler = default_handle_smp_command,
+ .mode = COMMAND_EXEC,
+ .help = "smp handling",
+ .usage = "[on|off]",
+ },
+ {
+ .name = "smp_gdb",
+ .handler = handle_smp_gdb_command,
+ .mode = COMMAND_EXEC,
+ .help = "display/fix current core played to gdb",
+ .usage = "",
+ },
+ COMMAND_REGISTRATION_DONE
+};