From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17928 invoked by alias); 7 Dec 2009 15:01:02 -0000 Received: (qmail 17881 invoked by uid 22791); 7 Dec 2009 15:01:01 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-px0-f186.google.com (HELO mail-px0-f186.google.com) (209.85.216.186) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 07 Dec 2009 15:00:56 +0000 Received: by pxi16 with SMTP id 16so1899872pxi.25 for ; Mon, 07 Dec 2009 07:00:54 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.250.38 with SMTP id x38mr772802wfh.179.1260198054282; Mon, 07 Dec 2009 07:00:54 -0800 (PST) In-Reply-To: References: <20091125162458.GF26004@adacore.com> From: Hui Zhu Date: Mon, 07 Dec 2009 15:01:00 -0000 Message-ID: Subject: Re: [RFA] let record_resume fail immediately on error To: Tom Tromey , Joel Brobecker , Michael Snyder Cc: "gdb-patches@sourceware.org" Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-12/txt/msg00075.txt.bz2 Ping. Thanks, Hui On Wed, Dec 2, 2009 at 11:22, Hui Zhu wrote: > Thanks Tom, > > I make a new patch according it. =A0Please help me review it. > > Thanks, > Hui > > 2009-12-02 =A0Hui Zhu =A0 > > =A0 =A0 =A0 =A0* record.c (record_message): Change argument. > =A0 =A0 =A0 =A0(record_message_wrapper): New function. > =A0 =A0 =A0 =A0(do_record_message): Change it name to > =A0 =A0 =A0 =A0"record_message_wrapper_safe". > =A0 =A0 =A0 =A0Let it call "record_message_wrapper". > =A0 =A0 =A0 =A0(record_resume_error): Deleted. > =A0 =A0 =A0 =A0(record_resume): Call "record_message". > =A0 =A0 =A0 =A0(record_wait): Deleted record_resume_error. > =A0 =A0 =A0 =A0Call "record_message_wrapper_safe". > =A0 =A0 =A0 =A0Set status when do_record_message need stop the inferior. > 2009-12-02 =A0Hui Zhu =A0 > > =A0 =A0 =A0 =A0* gdb.reverse/sigall-reverse.exp: Adjust. > > --- > =A0record.c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 | =A0 70 ++++++++++++++----------------- > =A0testsuite/gdb.reverse/sigall-reverse.exp | =A0 =A02 > =A02 files changed, 34 insertions(+), 38 deletions(-) > > --- a/record.c > +++ b/record.c > @@ -572,17 +572,11 @@ record_arch_list_cleanups (void *ignore) > =A0 =A0record the running message of inferior and set them to > =A0 =A0record_arch_list, and add it to record_list. =A0*/ > > -struct record_message_args { > - =A0struct regcache *regcache; > - =A0enum target_signal signal; > -}; > - > =A0static int > -record_message (void *args) > +record_message (struct regcache *regcache, enum target_signal signal) > =A0{ > =A0 int ret; > - =A0struct record_message_args *myargs =3D args; > - =A0struct gdbarch *gdbarch =3D get_regcache_arch (myargs->regcache); > + =A0struct gdbarch *gdbarch =3D get_regcache_arch (regcache); > =A0 struct cleanup *old_cleanups =3D make_cleanup (record_arch_list_clean= ups, 0); > > =A0 record_arch_list_head =3D NULL; > @@ -616,18 +610,18 @@ record_message (void *args) > =A0 if (record_list !=3D &record_first) =A0 =A0/* FIXME better way to che= ck */ > =A0 =A0 { > =A0 =A0 =A0 gdb_assert (record_list->type =3D=3D record_end); > - =A0 =A0 =A0record_list->u.end.sigval =3D myargs->signal; > + =A0 =A0 =A0record_list->u.end.sigval =3D signal; > =A0 =A0 } > > - =A0if (myargs->signal =3D=3D TARGET_SIGNAL_0 > + =A0if (signal =3D=3D TARGET_SIGNAL_0 > =A0 =A0 =A0 || !gdbarch_process_record_signal_p (gdbarch)) > =A0 =A0 ret =3D gdbarch_process_record (gdbarch, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 myargs-= >regcache, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 regcach= e_read_pc (myargs->regcache)); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 regcach= e, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 regcach= e_read_pc (regcache)); > =A0 else > =A0 =A0 ret =3D gdbarch_process_record_signal (gdbarch, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0myargs->regcache, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0myargs->signal); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0regcache, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0signal); > > =A0 if (ret > 0) > =A0 =A0 error (_("Process record: inferior program stopped.")); > @@ -648,15 +642,29 @@ record_message (void *args) > =A0 return 1; > =A0} > > +struct record_message_args { > + =A0struct regcache *regcache; > + =A0enum target_signal signal; > +}; > + > =A0static int > -do_record_message (struct regcache *regcache, > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0enum target_signal signal) > +record_message_wrapper (void *args) > +{ > + =A0struct record_message_args *record_args =3D args; > + > + =A0return record_message (record_args->regcache, record_args->signal); > +} > + > +static int > +record_message_wrapper_safe (struct regcache *regcache, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 enum target_sig= nal signal) > =A0{ > =A0 struct record_message_args args; > > =A0 args.regcache =3D regcache; > =A0 args.signal =3D signal; > - =A0return catch_errors (record_message, &args, NULL, RETURN_MASK_ALL); > + > + =A0return catch_errors (record_message_wrapper, &args, NULL, RETURN_MAS= K_ALL); > =A0} > > =A0/* Set to 1 if record_store_registers and record_xfer_partial > @@ -983,7 +991,6 @@ record_close (int quitting) > =A0} > > =A0static int record_resume_step =3D 0; > -static int record_resume_error; > > =A0/* "to_resume" target method. =A0Resume the process record target. =A0= */ > > @@ -995,15 +1002,7 @@ record_resume (struct target_ops *ops, p > > =A0 if (!RECORD_IS_REPLAY) > =A0 =A0 { > - =A0 =A0 =A0if (do_record_message (get_current_regcache (), signal)) > - =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0record_resume_error =3D 0; > - =A0 =A0 =A0 =A0} > - =A0 =A0 =A0else > - =A0 =A0 =A0 =A0{ > - =A0 =A0 =A0 =A0 =A0record_resume_error =3D 1; > - =A0 =A0 =A0 =A0 =A0return; > - =A0 =A0 =A0 =A0} > + =A0 =A0 =A0record_message (get_current_regcache (), signal); > =A0 =A0 =A0 record_beneath_to_resume (record_beneath_to_resume_ops, ptid,= 1, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 signal); > =A0 =A0 } > @@ -1067,14 +1066,6 @@ record_wait (struct target_ops *ops, > > =A0 if (!RECORD_IS_REPLAY && ops !=3D &record_core_ops) > =A0 =A0 { > - =A0 =A0 =A0if (record_resume_error) > - =A0 =A0 =A0 { > - =A0 =A0 =A0 =A0 /* If record_resume get error, return directly. =A0*/ > - =A0 =A0 =A0 =A0 status->kind =3D TARGET_WAITKIND_STOPPED; > - =A0 =A0 =A0 =A0 status->value.sig =3D TARGET_SIGNAL_ABRT; > - =A0 =A0 =A0 =A0 return inferior_ptid; > - =A0 =A0 =A0 } > - > =A0 =A0 =A0 if (record_resume_step) > =A0 =A0 =A0 =A0{ > =A0 =A0 =A0 =A0 =A0/* This is a single step. =A0*/ > @@ -1130,8 +1121,13 @@ record_wait (struct target_ops *ops, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* This must be a single-step = trap. =A0Record the > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 insn and issue another st= ep. =A0*/ > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (!do_record_message (regcach= e, TARGET_SIGNAL_0)) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (!record_message_wrapper_saf= e (regcache, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0TARGET_SIGNAL_0)) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status->kind =3D TA= RGET_WAITKIND_STOPPED; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status->value.sig = =3D TARGET_SIGNAL_0; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0record_beneath_to_resume (reco= rd_beneath_to_resume_ops, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0ptid, 1, > --- a/testsuite/gdb.reverse/sigall-reverse.exp > +++ b/testsuite/gdb.reverse/sigall-reverse.exp > @@ -262,7 +262,7 @@ gdb_test "continue" \ > =A0 =A0 "get signal TERM" > =A0gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM" > > -gdb_test "continue" "Program received .*" "continue to sigall exit" \ > +gdb_test "continue" "\[process \[0-9\]+ .*" "continue to sigall exit" \ > =A0 =A0 "The next instruction is syscall exit_group.* program...y. or n. = " \ > =A0 =A0 "yes" >