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 <ilg@livius.net> Reviewed-on: http://openocd.zylin.com/4603 Tested-by: jenkins Reviewed-by: Jonathan Larmour <jifl@eCosCentric.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>bscan_tunnel
parent
e270127288
commit
6fa18a455f
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue