This is an automated email from Gerrit.

Liviu Ionescu (i...@livius.net) just uploaded a new patch set to Gerrit, which 
you can find at http://openocd.zylin.com/4603

-- gerrit

commit bc1fe85f8a1724547bb40454b8421556abfa5b44
Author: Liviu Ionescu <i...@livius.net>
Date:   Sun Jul 15 09:45:13 2018 +0300

    Avoid null target->semihosting references.
    
    The new common semihosting code introduced a bug,
    in certain conditions target->semihosting was
    used without semihosting being initialised.
    
    The solution was to explicitly test for
    target->semihosting before dereferencing it.
    
    Change-Id: I4c83e596140c68fe4ab32e586e51f7e981a40798
    Signed-off-by: Liviu Ionescu <i...@livius.net>

diff --git a/src/target/arm_semihosting.c b/src/target/arm_semihosting.c
index 31ca779..9117a74 100644
--- a/src/target/arm_semihosting.c
+++ b/src/target/arm_semihosting.c
@@ -82,6 +82,9 @@ static int post_result(struct target *target)
 {
        struct arm *arm = target_to_arm(target);
 
+       if (!target->semihosting)
+               return ERROR_FAIL;
+
        /* REVISIT this looks wrong ... ARM11 and Cortex-A8
         * should work this way at least sometimes.
         */
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index 5ee8ead..96a63e4 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -752,7 +752,7 @@ int arm_arch_state(struct target *target)
        }
 
        /* avoid filling log waiting for fileio reply */
-       if (target->semihosting->hit_fileio)
+       if (target->semihosting && target->semihosting->hit_fileio)
                return ERROR_OK;
 
        LOG_USER("target halted in %s state due to %s, current mode: %s\n"
@@ -762,8 +762,8 @@ int arm_arch_state(struct target *target)
                arm_mode_name(arm->core_mode),
                buf_get_u32(arm->cpsr->value, 0, 32),
                buf_get_u32(arm->pc->value, 0, 32),
-               target->semihosting->is_active ? ", semihosting" : "",
-               target->semihosting->is_fileio ? " fileio" : "");
+               (target->semihosting && target->semihosting->is_active) ? ", 
semihosting" : "",
+               (target->semihosting && target->semihosting->is_fileio) ? " 
fileio" : "");
 
        return ERROR_OK;
 }
diff --git a/src/target/armv7m.c b/src/target/armv7m.c
index 1b4e5b1..7d3bd73 100644
--- a/src/target/armv7m.c
+++ b/src/target/armv7m.c
@@ -541,7 +541,7 @@ int armv7m_arch_state(struct target *target)
        uint32_t ctrl, sp;
 
        /* avoid filling log waiting for fileio reply */
-       if (target->semihosting->hit_fileio)
+       if (target->semihosting && target->semihosting->hit_fileio)
                return ERROR_OK;
 
        ctrl = buf_get_u32(arm->core_cache->reg_list[ARMV7M_CONTROL].value, 0, 
32);
@@ -556,8 +556,8 @@ int armv7m_arch_state(struct target *target)
                buf_get_u32(arm->pc->value, 0, 32),
                (ctrl & 0x02) ? 'p' : 'm',
                sp,
-               target->semihosting->is_active ? ", semihosting" : "",
-               target->semihosting->is_fileio ? " fileio" : "");
+               (target->semihosting && target->semihosting->is_active) ? ", 
semihosting" : "",
+               (target->semihosting && target->semihosting->is_fileio) ? " 
fileio" : "");
 
        return ERROR_OK;
 }

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to