From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10582 invoked by alias); 31 Aug 2004 21:41:45 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 10573 invoked from network); 31 Aug 2004 21:41:42 -0000 Received: from unknown (HELO e33.co.us.ibm.com) (32.97.110.131) by sourceware.org with SMTP; 31 Aug 2004 21:41:42 -0000 Received: from westrelay03.boulder.ibm.com (westrelay03.boulder.ibm.com [9.17.195.12]) by e33.co.us.ibm.com (8.12.10/8.12.9) with ESMTP id i7VLfgDD607580 for ; Tue, 31 Aug 2004 17:41:42 -0400 Received: from austin.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by westrelay03.boulder.ibm.com (8.12.10/NCO/VER6.6) with ESMTP id i7VLfP25303676 for ; Tue, 31 Aug 2004 15:41:41 -0600 Received: from lazy.austin.ibm.com (lazy.austin.ibm.com [9.53.94.97]) by austin.ibm.com (8.12.10/8.12.10) with ESMTP id i7VFHN4w136144 for ; Tue, 31 Aug 2004 10:17:23 -0500 Date: Tue, 31 Aug 2004 21:41:00 -0000 From: Manoj Iyer X-X-Sender: manjo@lazy To: gdb-patches@sources.redhat.com Subject: New thread testcase (ok to commit??) In-Reply-To: Message-ID: References: <412F7572.2070704@redhat.com> <412F8F66.1070503@redhat.com> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-18335364-1093963339=:4487" X-SW-Source: 2004-08/txt/msg00791.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --8323328-18335364-1093963339=:4487 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 9060 ok to commit?? > > Manoj Iyer wrote: > > > Michael, > > > > > > Incorporated your comments. > > > > Ok, thanks, this is good. > > Are you write-after-approval yet? > > > > > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > + Cognito ergo sum + > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > > > > On Fri, 27 Aug 2004, Michael Snyder wrote: > > > > > > > > >>Manoj Iyer wrote: > > >> > > >>>I have attached two modified versions of my new thread testcase. > > >>> > > >>>- version 1 > > >>>incorporates Michael Chastain's suggestions and it includes > > >>>the step and backtrace tests from the thread fucntion. > > >>> > > >>>-version 2 > > >>>incorporates Michael Snyder suggestion to remove the step and backtrace > > >>>tests from the testcase. > > >>> > > >>>Please let me know which one you like and any other comments or changes. > > >>>ChangeLog is pasted at the begning of the patch. > > >> > > >>Version 2 is OK as is, if you're tired of messing with it. > > >>You didn't have to remove the backtrace, though, if you'd > > >>like to keep that. > > >> > > >>Also, > > >> > > >> > > >>>+# > > >>>+# > > >>>+# continue to tf() breakpoint #2 > > >>>+# > > >>>+gdb_test_multiple "continue\n" "continue to thread fucntion breakpoint #2" { > > >>>+ -re ".*Breakpoint 2.*tf.* at .*tbug.* .*\r\n.*$gdb_prompt $" { > > >>>+ pass "continue to tf"; > > >>>+ } > > >>>+ -re ".*$gdb_prompt $" { > > >>>+ fail "continue to tf"; > > >>>+ return 1; > > >>>+ } > > >>>+} > > >> > > >>I think this could be simplified to: > > >> gdb_test "continue" \ > > >> "Breakpoint 2.*tf.* at .*tbug.*" \ > > >> "continue to tf" > > >> > > >>Similarly, your backtrace test could be as simple as: > > >> gdb_test "backtrace" \ > > >> "#0 .*tf .*at .*tbug.*" \ > > >> "backtrace from thread function" > > >> > > >>I don't think you can predict what will be on any > > >>higher frames, but you could test the current frame > > >>and make sure backtrace didn't just die or show you > > >>the wrong thread. > > >> > > >> > > >> > > >>>+ > > >>>+ > > >>>+# > > >>>+# delete all breakpoints > > >>>+# > > >>>+send_gdb "delete\n" > > >>>+gdb_expect { > > >>>+ -re "Delete all breakpoint.*$gdb_prompt $" { > > >>>+ send_gdb "y\n" > > >> > > >>For this, all you need is the existing procedure call: > > >> > > >> delete_breakpoints > > >> > > >> > > >> > > > > > >> > > > > > > > > > ------------------------------------------------------------------------ > > > > > > 2004-08-27 Manoj Iyer > > > > > > * gdb.threads/thread_check.exp: New testcase. > > > * gdb.threads/thread_check.c: New testcase. > > > > > > ------------------------------------------------------------------------------ > > > diff -paurN ./old/src/gdb/testsuite/gdb.threads/thread_check.c ./new/src/gdb/testsuite/gdb.threads/thread_check.c > > > --- ./old/src/gdb/testsuite/gdb.threads/thread_check.c 1969-12-31 18:00:00.000000000 -0600 > > > +++ ./new/src/gdb/testsuite/gdb.threads/thread_check.c 2004-08-27 05:32:18.434281896 -0500 > > > @@ -0,0 +1,75 @@ > > > +/* > > > +* Copyright (C) 2004 Free Software Foundation, Inc. > > > + > > > +* This program is free software; you can redistribute it and/or modify > > > +* it under the terms of the GNU General Public License as published by > > > +* the Free Software Foundation; either version 2 of the License, or > > > +* (at your option) any later version. > > > +* > > > +* This program is distributed in the hope that it will be useful, > > > +* but WITHOUT ANY WARRANTY; without even the implied warranty of > > > +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > > +* GNU General Public License for more details. > > > +* > > > +* You should have received a copy of the GNU General Public License > > > +* along with this program; if not, write to the Free Software > > > +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > > > + > > > +* This file was written by Steve Munroe. (sjmunroe@us.ibm.com) > > > +* Test break points and single step on thread functions. > > > +*/ > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +#define N 2 > > > + > > > +static void * > > > +tf (void *arg) > > > +{ > > > + int n = (int) (long int) arg; > > > + char number[160]; > > > + int unslept = 10; > > > + > > > + sprintf(number, "tf(%ld): begin", (long)arg); > > > + puts (number); > > > + > > > + while (unslept > 0) > > > + unslept = sleep(unslept); > > > + > > > + sprintf(number, "tf(%ld): end", (long)arg); > > > + puts (number); > > > + return NULL; > > > +} > > > + > > > +int main (int argc, char *argv[]) > > > +{ > > > + int n; > > > + int unslept = 2; > > > + pthread_t th[N]; > > > + > > > + for (n = 0; n < N; ++n) > > > + if (pthread_create (&th[n], NULL, tf, (void *) (long int) n) != 0) > > > + { > > > + while (unslept > 0) > > > + unslept = sleep(2); > > > + puts ("create failed"); > > > + exit (1); > > > + } > > > + > > > + puts("after create"); > > > + > > > + for (n = 0; n < N; ++n) > > > + if (pthread_join (th[n], NULL) != 0) > > > + { > > > + puts ("join failed"); > > > + exit (1); > > > + } > > > + > > > + puts("after join"); > > > + return 0; > > > +} > > > diff -paurN ./old/src/gdb/testsuite/gdb.threads/thread_check.exp ./new/src/gdb/testsuite/gdb.threads/thread_check.exp > > > --- ./old/src/gdb/testsuite/gdb.threads/thread_check.exp 1969-12-31 18:00:00.000000000 -0600 > > > +++ ./new/src/gdb/testsuite/gdb.threads/thread_check.exp 2004-08-27 08:10:23.086321744 -0500 > > > @@ -0,0 +1,96 @@ > > > +# Copyright (C) 2004 Free Software Foundation, Inc. > > > + > > > +# This program is free software; you can redistribute it and/or modify > > > +# it under the terms of the GNU General Public License as published by > > > +# the Free Software Foundation; either version 2 of the License, or > > > +# (at your option) any later version. > > > +# > > > +# This program is distributed in the hope that it will be useful, > > > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > > +# GNU General Public License for more details. > > > +# > > > +# You should have received a copy of the GNU General Public License > > > +# along with this program; if not, write to the Free Software > > > +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > > > + > > > +# Please email any bugs, comments, and/or additions to this file to: > > > +# bug-gdb@prep.ai.mit.edu > > > + > > > +# This file was written by Manoj Iyer. (manjo@austin.ibm.com) > > > +# Test break points and single step on thread functions. > > > +# > > > +# Test Purpose: > > > +# - Test that breakpoints, continue in a threaded application works. > > > +# On powerpc64-unknown-linux-gnu system, running kernel version > > > +# 2.6.5-7.71-pseries64 this test is known to fail due to kernel bug > > > +# in ptrace system call. > > > +# > > > +# Test Strategy: > > > +# - tbug.c creates 2 threads > > > +# - start gdb > > > +# - create 2 breakpoints #1 main() #2 tf() (the thread function) > > > +# - run gdb till #1 main() breakpoint is reached > > > +# - continue to breakpoint #2 tf() > > > +# - delete all breakpoints > > > +# - exit gdb. > > > + > > > +if $tracelevel then { > > > + strace $tracelevel > > > +} > > > + > > > +set prms_id 0 > > > +set bug_id 0 > > > + > > > +set testfile "thread_check" > > > +set srcfile ${testfile}.c > > > +set binfile ${objdir}/${subdir}/${testfile} > > > + > > > +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } { > > > + return -1 > > > +} > > > + > > > + > > > +gdb_start > > > +gdb_reinitialize_dir $srcdir/$subdir > > > +gdb_load ${binfile} > > > + > > > +if ![runto_main] then { > > > + fail "Can't run to main" > > > + return 1; > > > +} > > > + > > > + > > > +# > > > +# set breakpoint at thread fucntion tf > > > +# > > > +gdb_test "break tf" \ > > > + "Breakpoint.*at.* file .*$srcfile, line.*" \ > > > + "breakpoint at tf" > > > + > > > + > > > +# > > > +# > > > +# continue to tf() breakpoint #2 > > > +# > > > +gdb_test "continue" \ > > > + ".*Breakpoint 2.*tf.* at .*tbug.* .*\r\n.*$gdb_prompt $" \ > > > + "continue to tf" > > > + > > > +# > > > +# backtrace from thread function. > > > +# > > > +gdb_test "backtrace" \ > > > + "#0 .*tf .*at .*tbug.*" \ > > > + "backtrace from thread function" > > > + > > > + > > > +# > > > +# delete all breakpoints > > > +# > > > +delete_breakpoints > > > + > > > +# > > > +# exit gdb > > > +# > > > +gdb_exit > > > > > > > --8323328-18335364-1093963339=:4487 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="gdb.newtest.version3.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: PATCH: new testcase Content-Disposition: attachment; filename="gdb.newtest.version3.patch" Content-length: 7150 ZGlmZiAtcGF1ck4gLi9vbGQvc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVh ZHMvdGhyZWFkX2NoZWNrLmMgLi9uZXcvc3JjL2dkYi90ZXN0c3VpdGUvZ2Ri LnRocmVhZHMvdGhyZWFkX2NoZWNrLmMNCi0tLSAuL29sZC9zcmMvZ2RiL3Rl c3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRfY2hlY2suYwkxOTY5LTEyLTMx IDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMA0KKysrIC4vbmV3L3NyYy9nZGIv dGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZF9jaGVjay5jCTIwMDQtMDgt MjcgMDU6MzI6MTguNDM0MjgxODk2IC0wNTAwDQpAQCAtMCwwICsxLDc1IEBA DQorLyoNCisqIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4NCisNCisqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 DQorKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3INCisqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uDQorKg0KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZg0KKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisqDQorKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQ0KKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisqIEZvdW5k YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuDQorDQorKiBUaGlzIGZpbGUgd2Fz IHdyaXR0ZW4gYnkgU3RldmUgTXVucm9lLiAoc2ptdW5yb2VAdXMuaWJtLmNv bSkNCisqIFRlc3QgYnJlYWsgcG9pbnRzIGFuZCBzaW5nbGUgc3RlcCBvbiB0 aHJlYWQgZnVuY3Rpb25zLg0KKyovDQorDQorI2luY2x1ZGUgPHN0cmluZy5o Pg0KKyNpbmNsdWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8cHRocmVhZC5o Pg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4N CisjaW5jbHVkZSA8ZXJybm8uaD4NCisNCisjZGVmaW5lIE4gICAgICAgMg0K Kw0KK3N0YXRpYyB2b2lkICoNCit0ZiAodm9pZCAqYXJnKQ0KK3sNCisgICAg aW50IG4gPSAoaW50KSAobG9uZyBpbnQpIGFyZzsNCisgICAgY2hhciBudW1i ZXJbMTYwXTsNCisgICAgaW50IHVuc2xlcHQgPSAxMDsNCisNCisgICAgc3By aW50ZihudW1iZXIsICJ0ZiglbGQpOiBiZWdpbiIsIChsb25nKWFyZyk7DQor ICAgIHB1dHMgKG51bWJlcik7DQorDQorICAgIHdoaWxlICh1bnNsZXB0ID4g MCkNCisgICAgICAgIHVuc2xlcHQgPSBzbGVlcCh1bnNsZXB0KTsNCisNCisg ICAgc3ByaW50ZihudW1iZXIsICJ0ZiglbGQpOiBlbmQiLCAobG9uZylhcmcp Ow0KKyAgICBwdXRzIChudW1iZXIpOw0KKyAgICByZXR1cm4gTlVMTDsNCit9 DQorDQoraW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pDQorew0K KyAgICBpbnQgbjsNCisgICAgaW50IHVuc2xlcHQgPSAyOw0KKyAgICBwdGhy ZWFkX3QgdGhbTl07DQorDQorICAgIGZvciAobiA9IDA7IG4gPCBOOyArK24p DQorICAgIGlmIChwdGhyZWFkX2NyZWF0ZSAoJnRoW25dLCBOVUxMLCB0Ziwg KHZvaWQgKikgKGxvbmcgaW50KSBuKSAhPSAwKQ0KKyAgICB7DQorICAgICAg ICB3aGlsZSAodW5zbGVwdCA+IDApDQorICAgICAgICAgICB1bnNsZXB0ID0g c2xlZXAoMik7DQorICAgICAgICBwdXRzICgiY3JlYXRlIGZhaWxlZCIpOw0K KyAgICAgICAgZXhpdCAoMSk7DQorICAgIH0NCisNCisgICAgcHV0cygiYWZ0 ZXIgY3JlYXRlIik7DQorDQorICAgIGZvciAobiA9IDA7IG4gPCBOOyArK24p DQorICAgIGlmIChwdGhyZWFkX2pvaW4gKHRoW25dLCBOVUxMKSAhPSAwKQ0K KyAgICB7DQorICAgICAgICBwdXRzICgiam9pbiBmYWlsZWQiKTsNCisgICAg ICAgIGV4aXQgKDEpOw0KKyAgICB9DQorDQorICAgIHB1dHMoImFmdGVyIGpv aW4iKTsNCisgICAgcmV0dXJuIDA7DQorfQ0KZGlmZiAtcGF1ck4gLi9vbGQv c3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkX2NoZWNrLmV4 cCAuL25ldy9zcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRf Y2hlY2suZXhwDQotLS0gLi9vbGQvc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnRo cmVhZHMvdGhyZWFkX2NoZWNrLmV4cAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAw MDAwMDAwMCAtMDYwMA0KKysrIC4vbmV3L3NyYy9nZGIvdGVzdHN1aXRlL2dk Yi50aHJlYWRzL3RocmVhZF9jaGVjay5leHAJMjAwNC0wOC0yNyAwODoxMDoy My4wODYzMjE3NDQgLTA1MDANCkBAIC0wLDAgKzEsOTYgQEANCisjIENvcHly aWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4N CisNCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQ0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisjIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorIw0KKyMgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsDQorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQ0KKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4NCisjDQorIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQ0KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUNCisjIEZvdW5kYXRpb24sIEluYy4sIDU5 IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0x MzA3LCBVU0EuDQorDQorIyBQbGVhc2UgZW1haWwgYW55IGJ1Z3MsIGNvbW1l bnRzLCBhbmQvb3IgYWRkaXRpb25zIHRvIHRoaXMgZmlsZSB0bzoNCisjIGJ1 Zy1nZGJAcHJlcC5haS5taXQuZWR1DQorDQorIyBUaGlzIGZpbGUgd2FzIHdy aXR0ZW4gYnkgTWFub2ogSXllci4gKG1hbmpvQGF1c3Rpbi5pYm0uY29tKQ0K KyMgVGVzdCBicmVhayBwb2ludHMgYW5kIHNpbmdsZSBzdGVwIG9uIHRocmVh ZCBmdW5jdGlvbnMuDQorIyANCisjIFRlc3QgUHVycG9zZToNCisjIC0gVGVz dCB0aGF0IGJyZWFrcG9pbnRzLCBjb250aW51ZSBpbiBhIHRocmVhZGVkICBh cHBsaWNhdGlvbiB3b3Jrcy4gDQorIyAgIE9uIHBvd2VycGM2NC11bmtub3du LWxpbnV4LWdudSBzeXN0ZW0sIHJ1bm5pbmcga2VybmVsIHZlcnNpb24NCisj ICAgMi42LjUtNy43MS1wc2VyaWVzNjQgdGhpcyB0ZXN0IGlzIGtub3duIHRv IGZhaWwgZHVlIHRvIGtlcm5lbCBidWcNCisjICAgaW4gcHRyYWNlIHN5c3Rl bSBjYWxsLg0KKyMNCisjIFRlc3QgU3RyYXRlZ3k6DQorIyAtIHRidWcuYyBj cmVhdGVzIDIgdGhyZWFkcw0KKyMgLSBzdGFydCBnZGIgDQorIyAtIGNyZWF0 ZSAyIGJyZWFrcG9pbnRzICMxIG1haW4oKSAjMiB0ZigpICh0aGUgdGhyZWFk IGZ1bmN0aW9uKQ0KKyMgLSBydW4gZ2RiIHRpbGwgIzEgbWFpbigpIGJyZWFr cG9pbnQgaXMgcmVhY2hlZA0KKyMgLSBjb250aW51ZSB0byBicmVha3BvaW50 ICMyIHRmKCkNCisjIC0gZGVsZXRlIGFsbCBicmVha3BvaW50cyANCisjIC0g ZXhpdCBnZGIuDQorDQoraWYgJHRyYWNlbGV2ZWwgdGhlbiB7DQorICAgICAg ICBzdHJhY2UgJHRyYWNlbGV2ZWwNCit9DQorDQorc2V0IHBybXNfaWQgMA0K K3NldCBidWdfaWQgMA0KKw0KK3NldCB0ZXN0ZmlsZSAidGhyZWFkX2NoZWNr Ig0KK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmMNCitzZXQgYmluZmlsZSAk e29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9DQorDQoraWYge1tnZGJf Y29tcGlsZV9wdGhyZWFkcyAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2Zp bGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSBbbGlzdCBkZWJ1ZyAiaW5j ZGlyPSR7b2JqZGlyfSJdXSAhPSAiIiB9IHsNCisgICAgcmV0dXJuIC0xDQor fQ0KKw0KKw0KK2dkYl9zdGFydA0KK2dkYl9yZWluaXRpYWxpemVfZGlyICRz cmNkaXIvJHN1YmRpcg0KK2dkYl9sb2FkICR7YmluZmlsZX0NCisNCitpZiAh W3J1bnRvX21haW5dIHRoZW4gew0KKyAgIGZhaWwgIkNhbid0IHJ1biB0byBt YWluIg0KKyAgICAgIHJldHVybiAxOw0KK30NCisNCisNCisjDQorIyBzZXQg YnJlYWtwb2ludCBhdCB0aHJlYWQgZnVjbnRpb24gdGYNCisjDQorZ2RiX3Rl c3QgImJyZWFrIHRmIiBcDQorICAgICJCcmVha3BvaW50LiphdC4qIGZpbGUg Liokc3JjZmlsZSwgbGluZS4qIiBcDQorICAgICJicmVha3BvaW50IGF0IHRm Ig0KKw0KKw0KKyMNCisjDQorIyBjb250aW51ZSB0byB0ZigpIGJyZWFrcG9p bnQgIzINCisjDQorZ2RiX3Rlc3QgImNvbnRpbnVlIiBcDQorICAgICIuKkJy ZWFrcG9pbnQgMi4qdGYuKiBhdCAuKnRidWcuKiAuKlxyXG4uKiRnZGJfcHJv bXB0ICQiIFwNCisgICAgICJjb250aW51ZSB0byB0ZiINCisNCisjICAgDQor IyBiYWNrdHJhY2UgZnJvbSB0aHJlYWQgZnVuY3Rpb24uDQorIw0KK2dkYl90 ZXN0ICJiYWNrdHJhY2UiIFwNCisgICAgIiMwIC4qdGYgLiphdCAuKnRidWcu KiIgXA0KKyAgICAiYmFja3RyYWNlIGZyb20gdGhyZWFkIGZ1bmN0aW9uIg0K Kw0KKw0KKyMNCisjIGRlbGV0ZSBhbGwgYnJlYWtwb2ludHMNCisjDQorZGVs ZXRlX2JyZWFrcG9pbnRzDQorDQorIw0KKyMgZXhpdCBnZGINCisjDQorZ2Ri X2V4aXQNCg== --8323328-18335364-1093963339=:4487--