From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 77270 invoked by alias); 17 Dec 2015 16:12:04 -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 77255 invoked by uid 89); 17 Dec 2015 16:12:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=ubizjak@gmail.com, ubizjakgmailcom, our X-HELO: mail-qg0-f42.google.com Received: from mail-qg0-f42.google.com (HELO mail-qg0-f42.google.com) (209.85.192.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 17 Dec 2015 16:12:01 +0000 Received: by mail-qg0-f42.google.com with SMTP id k90so31623103qge.0 for ; Thu, 17 Dec 2015 08:12:01 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.140.17.213 with SMTP id 79mr69552161qgd.49.1450368719586; Thu, 17 Dec 2015 08:11:59 -0800 (PST) Received: by 10.55.181.70 with HTTP; Thu, 17 Dec 2015 08:11:59 -0800 (PST) In-Reply-To: References: <20151216232951.GA17976@intel.com> Date: Thu, 17 Dec 2015 16:12:00 -0000 Message-ID: Subject: Re: [PATCH] PR target/68937: i686: -fno-plt produces wrong code (maybe only with tailcall From: "H.J. Lu" To: Uros Bizjak Cc: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary=001a11c00db4539eea05271a482f X-IsSubscribed: yes X-SW-Source: 2015-12/txt/msg01783.txt.bz2 --001a11c00db4539eea05271a482f Content-Type: text/plain; charset=UTF-8 Content-length: 1753 On Thu, Dec 17, 2015 at 7:50 AM, H.J. Lu wrote: > On Thu, Dec 17, 2015 at 5:42 AM, Uros Bizjak wrote: >> On Thu, Dec 17, 2015 at 2:00 PM, H.J. Lu wrote: >>> On Thu, Dec 17, 2015 at 2:04 AM, Uros Bizjak wrote: >>>> On Thu, Dec 17, 2015 at 12:29 AM, H.J. Lu wrote: >>>>> Since sibcall never returns, we can only use call-clobbered register >>>>> as GOT base. Otherwise, callee-saved register used as GOT base won't >>>>> be properly restored. >>>>> >>>>> Tested on x86-64 with -m32. OK for trunk? >>>> >>>> You don't have to add explicit clobber for members of "CLOBBERED_REGS" >>>> class, and register_no_elim_operand predicate should be used with "U" >>>> constraint. Also, please introduce new predicate, similar to how >>>> GOT_memory_operand is defined and handled. >>>> >>> >>> Here is the updated patch. There is a predicate already, >>> sibcall_memory_operand. It allows any registers to >>> be as GOT base, which is the root of our problem. >>> This patch removes GOT slot from it and handles >>> sibcall over GOT slot with *sibcall_GOT_32 and >>> *sibcall_value_GOT_32 patterns. Since I need to >>> expose constraints on GOT base register to RA, >>> I have to use 2 operands, GOT base and function >>> symbol, to describe sibcall over 32-bit GOT slot. >> >> Please use >> >> (mem:SI (plus:SI >> (match_operand:SI 0 "register_no_elim_operand" "U") >> (match_operand:SI 1 "GOT32_symbol_operand"))) >> ... >> >> to avoid manual rebuild of the operand. >> > > Is this OK? > An updated patch to allow sibcall_memory_operand for RTL expansion. OK for trunk if there is no regression? Thanks. -- H.J. --001a11c00db4539eea05271a482f Content-Type: text/x-patch; charset=US-ASCII; name="0001-Use-call-clobbered-register-for-sibcall-via-GOT.patch" Content-Disposition: attachment; filename="0001-Use-call-clobbered-register-for-sibcall-via-GOT.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iiag1z9a1 Content-length: 11749 RnJvbSBkZmZkM2E3MGI5Nzg4MTc0ZjliMjc5ZmYyN2JmNzJkYmMyMzg0NjU5 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTYgRGVjIDIwMTUgMTI6 MzQ6NTcgLTA4MDAKU3ViamVjdDogW1BBVENIXSBVc2UgY2FsbC1jbG9iYmVy ZWQgcmVnaXN0ZXIgZm9yIHNpYmNhbGwgdmlhIEdPVAoKU2luY2Ugc2liY2Fs bCBuZXZlciByZXR1cm5zLCB3ZSBjYW4gb25seSB1c2UgY2FsbC1jbG9iYmVy ZWQgcmVnaXN0ZXIgYXMKR09UIGJhc2UuICBPdGhlcndpc2UsIGNhbGxlZS1z YXZlZCByZWdpc3RlciB1c2VkIGFzIEdPVCBiYXNlIHdvbid0IGJlCnByb3Bl cmx5IHJlc3RvcmVkLiAgc2liY2FsbF9tZW1vcnlfb3BlcmFuZCBpcyBjaGFu Z2VkIHRvIGFsbG93IDMyLWJpdApHT1Qgc2xvdCBvbmx5IHdpdGggcHNldWRv IHJlZ2lzdGVyIGFzIEdPVCBiYXNlIGZvciBSVEwgZXhwYW5zaW9uLiAgMgpu ZXcgcGF0dGVybnMsICpzaWJjYWxsX0dPVF8zMiBhbmQgKnNpYmNhbGxfdmFs dWVfR09UXzMyLCBhcmUgYWRkZWQgdG8KZXhwb3NlIEdPVCBiYXNlIHJlZ2lz dGVyIHRvIHJlZ2lzdGVyIGFsbG9jYXRvciBzbyB0aGF0IGNhbGwtY2xvYmJl cmVkCnJlZ2lzdGVyIHdpbGwgYmUgdXNlZCBmb3IgR09UIGJhc2UuCgpnY2Mv CgoJUFIgdGFyZ2V0LzY4OTM3CgkqIGNvbmZpZy9pMzg2L2kzODYuYyAoaXg4 Nl9mdW5jdGlvbl9va19mb3Jfc2liY2FsbCk6IENvdW50CgljYWxsIHZpYSBH T1Qgc2xvdCBhcyBpbmRpcmVjdCBjYWxsLgoJKiBjb25maWcvaTM4Ni9pMzg2 Lm1kICgqc2liY2FsbF9HT1RfMzIpOiBOZXcgcGF0dGVybi4KCSgqc2liY2Fs bF92YWx1ZV9HT1RfMzIpOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvcHJl ZGljYXRlcy5tZCAoc2liY2FsbF9tZW1vcnlfb3BlcmFuZCk6IEFsbG93Cgkz Mi1iaXQgR09UIHNsb3Qgb25seSB3aXRoIHBzZXVkbyByZWdpc3RlciBhcyBH T1QgYmFzZS4KCShHT1QzMl9zeW1ib2xfb3BlcmFuZCk6IE5ldyBwcmVkaWNh dGUuCgpnY2MvdGVzdHN1aXRlLwoKCVBSIHRhcmdldC82ODkzNwoJKiBnY2Mu dGFyZ2V0L2kzODYvcHI2ODkzNy0xLmM6IE5ldyB0ZXN0LgoJKiBnY2MudGFy Z2V0L2kzODYvcHI2ODkzNy0yLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0 L2kzODYvcHI2ODkzNy0zLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kz ODYvcHI2ODkzNy00LmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYv cHI2ODkzNy01LmM6IExpa2V3aXNlLgotLS0KIGdjYy9jb25maWcvaTM4Ni9p Mzg2LmMgICAgICAgICAgICAgICAgICAgIHwgIDQgKysrLQogZ2NjL2NvbmZp Zy9pMzg2L2kzODYubWQgICAgICAgICAgICAgICAgICAgfCAzMyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvY29uZmlnL2kzODYvcHJl ZGljYXRlcy5tZCAgICAgICAgICAgICB8IDEyICsrKysrKysrKysrCiBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTEuYyB8IDEzICsr KysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2 ODkzNy0yLmMgfCAxMyArKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByNjg5MzctMy5jIHwgMTMgKysrKysrKysrKysrCiBn Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTQuYyB8IDEz ICsrKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI2ODkzNy01LmMgfCAgOSArKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwg MTA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3 LTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByNjg5MzctMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2ODkzNy0zLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjY4OTM3LTQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByNjg5MzctNS5jCgpkaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9pMzg2L2kzODYuYyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmMK aW5kZXggY2VjZWEyNC4uMGUyYmVjMyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9pMzg2L2kzODYuYworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCkBA IC02NzIzLDggKzY3MjMsMTAgQEAgaXg4Nl9mdW5jdGlvbl9va19mb3Jfc2li Y2FsbCAodHJlZSBkZWNsLCB0cmVlIGV4cCkKICAgICAgIC8qIElmIHRoaXMg Y2FsbCBpcyBpbmRpcmVjdCwgd2UnbGwgbmVlZCB0byBiZSBhYmxlIHRvIHVz ZSBhCiAJIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVyIGZvciB0aGUgYWRkcmVz cyBvZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uLgogCSBNYWtlIHN1cmUgdGhhdCBh bGwgc3VjaCByZWdpc3RlcnMgYXJlIG5vdCB1c2VkIGZvciBwYXNzaW5nCi0J IHBhcmFtZXRlcnMuICBOb3RlIHRoYXQgRExMSU1QT1JUIGZ1bmN0aW9ucyBh cmUgaW5kaXJlY3QuICAqLworCSBwYXJhbWV0ZXJzLiAgTm90ZSB0aGF0IERM TElNUE9SVCBmdW5jdGlvbnMgYW5kIGNhbGwgdmlhIEdPVAorCSBzbG90IGFy ZSBpbmRpcmVjdC4gICovCiAgICAgICBpZiAoIWRlY2wKKwkgIHx8IChmbGFn X3BpYyAmJiAhZmxhZ19wbHQpCiAJICB8fCAoVEFSR0VUX0RMTElNUE9SVF9E RUNMX0FUVFJJQlVURVMgJiYgREVDTF9ETExJTVBPUlRfUCAoZGVjbCkpKQog CXsKIAkgIC8qIENoZWNrIGlmIHJlZ3Bhcm0gPj0gMyBzaW5jZSBhcmdfcmVn X2F2YWlsYWJsZSBpcyBzZXQgdG8KZGlmZiAtLWdpdCBhL2djYy9jb25maWcv aTM4Ni9pMzg2Lm1kIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKaW5kZXgg NDliMjIxNi4uNmFiOGVhYSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2 L2kzODYubWQKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKQEAgLTEx ODY1LDYgKzExODY1LDIyIEBACiAgICIqIHJldHVybiBpeDg2X291dHB1dF9j YWxsX2luc24gKGluc24sIG9wZXJhbmRzWzBdKTsiCiAgIFsoc2V0X2F0dHIg InR5cGUiICJjYWxsIildKQogCis7OyBTaW5jZSBzaWJjYWxsIG5ldmVyIHJl dHVybnMsIHdlIGNhbiBvbmx5IHVzZSBjYWxsLWNsb2JiZXJlZCByZWdpc3Rl cgorOzsgYXMgR09UIGJhc2UuCisoZGVmaW5lX2luc24gIipzaWJjYWxsX0dP VF8zMiIKKyAgWyhjYWxsIChtZW06UUkKKwkgICAobWVtOlNJIChwbHVzOlNJ CisJCSAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfbm9fZWxp bV9vcGVyYW5kIiAiVSIpCisJCSAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAi R09UMzJfc3ltYm9sX29wZXJhbmQiKSkpKQorCSAobWF0Y2hfb3BlcmFuZCAy KSldCisgICIhVEFSR0VUX01BQ0hPICYmICFUQVJHRVRfNjRCSVQgJiYgU0lC TElOR19DQUxMX1AgKGluc24pIgoreworICBydHggZm5hZGRyID0gZ2VuX3J0 eF9QTFVTIChQbW9kZSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsKKyAg Zm5hZGRyID0gZ2VuX2NvbnN0X21lbSAoUG1vZGUsIGZuYWRkcik7CisgIHJl dHVybiBpeDg2X291dHB1dF9jYWxsX2luc24gKGluc24sIGZuYWRkcik7Cit9 CisgIFsoc2V0X2F0dHIgInR5cGUiICJjYWxsIildKQorCiAoZGVmaW5lX2lu c24gIipzaWJjYWxsIgogICBbKGNhbGwgKG1lbTpRSSAobWF0Y2hfb3BlcmFu ZDpXIDAgInNpYmNhbGxfaW5zbl9vcGVyYW5kIiAiVUJzQnoiKSkKIAkgKG1h dGNoX29wZXJhbmQgMSkpXQpAQCAtMTIwNDIsNiArMTIwNTgsMjMgQEAKICAg IiogcmV0dXJuIGl4ODZfb3V0cHV0X2NhbGxfaW5zbiAoaW5zbiwgb3BlcmFu ZHNbMV0pOyIKICAgWyhzZXRfYXR0ciAidHlwZSIgImNhbGx2IildKQogCis7 OyBTaW5jZSBzaWJjYWxsIG5ldmVyIHJldHVybnMsIHdlIGNhbiBvbmx5IHVz ZSBjYWxsLWNsb2JiZXJlZCByZWdpc3RlcgorOzsgYXMgR09UIGJhc2UuCiso ZGVmaW5lX2luc24gIipzaWJjYWxsX3ZhbHVlX0dPVF8zMiIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQgMCkKKyAgICAgICAgKGNhbGwgKG1lbTpRSQorCQko bWVtOlNJIChwbHVzOlNJCisJCQkgIChtYXRjaF9vcGVyYW5kOlNJIDEgInJl Z2lzdGVyX25vX2VsaW1fb3BlcmFuZCIgIlUiKQorCQkJICAobWF0Y2hfb3Bl cmFuZDpTSSAyICJHT1QzMl9zeW1ib2xfb3BlcmFuZCIpKSkpCisJIChtYXRj aF9vcGVyYW5kIDMpKSldCisgICIhVEFSR0VUX01BQ0hPICYmICFUQVJHRVRf NjRCSVQgJiYgU0lCTElOR19DQUxMX1AgKGluc24pIgoreworICBydHggZm5h ZGRyID0gZ2VuX3J0eF9QTFVTIChQbW9kZSwgb3BlcmFuZHNbMV0sIG9wZXJh bmRzWzJdKTsKKyAgZm5hZGRyID0gZ2VuX2NvbnN0X21lbSAoUG1vZGUsIGZu YWRkcik7CisgIHJldHVybiBpeDg2X291dHB1dF9jYWxsX2luc24gKGluc24s IGZuYWRkcik7Cit9CisgIFsoc2V0X2F0dHIgInR5cGUiICJjYWxsdiIpXSkK KwogKGRlZmluZV9pbnNuICIqc2liY2FsbF92YWx1ZSIKICAgWyhzZXQgKG1h dGNoX29wZXJhbmQgMCkKIAkoY2FsbCAobWVtOlFJIChtYXRjaF9vcGVyYW5k OlcgMSAic2liY2FsbF9pbnNuX29wZXJhbmQiICJVQnNCeiIpKQpkaWZmIC0t Z2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQgYi9nY2MvY29u ZmlnL2kzODYvcHJlZGljYXRlcy5tZAppbmRleCA4YmRkNWQ4Li5mMzNhNTNh IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvcHJlZGljYXRlcy5tZAor KysgYi9nY2MvY29uZmlnL2kzODYvcHJlZGljYXRlcy5tZApAQCAtNTk3LDEx ICs1OTcsMTcgQEAKIAkgICAgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5X29w ZXJhbmQiKSkpKQogCiA7OyBSZXR1cm4gdHJ1ZSBpZiBPUCBpcyBhIG1lbW9y eSBvcGVyYW5kcyB0aGF0IGNhbiBiZSB1c2VkIGluIHNpYmNhbGxzLgorOzsg U2luY2Ugc2liY2FsbCBuZXZlciByZXR1cm5zLCB3ZSBjYW4gb25seSB1c2Ug Y2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXIKKzs7IGFzIEdPVCBiYXNlLiAgQWxs b3cgR09UIHNsb3QgaGVyZSBvbmx5IHdpdGggcHNldWRvIHJlZ2lzdGVyIGFz IEdPVAorOzsgYmFzZS4gIFByb3Blcmx5IGhhbmRsZSBzaWJjYWxsIG92ZXIg R09UIHNsb3Qgd2l0aCAqc2liY2FsbF9HT1RfMzIKKzs7IGFuZCAqc2liY2Fs bF92YWx1ZV9HT1RfMzIgcGF0dGVybnMuCiAoZGVmaW5lX3ByZWRpY2F0ZSAi c2liY2FsbF9tZW1vcnlfb3BlcmFuZCIKICAgKGFuZCAobWF0Y2hfb3BlcmFu ZCAwICJtZW1vcnlfb3BlcmFuZCIpCiAgICAgICAgKG1hdGNoX3Rlc3QgIkNP TlNUQU5UX1AgKFhFWFAgKG9wLCAwKSkKIAkJICAgIHx8IChHRVRfQ09ERSAo WEVYUCAob3AsIDApKSA9PSBQTFVTCiAJCQkmJiBSRUdfUCAoWEVYUCAoWEVY UCAob3AsIDApLCAwKSkKKwkJCSYmIChSRUdOTyAoWEVYUCAoWEVYUCAob3As IDApLCAwKSkKKwkJCSAgICA+PSBGSVJTVF9QU0VVRE9fUkVHSVNURVIpCiAJ CQkmJiBHRVRfQ09ERSAoWEVYUCAoWEVYUCAob3AsIDApLCAxKSkgPT0gQ09O U1QKIAkJCSYmIEdFVF9DT0RFIChYRVhQIChYRVhQIChYRVhQIChvcCwgMCks IDEpLCAwKSkgPT0gVU5TUEVDCiAJCQkmJiBYSU5UIChYRVhQIChYRVhQIChY RVhQIChvcCwgMCksIDEpLCAwKSwgMSkgPT0gVU5TUEVDX0dPVCkiKSkpCkBA IC02MzMsNiArNjM5LDEyIEBACiAJICAmJiBYSU5UIChYRVhQIChvcCwgMCks IDEpID09IFVOU1BFQ19HT1RQQ1JFTCk7CiB9KQogCis7OyBSZXR1cm4gdHJ1 ZSBpZiBPUCBpcyBhIDMyLWJpdCBHT1Qgc3ltYm9sIG9wZXJhbmQuCisoZGVm aW5lX3ByZWRpY2F0ZSAiR09UMzJfc3ltYm9sX29wZXJhbmQiCisgIChtYXRj aF90ZXN0ICJHRVRfQ09ERSAob3ApID09IENPTlNUCisgICAgICAgICAgICAg ICAmJiBHRVRfQ09ERSAoWEVYUCAob3AsIDApKSA9PSBVTlNQRUMKKyAgICAg ICAgICAgICAgICYmIFhJTlQgKFhFWFAgKG9wLCAwKSwgMSkgPT0gVU5TUEVD X0dPVCIpKQorCiA7OyBNYXRjaCBleGFjdGx5IHplcm8uCiAoZGVmaW5lX3By ZWRpY2F0ZSAiY29uc3QwX29wZXJhbmQiCiAgIChtYXRjaF9jb2RlICJjb25z dF9pbnQsY29uc3Rfd2lkZV9pbnQsY29uc3RfZG91YmxlLGNvbnN0X3ZlY3Rv ciIpCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9wcjY4OTM3LTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByNjg5MzctMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjg5Nzg1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTEuYwpAQCAtMCwwICsxLDEzIEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAqLSotbGludXgqICYm IGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mcGljIC1m bm8tcGx0IC1tcmVncGFybT0zIiB9ICovCisKK2V4dGVybiB2b2lkIGJhciAo aW50KTsKKwordm9pZAorZm9vIChpbnQgYikKK3sKKyAgYmFyIChiKTsKKyAg YmFyIChiKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJqbXBcWyBcdFxdKi5iYXJAR09UXFwoJWUoYXxjfGQpeFxcKSIgfSB9ICov CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjY4OTM3LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By Njg5MzctMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjI1N2Y0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjY4OTM3LTIuYwpAQCAtMCwwICsxLDEzIEBACisv KiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAqLSotbGludXgqICYmIGlh MzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mcGljIC1mbm8t cGx0IC1tcmVncGFybT0zIiB9ICovCisKK2V4dGVybiB2b2lkIGJhciAoaW50 LCBpbnQpOworCit2b2lkCitmb28gKGludCBhLCBpbnQgYikKK3sKKyAgYmFy IChhLCBiKTsKKyAgYmFyIChhLCBiKTsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJqbXBcWyBcdFxdKi5iYXJAR09UXFwoJWUoYXxj fGQpeFxcKSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjY4OTM3LTMuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByNjg5MzctMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjZkOGU0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTMuYwpAQCAt MCwwICsxLDEzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAq LSotbGludXgqICYmIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mcGljIC1mbm8tcGx0IC1tcmVncGFybT0zIiB9ICovCisKK2V4dGVy biB2b2lkIGJhciAoaW50LCBpbnQsIGludCk7CisKK3ZvaWQKK2ZvbyAoaW50 IGEsIGludCBiLCBpbnQgYykKK3sKKyAgYmFyIChhLCBiLCBjKTsKKyAgYmFy IChhLCBiLCBjKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCAiam1wXFsgXHRcXSouYmFyQEdPVCIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTQu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNjg5MzctNC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMTk5NTYK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjY4OTM3LTQuYwpAQCAtMCwwICsxLDEzIEBACisvKiB7IGRnLWRv IGNvbXBpbGUgeyB0YXJnZXQgeyAqLSotbGludXgqICYmIGlhMzIgfSB9IH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mcGljIC1mbm8tcGx0IC1tcmVn cGFybT0zIiB9ICovCisKK2V4dGVybiBpbnQgYmFyIChpbnQsIGludCk7CisK K2ludAorZm9vIChpbnQgYSwgaW50IGIpCit7CisgICh2b2lkKSBiYXIgKGEs IGIpOworICByZXR1cm4gYmFyIChhLCBiKTsKK30KKworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJqbXBcWyBcdFxdKi5iYXJAR09UXFwoJWUo YXxjfGQpeFxcKSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTUuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByNjg5MzctNS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTNlYzUKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY4OTM3LTUuYwpA QCAtMCwwICsxLDkgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7 ICotKi1saW51eCogfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1m cGljIC1mbm8tcGx0IC1mdW5yb2xsLWxvb3BzIiB9ICovCisKK2V4dGVybiB2 b2lkICpmKCk7Cit2b2lkIGRtaV9zY2FuX21hY2hpbmUodm9pZCkgeworICBj aGFyICpwID0gZigpLCAqcTsKKyAgZm9yIChxID0gcDsgcSA8IHAgKyAxMDsg cSsrKQorICAgIDsKK30KLS0gCjIuNS4wCgo= --001a11c00db4539eea05271a482f--