This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8391

-- gerrit

commit d0d51b7ec3cca4a65e8fe73a779bcf20b2c3152d
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sat Jul 13 19:14:39 2024 +0200

    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.anto...@gmail.com>

diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 9b00a2796f..eb109201b0 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -273,7 +273,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;
@@ -326,7 +327,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);
diff --git a/src/target/target.c b/src/target/target.c
index 1f4817d5c1..17c8633269 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -5805,7 +5805,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;
 
diff --git a/src/target/target.h b/src/target/target.h
index 03db3950ce..d3077f5716 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -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 
*/
diff --git a/src/target/target_request.c b/src/target/target_request.c
index 72c84216fa..bccae07b42 100644
--- a/src/target/target_request.c
+++ b/src/target/target_request.c
@@ -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

-- 

Reply via email to