This is an automated email from Gerrit.

"Tomas Vanek <van...@fbl.cz>" just uploaded a new patch set to Gerrit, which 
you can find at https://review.openocd.org/c/openocd/+/7100

-- gerrit

commit 6da64bd663b8139dab9673fc288ee6a659599d07
Author: Tomas Vanek <van...@fbl.cz>
Date:   Mon Aug 1 19:06:35 2022 +0200

    target/arm: make 'arm core_state' command compatible with Cortex-M
    
    Tcl command 'arm core_state' was exposed even on Cortex-M devices.
    However it returned message "Unsupported Command" without error status
    on such device.
    
    Set the only posible arm->core_state ARM_STATE_THUMB in armv7m init.
    Block setting core_state to arm on Cortex-M.
    
    Change-Id: I9525553ac8863a6cf77bbacbcd57e354b6cfe1ca
    Signed-off-by: Tomas Vanek <van...@fbl.cz>

diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index 2b347924fe..09cf143e65 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -905,32 +905,33 @@ COMMAND_HANDLER(handle_armv4_5_reg_command)
        return ERROR_OK;
 }
 
-COMMAND_HANDLER(handle_armv4_5_core_state_command)
+COMMAND_HANDLER(handle_arm_core_state_command)
 {
        struct target *target = get_current_target(CMD_CTX);
        struct arm *arm = target_to_arm(target);
+       int ret = ERROR_OK;
 
        if (!is_arm(arm)) {
                command_print(CMD, "current target isn't an ARM");
                return ERROR_FAIL;
        }
 
-       if (arm->core_type == ARM_CORE_TYPE_M_PROFILE) {
-               /* armv7m not supported */
-               command_print(CMD, "Unsupported Command");
-               return ERROR_OK;
-       }
-
        if (CMD_ARGC > 0) {
-               if (strcmp(CMD_ARGV[0], "arm") == 0)
-                       arm->core_state = ARM_STATE_ARM;
+               if (strcmp(CMD_ARGV[0], "arm") == 0) {
+                       if (arm->core_type == ARM_CORE_TYPE_M_PROFILE) {
+                               command_print(CMD, "arm mode not supported on 
Cortex-M");
+                               ret = ERROR_FAIL;
+                       } else {
+                               arm->core_state = ARM_STATE_ARM;
+                       }
+               }
                if (strcmp(CMD_ARGV[0], "thumb") == 0)
                        arm->core_state = ARM_STATE_THUMB;
        }
 
        command_print(CMD, "core state: %s", 
arm_state_strings[arm->core_state]);
 
-       return ERROR_OK;
+       return ret;
 }
 
 COMMAND_HANDLER(handle_arm_disassemble_command)
@@ -1126,7 +1127,7 @@ static const struct command_registration 
arm_exec_command_handlers[] = {
        },
        {
                .name = "core_state",
-               .handler = handle_armv4_5_core_state_command,
+               .handler = handle_arm_core_state_command,
                .mode = COMMAND_EXEC,
                .usage = "['arm'|'thumb']",
                .help = "display/change ARM core state",
diff --git a/src/target/armv7m.c b/src/target/armv7m.c
index 4c46240f89..790e70e63d 100644
--- a/src/target/armv7m.c
+++ b/src/target/armv7m.c
@@ -854,6 +854,7 @@ int armv7m_init_arch_info(struct target *target, struct 
armv7m_common *armv7m)
        /* Enable stimulus port #0 by default */
        armv7m->trace_config.itm_ter[0] = 1;
 
+       arm->core_state = ARM_STATE_THUMB;
        arm->core_type = ARM_CORE_TYPE_M_PROFILE;
        arm->arch_info = armv7m;
        arm->setup_semihosting = armv7m_setup_semihosting;

-- 

Reply via email to