target/riscv: fix use of uninitialized value
[fw/openocd] / src / target / riscv / riscv.c
index c25efcde9a0d8cfbfe3004633dbfdc8be627de58..ae0a7375d644f3500b245dbeaba4d5c78ba30806 100644 (file)
@@ -453,10 +453,7 @@ static int riscv_init_target(struct command_context *cmd_ctx,
        if (bscan_tunnel_ir_width != 0) {
                assert(target->tap->ir_length >= 6);
                uint32_t ir_user4_raw = 0x23 << (target->tap->ir_length - 6);
-               ir_user4[0] = (uint8_t)ir_user4_raw;
-               ir_user4[1] = (uint8_t)(ir_user4_raw >>= 8);
-               ir_user4[2] = (uint8_t)(ir_user4_raw >>= 8);
-               ir_user4[3] = (uint8_t)(ir_user4_raw >>= 8);
+               h_u32_to_le(ir_user4, ir_user4_raw);
                select_user4.num_bits = target->tap->ir_length;
                bscan_tunneled_ir_width[0] = bscan_tunnel_ir_width;
                if (bscan_tunnel_type == BSCAN_TUNNEL_DATA_REGISTER)
@@ -1610,6 +1607,7 @@ static int riscv_address_translate(struct target *target,
        LOG_DEBUG("virtual=0x%" TARGET_PRIxADDR "; mode=%s", virtual, info->name);
 
        /* verify bits xlen-1:va_bits-1 are all equal */
+       assert(xlen >= info->va_bits);
        target_addr_t mask = ((target_addr_t)1 << (xlen - (info->va_bits - 1))) - 1;
        target_addr_t masked_msbs = (virtual >> (info->va_bits - 1)) & mask;
        if (masked_msbs != 0 && masked_msbs != mask) {
@@ -2668,27 +2666,25 @@ COMMAND_HANDLER(riscv_authdata_write)
        uint32_t value;
        unsigned int index = 0;
 
-       if (CMD_ARGC == 0) {
-               /* nop */
-       } else if (CMD_ARGC == 1) {
+       if (CMD_ARGC == 0 || CMD_ARGC > 2)
+               return ERROR_COMMAND_SYNTAX_ERROR;
+
+       if (CMD_ARGC == 1) {
                COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], value);
-       } else if (CMD_ARGC == 2) {
+       } else {
                COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], index);
                COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
-       } else {
-               LOG_ERROR("Command takes at most 2 arguments");
-               return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
        struct target *target = get_current_target(CMD_CTX);
        RISCV_INFO(r);
 
-       if (r->authdata_write) {
-               return r->authdata_write(target, value, index);
-       } else {
+       if (!r->authdata_write) {
                LOG_ERROR("authdata_write is not implemented for this target.");
                return ERROR_FAIL;
        }
+
+       return r->authdata_write(target, value, index);
 }
 
 COMMAND_HANDLER(riscv_dmi_read)