cfi: unsupported code paths now report and return error
authorØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 28 Oct 2011 15:22:32 +0000 (17:22 +0200)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 31 Oct 2011 20:41:18 +0000 (20:41 +0000)
found by clang, would have done something undefined and mysterious
later on.

Change-Id: If7d7aca8514575d229ed0b17378bf8b1bbf347c4
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Reviewed-on: http://openocd.zylin.com/133
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nor/cfi.c

index f75efac34661d0612ed49e106e3259a239ce1802..62d2ae4989190522f2126d76ddd98a3b7e2afef7 100644 (file)
@@ -1897,13 +1897,15 @@ static int cfi_spansion_write_block(struct flash_bank *bank, uint8_t *buffer,
                armv4_5_info.common_magic = ARMV7M_COMMON_MAGIC;
                armv4_5_info.core_mode = ARMV7M_MODE_HANDLER;
                armv4_5_info.core_state = ARM_STATE_ARM;
-       }
-       else
+       } else if (armv4_5_info.common_magic == ARM_COMMON_MAGIC)
        {
                /* All other ARM CPUs have 32 bit instructions */
                armv4_5_info.common_magic = ARM_COMMON_MAGIC;
                armv4_5_info.core_mode = ARM_MODE_SVC;
                armv4_5_info.core_state = ARM_STATE_ARM;
+       } else {
+               LOG_ERROR("Unknown ARM architecture");
+               return ERROR_FAIL;
        }
 
        int target_code_size = 0;
@@ -1912,11 +1914,12 @@ static int cfi_spansion_write_block(struct flash_bank *bank, uint8_t *buffer,
        switch (bank->bus_width)
        {
        case 1 :
-               if(armv4_5_info.common_magic == ARM_COMMON_MAGIC) /* armv4_5 target */
-               {
-                       target_code_src = armv4_5_word_8_code;
-                       target_code_size = sizeof(armv4_5_word_8_code);
+               if (armv4_5_info.common_magic != ARM_COMMON_MAGIC) {
+                       LOG_ERROR("Unknown ARM architecture");
+                       return ERROR_FAIL;
                }
+               target_code_src = armv4_5_word_8_code;
+               target_code_size = sizeof(armv4_5_word_8_code);
                break;
        case 2 :
                /* Check for DQ5 support */
@@ -1936,19 +1939,21 @@ static int cfi_spansion_write_block(struct flash_bank *bank, uint8_t *buffer,
                else
                {
                        /* No DQ5 support. Use DQ7 DATA# polling only. */
-                       if(armv4_5_info.common_magic == ARM_COMMON_MAGIC) // armv4_5 target
-                       {
-                               target_code_src = armv4_5_word_16_code_dq7only;
-                               target_code_size = sizeof(armv4_5_word_16_code_dq7only);
+                       if (armv4_5_info.common_magic != ARM_COMMON_MAGIC) {
+                               LOG_ERROR("Unknown ARM architecture");
+                               return ERROR_FAIL;
                        }
+                       target_code_src = armv4_5_word_16_code_dq7only;
+                       target_code_size = sizeof(armv4_5_word_16_code_dq7only);
                }
                break;
        case 4 :
-               if(armv4_5_info.common_magic == ARM_COMMON_MAGIC) // armv4_5 target
-               {
-                       target_code_src = armv4_5_word_32_code;
-                       target_code_size = sizeof(armv4_5_word_32_code);
+               if (armv4_5_info.common_magic != ARM_COMMON_MAGIC) {
+                       LOG_ERROR("Unknown ARM architecture");
+                       return ERROR_FAIL;
                }
+               target_code_src = armv4_5_word_32_code;
+               target_code_size = sizeof(armv4_5_word_32_code);
                break;
        default:
                LOG_ERROR("Unsupported bank buswidth %d, can't do block memory writes", bank->bus_width);

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)