cortex_m: fix scan-build false positive
Scan-build is unable to detect that 'target->dbg_msg_enabled' does not change across the function cortex_m_fast_read_all_regs(). It incorrectly assumes that it can be false at the first check (so 'dcrdr' get not assigned) and it is true later on (when 'dcrdr' get used). This triggers a false positive: src/target/cortex_m.c:338:12: warning: 3rd function call argument is an uninitialized value [core.CallAndMessage] retval = mem_ap_write_atomic_u32(armv7m->debug_ap, DCB_DCRDR, dcrdr); Use a local variable for 'target->dbg_msg_enabled' so scan-build can track it as not modified. While there, change the type of 'target->dbg_msg_enabled' to boolean as there is no reason to use uint32_t. Change-Id: Icaf1a1b2dea8bc55108182ea440708ab76396cd7 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/8391 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
parent
052a4a69b5
commit
5b7b77349c
|
@ -279,7 +279,8 @@ static int cortex_m_fast_read_all_regs(struct target *target)
|
|||
|
||||
/* because the DCB_DCRDR is used for the emulated dcc channel
|
||||
* we have to save/restore the DCB_DCRDR when used */
|
||||
if (target->dbg_msg_enabled) {
|
||||
bool dbg_msg_enabled = target->dbg_msg_enabled;
|
||||
if (dbg_msg_enabled) {
|
||||
retval = mem_ap_read_u32(armv7m->debug_ap, DCB_DCRDR, &dcrdr);
|
||||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
|
@ -332,7 +333,7 @@ static int cortex_m_fast_read_all_regs(struct target *target)
|
|||
if (retval != ERROR_OK)
|
||||
return retval;
|
||||
|
||||
if (target->dbg_msg_enabled) {
|
||||
if (dbg_msg_enabled) {
|
||||
/* restore DCB_DCRDR - this needs to be in a separate
|
||||
* transaction otherwise the emulated DCC channel breaks */
|
||||
retval = mem_ap_write_atomic_u32(armv7m->debug_ap, DCB_DCRDR, dcrdr);
|
||||
|
|
|
@ -5813,7 +5813,7 @@ static int target_create(struct jim_getopt_info *goi)
|
|||
}
|
||||
|
||||
target->dbgmsg = NULL;
|
||||
target->dbg_msg_enabled = 0;
|
||||
target->dbg_msg_enabled = false;
|
||||
|
||||
target->endianness = TARGET_ENDIAN_UNKNOWN;
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ struct target {
|
|||
struct watchpoint *watchpoints; /* list of watchpoints */
|
||||
struct trace *trace_info; /* generic trace information */
|
||||
struct debug_msg_receiver *dbgmsg; /* list of debug message receivers */
|
||||
uint32_t dbg_msg_enabled; /* debug message status */
|
||||
bool dbg_msg_enabled; /* debug message status */
|
||||
void *arch_info; /* architecture specific information */
|
||||
void *private_config; /* pointer to target specific config data (for jim_configure hook) */
|
||||
struct target *next; /* next target in list */
|
||||
|
|
|
@ -164,7 +164,7 @@ static int add_debug_msg_receiver(struct command_context *cmd_ctx, struct target
|
|||
(*p)->next = NULL;
|
||||
|
||||
/* enable callback */
|
||||
target->dbg_msg_enabled = 1;
|
||||
target->dbg_msg_enabled = true;
|
||||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ int delete_debug_msg_receiver(struct command_context *cmd_ctx, struct target *ta
|
|||
free(c);
|
||||
if (!*p) {
|
||||
/* disable callback */
|
||||
target->dbg_msg_enabled = 0;
|
||||
target->dbg_msg_enabled = false;
|
||||
}
|
||||
return ERROR_OK;
|
||||
} else
|
||||
|
|
Loading…
Reference in New Issue