--- record.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) --- a/record.c +++ b/record.c @@ -647,13 +647,17 @@ record_message (void *args) static int do_record_message (struct regcache *regcache, - enum target_signal signal) + enum target_signal signal, int catch) { struct record_message_args args; args.regcache = regcache; args.signal = signal; - return catch_errors (record_message, &args, NULL, RETURN_MASK_ALL); + + if (catch) + return catch_errors (record_message, &args, NULL, RETURN_MASK_ALL); + + return record_message (&args); } /* Set to 1 if record_store_registers and record_xfer_partial @@ -954,7 +958,6 @@ record_close (int quitting) } static int record_resume_step = 0; -static int record_resume_error; /* "to_resume" target method. Resume the process record target. */ @@ -966,15 +969,7 @@ record_resume (struct target_ops *ops, p if (!RECORD_IS_REPLAY) { - if (do_record_message (get_current_regcache (), signal)) - { - record_resume_error = 0; - } - else - { - record_resume_error = 1; - return; - } + do_record_message (get_current_regcache (), signal, 0); record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1, signal); } @@ -1038,14 +1033,6 @@ record_wait (struct target_ops *ops, if (!RECORD_IS_REPLAY && ops != &record_core_ops) { - if (record_resume_error) - { - /* If record_resume get error, return directly. */ - status->kind = TARGET_WAITKIND_STOPPED; - status->value.sig = TARGET_SIGNAL_ABRT; - return inferior_ptid; - } - if (record_resume_step) { /* This is a single step. */ @@ -1090,8 +1077,12 @@ record_wait (struct target_ops *ops, stepping, therefore gdb will not stop. Therefore we will not return to gdb. Record the insn and resume. */ - if (!do_record_message (regcache, TARGET_SIGNAL_0)) - break; + if (!do_record_message (regcache, TARGET_SIGNAL_0, 1)) + { + status->kind = TARGET_WAITKIND_STOPPED; + status->value.sig = TARGET_SIGNAL_0; + break; + } record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1,