X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Fxscale.c;h=6fed0329d5f27b67f4d9f06da1f810107a33668c;hb=83be6cfc1602cb35cd2d90870d75e179074b17aa;hp=3b5674581c2b3131c9695b8648986ec77602ea92;hpb=3b7c9585db2dd49b48123d50e9e8af7bc527be52;p=openocd.git diff --git a/src/target/xscale.c b/src/target/xscale.c index 3b5674581c..6fed0329d5 100644 --- a/src/target/xscale.c +++ b/src/target/xscale.c @@ -317,7 +317,7 @@ static int xscale_receive(struct target *target, uint32_t *buffer, int num_words /* examine results */ for (i = words_done; i < num_words; i++) { - if (!(field0[0] & 1)) + if (!(field0[i] & 1)) { /* move backwards if necessary */ int j; @@ -1180,7 +1180,6 @@ static int xscale_resume(struct target *target, int current, { struct xscale_common *xscale = target_to_xscale(target); struct arm *armv4_5 = &xscale->armv4_5_common; - struct breakpoint *breakpoint = target->breakpoints; uint32_t current_pc; int retval; int i; @@ -1218,6 +1217,7 @@ static int xscale_resume(struct target *target, int current, /* the front-end may request us not to handle breakpoints */ if (handle_breakpoints) { + struct breakpoint *breakpoint; breakpoint = breakpoint_find(target, buf_get_u32(armv4_5->pc->value, 0, 32)); if (breakpoint != NULL) @@ -1242,6 +1242,8 @@ static int xscale_resume(struct target *target, int current, /* restore banked registers */ retval = xscale_restore_banked(target); + if (retval != ERROR_OK) + return retval; /* send resume request */ xscale_send_u32(target, 0x30); @@ -1289,6 +1291,8 @@ static int xscale_resume(struct target *target, int current, /* restore banked registers */ retval = xscale_restore_banked(target); + if (retval != ERROR_OK) + return retval; /* send resume request (command 0x30 or 0x31) * clean the trace buffer if it is to be enabled (0x62) */ @@ -1462,6 +1466,7 @@ static int xscale_step(struct target *target, int current, if ((retval = arm_simulate_step(target, NULL)) != ERROR_OK) return retval; current_pc = buf_get_u32(armv4_5->pc->value, 0, 32); + LOG_DEBUG("current pc %" PRIx32, current_pc); target->debug_reason = DBG_REASON_SINGLESTEP; target_call_event_callbacks(target, TARGET_EVENT_HALTED); @@ -1480,6 +1485,8 @@ static int xscale_step(struct target *target, int current, } retval = xscale_step_inner(target, current, address, handle_breakpoints); + if (retval != ERROR_OK) + return retval; if (breakpoint) {