From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15592 invoked by alias); 10 Nov 2009 07:02:23 -0000 Received: (qmail 15215 invoked by uid 22791); 10 Nov 2009 07:02:20 -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-pz0-f192.google.com (HELO mail-pz0-f192.google.com) (209.85.222.192) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 10 Nov 2009 07:02:16 +0000 Received: by pzk30 with SMTP id 30so2830100pzk.24 for ; Mon, 09 Nov 2009 23:02:14 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.249.42 with SMTP id w42mr932065wfh.277.1257836534187; Mon, 09 Nov 2009 23:02:14 -0800 (PST) In-Reply-To: References: <20090928160728.GB9003@adacore.com> <20091015162326.GA5272@adacore.com> <4AD75806.9070705@vmware.com> <4AF07CF2.1050902@vmware.com> From: Hui Zhu Date: Tue, 10 Nov 2009 07:02:00 -0000 Message-ID: Subject: Re: [RFA] let record_resume fail immediately on error To: Michael Snyder , Tom Tromey Cc: Joel Brobecker , "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=001636ed68e5ce48a80477fee3cd 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-11/txt/msg00201.txt.bz2 --001636ed68e5ce48a80477fee3cd Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6846 Hi Michael and Tom, I make a new prec-fix-error-handler.txt according to the Tom's idea in http://sourceware.org/ml/gdb-patches/2009-11/msg00152.html It add a new argument "catch" to do_record_message. If catch is true, it will call "record_message" with catch errors. If not, it will call "record_message" directly. In "record_resume", it call do_record_message with "catch =3D 0". In "record_wait", it call do_record_message with "catch =3D 1". Please help me review it. Thanks, Hui 2009-11-10 Hui Zhu * record.c (do_record_message): Add new argument "catch". (record_resume_error): Deleted. (record_resume): Call do_record_message with catch is 1. (record_wait): Deleted record_resume_error. Set status when do_record_message need stop the inferior. --- 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 =3D regcache; args.signal =3D 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 =3D 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 =3D 0; - } - else - { - record_resume_error =3D 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 !=3D &record_core_ops) { - if (record_resume_error) - { - /* If record_resume get error, return directly. */ - status->kind =3D TARGET_WAITKIND_STOPPED; - status->value.sig =3D 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 =3D TARGET_WAITKIND_STOPPED; + status->value.sig =3D TARGET_SIGNAL_0; + break; + } record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1, > > OK. =A0I will try to talk clear about it. > > I make do_record_message because in before, call a error in > record_resume and record_wait will make inferior cannot keep running. > > Now, I found that call error in record_resume will not affect > anything. =A0So I change do_record_message to record_message in > record_resume. > > But in record_wait, call error still make inferior cannot keep > running, so I keep do_record_message. > > Thanks, > Hui > > > > > > > >> 2009-11-03 =A0Hui Zhu =A0 > >> > >> =A0 =A0 =A0 =A0* record.c (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 =A0Set status when do_record_message need stop the inferio= r. > >> > >> --- > >> =A0record.c | =A0 29 ++++++++++------------------- > >> =A01 file changed, 10 insertions(+), 19 deletions(-) > >> > >> --- a/record.c > >> +++ b/record.c > >> @@ -954,7 +954,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*/ > >> > >> @@ -966,15 +965,11 @@ 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 =A0struct record_message_args args; > >> + > >> + =A0 =A0 =A0args.regcache =3D get_current_regcache (); > >> + =A0 =A0 =A0args.signal =3D signal; > >> + =A0 =A0 =A0record_message (&args); > >> =A0 =A0 =A0 record_beneath_to_resume (record_beneath_to_resume_ops, pt= id, 1, > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 signal= ); > >> =A0 =A0 } > >> @@ -1038,14 +1033,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*/ > >> @@ -1091,7 +1078,11 @@ record_wait (struct target_ops *ops, > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Therefore we will not = return to gdb. > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Record the insn and re= sume. =A0*/ > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (!do_record_message (reg= cache, 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 =A0 { > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status->kind =3D= TARGET_WAITKIND_STOPPED; > >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status->value.si= g =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 > >> (record_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, > > > > --001636ed68e5ce48a80477fee3cd Content-Type: text/plain; charset=US-ASCII; name="prec-fix-error-handler.txt" Content-Disposition: attachment; filename="prec-fix-error-handler.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g1ublekv0 Content-length: 3225 LS0tCiByZWNvcmQuYyB8ICAgMzUgKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCsp LCAyMiBkZWxldGlvbnMoLSkKCi0tLSBhL3JlY29yZC5jCisrKyBiL3JlY29y ZC5jCkBAIC02NDcsMTMgKzY0NywxNyBAQCByZWNvcmRfbWVzc2FnZSAodm9p ZCAqYXJncykKIAogc3RhdGljIGludAogZG9fcmVjb3JkX21lc3NhZ2UgKHN0 cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCi0JCSAgIGVudW0gdGFyZ2V0X3Np Z25hbCBzaWduYWwpCisJCSAgIGVudW0gdGFyZ2V0X3NpZ25hbCBzaWduYWws IGludCBjYXRjaCkKIHsKICAgc3RydWN0IHJlY29yZF9tZXNzYWdlX2FyZ3Mg YXJnczsKIAogICBhcmdzLnJlZ2NhY2hlID0gcmVnY2FjaGU7CiAgIGFyZ3Mu c2lnbmFsID0gc2lnbmFsOwotICByZXR1cm4gY2F0Y2hfZXJyb3JzIChyZWNv cmRfbWVzc2FnZSwgJmFyZ3MsIE5VTEwsIFJFVFVSTl9NQVNLX0FMTCk7CisK KyAgaWYgKGNhdGNoKQorICAgIHJldHVybiBjYXRjaF9lcnJvcnMgKHJlY29y ZF9tZXNzYWdlLCAmYXJncywgTlVMTCwgUkVUVVJOX01BU0tfQUxMKTsKKwor ICByZXR1cm4gcmVjb3JkX21lc3NhZ2UgKCZhcmdzKTsKIH0KIAogLyogU2V0 IHRvIDEgaWYgcmVjb3JkX3N0b3JlX3JlZ2lzdGVycyBhbmQgcmVjb3JkX3hm ZXJfcGFydGlhbApAQCAtOTU0LDcgKzk1OCw2IEBAIHJlY29yZF9jbG9zZSAo aW50IHF1aXR0aW5nKQogfQogCiBzdGF0aWMgaW50IHJlY29yZF9yZXN1bWVf c3RlcCA9IDA7Ci1zdGF0aWMgaW50IHJlY29yZF9yZXN1bWVfZXJyb3I7CiAK IC8qICJ0b19yZXN1bWUiIHRhcmdldCBtZXRob2QuICBSZXN1bWUgdGhlIHBy b2Nlc3MgcmVjb3JkIHRhcmdldC4gICovCiAKQEAgLTk2NiwxNSArOTY5LDcg QEAgcmVjb3JkX3Jlc3VtZSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgcAog CiAgIGlmICghUkVDT1JEX0lTX1JFUExBWSkKICAgICB7Ci0gICAgICBpZiAo ZG9fcmVjb3JkX21lc3NhZ2UgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgpLCBz aWduYWwpKQotICAgICAgICB7Ci0gICAgICAgICAgcmVjb3JkX3Jlc3VtZV9l cnJvciA9IDA7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewot ICAgICAgICAgIHJlY29yZF9yZXN1bWVfZXJyb3IgPSAxOwotICAgICAgICAg IHJldHVybjsKLSAgICAgICAgfQorICAgICAgZG9fcmVjb3JkX21lc3NhZ2Ug KGdldF9jdXJyZW50X3JlZ2NhY2hlICgpLCBzaWduYWwsIDApOwogICAgICAg cmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lIChyZWNvcmRfYmVuZWF0aF90b19y ZXN1bWVfb3BzLCBwdGlkLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaWduYWwpOwogICAgIH0KQEAgLTEwMzgsMTQgKzEwMzMsNiBA QCByZWNvcmRfd2FpdCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywKIAogICBp ZiAoIVJFQ09SRF9JU19SRVBMQVkgJiYgb3BzICE9ICZyZWNvcmRfY29yZV9v cHMpCiAgICAgewotICAgICAgaWYgKHJlY29yZF9yZXN1bWVfZXJyb3IpCi0J ewotCSAgLyogSWYgcmVjb3JkX3Jlc3VtZSBnZXQgZXJyb3IsIHJldHVybiBk aXJlY3RseS4gICovCi0JICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJ TkRfU1RPUFBFRDsKLQkgIHN0YXR1cy0+dmFsdWUuc2lnID0gVEFSR0VUX1NJ R05BTF9BQlJUOwotCSAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7Ci0JfQotCiAg ICAgICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQogCXsKIAkgIC8qIFRoaXMg aXMgYSBzaW5nbGUgc3RlcC4gICovCkBAIC0xMDkwLDggKzEwNzcsMTIgQEAg cmVjb3JkX3dhaXQgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsCiAJCSAgICAg ICAgIHN0ZXBwaW5nLCB0aGVyZWZvcmUgZ2RiIHdpbGwgbm90IHN0b3AuCiAJ CQkgVGhlcmVmb3JlIHdlIHdpbGwgbm90IHJldHVybiB0byBnZGIuCiAJCSAg ICAgICAgIFJlY29yZCB0aGUgaW5zbiBhbmQgcmVzdW1lLiAgKi8KLQkJICAg ICAgaWYgKCFkb19yZWNvcmRfbWVzc2FnZSAocmVnY2FjaGUsIFRBUkdFVF9T SUdOQUxfMCkpCi0JCQlicmVhazsKKwkJICAgICAgaWYgKCFkb19yZWNvcmRf bWVzc2FnZSAocmVnY2FjaGUsIFRBUkdFVF9TSUdOQUxfMCwgMSkpCisgIAkJ CXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy0+a2luZCA9 IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVEOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhdHVzLT52YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFMXzA7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgCQkJfQog CiAJCSAgICAgIHJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZSAocmVjb3JkX2Jl bmVhdGhfdG9fcmVzdW1lX29wcywKIAkJCQkJCXB0aWQsIDEsCg== --001636ed68e5ce48a80477fee3cd--