This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Main OpenOCD repository".
The branch, master has been updated
via cb72b7a270c7be60c1ec2ee47282156397bea846 (commit)
from b1c00e5a4e038068dce4512c5a2eb3735990b880 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit cb72b7a270c7be60c1ec2ee47282156397bea846
Author: David Brownell <dbr...@us...>
Date: Mon Mar 1 10:39:57 2010 -0800
arm_semihosting buildfix
The recent "add armv7m semihosting support" patch introduced two
build errors:
arm_semihosting.c: In function âdo_semihostingâ:
arm_semihosting.c:71: error: âspsrâ may be used uninitialized in this function
arm_semihosting.c:71: error: âlrâ may be used uninitialized in this function
This fixes those build errors. The behavior is, however, untested.
(Also, note the two new REVISIT comments.)
Signed-off-by: David Brownell <dbr...@us...>
diff --git a/src/target/arm_semihosting.c b/src/target/arm_semihosting.c
index 2f50a4a..a247cc8 100644
--- a/src/target/arm_semihosting.c
+++ b/src/target/arm_semihosting.c
@@ -68,16 +68,9 @@ static int do_semihosting(struct target *target)
struct arm *arm = target_to_arm(target);
uint32_t r0 = buf_get_u32(arm->core_cache->reg_list[0].value, 0, 32);
uint32_t r1 = buf_get_u32(arm->core_cache->reg_list[1].value, 0, 32);
- uint32_t lr, spsr;
uint8_t params[16];
int retval, result;
- if (is_arm7_9(target_to_arm7_9(target)))
- {
- lr = buf_get_u32(ARMV4_5_CORE_REG_MODE(arm->core_cache, ARM_MODE_SVC, 14).value, 0, 32);
- spsr = buf_get_u32(arm->spsr->value, 0, 32);;
- }
-
/*
* TODO: lots of security issues are not considered yet, such as:
* - no validation on target provided file descriptors
@@ -396,22 +389,35 @@ static int do_semihosting(struct target *target)
/* resume execution to the original mode */
+ /* REVISIT this looks wrong ... ARM11 and Cortex-A8
+ * should work this way at least sometimes.
+ */
if (is_arm7_9(target_to_arm7_9(target)))
{
+ uint32_t spsr;
+
/* return value in R0 */
buf_set_u32(arm->core_cache->reg_list[0].value, 0, 32, result);
arm->core_cache->reg_list[0].dirty = 1;
/* LR --> PC */
- buf_set_u32(arm->core_cache->reg_list[15].value, 0, 32, lr);
+ buf_set_u32(arm->core_cache->reg_list[15].value, 0, 32,
+ buf_get_u32(arm_reg_current(arm,14)->value, 0, 32));
arm->core_cache->reg_list[15].dirty = 1;
/* saved PSR --> current PSR */
+ spsr = buf_get_u32(arm->spsr->value, 0, 32);
+
+ /* REVISIT should this be arm_set_cpsr(arm, spsr)
+ * instead of a partially unrolled version?
+ */
+
buf_set_u32(arm->cpsr->value, 0, 32, spsr);
arm->cpsr->dirty = 1;
arm->core_mode = spsr & 0x1f;
if (spsr & 0x20)
arm->core_state = ARM_STATE_THUMB;
+
}
else
{
-----------------------------------------------------------------------
Summary of changes:
src/target/arm_semihosting.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|