From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129869 invoked by alias); 2 Jun 2015 18:15:49 -0000 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 Received: (qmail 129856 invoked by uid 89); 2 Jun 2015 18:15:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=AWL,BAYES_50,KAM_ASCII_DIVIDERS,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mail-vn0-f48.google.com Received: from mail-vn0-f48.google.com (HELO mail-vn0-f48.google.com) (209.85.216.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 02 Jun 2015 18:15:45 +0000 Received: by vnbf1 with SMTP id f1so21615854vnb.2 for ; Tue, 02 Jun 2015 11:15:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=suRiFM1E7/6bQfcD1C39Kw4b1HOTJbERBzTo2V/wyzg=; b=aJy+/RbGpawPbZiJOEiRC6dxMpthhe0BiNaOA0AgJ/QqNp0cZsrPixmPL41ii3o6VF 7QM9hD+uadYoINayejspWvw/LI6tSbcYG4DLRnCWXS0ZVW/XkGSnYTzDgq1no85YR4zv GBjFZsLjXJta3ya/9nzC0fdkOireLpz6ll1rxOYgW7Z5EwlVGgszwU5Qrbr+vOSoyGYO bw3/G1fnc29sc/L51Jm0hSWJU6fRxfJb46D8v+1Vk86f1pxoTLxjARf1bbL8Hyz+4/ak Uj9NSJXXVjRqyya1UiU5VUCHgALiDMPHWjAq6K9V+64aj4Ww62NmKjgJVGVKhILFoVCw L96Q== X-Gm-Message-State: ALoCoQn+/D/vRRpphglh90sYmzaCr+NREm0jeEBNngJPMfQQxRrtyao3VNwGxuRY2vQjfckQaJ2T MIME-Version: 1.0 X-Received: by 10.52.169.136 with SMTP id ae8mr39377030vdc.2.1433268943001; Tue, 02 Jun 2015 11:15:43 -0700 (PDT) Received: by 10.52.231.35 with HTTP; Tue, 2 Jun 2015 11:15:42 -0700 (PDT) In-Reply-To: References: <20150529193552.GA52215@kam.mff.cuni.cz> <556C16B1.5080606@arm.com> Date: Tue, 02 Jun 2015 18:27:00 -0000 Message-ID: Subject: Re: [RFC][PATCH][X86_64] Eliminate PLT stubs for specified external functions via -fno-plt= From: Sriraman Tallam To: ramrad01@arm.com Cc: Ramana Radhakrishnan , Jan Hubicka , "H.J. Lu" , Pedro Alves , Michael Matz , David Li , GCC Patches Content-Type: multipart/mixed; boundary=089e0158bba43761c405178ceef4 X-IsSubscribed: yes X-SW-Source: 2015-06/txt/msg00235.txt.bz2 --089e0158bba43761c405178ceef4 Content-Type: text/plain; charset=UTF-8 Content-length: 8134 On Mon, Jun 1, 2015 at 1:33 PM, Ramana Radhakrishnan wrote: > On Mon, Jun 1, 2015 at 7:55 PM, Sriraman Tallam wrote: >> On Mon, Jun 1, 2015 at 11:41 AM, Ramana Radhakrishnan >> wrote: >>> On Mon, Jun 1, 2015 at 7:01 PM, Sriraman Tallam wrote: >>>> On Mon, Jun 1, 2015 at 1:24 AM, Ramana Radhakrishnan >>>> wrote: >>>>> >>>>>>> Why isn't it just an indirect call in the cases that would require a GOT >>>>>>> slot and a direct call otherwise ? I'm trying to work out what's so >>>>>>> different on each target that mandates this to be in the target backend. >>>>>>> Also it would be better to push the tests into gcc.dg if you can and >>>>>>> check >>>>>>> for the absence of a relocation so that folks at least see these as being >>>>>>> UNSUPPORTED on their target. >>>>>> >>>>>> >>>>> >>>>> >>>>> To be even more explicit, shouldn't this be handled similar to the way in >>>>> which -fno-plt is handled in a target agnostic manner ? After all, if you >>>>> can handle this for the command line, doing the same for a function which >>>>> has been decorated with attribute((noplt)) should be simple. >>>> >>>> -fno-plt does not work for non-PIC code, having non-PIC code not use >>>> PLT was my primary motivation. Infact, if you go back in this thread, >>>> I suggested to HJ if I should piggyback on -fno-plt. I tried using >>>> the -fno-plt implementation to do this by removing the flag_pic check >>>> in calls.c, but that does not still work for non-PIC code. > > If you want __attribute__ ((noplt)) to work for non-PIC code, we > should look to code it in the same place surely by making all > __attribute__((noplt)) calls, indirect calls irrespective of whether > it's fpic or not. > > >>> >>> You're missing my point, unless I'm missing something basic here - I >>> should have been even more explicit and said -fPIC was a given in all >>> this discussion. >>> >>> calls.c:229 has >>> >>> else if (flag_pic && !flag_plt && fndecl_or_type >>> && TREE_CODE (fndecl_or_type) == FUNCTION_DECL >>> && !targetm.binds_local_p (fndecl_or_type)) >>> >>> why can't we merge the check in here for the attribute noplt ? >> >> We can and and please see this thread, that is the exact patch I proposed : >> https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02682.html >> >> However, there was one caveat. I want this working without -fPIC too. >> non-PIC code also generates PLT calls and I want them eliminated. >> >>> >>> If a new attribute is added to the "GNU language" in this case, why >>> isn't this being treated in the same way as the command line option >>> has been treated ? All this means is that we add an attribute and a >>> command line option to common code and then not implement it in a >>> proper target agnostic fashion. >> >> You are right. This is the way I wanted it too but I also wanted the >> attribute to work without PIC. PLT calls are generated without -fPIC >> and -fPIE too and I wanted a solution for that. On looking at the >> code in more detail, >> >> * -fno-plt is made to work with -fPIC, is there a reason to not make >> it work for non-PIC code? I can remove the flag_pic check from >> calls.c > > I don't think that's right, you probably have to allow that along with > (flag_pic || (decl && attribute_no_plt (decl)) - however it seems odd > to me that the language extension allows this but the flag doesn't. > >> * Then, I add the generic attribute "noplt" and everything is fine. >> >> There is just one caveat with the above approach, for x86_64 >> (*call_insn) will not generate indirect-calls for *non-PIC* code >> because constant_call_address_operand in predicates.md will evaluate >> to false. This can be fixed appropriately in ix86_output_call_insn in >> i386.c. > > Yes, targets need to massage that into place but that's essentially > the mechanics of retaining indirect calls in each backend. -fno-plt > doesn't work for ARM / AArch64 with optimizers currently (and I > suspect on most other targets) because our predicates are too liberal, > fixed by treating "noplt" or -fno-plt as the equivalent of > -mlong-calls. > >> >> >> Is this alright? Sorry for the confusion, but the primary reason why >> I did not do it the way you suggested is because we wanted "noplt" >> attribute to work for non-PIC code also. > > If that is the case, then this is a slightly more complicated > condition in the same place. We then always have indirect calls for > functions that are marked noplt and just have target generate this > appropriately. I have now modified this patch. This patch does two things: 1) Adds new generic function attribute "no_plt" that is similar in functionality to -fno-plt except that it applies only to calls to functions that are marked with this attribute. 2) For x86_64, it makes -fno-plt(and the attribute) also work for non-PIC code by directly generating an indirect call via a GOT entry. For PIC code, no_plt merely shadows the implementation of -fno-plt, no surprises here. * c-family/c-common.c (no_plt): New attribute. (handle_no_plt_attribute): New handler. * calls.c (prepare_call_address): Check for no_plt attribute. * config/i386/i386.c (ix86_function_ok_for_sibcall): Check for no_plt attribute. (ix86_expand_call): Ditto. (nopic_no_plt_attribute): New function. (ix86_output_call_insn): Output indirect call for non-pic no plt calls. * doc/extend.texi (no_plt): Document new attribute. * testsuite/gcc.target/i386/noplt-1.c: New test. * testsuite/gcc.target/i386/noplt-2.c: New test. * testsuite/gcc.target/i386/noplt-3.c: New test. * testsuite/gcc.target/i386/noplt-4.c: New test. Please review. Thanks Sri > > To be honest, this is trivial to implement in the ARM backend as one > would just piggy back on the longcalls work - despite that, IMNSHO > it's best done in a target independent manner. > > regards > Ramana > >> >> Thanks >> Sri >> >>> >>> regards >>> Ramana >>> >>> >>>> >>>>> >>>>>> I am not familiar with PLT calls for other targets. I can move the >>>>>> tests to gcc.dg but what relocation are you suggesting I check for? >>>>> >>>>> >>>>> Move the test to gcc.dg, add a target_support_no_plt function in >>>>> testsuite/lib/target-supports.exp and mark this as being supported only on >>>>> x86 and use scan-assembler to scan for PLT relocations for x86. Other >>>>> targets can add things as they deem fit. >>>> >>>>> >>>>> In any case, on a large number of elf/ linux targets I would have thought >>>>> the absence of a JMP_SLOT relocation would be good enough to check that this >>>>> is working correctly. >>>>> >>>>> regards >>>>> Ramana >>>>> >>>>> >>>>> >>>>> >>>>>> >>>>>> Thanks >>>>>> Sri >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Ramana >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> Also I think the PLT calls have EBX in call fusage wich is added by >>>>>>>>> ix86_expand_call. >>>>>>>>> else >>>>>>>>> { >>>>>>>>> /* Static functions and indirect calls don't need the pic >>>>>>>>> register. */ >>>>>>>>> if (flag_pic >>>>>>>>> && (!TARGET_64BIT >>>>>>>>> || (ix86_cmodel == CM_LARGE_PIC >>>>>>>>> && DEFAULT_ABI != MS_ABI)) >>>>>>>>> && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF >>>>>>>>> && ! SYMBOL_REF_LOCAL_P (XEXP (fnaddr, 0))) >>>>>>>>> { >>>>>>>>> use_reg (&use, gen_rtx_REG (Pmode, >>>>>>>>> REAL_PIC_OFFSET_TABLE_REGNUM)); >>>>>>>>> if (ix86_use_pseudo_pic_reg ()) >>>>>>>>> emit_move_insn (gen_rtx_REG (Pmode, >>>>>>>>> REAL_PIC_OFFSET_TABLE_REGNUM), >>>>>>>>> pic_offset_table_rtx); >>>>>>>>> } >>>>>>>>> >>>>>>>>> I think you want to take that away from FUSAGE there just like we do >>>>>>>>> for >>>>>>>>> local calls >>>>>>>>> (and in fact the code should already check flag_pic && flag_plt I >>>>>>>>> suppose. >>>>>>>> >>>>>>>> >>>>>>>> Done that now and patch attached. >>>>>>>> >>>>>>>> Thanks >>>>>>>> Sri >>>>>>>> >>>>>>>>> >>>>>>>>> Honza >>>>>> >>>>>> >>>>> --089e0158bba43761c405178ceef4 Content-Type: text/plain; charset=US-ASCII; name="noplt_attrib_patch_new.txt" Content-Disposition: attachment; filename="noplt_attrib_patch_new.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iafnbgs40 Content-length: 13095 CSogYy1mYW1pbHkvYy1jb21tb24uYyAobm9fcGx0KTogTmV3IGF0dHJpYnV0 ZS4KCShoYW5kbGVfbm9fcGx0X2F0dHJpYnV0ZSk6IE5ldyBoYW5kbGVyLgoJ KiBjYWxscy5jIChwcmVwYXJlX2NhbGxfYWRkcmVzcyk6IENoZWNrIGZvciBu b19wbHQKCWF0dHJpYnV0ZS4KCSogY29uZmlnL2kzODYvaTM4Ni5jIChpeDg2 X2Z1bmN0aW9uX29rX2Zvcl9zaWJjYWxsKTogQ2hlY2sKCWZvciBub19wbHQg YXR0cmlidXRlLgoJKGl4ODZfZXhwYW5kX2NhbGwpOiAgRGl0dG8uCgkobm9w aWNfbm9fcGx0X2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShpeDg2X291 dHB1dF9jYWxsX2luc24pOiBPdXRwdXQgaW5kaXJlY3QgY2FsbCBmb3Igbm9u LXBpYwoJbm8gcGx0IGNhbGxzLgoJKiBkb2MvZXh0ZW5kLnRleGkgKG5vX3Bs dCk6IERvY3VtZW50IG5ldyBhdHRyaWJ1dGUuCgkqIHRlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvbm9wbHQtMS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9ub3BsdC0yLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L25vcGx0LTMuYzogTmV3IHRlc3QuCgkq IHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvbm9wbHQtNC5jOiBOZXcgdGVz dC4KClRoaXMgcGF0Y2ggZG9lcyB0d28gdGhpbmdzOgoKKiBBZGRzIG5ldyBn ZW5lcmljIGZ1bmN0aW9uIGF0dHJpYnV0ZSAibm9fcGx0IiB0aGF0IGlzIHNp bWlsYXIgaW4gZnVuY3Rpb25hbGl0eQogIHRvIC1mbm8tcGx0IGV4Y2VwdCB0 aGF0IGl0IGFwcGxpZXMgb25seSB0byBjYWxscyB0byBmdW5jdGlvbnMgdGhh dCBhcmUgbWFya2VkCiAgd2l0aCB0aGlzIGF0dHJpYnV0ZS4KKiBGb3IgeDg2 XzY0LCBpdCBtYWtlcyAtZm5vLXBsdChhbmQgdGhlIGF0dHJpYnV0ZSkgYWxz byB3b3JrIGZvciBub24tUElDIGNvZGUgYnkKICBkaXJlY3RseSBnZW5lcmF0 aW5nIGFuIGluZGlyZWN0IGNhbGwgdmlhIGEgR09UIGVudHJ5LgoKSW5kZXg6 IGMtZmFtaWx5L2MtY29tbW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gYy1mYW1pbHkvYy1jb21tb24uYwkocmV2aXNpb24gMjIzNzIwKQorKysg Yy1mYW1pbHkvYy1jb21tb24uYwkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYg KzM1Nyw3IEBAIHN0YXRpYyB0cmVlIGhhbmRsZV9tb2RlX2F0dHJpYnV0ZSAo dHJlZSAqLCB0cmVlLCB0CiBzdGF0aWMgdHJlZSBoYW5kbGVfc2VjdGlvbl9h dHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwog c3RhdGljIHRyZWUgaGFuZGxlX2FsaWduZWRfYXR0cmlidXRlICh0cmVlICos IHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIHN0YXRpYyB0cmVlIGhhbmRs ZV93ZWFrX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJv b2wgKikgOworc3RhdGljIHRyZWUgaGFuZGxlX25vX3BsdF9hdHRyaWJ1dGUg KHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopIDsKIHN0YXRpYyB0 cmVlIGhhbmRsZV9hbGlhc19pZnVuY19hdHRyaWJ1dGUgKGJvb2wsIHRyZWUg KiwgdHJlZSwgdHJlZSwgYm9vbCAqKTsKIHN0YXRpYyB0cmVlIGhhbmRsZV9p ZnVuY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29s ICopOwogc3RhdGljIHRyZWUgaGFuZGxlX2FsaWFzX2F0dHJpYnV0ZSAodHJl ZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CkBAIC03MDYsNiArNzA3 LDggQEAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIGNfY29tbW9uX2F0 dHJpYnV0ZV90YWIKIAkJCSAgICAgIGhhbmRsZV9hbGlnbmVkX2F0dHJpYnV0 ZSwgZmFsc2UgfSwKICAgeyAid2VhayIsICAgICAgICAgICAgICAgICAgIDAs IDAsIHRydWUsICBmYWxzZSwgZmFsc2UsCiAJCQkgICAgICBoYW5kbGVfd2Vh a19hdHRyaWJ1dGUsIGZhbHNlIH0sCisgIHsgIm5vX3BsdCIsICAgICAgICAg ICAgICAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsCisJCQkgICAg ICBoYW5kbGVfbm9fcGx0X2F0dHJpYnV0ZSwgZmFsc2UgfSwKICAgeyAiaWZ1 bmMiLCAgICAgICAgICAgICAgICAgIDEsIDEsIHRydWUsICBmYWxzZSwgZmFs c2UsCiAJCQkgICAgICBoYW5kbGVfaWZ1bmNfYXR0cmlidXRlLCBmYWxzZSB9 LAogICB7ICJhbGlhcyIsICAgICAgICAgICAgICAgICAgMSwgMSwgdHJ1ZSwg IGZhbHNlLCBmYWxzZSwKQEAgLTgxODUsNiArODE4OCwyNSBAQCBoYW5kbGVf d2Vha19hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwKICAgcmV0 dXJuIE5VTExfVFJFRTsKIH0KIAorLyogSGFuZGxlIGEgIm5vX3BsdCIgYXR0 cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVf c3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV9ub19w bHRfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsCisJCSAgICAg ICB0cmVlIEFSR19VTlVTRUQgKGFyZ3MpLAorCQkgICAgICAgaW50IEFSR19V TlVTRUQgKGZsYWdzKSwKKwkJICAgICAgIGJvb2wgKiBBUkdfVU5VU0VEIChu b19hZGRfYXR0cnMpKQoreworICBpZiAoVFJFRV9DT0RFICgqbm9kZSkgIT0g RlVOQ1RJT05fREVDTCkKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0 dHJpYnV0ZXMsCisJICAgICAgICIlcUUgYXR0cmlidXRlIGlzIG9ubHkgYXBw bGljYWJsZSBvbiBmdW5jdGlvbnMiLCBuYW1lKTsKKyAgICAgICpub19hZGRf YXR0cnMgPSB0cnVlOworICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9 CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKIC8qIEhhbmRsZSBhbiAiYWxp YXMiIG9yICJpZnVuYyIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KICAg IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLCBleGNlcHQgdGhhdCBJ U19BTElBUyB0ZWxscyB1cwogICAgd2hldGhlciB0aGlzIGlzIGFuIGFsaWFz IGFzIG9wcG9zZWQgdG8gaWZ1bmMgYXR0cmlidXRlLiAgKi8KSW5kZXg6IGNh bGxzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY2FsbHMuYwkocmV2 aXNpb24gMjIzNzIwKQorKysgY2FsbHMuYwkod29ya2luZyBjb3B5KQpAQCAt MjI2LDggKzIyNiwxMCBAQCBwcmVwYXJlX2NhbGxfYWRkcmVzcyAodHJlZSBm bmRlY2xfb3JfdHlwZSwgcnR4IGZ1bgogCSAgICAgICAmJiB0YXJnZXRtLnNt YWxsX3JlZ2lzdGVyX2NsYXNzZXNfZm9yX21vZGVfcCAoRlVOQ1RJT05fTU9E RSkpCiAJICAgICAgPyBmb3JjZV9ub3RfbWVtIChtZW1vcnlfYWRkcmVzcyAo RlVOQ1RJT05fTU9ERSwgZnVuZXhwKSkKIAkgICAgICA6IG1lbW9yeV9hZGRy ZXNzIChGVU5DVElPTl9NT0RFLCBmdW5leHApKTsKLSAgZWxzZSBpZiAoZmxh Z19waWMgJiYgIWZsYWdfcGx0ICYmIGZuZGVjbF9vcl90eXBlCisgIGVsc2Ug aWYgKGZsYWdfcGljICYmIGZuZGVjbF9vcl90eXBlCiAJICAgJiYgVFJFRV9D T0RFIChmbmRlY2xfb3JfdHlwZSkgPT0gRlVOQ1RJT05fREVDTAorCSAgICYm ICghZmxhZ19wbHQKKwkgICAgICAgfHwgbG9va3VwX2F0dHJpYnV0ZSAoIm5v X3BsdCIsIERFQ0xfQVRUUklCVVRFUyAoZm5kZWNsX29yX3R5cGUpKSkKIAkg ICAmJiAhdGFyZ2V0bS5iaW5kc19sb2NhbF9wIChmbmRlY2xfb3JfdHlwZSkp CiAgICAgewogICAgICAgZnVuZXhwID0gZm9yY2VfcmVnIChQbW9kZSwgZnVu ZXhwKTsKSW5kZXg6IGNvbmZpZy9pMzg2L2kzODYuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBjb25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDIy MzcyMCkKKysrIGNvbmZpZy9pMzg2L2kzODYuYwkod29ya2luZyBjb3B5KQpA QCAtNTQ3OSw2ICs1NDc5LDggQEAgaXg4Nl9mdW5jdGlvbl9va19mb3Jfc2li Y2FsbCAodHJlZSBkZWNsLCB0cmVlIGV4cCkKICAgICAgICYmICFUQVJHRVRf NjRCSVQKICAgICAgICYmIGZsYWdfcGljCiAgICAgICAmJiBmbGFnX3BsdAor ICAgICAgJiYgKFRSRUVfQ09ERSAoZGVjbCkgIT0gRlVOQ1RJT05fREVDTAor CSAgfHwgIWxvb2t1cF9hdHRyaWJ1dGUgKCJub19wbHQiLCBERUNMX0FUVFJJ QlVURVMgKGRlY2wpKSkKICAgICAgICYmIGRlY2wgJiYgIXRhcmdldG0uYmlu ZHNfbG9jYWxfcCAoZGVjbCkpCiAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0y NTQ5NywxMyArMjU0OTksMTkgQEAgaXg4Nl9leHBhbmRfY2FsbCAocnR4IHJl dHZhbCwgcnR4IGZuYWRkciwgcnR4IGNhbGwKICAgICB9CiAgIGVsc2UKICAg ICB7Ci0gICAgICAvKiBTdGF0aWMgZnVuY3Rpb25zIGFuZCBpbmRpcmVjdCBj YWxscyBkb24ndCBuZWVkIHRoZSBwaWMgcmVnaXN0ZXIuICAqLworICAgICAg LyogU3RhdGljIGZ1bmN0aW9ucyBhbmQgaW5kaXJlY3QgY2FsbHMgZG9uJ3Qg bmVlZCB0aGUgcGljIHJlZ2lzdGVyLiAgQWxzbywKKwkgY2hlY2sgaWYgUExU IHdhcyBleHBsaWNpdGx5IGF2b2lkZWQgdmlhIG5vLXBsdCBvciAibm9fcGx0 IiBhdHRyaWJ1dGUsIG1ha2luZworCSBpdCBhbiBpbmRpcmVjdCBjYWxsLiAg Ki8KICAgICAgIGlmIChmbGFnX3BpYwogCSAgJiYgKCFUQVJHRVRfNjRCSVQK IAkgICAgICB8fCAoaXg4Nl9jbW9kZWwgPT0gQ01fTEFSR0VfUElDCiAJCSAg JiYgREVGQVVMVF9BQkkgIT0gTVNfQUJJKSkKIAkgICYmIEdFVF9DT0RFIChY RVhQIChmbmFkZHIsIDApKSA9PSBTWU1CT0xfUkVGCi0JICAmJiAhIFNZTUJP TF9SRUZfTE9DQUxfUCAoWEVYUCAoZm5hZGRyLCAwKSkpCisJICAmJiAhIFNZ TUJPTF9SRUZfTE9DQUxfUCAoWEVYUCAoZm5hZGRyLCAwKSkKKwkgICYmIGZs YWdfcGx0CisJICAmJiAoVFJFRV9DT0RFIChTWU1CT0xfUkVGX0RFQ0wgKFhF WFAoZm5hZGRyLCAwKSkpICE9IEZVTkNUSU9OX0RFQ0wKKwkgICAgICB8fCAh bG9va3VwX2F0dHJpYnV0ZSAoIm5vX3BsdCIsCisJCSAgICAgREVDTF9BVFRS SUJVVEVTIChTWU1CT0xfUkVGX0RFQ0wgKFhFWFAoZm5hZGRyLCAwKSkpKSkp CiAJewogCSAgdXNlX3JlZyAoJnVzZSwgZ2VuX3J0eF9SRUcgKFBtb2RlLCBS RUFMX1BJQ19PRkZTRVRfVEFCTEVfUkVHTlVNKSk7CiAJICBpZiAoaXg4Nl91 c2VfcHNldWRvX3BpY19yZWcgKCkpCkBAIC0yNTU5OSw2ICsyNTYwNywzNCBA QCBpeDg2X2V4cGFuZF9jYWxsIChydHggcmV0dmFsLCBydHggZm5hZGRyLCBy dHggY2FsbAogICByZXR1cm4gY2FsbDsKIH0KIAorLyogUmV0dXJuIHRydWUg aWYgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3YXMgbWFya2VkIHdpdGgg YXR0cmlidXRlCisgICAibm9fcGx0IiBvciB1c2luZyAtZm5vLXBsdCBhbmQg d2UgYXJlIGNvbXBpbGluZyBmb3Igbm8tUElDIGFuZCB4ODZfNjQuCisgICBU aGlzIGlzIGN1cnJlbnRseSB1c2VkIG9ubHkgd2l0aCA2NC1iaXQgRUxGIHRh cmdldHMgdG8gY2FsbCB0aGUgZnVuY3Rpb24KKyAgIG1hcmtlZCAibm9fcGx0 IiBpbmRpcmVjdGx5LiAgKi8KKworc3RhdGljIGJvb2wKK25vcGljX25vX3Bs dF9hdHRyaWJ1dGUgKHJ0eCBjYWxsX29wKQoreworICBpZiAoZmxhZ19waWMp CisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmICghVEFSR0VUXzY0QklUIHx8 IFRBUkdFVF9NQUNIT3x8IFRBUkdFVF9TRUggfHwgVEFSR0VUX1BFQ09GRikK KyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKFNZTUJPTF9SRUZfTE9DQUxf UCAoY2FsbF9vcCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIHRyZWUgc3lt Ym9sX2RlY2wgPSBTWU1CT0xfUkVGX0RFQ0wgKGNhbGxfb3ApOworCisgIGlm IChzeW1ib2xfZGVjbCAhPSBOVUxMX1RSRUUKKyAgICAgICYmIFRSRUVfQ09E RSAoc3ltYm9sX2RlY2wpID09IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYmICgh ZmxhZ19wbHQKKyAgICAgICAgICB8fCBsb29rdXBfYXR0cmlidXRlICgibm9f cGx0IiwgREVDTF9BVFRSSUJVVEVTIChzeW1ib2xfZGVjbCkpKSkKKyAgICBy ZXR1cm4gdHJ1ZTsKKworICByZXR1cm4gZmFsc2U7Cit9CisKIC8qIE91dHB1 dCB0aGUgYXNzZW1ibHkgZm9yIGEgY2FsbCBpbnN0cnVjdGlvbi4gICovCiAK IGNvbnN0IGNoYXIgKgpAQCAtMjU2MTAsNyArMjU2NDYsOSBAQCBpeDg2X291 dHB1dF9jYWxsX2luc24gKHJ0eF9pbnNuICppbnNuLCBydHggY2FsbF9vcAog CiAgIGlmIChTSUJMSU5HX0NBTExfUCAoaW5zbikpCiAgICAgewotICAgICAg aWYgKGRpcmVjdF9wKQorICAgICAgaWYgKGRpcmVjdF9wICYmIG5vcGljX25v X3BsdF9hdHRyaWJ1dGUgKGNhbGxfb3ApKQorCXhhc20gPSAiJSFqbXBcdCol cDBAR09UUENSRUwoJSVyaXApIjsKKyAgICAgIGVsc2UgaWYgKGRpcmVjdF9w KQogCXhhc20gPSAiJSFqbXBcdCVQMCI7CiAgICAgICAvKiBTRUggZXBpbG9n dWUgZGV0ZWN0aW9uIHJlcXVpcmVzIHRoZSBpbmRpcmVjdCBicmFuY2ggY2Fz ZQogCSB0byBpbmNsdWRlIFJFWC5XLiAgKi8KQEAgLTI1NjUzLDcgKzI1Njkx LDkgQEAgaXg4Nl9vdXRwdXRfY2FsbF9pbnNuIChydHhfaW5zbiAqaW5zbiwg cnR4IGNhbGxfb3AKIAlzZWhfbm9wX3AgPSB0cnVlOwogICAgIH0KIAotICBp ZiAoZGlyZWN0X3ApCisgIGlmIChkaXJlY3RfcCAmJiBub3BpY19ub19wbHRf YXR0cmlidXRlIChjYWxsX29wKSkKKyAgICB4YXNtID0gIiUhY2FsbFx0KiVw MEBHT1RQQ1JFTCglJXJpcCkiOworICBlbHNlIGlmIChkaXJlY3RfcCkKICAg ICB4YXNtID0gIiUhY2FsbFx0JVAwIjsKICAgZWxzZQogICAgIHhhc20gPSAi JSFjYWxsXHQlQTAiOwpJbmRleDogZG9jL2V4dGVuZC50ZXhpCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGRvYy9leHRlbmQudGV4aQkocmV2aXNpb24g MjIzNzIwKQorKysgZG9jL2V4dGVuZC50ZXhpCSh3b3JraW5nIGNvcHkpCkBA IC0yOTE2LDYgKzI5MTYsMTUgQEAgdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBj YW4gYmUgZ3VhcmFudGVlZCBub3QgdG8gdGgKIHdpdGggdGhlIG5vdGFibGUg ZXhjZXB0aW9ucyBvZiBAY29kZXtxc29ydH0gYW5kIEBjb2Rle2JzZWFyY2h9 IHRoYXQKIHRha2UgZnVuY3Rpb24gcG9pbnRlciBhcmd1bWVudHMuCiAKK0Bp dGVtIG5vX3BsdAorQGNpbmRleCBAY29kZXtub19wbHR9IGZ1bmN0aW9uIGF0 dHJpYnV0ZQorVGhlIEBjb2Rle25vX3BsdH0gYXR0cmlidXRlIGlzIHVzZWQg dG8gaW5mb3JtIHRoZSBjb21waWxlciB0aGF0IGEgY2FsbHMKK3RvIHRoZSBm dW5jdGlvbiBzaG91bGQgbm90IHVzZSB0aGUgUExULiAgRm9yIGV4YW1wbGUs IGV4dGVybmFsIGZ1bmN0aW9ucworZGVmaW5lZCBpbiBzaGFyZWQgb2JqZWN0 cyBhcmUgY2FsbGVkIGZyb20gdGhlIGV4ZWN1dGFibGUgdXNpbmcgdGhlIFBM VC4KK1RoaXMgYXR0cmlidXRlIG9uIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlv biBjYWxscyB0aGVzZSBmdW5jdGlvbnMgaW5kaXJlY3RseQorcmF0aGVyIHRo YW4gZ29pbmcgdmlhIHRoZSBQTFQuICBUaGlzIGlzIHNpbWlsYXIgdG8gQG9w dGlvbnstZm5vLXBsdH0gYnV0CitpcyBvbmx5IGFwcGxpY2FibGUgdG8gY2Fs bHMgdG8gdGhlIGZ1bmN0aW9uIG1hcmtlZCB3aXRoIHRoaXMgYXR0cmlidXRl LgorCiBAaXRlbSBvcHRpbWl6ZQogQGNpbmRleCBAY29kZXtvcHRpbWl6ZX0g ZnVuY3Rpb24gYXR0cmlidXRlCiBUaGUgQGNvZGV7b3B0aW1pemV9IGF0dHJp YnV0ZSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhhdCBhIGZ1bmN0aW9uIGlzIHRv CkluZGV4OiB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L25vcGx0LTEuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L25vcGx0LTEuYwkocmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvbm9wbHQtMS5jCSh3b3JraW5nIGNvcHkpCkBAIC0w LDAgKzEsMTMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZf NjQtKi1saW51eCogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mbm8tcGlj IiB9ICovCisKK19fYXR0cmlidXRlX18gKChub19wbHQpKQordm9pZCBmb28o KTsKKworaW50IG1haW4oKQoreworICBmb28oKTsKKyAgcmV0dXJuIDA7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiY2FsbFxbIFx0 XF1cXCouKmZvby4qQEdPVFBDUkVMXFwoJXJpcFxcKSIgfSB9ICovIApJbmRl eDogdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ub3BsdC0yLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9ub3BsdC0yLmMJKHJldmlzaW9uIDApCisrKyB0ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L25vcGx0LTIuYwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx LDEzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeDg2XzY0LSot bGludXgqIH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZuby1waWMi IH0gKi8KKworCitfX2F0dHJpYnV0ZV9fICgobm9fcGx0KSkKK2ludCBmb28o KTsKKworaW50IG1haW4oKQoreworICByZXR1cm4gZm9vKCk7Cit9CisKKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiam1wXFsgXHRcXVxcKi4q Zm9vLipAR09UUENSRUxcXCglcmlwXFwpIiB9IH0gKi8gCkluZGV4OiB0ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L25vcGx0LTMuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L25vcGx0 LTMuYwkocmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvbm9wbHQtMy5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi1saW51eCog fSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mbm8tcGljIC1mbm8tcGx0IiB9 ICovCisKK3ZvaWQgZm9vKCk7CisKK2ludCBtYWluKCkKK3sKKyAgZm9vKCk7 CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXIgImNhbGxcWyBcdFxdXFwqLipmb28uKkBHT1RQQ1JFTFxcKCVyaXBc XCkiIH0gfSAqLyAKSW5kZXg6IHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv bm9wbHQtNC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvbm9wbHQtNC5jCShyZXZpc2lvbiAwKQorKysg dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ub3BsdC00LmMJKHdvcmtpbmcg Y29weSkKQEAgLTAsMCArMSwxMSBAQAorLyogeyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0IHg4Nl82NC0qLWxpbnV4KiB9IH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIC1mbm8tcGljIC1mbm8tcGx0IiB9ICovCisKK2ludCBmb28oKTsK KworaW50IG1haW4oKQoreworICByZXR1cm4gZm9vKCk7Cit9CisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiam1wXFsgXHRcXVxcKi4qZm9v LipAR09UUENSRUxcXCglcmlwXFwpIiB9IH0gKi8K --089e0158bba43761c405178ceef4--