From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19761 invoked by alias); 7 Jun 2011 20:20:33 -0000 Received: (qmail 19741 invoked by uid 22791); 7 Jun 2011 20:20:26 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_FN,TW_TM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 07 Jun 2011 20:20:11 +0000 Received: from hpaq7.eem.corp.google.com (hpaq7.eem.corp.google.com [172.25.149.7]) by smtp-out.google.com with ESMTP id p57KK9tP020028 for ; Tue, 7 Jun 2011 13:20:10 -0700 Received: from gyd10 (gyd10.prod.google.com [10.243.49.202]) by hpaq7.eem.corp.google.com with ESMTP id p57KGK4c020489 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Tue, 7 Jun 2011 13:20:08 -0700 Received: by gyd10 with SMTP id 10so2895610gyd.33 for ; Tue, 07 Jun 2011 13:20:08 -0700 (PDT) MIME-Version: 1.0 Received: by 10.151.79.14 with SMTP id g14mr6016372ybl.187.1307478008202; Tue, 07 Jun 2011 13:20:08 -0700 (PDT) Received: by 10.151.26.21 with HTTP; Tue, 7 Jun 2011 13:20:08 -0700 (PDT) In-Reply-To: References: Date: Tue, 07 Jun 2011 20:39:00 -0000 Message-ID: Subject: Re: -fdump-passes -fenable-xxx=func_name_list From: Xinliang David Li To: Richard Guenther Cc: GCC Patches Content-Type: multipart/mixed; boundary=00151750da2c3b073904a524f2d7 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-06/txt/msg00575.txt.bz2 --00151750da2c3b073904a524f2d7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 7191 The dump-pass patch with test case. David On Tue, Jun 7, 2011 at 11:54 AM, Xinliang David Li wro= te: > Please review the attached two patches. > > In the first patch, gate functions are cleaned up. All the per > function legality checks are moved into the executor and the > optimization heuristic checks (optimize for size) remain in the > gators. These allow the the following overriding order: > > =A0 =A0common flags (O2, -ftree-vrp, -fgcse etc) =A0 <--- =A0compiler > heuristic (optimize for size/speed) <--- -fdisable/enable forcing pass > options =A0<--- legality check > > Testing under going. Ok for trunk? > > Thanks, > > David > > On Tue, Jun 7, 2011 at 9:24 AM, Xinliang David Li wr= ote: >> Ok -- that sounds good. >> >> David >> >> On Tue, Jun 7, 2011 at 3:10 AM, Richard Guenther >> wrote: >>> On Mon, Jun 6, 2011 at 6:00 PM, Xinliang David Li = wrote: >>>> On Mon, Jun 6, 2011 at 4:38 AM, Richard Guenther >>>> wrote: >>>>> On Thu, Jun 2, 2011 at 9:12 AM, Xinliang David Li wrote: >>>>>> This is the version of the patch that walks through pass lists. >>>>>> >>>>>> Ok with this one? >>>>> >>>>> +/* Dump all optimization passes. =A0*/ >>>>> + >>>>> +void >>>>> +dump_passes (void) >>>>> +{ >>>>> + =A0struct cgraph_node *n, *node =3D NULL; >>>>> + =A0tree save_fndecl =3D current_function_decl; >>>>> + >>>>> + =A0fprintf (stderr, "MAX_UID =3D %d\n", cgraph_max_uid); >>>>> >>>>> this isn't accurate info - cloning can cause more cgraph nodes to >>>>> appear (it also looks completely unrelated to dump_passes ...). >>>>> Please drop it. >>>> >>>> Ok. >>>> >>>> >>>>> >>>>> + =A0create_pass_tab(); >>>>> + =A0gcc_assert (pass_tab); >>>>> >>>>> you have quite many asserts of this kind - we don't want them when >>>>> the previous stmt as in this case indicates everything is ok. >>>> >>>> ok. >>>> >>>>> >>>>> + =A0push_cfun (DECL_STRUCT_FUNCTION (node->decl)); >>>>> >>>>> this has side-effects, I'm not sure we want this here. =A0Why do you >>>>> need it? =A0Probably because of >>>>> >>>>> + =A0is_really_on =3D override_gate_status (pass, current_function_de= cl, is_on); >>>>> >>>>> ? =A0But that is dependent on the function given which should have no >>>>> effect (unless it is overridden globally in which case override_gate_= status >>>>> and friends should deal with a NULL cfun). >>>> >>>> As we discussed, currently some pass gate functions depend on per node >>>> information -- those checks need to be pushed into execute functions. >>>> I would like to clean those up later -- at which time, the push/pop >>>> can be removed. >>> >>> I'd like to do it the other way around, first clean up the gate functio= ns then >>> drop in this patch without the cfun push/pop. =A0The revised patch look= s ok >>> to me with the cfun push/pop removed. >>> >>> Thanks, >>> Richard. >>> >>>>> >>>>> I don't understand why you need another table mapping pass to name >>>>> when pass->name is available and the info is trivially re-constructib= le. >>>> >>>> This is needed as the pass->name is not the canonicalized name (i.e., >>>> not with number suffix etc), so the extra mapping from id to >>>> normalized name is needed. >>>> >>>> Thanks, >>>> >>>> David >>>> >>>>> >>>>> Thanks, >>>>> Richard. >>>>> >>>>>> David >>>>>> >>>>>> On Wed, Jun 1, 2011 at 12:45 PM, Xinliang David Li wrote: >>>>>>> On Wed, Jun 1, 2011 at 12:29 PM, Richard Guenther >>>>>>> wrote: >>>>>>>> On Wed, Jun 1, 2011 at 6:16 PM, Xinliang David Li wrote: >>>>>>>>> On Wed, Jun 1, 2011 at 1:51 AM, Richard Guenther >>>>>>>>> wrote: >>>>>>>>>> On Wed, Jun 1, 2011 at 1:34 AM, Xinliang David Li wrote: >>>>>>>>>>> The following patch implements the a new option that dumps gcc = PASS >>>>>>>>>>> configuration. The sample output is attached. =A0There is one >>>>>>>>>>> limitation: some placeholder passes that are named with '*xxx' = are >>>>>>>>>>> note registered thus they are not listed. They are not importan= t as >>>>>>>>>>> they can not be turned on/off anyway. >>>>>>>>>>> >>>>>>>>>>> The patch also enhanced -fenable-xxx and -fdisable-xx to allow = a list >>>>>>>>>>> of function assembler names to be specified. >>>>>>>>>>> >>>>>>>>>>> Ok for trunk? >>>>>>>>>> >>>>>>>>>> Please split the patch. >>>>>>>>>> >>>>>>>>>> I'm not too happy how you dump the pass configuration. =A0Why no= t simply, >>>>>>>>>> at a _single_ place, walk the pass tree? =A0Instead of doing pie= ces of it >>>>>>>>>> at pass execution time when it's not already dumped - that reall= y looks >>>>>>>>>> gross. >>>>>>>>> >>>>>>>>> Yes, that was the original plan -- but it has problems >>>>>>>>> 1) the dumper needs to know the root pass lists -- which can chan= ge >>>>>>>>> frequently -- it can be a long term maintanance burden; >>>>>>>>> 2) the centralized dumper needs to be done after option processing >>>>>>>>> 3) not sure if gate functions have any side effects or have depen= dencies on cfun >>>>>>>>> >>>>>>>>> The proposed solutions IMHO is not that intrusive -- just three h= ooks >>>>>>>>> to do the dumping and tracking indentation. >>>>>>>> >>>>>>>> Well, if you have a CU that is empty or optimized to nothing at so= me point >>>>>>>> you will not get a complete pass list. =A0I suppose optimize attri= butes might >>>>>>>> also confuse output. =A0Your solution might not be that intrusive >>>>>>>> but it is still ugly. =A0I don't see 1) as an issue, for 2) you ca= n just call the >>>>>>>> dumping from toplev_main before calling do_compile (), 3) gate fun= ctions >>>>>>>> shouldn't have side-effects, but as they could gate on optimize_fo= r_speed () >>>>>>>> your option summary output will be bogus anyway. >>>>>>>> >>>>>>>> So - what is the output intended for if it isn't reliable? >>>>>>> >>>>>>> This needs to be cleaned up at some point -- the gate function shou= ld >>>>>>> behave the same for all functions and per-function decisions need to >>>>>>> be pushed down to the executor body. =A0I will try to rework the pa= tch >>>>>>> as you suggested to see if there are problems. >>>>>>> >>>>>>> David >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> Richard. >>>>>>>> >>>>>>>>>> >>>>>>>>>> The documentation should also link this option to the -fenable/d= isable >>>>>>>>>> options as obviously the pass names in that dump are those to be >>>>>>>>>> used for those flags (and not readily available anywhere else). >>>>>>>>> >>>>>>>>> Ok. >>>>>>>>> >>>>>>>>>> >>>>>>>>>> I also think that it would be way more useful to note in the ind= ividual >>>>>>>>>> dump files the functions (at the place they would usually appear= ) that >>>>>>>>>> have the pass explicitly enabled/disabled. >>>>>>>>> >>>>>>>>> Ok -- for ipa passes or tree/rtl passes where all functions are >>>>>>>>> explicitly disabled. >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> David >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Richard. >>>>>>>>>> >>>>>>>>>>> Thanks, >>>>>>>>>>> >>>>>>>>>>> David >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --00151750da2c3b073904a524f2d7 Content-Type: text/x-pascal; charset=US-ASCII; name="dump-pass6.p" Content-Disposition: attachment; filename="dump-pass6.p" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gonan19l2 Content-length: 9634 SW5kZXg6IGRvYy9pbnZva2UudGV4aQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBkb2MvaW52b2tlLnRleGkJKHJldmlzaW9uIDE3NDc1OSkKKysrIGRv Yy9pbnZva2UudGV4aQkod29ya2luZyBjb3B5KQpAQCAtMjkxLDYgKzI5MSw3 IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4K IC1mZHVtcC10cmFuc2xhdGlvbi11bml0QHJ7W30tQHZhcntufUBye119IEBn b2wKIC1mZHVtcC1jbGFzcy1oaWVyYXJjaHlAcntbfS1AdmFye259QHJ7XX0g QGdvbAogLWZkdW1wLWlwYS1hbGwgLWZkdW1wLWlwYS1jZ3JhcGggLWZkdW1w LWlwYS1pbmxpbmUgQGdvbAorLWZkdW1wLXBhc3NlcyBAZ29sCiAtZmR1bXAt c3RhdGlzdGljcyBAZ29sCiAtZmR1bXAtdHJlZS1hbGwgQGdvbAogLWZkdW1w LXRyZWUtb3JpZ2luYWxAcntbfS1AdmFye259QHJ7XX0gIEBnb2wKQEAgLTUw NjksNyArNTA3MCw4IEBAIHNlcGVyYXRlZCBsaXN0IG9mIGZ1bmN0aW9uIHJh bmdlcy4gIEVhY2gKIFRoZSByYW5nZSBpcyBpbmNsdXNpdmUgaW4gYm90aCBl bmRzLiAgSWYgdGhlIHJhbmdlIGlzIHRyaXZpYWwsIHRoZSBudW1iZXIgcGFp ciBjYW4gYmUKIHNpbXBsaWZpZWQgYSBhIHNpbmdsZSBudW1iZXIuICBJZiB0 aGUgZnVuY3Rpb24ncyBjZ3JhcGggbm9kZSdzIEB2YXJ7dWlkfSBpcyBmYWxs aW5nCiB3aXRoaW4gb25lIG9mIHRoZSBzcGVjaWZpZWQgcmFuZ2VzLCB0aGUg QHZhcntwYXNzfSBpcyBkaXNhYmxlZCBmb3IgdGhhdCBmdW5jdGlvbi4KLVRo ZSBAdmFye3VpZH0gaXMgc2hvd24gaW4gdGhlIGZ1bmN0aW9uIGhlYWRlciBv ZiBhIGR1bXAgZmlsZS4KK1RoZSBAdmFye3VpZH0gaXMgc2hvd24gaW4gdGhl IGZ1bmN0aW9uIGhlYWRlciBvZiBhIGR1bXAgZmlsZSwgYW5kIHBhc3MgbmFt ZXMgY2FuIGJlCitkdW1wZWQgYnkgdXNpbmcgb3B0aW9uIEBvcHRpb257LWZk dW1wLXBhc3Nlc30uCiAKIEBpdGVtIC1mZGlzYWJsZS10cmVlLUB2YXJ7cGFz c30KIEBpdGVtIC1mZGlzYWJsZS10cmVlLUB2YXJ7cGFzc309QHZhcntyYW5n ZS1saXN0fQpAQCAtNTQ5Miw2ICs1NDk0LDExIEBAIER1bXAgYWZ0ZXIgZnVu Y3Rpb24gaW5saW5pbmcuCiAKIEBlbmQgdGFibGUKIAorQGl0ZW0gLWZkdW1w LXBhc3NlcworQG9waW5kZXggZmR1bXAtcGFzc2VzCitEdW1wIHRoZSBsaXN0 IG9mIG9wdGltaXphdGlvbiBwYXNzZXMgdGhhdCBhcmUgdHVybmVkIG9uIGFu ZCBvZmYgYnkKK3RoZSBjdXJyZW50IGNvbW1hbmQgbGluZSBvcHRpb25zLgor CiBAaXRlbSAtZmR1bXAtc3RhdGlzdGljcy1AdmFye29wdGlvbn0KIEBvcGlu ZGV4IGZkdW1wLXN0YXRpc3RpY3MKIEVuYWJsZSBhbmQgY29udHJvbCBkdW1w aW5nIG9mIHBhc3Mgc3RhdGlzdGljcyBpbiBhIHNlcGFyYXRlIGZpbGUuICBU aGUKSW5kZXg6IHRyZWUtcGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIHRyZWUtcGFzcy5oCShyZXZpc2lvbiAxNzQ3NTkpCisrKyB0cmVlLXBh c3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjM5LDUgKzYzOSw2IEBAIGV4dGVy biB2b2lkIGRvX3Blcl9mdW5jdGlvbl90b3BvcmRlciAodm8KIAogZXh0ZXJu IHZvaWQgZGlzYWJsZV9wYXNzIChjb25zdCBjaGFyICopOwogZXh0ZXJuIHZv aWQgZW5hYmxlX3Bhc3MgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBk dW1wX3Bhc3NlcyAodm9pZCk7CiAKICNlbmRpZiAvKiBHQ0NfVFJFRV9QQVNT X0ggKi8KSW5kZXg6IGNncmFwaHVuaXQuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBjZ3JhcGh1bml0LmMJKHJldmlzaW9uIDE3NDc1OSkKKysrIGNn cmFwaHVuaXQuYwkod29ya2luZyBjb3B5KQpAQCAtMTExNyw2ICsxMTE3LDkg QEAgY2dyYXBoX2ZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQgKHZvaWQpCiAg ICAgICBmZmx1c2ggKHN0ZGVycik7CiAgICAgfQogCisgIGlmIChmbGFnX2R1 bXBfcGFzc2VzKQorICAgIGR1bXBfcGFzc2VzICgpOworCiAgIC8qIEdpbXBs aWZ5IGFuZCBsb3dlciBhbGwgZnVuY3Rpb25zLCBjb21wdXRlIHJlYWNoYWJp bGl0eSBhbmQKICAgICAgcmVtb3ZlIHVucmVhY2hhYmxlIG5vZGVzLiAgKi8K ICAgY2dyYXBoX2FuYWx5emVfZnVuY3Rpb25zICgpOwpJbmRleDogY29tbW9u Lm9wdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb21tb24ub3B0CShy ZXZpc2lvbiAxNzQ3NTkpCisrKyBjb21tb24ub3B0CSh3b3JraW5nIGNvcHkp CkBAIC0xMDEyLDYgKzEwMTIsMTAgQEAgZmR1bXAtbm9hZGRyCiBDb21tb24g UmVwb3J0IFZhcihmbGFnX2R1bXBfbm9hZGRyKQogU3VwcHJlc3Mgb3V0cHV0 IG9mIGFkZHJlc3NlcyBpbiBkZWJ1Z2dpbmcgZHVtcHMKIAorZmR1bXAtcGFz c2VzCitDb21tb24gVmFyKGZsYWdfZHVtcF9wYXNzZXMpIEluaXQoMCkKK0R1 bXAgb3B0aW1pemF0aW9uIHBhc3NlcworCiBmZHVtcC11bm51bWJlcmVkCiBD b21tb24gUmVwb3J0IFZhcihmbGFnX2R1bXBfdW5udW1iZXJlZCkKIFN1cHBy ZXNzIG91dHB1dCBvZiBpbnN0cnVjdGlvbiBudW1iZXJzLCBsaW5lIG51bWJl ciBub3RlcyBhbmQgYWRkcmVzc2VzIGluIGRlYnVnZ2luZyBkdW1wcwpJbmRl eDogcGFzc2VzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFzc2Vz LmMJKHJldmlzaW9uIDE3NDc1OSkKKysrIHBhc3Nlcy5jCSh3b3JraW5nIGNv cHkpCkBAIC00NzgsNyArNDc4LDcgQEAgcGFzc3JfZXEgKGNvbnN0IHZvaWQg KnAxLCBjb25zdCB2b2lkICpwMgogICByZXR1cm4gIXN0cmNtcCAoczEtPnVu aXF1ZV9uYW1lLCBzMi0+dW5pcXVlX25hbWUpOwogfQogCi1zdGF0aWMgaHRh Yl90IHBhc3NfbmFtZV90YWIgPSBOVUxMOworc3RhdGljIGh0YWJfdCBuYW1l X3RvX3Bhc3NfbWFwID0gTlVMTDsKIAogLyogUmVnaXN0ZXIgUEFTUyB3aXRo IE5BTUUuICAqLwogCkBAIC00ODgsMTEgKzQ4OCwxMSBAQCByZWdpc3Rlcl9w YXNzX25hbWUgKHN0cnVjdCBvcHRfcGFzcyAqcGFzCiAgIHN0cnVjdCBwYXNz X3JlZ2lzdHJ5ICoqc2xvdDsKICAgc3RydWN0IHBhc3NfcmVnaXN0cnkgcHI7 CiAKLSAgaWYgKCFwYXNzX25hbWVfdGFiKQotICAgIHBhc3NfbmFtZV90YWIg PSBodGFiX2NyZWF0ZSAoMjU2LCBwYXNzcl9oYXNoLCBwYXNzcl9lcSwgTlVM TCk7CisgIGlmICghbmFtZV90b19wYXNzX21hcCkKKyAgICBuYW1lX3RvX3Bh c3NfbWFwID0gaHRhYl9jcmVhdGUgKDI1NiwgcGFzc3JfaGFzaCwgcGFzc3Jf ZXEsIE5VTEwpOwogCiAgIHByLnVuaXF1ZV9uYW1lID0gbmFtZTsKLSAgc2xv dCA9IChzdHJ1Y3QgcGFzc19yZWdpc3RyeSAqKikgaHRhYl9maW5kX3Nsb3Qg KHBhc3NfbmFtZV90YWIsICZwciwgSU5TRVJUKTsKKyAgc2xvdCA9IChzdHJ1 Y3QgcGFzc19yZWdpc3RyeSAqKikgaHRhYl9maW5kX3Nsb3QgKG5hbWVfdG9f cGFzc19tYXAsICZwciwgSU5TRVJUKTsKICAgaWYgKCEqc2xvdCkKICAgICB7 CiAgICAgICBzdHJ1Y3QgcGFzc19yZWdpc3RyeSAqbmV3X3ByOwpAQCAtNTA2 LDYgKzUwNiwxMDEgQEAgcmVnaXN0ZXJfcGFzc19uYW1lIChzdHJ1Y3Qgb3B0 X3Bhc3MgKnBhcwogICAgIHJldHVybjsgLyogSWdub3JlIHBsdWdpbiBwYXNz ZXMuICAqLwogfQogCisvKiBNYXAgZnJvbSBwYXNzIGlkIHRvIGNhbm9uaWNh bGl6ZWQgcGFzcyBuYW1lLiAgKi8KKwordHlwZWRlZiBjb25zdCBjaGFyICpj aGFyX3B0cjsKK0RFRl9WRUNfUChjaGFyX3B0cik7CitERUZfVkVDX0FMTE9D X1AoY2hhcl9wdHIsIGhlYXApOworc3RhdGljIFZFQyhjaGFyX3B0ciwgaGVh cCkgKnBhc3NfdGFiID0gTlVMTDsKKworLyogQ2FsbGJhY2sgZnVuY3Rpb24g Zm9yIHRyYXZlcnNpbmcgTkFNRV9UT19QQVNTX01BUC4gICovCisKK3N0YXRp YyBpbnQKK3Bhc3NfdHJhdmVyc2UgKHZvaWQgKipzbG90LCB2b2lkICpkYXRh IEFUVFJJQlVURV9VTlVTRUQpCit7CisgIHN0cnVjdCBwYXNzX3JlZ2lzdHJ5 ICoqcCA9IChzdHJ1Y3QgcGFzc19yZWdpc3RyeSAqKilzbG90OworICBzdHJ1 Y3Qgb3B0X3Bhc3MgKnBhc3MgPSAoKnApLT5wYXNzOworCisgIGdjY19hc3Nl cnQgKHBhc3MtPnN0YXRpY19wYXNzX251bWJlciA+IDApOworICBnY2NfYXNz ZXJ0IChwYXNzX3RhYik7CisKKyAgVkVDX3JlcGxhY2UgKGNoYXJfcHRyLCBw YXNzX3RhYiwgcGFzcy0+c3RhdGljX3Bhc3NfbnVtYmVyLAorICAgICAgICAg ICAgICAgKCpwKS0+dW5pcXVlX25hbWUpOworCisgIHJldHVybiAxOworfQor CisvKiBUaGUgZnVuY3Rpb24gdHJhdmVyc2VzIE5BTUVfVE9fUEFTU19NQVAg YW5kIGNyZWF0ZXMgYSBwYXNzIGluZm8KKyAgIHRhYmxlIGZvciBkdW1waW5n IHB1cnBvc2UuICAqLworCitzdGF0aWMgdm9pZAorY3JlYXRlX3Bhc3NfdGFi ICh2b2lkKQoreworICBpZiAoIWZsYWdfZHVtcF9wYXNzZXMpCisgICAgcmV0 dXJuOworCisgIFZFQ19zYWZlX2dyb3dfY2xlYXJlZCAoY2hhcl9wdHIsIGhl YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc190YWIsIHBhc3Nl c19ieV9pZF9zaXplICsgMSk7CisgIGh0YWJfdHJhdmVyc2UgKG5hbWVfdG9f cGFzc19tYXAsIHBhc3NfdHJhdmVyc2UsIE5VTEwpOworfQorCitzdGF0aWMg Ym9vbCBvdmVycmlkZV9nYXRlX3N0YXR1cyAoc3RydWN0IG9wdF9wYXNzICos IHRyZWUsIGJvb2wpOworCisvKiBEdW1wIHRoZSBpbnN0YW50aWF0ZWQgbmFt ZSBmb3IgUEFTUy4gSVNfT04gaW5kaWNhdGVzIGlmIFBBU1MKKyAgIGlzIHR1 cm5lZCBvbiBvciBub3QuICAqLworCitzdGF0aWMgdm9pZAorZHVtcF9vbmVf cGFzcyAoc3RydWN0IG9wdF9wYXNzICpwYXNzLCBpbnQgcGFzc19pbmRlbnQp Cit7CisgIGludCBpbmRlbnQgPSAzICogcGFzc19pbmRlbnQ7CisgIGNvbnN0 IGNoYXIgKnBuOworICBib29sIGlzX29uLCBpc19yZWFsbHlfb247CisKKyAg aXNfb24gPSAocGFzcy0+Z2F0ZSA9PSBOVUxMKSA/IHRydWUgOiBwYXNzLT5n YXRlKCk7CisgIGlzX3JlYWxseV9vbiA9IG92ZXJyaWRlX2dhdGVfc3RhdHVz IChwYXNzLCBOVUxMLCBpc19vbik7CisKKyAgaWYgKHBhc3MtPnN0YXRpY19w YXNzX251bWJlciA8PSAwKQorICAgIHBuID0gcGFzcy0+bmFtZTsKKyAgZWxz ZQorICAgIHBuID0gVkVDX2luZGV4IChjaGFyX3B0ciwgcGFzc190YWIsIHBh c3MtPnN0YXRpY19wYXNzX251bWJlcik7CisKKyAgZnByaW50ZiAoc3RkZXJy LCAiJSpzJS00MHMlKnM6JXMlc1xuIiwgaW5kZW50LCAiICIsIHBuLAorICAg ICAgICAgICAoMTUgLSBpbmRlbnQgPCAwID8gMCA6IDE1IC0gaW5kZW50KSwg IiAiLAorICAgICAgICAgICBpc19vbiA/ICIgIE9OIiA6ICIgIE9GRiIsCisg ICAgICAgICAgICgoIWlzX29uKSA9PSAoIWlzX3JlYWxseV9vbikgPyAiIgor ICAgICAgICAgICAgOiAoaXNfcmVhbGx5X29uID8gIiAoRk9SQ0VEX09OKSIg OiAiIChGT1JDRURfT0ZGKSIpKSk7Cit9CisKKy8qIER1bXAgcGFzcyBsaXN0 IFBBU1Mgd2l0aCBpbmRlbnRhdGlvbiBJTkRFTlQuICAqLworCitzdGF0aWMg dm9pZAorZHVtcF9wYXNzX2xpc3QgKHN0cnVjdCBvcHRfcGFzcyAqcGFzcywg aW50IGluZGVudCkKK3sKKyAgZG8KKyAgICB7CisgICAgICBkdW1wX29uZV9w YXNzIChwYXNzLCBpbmRlbnQpOworICAgICAgaWYgKHBhc3MtPnN1YikKKyAg ICAgICAgZHVtcF9wYXNzX2xpc3QgKHBhc3MtPnN1YiwgaW5kZW50ICsgMSk7 CisgICAgICBwYXNzID0gcGFzcy0+bmV4dDsKKyAgICB9CisgIHdoaWxlIChw YXNzKTsKK30KKworLyogRHVtcCBhbGwgb3B0aW1pemF0aW9uIHBhc3Nlcy4g ICovCisKK3ZvaWQKK2R1bXBfcGFzc2VzICh2b2lkKQoreworICBjcmVhdGVf cGFzc190YWIoKTsKKworICBkdW1wX3Bhc3NfbGlzdCAoYWxsX2xvd2VyaW5n X3Bhc3NlcywgMSk7CisgIGR1bXBfcGFzc19saXN0IChhbGxfc21hbGxfaXBh X3Bhc3NlcywgMSk7CisgIGR1bXBfcGFzc19saXN0IChhbGxfcmVndWxhcl9p cGFfcGFzc2VzLCAxKTsKKyAgZHVtcF9wYXNzX2xpc3QgKGFsbF9sdG9fZ2Vu X3Bhc3NlcywgMSk7CisgIGR1bXBfcGFzc19saXN0IChhbGxfcGFzc2VzLCAx KTsKK30KKworCiAvKiBSZXR1cm5zIHRoZSBwYXNzIHdpdGggTkFNRS4gICov CiAKIHN0YXRpYyBzdHJ1Y3Qgb3B0X3Bhc3MgKgpAQCAtNTEzLDkgKzYwOCw4 IEBAIGdldF9wYXNzX2J5X25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAg IHN0cnVjdCBwYXNzX3JlZ2lzdHJ5ICoqc2xvdCwgcHI7CiAKLSAgZ2NjX2Fz c2VydCAocGFzc19uYW1lX3RhYik7CiAgIHByLnVuaXF1ZV9uYW1lID0gbmFt ZTsKLSAgc2xvdCA9IChzdHJ1Y3QgcGFzc19yZWdpc3RyeSAqKikgaHRhYl9m aW5kX3Nsb3QgKHBhc3NfbmFtZV90YWIsCisgIHNsb3QgPSAoc3RydWN0IHBh c3NfcmVnaXN0cnkgKiopIGh0YWJfZmluZF9zbG90IChuYW1lX3RvX3Bhc3Nf bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnByLCBOT19JTlNFUlQpOwogCiAgIGlmICghc2xvdCB8 fCAhKnNsb3QpCkluZGV4OiB0ZXN0c3VpdGUvZ2NjLmRnL2R1bXAtcGFzcy5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS9nY2MuZGcv ZHVtcC1wYXNzLmMJKHJldmlzaW9uIDApCisrKyB0ZXN0c3VpdGUvZ2NjLmRn L2R1bXAtcGFzcy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIg LWZkdW1wLXBhc3NlcyIgfSAqLworCit1bnNpZ25lZCByZXM7CisKK3ZvaWQK K2ZvbyAodW5zaWduZWQgY29kZSwgaW50IGxlbikKK3sKKyAgaW50IGk7Cisg IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICByZXMgfD0gY29kZSAm IDE7Cit9CisKKy8qIHsgZGctcHJ1bmUtb3V0cHV0ICIuKiIgfSAqLwo= --00151750da2c3b073904a524f2d7--