From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79180 invoked by alias); 5 Feb 2020 22:55:16 -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 79172 invoked by uid 89); 5 Feb 2020 22:55:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-oi1-f196.google.com Received: from mail-oi1-f196.google.com (HELO mail-oi1-f196.google.com) (209.85.167.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 05 Feb 2020 22:55:13 +0000 Received: by mail-oi1-f196.google.com with SMTP id a142so2569296oii.7 for ; Wed, 05 Feb 2020 14:55:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=cq87rhTqkHXO4p+BjeVeyi6fobDz5QAqjLp6M3uvWKw=; b=rSTOg1WwC2p2EKgX1hsQcxqZ8UtRpajlzGTJEAoLXRamR+aEiTQRw+AMoVBrl29pq7 k0CdFNBIjmUf+G6cPvN5Dij7yEUVIQJMTpRekhWDwkT30PtR+myPQXptavPuuj0TtWsQ Hef0ZL68EHw5iXCaU7xvYek9ENns1l+GrHTAsfWuHGhDInJ82zZuioJMOpV8QgqTfUG0 W7SUk09egKPIn5PZq4OZKdq5BM0G4e71m2Yes7VhautAz65sWknZ9yqw+72YRPD6fhy2 I8ejWqcKkwOP69U3NKnjwTJzOZJ6oXEJZS+RHoGnjjxjjDxo3/ph7sLnl80rI767Tuov iMLQ== MIME-Version: 1.0 References: <20200205143300.144541-1-hjl.tools@gmail.com> <20200205143300.144541-3-hjl.tools@gmail.com> <20200205223737.GF1941471@redhat.com> In-Reply-To: From: "H.J. Lu" Date: Wed, 05 Feb 2020 22:55:00 -0000 Message-ID: Subject: Re: [PATCH] Add patch_area_size and patch_area_entry to crtl To: Marek Polacek Cc: GCC Patches , Uros Bizjak , Jeff Law , Richard Biener , Richard Earnshaw , Jakub Jelinek , Torsten Duwe , Szabolcs Nagy , Eric Botcazou , Richard Sandiford Content-Type: multipart/mixed; boundary="0000000000007dca29059ddc0c48" X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00306.txt.bz2 --0000000000007dca29059ddc0c48 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 7511 On Wed, Feb 5, 2020 at 2:51 PM H.J. Lu wrote: > > On Wed, Feb 5, 2020 at 2:37 PM Marek Polacek wrote: > > > > On Wed, Feb 05, 2020 at 02:24:48PM -0800, H.J. Lu wrote: > > > On Wed, Feb 5, 2020 at 12:20 PM H.J. Lu wrote: > > > > > > > > On Wed, Feb 5, 2020 at 9:00 AM Richard Sandiford > > > > wrote: > > > > > > > > > > "H.J. Lu" writes: > > > > > > Currently patchable area is at the wrong place. > > > > > > > > > > Agreed :-) > > > > > > > > > > > It is placed immediately > > > > > > after function label and before .cfi_startproc. A backend shou= ld be able > > > > > > to add a pseudo patchable area instruction durectly into RTL. = This patch > > > > > > adds patch_area_size and patch_area_entry to cfun so that the p= atchable > > > > > > area info is available in RTL passes. > > > > > > > > > > It might be better to add it to crtl, since it should only be nee= ded > > > > > during rtl generation. > > > > > > > > > > > It also limits patch_area_size and patch_area_entry to 65535, w= hich is > > > > > > a reasonable maximum size for patchable area. > > > > > > > > > > > > gcc/ > > > > > > > > > > > > PR target/93492 > > > > > > * function.c (expand_function_start): Set cfun->patch_are= a_size > > > > > > and cfun->patch_area_entry. > > > > > > * function.h (function): Add patch_area_size and patch_ar= ea_entry. > > > > > > * opts.c (common_handle_option): Limit > > > > > > function_entry_patch_area_size and function_entry_patch_a= rea_start > > > > > > to USHRT_MAX. Fix a typo in error message. > > > > > > * varasm.c (assemble_start_function): Use cfun->patch_are= a_size > > > > > > and cfun->patch_area_entry. > > > > > > * doc/invoke.texi: Document the maximum value for > > > > > > -fpatchable-function-entry. > > > > > > > > > > > > gcc/testsuite/ > > > > > > > > > > > > PR target/93492 > > > > > > * c-c++-common/patchable_function_entry-error-1.c: New te= st. > > > > > > * c-c++-common/patchable_function_entry-error-2.c: Likewi= se. > > > > > > * c-c++-common/patchable_function_entry-error-3.c: Likewi= se. > > > > > > --- > > > > > > gcc/doc/invoke.texi | 1 + > > > > > > gcc/function.c | 35 +++++++++++= ++++++++ > > > > > > gcc/function.h | 6 ++++ > > > > > > gcc/opts.c | 4 ++- > > > > > > .../patchable_function_entry-error-1.c | 9 +++++ > > > > > > .../patchable_function_entry-error-2.c | 9 +++++ > > > > > > .../patchable_function_entry-error-3.c | 20 +++++++++++ > > > > > > gcc/varasm.c | 30 ++---------= ----- > > > > > > 8 files changed, 85 insertions(+), 29 deletions(-) > > > > > > create mode 100644 gcc/testsuite/c-c++-common/patchable_functi= on_entry-error-1.c > > > > > > create mode 100644 gcc/testsuite/c-c++-common/patchable_functi= on_entry-error-2.c > > > > > > create mode 100644 gcc/testsuite/c-c++-common/patchable_functi= on_entry-error-3.c > > > > > > > > > > > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > > > > > > index 35b341e759f..dd4835199b0 100644 > > > > > > --- a/gcc/doc/invoke.texi > > > > > > +++ b/gcc/doc/invoke.texi > > > > > > @@ -13966,6 +13966,7 @@ If @code{N=3D0}, no pad location is rec= orded. > > > > > > The NOP instructions are inserted at---and maybe before, depen= ding on > > > > > > @var{M}---the function entry address, even before the prologue. > > > > > > > > > > > > +The maximum value of @var{N} and @var{M} is 65535. > > > > > > @end table > > > > > > > > > > > > > > > > > > diff --git a/gcc/function.c b/gcc/function.c > > > > > > index d8008f60422..badbf538eec 100644 > > > > > > --- a/gcc/function.c > > > > > > +++ b/gcc/function.c > > > > > > @@ -5202,6 +5202,41 @@ expand_function_start (tree subr) > > > > > > /* If we are doing generic stack checking, the probe should = go here. */ > > > > > > if (flag_stack_check =3D=3D GENERIC_STACK_CHECK) > > > > > > stack_check_probe_note =3D emit_note (NOTE_INSN_DELETED); > > > > > > + > > > > > > + unsigned HOST_WIDE_INT patch_area_size =3D function_entry_pa= tch_area_size; > > > > > > + unsigned HOST_WIDE_INT patch_area_entry =3D function_entry_p= atch_area_start; > > > > > > + > > > > > > + tree patchable_function_entry_attr > > > > > > + =3D lookup_attribute ("patchable_function_entry", > > > > > > + DECL_ATTRIBUTES (cfun->decl)); > > > > > > + if (patchable_function_entry_attr) > > > > > > + { > > > > > > + tree pp_val =3D TREE_VALUE (patchable_function_entry_att= r); > > > > > > + tree patchable_function_entry_value1 =3D TREE_VALUE (pp_= val); > > > > > > + > > > > > > + patch_area_size =3D tree_to_uhwi (patchable_function_ent= ry_value1); > > > > > > + patch_area_entry =3D 0; > > > > > > + if (TREE_CHAIN (pp_val) !=3D NULL_TREE) > > > > > > + { > > > > > > + tree patchable_function_entry_value2 > > > > > > + =3D TREE_VALUE (TREE_CHAIN (pp_val)); > > > > > > + patch_area_entry =3D tree_to_uhwi (patchable_function_e= ntry_value2); > > > > > > + } > > > > > > + if (patch_area_size > USHRT_MAX || patch_area_size > USH= RT_MAX) > > > > > > + error ("invalid values for % a= ttribute"); > > > > > > > > > > This should probably go in handle_patchable_function_entry_attrib= ute > > > > > instead. It doesn't look like we have a clear policy about wheth= er > > > > > errors or warnings are right for unrecognised arguments to known > > > > > attribute names, but handle_patchable_function_entry_attribute re= ports > > > > > an OPT_Wattributes warning for arguments that aren't integers. D= oing the > > > > > same for out-of-range integers would be more consistent and means= that > > > > > we wouldn't break existing code if we relaxed/changed the rules i= n future. > > > > > > > > Like this? OK for master if there is no regression? > > > > > > > > > > There is a small problem. Warnings from C and C++ frond-ends are dif= ferent: > > > > > > [hjl@gnu-skx-1 gcc]$ cat x.c > > > void > > > __attribute__((patchable_function_entry(65536))) > > > foo1 (void) > > > { /* { dg-warning "'patchable_function_entry' attribute argument > > > '65536' is out of range" } */ > > > } > > > [hjl@gnu-skx-1 gcc]$ ./xgcc -B./ -S x.c > > > x.c:4:1: warning: =E2=80=98patchable_function_entry=E2=80=99 attribut= e argument > > > =E2=80=9865536=E2=80=99 is out of range (> 65535) [-Wattributes] > > > 4 | { /* { dg-warning "'patchable_function_entry' attribute > > > argument '65536' is out of range" } */ > > > | ^ > > > [hjl@gnu-skx-1 gcc]$ ./xg++ -B./ -S x.c > > > x.c:3:11: warning: =E2=80=98patchable_function_entry=E2=80=99 attribu= te argument > > > =E2=80=9865536=E2=80=99 is out of range (> 65535) [-Wattributes] > > > 3 | foo1 (void) > > > | ^ > > > [hjl@gnu-skx-1 gcc]$ > > > > > > C warns at line 4 and C++ warns at line 3. Do I need separate tests > > > for C and C++? > > > > I think better would be > > > > /* { dg-error "foo" "" { target c } } */ > > /* { dg-error "bar" "" { target c++ } .-1 } */ > > > > Marek > > > > It worked. Here is the patch with updated tests. There are no regressions on Linux/x86-64. OK for master? Thanks. --=20 H.J. --0000000000007dca29059ddc0c48 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-patch_area_size-and-patch_area_entry-to-crtl.patch" Content-Disposition: attachment; filename="0001-Add-patch_area_size-and-patch_area_entry-to-crtl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k69wrxiw0 Content-length: 13770 RnJvbSA4MzIwYmJiODNlNTNmOWUxMzVmZTFlY2E1MDg0MGJhYWNmMTU3ODgx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgNSBGZWIgMjAyMCAwNDow MTo1OSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBwYXRjaF9hcmVhX3Np emUgYW5kIHBhdGNoX2FyZWFfZW50cnkgdG8gY3J0bAoKQ3VycmVudGx5IHBh dGNoYWJsZSBhcmVhIGlzIGF0IHRoZSB3cm9uZyBwbGFjZS4gIEl0IGlzIHBs YWNlZCBpbW1lZGlhdGVseQphZnRlciBmdW5jdGlvbiBsYWJlbCBhbmQgYmVm b3JlIC5jZmlfc3RhcnRwcm9jLiAgQSBiYWNrZW5kIHNob3VsZCBiZSBhYmxl CnRvIGFkZCBhIHBzZXVkbyBwYXRjaGFibGUgYXJlYSBpbnN0cnVjdGlvbiBk dXJlY3RseSBpbnRvIFJUTC4gIFRoaXMgcGF0Y2gKYWRkcyBwYXRjaF9hcmVh X3NpemUgYW5kIHBhdGNoX2FyZWFfZW50cnkgdG8gY3J0bCBzbyB0aGF0IHRo ZSBwYXRjaGFibGUKYXJlYSBpbmZvIGlzIGF2YWlsYWJsZSBpbiBSVEwgcGFz c2VzLgoKSXQgYWxzbyBsaW1pdHMgcGF0Y2hfYXJlYV9zaXplIGFuZCBwYXRj aF9hcmVhX2VudHJ5IHRvIDY1NTM1LCB3aGljaCBpcwphIHJlYXNvbmFibGUg bWF4aW11bSBzaXplIGZvciBwYXRjaGFibGUgYXJlYS4KCmdjYy9jLWZhbWls eS8KCglQUiB0YXJnZXQvOTM0OTIKCSogYy1hdHRyaWJzLmMgKGhhbmRsZV9w YXRjaGFibGVfZnVuY3Rpb25fZW50cnlfYXR0cmlidXRlKTogTGltaXQKCXZh bHVlIHRvIFVTSFJUX01BWCAoNjU1MzUpLgoKZ2NjLwoKCVBSIHRhcmdldC85 MzQ5MgoJKiBjZmdleHBhbmQuYyAocGFzc19leHBhbmQ6OmV4ZWN1dGUpOiBT ZXQgY3J0bC0+cGF0Y2hfYXJlYV9zaXplCglhbmQgY3J0bC0+cGF0Y2hfYXJl YV9lbnRyeS4KCSogZW1pdC1ydGwuaCAocnRsX2RhdGEpOiBBZGQgcGF0Y2hf YXJlYV9zaXplIGFuZCBwYXRjaF9hcmVhX2VudHJ5LgoJKiBvcHRzLmMgKGNv bW1vbl9oYW5kbGVfb3B0aW9uKTogTGltaXQKCWZ1bmN0aW9uX2VudHJ5X3Bh dGNoX2FyZWFfc2l6ZSBhbmQgZnVuY3Rpb25fZW50cnlfcGF0Y2hfYXJlYV9z dGFydAoJdG8gVVNIUlRfTUFYLiAgRml4IGEgdHlwbyBpbiBlcnJvciBtZXNz YWdlLgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBV c2UgY3J0bC0+cGF0Y2hfYXJlYV9zaXplCglhbmQgY3J0bC0+cGF0Y2hfYXJl YV9lbnRyeS4KCSogZG9jL2ludm9rZS50ZXhpOiBEb2N1bWVudCB0aGUgbWF4 aW11bSB2YWx1ZSBmb3IKCS1mcGF0Y2hhYmxlLWZ1bmN0aW9uLWVudHJ5LgoK Z2NjL3Rlc3RzdWl0ZS8KCglQUiB0YXJnZXQvOTM0OTIKCSogYy1jKystY29t bW9uL3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0xLmM6IE5ldyB0 ZXN0LgoJKiBjLWMrKy1jb21tb24vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5 LWVycm9yLTIuYzogTGlrZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9wYXRjaGFi bGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMy5jOiBMaWtld2lzZS4KLS0tCiBn Y2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMgICAgICAgICAgICAgICAgICAgICAg fCAgOSArKysrKwogZ2NjL2NmZ2V4cGFuZC5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMzMgKysrKysrKysrKysrKysrKysrKwogZ2NjL2Rv Yy9pbnZva2UudGV4aSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEg KwogZ2NjL2VtaXQtcnRsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDYgKysrKwogZ2NjL29wdHMuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDQgKystCiAuLi4vcGF0Y2hhYmxlX2Z1bmN0 aW9uX2VudHJ5LWVycm9yLTEuYyAgICAgICAgfCAgOSArKysrKwogLi4uL3Bh dGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0yLmMgICAgICAgIHwgIDkg KysrKysKIC4uLi9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMy5j ICAgICAgICB8IDIwICsrKysrKysrKysrCiBnY2MvdmFyYXNtLmMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMCArKy0tLS0tLS0tLS0t LS0tLQogOSBmaWxlcyBjaGFuZ2VkLCA5MiBpbnNlcnRpb25zKCspLCAyOSBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnktZXJyb3It MS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3Bh dGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0zLmMKCmRpZmYgLS1naXQg YS9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMgYi9nY2MvYy1mYW1pbHkvYy1h dHRyaWJzLmMKaW5kZXggN2VjNmZjODQ4YWMuLjE1ZGJkYTFlZmY3IDEwMDY0 NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMKKysrIGIvZ2NjL2Mt ZmFtaWx5L2MtYXR0cmlicy5jCkBAIC00NTM5LDYgKzQ1MzksMTUgQEAgaGFu ZGxlX3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV9hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsCiAJICAqbm9fYWRkX2F0dHJzID0g dHJ1ZTsKIAkgIHJldHVybiBOVUxMX1RSRUU7CiAJfQorCisgICAgICBpZiAo dHJlZV90b191aHdpICh2YWwpID4gVVNIUlRfTUFYKQorCXsKKwkgIHdhcm5p bmcgKE9QVF9XYXR0cmlidXRlcywKKwkJICAgIiVxRSBhdHRyaWJ1dGUgYXJn dW1lbnQgJXFFIGlzIG91dCBvZiByYW5nZSAoPiA2NTUzNSkiLAorCQkgICBu YW1lLCB2YWwpOworCSAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisJICByZXR1 cm4gTlVMTF9UUkVFOworCX0KICAgICB9CiAgIHJldHVybiBOVUxMX1RSRUU7 CiB9CmRpZmYgLS1naXQgYS9nY2MvY2ZnZXhwYW5kLmMgYi9nY2MvY2ZnZXhw YW5kLmMKaW5kZXggOTg2NGU0MzQ0ZDIuLmYwNjNmNTBjMjYzIDEwMDY0NAot LS0gYS9nY2MvY2ZnZXhwYW5kLmMKKysrIGIvZ2NjL2NmZ2V4cGFuZC5jCkBA IC02NjU2LDYgKzY2NTYsMzkgQEAgcGFzc19leHBhbmQ6OmV4ZWN1dGUgKGZ1 bmN0aW9uICpmdW4pCiAgIGlmIChjcnRsLT50YWlsX2NhbGxfZW1pdCkKICAg ICBmaXh1cF90YWlsX2NhbGxzICgpOwogCisgIHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgcGF0Y2hfYXJlYV9zaXplID0gZnVuY3Rpb25fZW50cnlfcGF0Y2hf YXJlYV9zaXplOworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBhdGNoX2Fy ZWFfZW50cnkgPSBmdW5jdGlvbl9lbnRyeV9wYXRjaF9hcmVhX3N0YXJ0Owor CisgIHRyZWUgcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5X2F0dHIKKyAgICA9 IGxvb2t1cF9hdHRyaWJ1dGUgKCJwYXRjaGFibGVfZnVuY3Rpb25fZW50cnki LAorCQkJREVDTF9BVFRSSUJVVEVTIChjZnVuLT5kZWNsKSk7CisgIGlmIChw YXRjaGFibGVfZnVuY3Rpb25fZW50cnlfYXR0cikKKyAgICB7CisgICAgICB0 cmVlIHBwX3ZhbCA9IFRSRUVfVkFMVUUgKHBhdGNoYWJsZV9mdW5jdGlvbl9l bnRyeV9hdHRyKTsKKyAgICAgIHRyZWUgcGF0Y2hhYmxlX2Z1bmN0aW9uX2Vu dHJ5X3ZhbHVlMSA9IFRSRUVfVkFMVUUgKHBwX3ZhbCk7CisKKyAgICAgIHBh dGNoX2FyZWFfc2l6ZSA9IHRyZWVfdG9fdWh3aSAocGF0Y2hhYmxlX2Z1bmN0 aW9uX2VudHJ5X3ZhbHVlMSk7CisgICAgICBwYXRjaF9hcmVhX2VudHJ5ID0g MDsKKyAgICAgIGlmIChUUkVFX0NIQUlOIChwcF92YWwpICE9IE5VTExfVFJF RSkKKwl7CisJICB0cmVlIHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV92YWx1 ZTIKKwkgICAgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChwcF92YWwpKTsK KwkgIHBhdGNoX2FyZWFfZW50cnkgPSB0cmVlX3RvX3Vod2kgKHBhdGNoYWJs ZV9mdW5jdGlvbl9lbnRyeV92YWx1ZTIpOworCX0KKyAgICB9CisKKyAgaWYg KHBhdGNoX2FyZWFfZW50cnkgPiBwYXRjaF9hcmVhX3NpemUpCisgICAgewor ICAgICAgaWYgKHBhdGNoX2FyZWFfc2l6ZSA+IDApCisJd2FybmluZyAoT1BU X1dhdHRyaWJ1dGVzLAorCQkgInBhdGNoYWJsZSBmdW5jdGlvbiBlbnRyeSAl d3UgZXhjZWVkcyBzaXplICV3dSIsCisJCSBwYXRjaF9hcmVhX2VudHJ5LCBw YXRjaF9hcmVhX3NpemUpOworICAgICAgcGF0Y2hfYXJlYV9lbnRyeSA9IDA7 CisgICAgfQorCisgIGNydGwtPnBhdGNoX2FyZWFfc2l6ZSA9IHBhdGNoX2Fy ZWFfc2l6ZTsKKyAgY3J0bC0+cGF0Y2hfYXJlYV9lbnRyeSA9IHBhdGNoX2Fy ZWFfZW50cnk7CisKICAgLyogQkIgc3ViZGl2aXNpb24gbWF5IGhhdmUgY3Jl YXRlZCBiYXNpYyBibG9ja3MgdGhhdCBhcmUgYXJlIG9ubHkgcmVhY2hhYmxl CiAgICAgIGZyb20gdW5saWtlbHkgYmJzIGJ1dCBub3QgbWFya2VkIGFzIHN1 Y2ggaW4gdGhlIHByb2ZpbGUuICAqLwogICBpZiAob3B0aW1pemUpCmRpZmYg LS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2Uu dGV4aQppbmRleCAzNWIzNDFlNzU5Zi4uZGQ0ODM1MTk5YjAgMTAwNjQ0Ci0t LSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2RvYy9pbnZva2Uu dGV4aQpAQCAtMTM5NjYsNiArMTM5NjYsNyBAQCBJZiBAY29kZXtOPTB9LCBu byBwYWQgbG9jYXRpb24gaXMgcmVjb3JkZWQuCiBUaGUgTk9QIGluc3RydWN0 aW9ucyBhcmUgaW5zZXJ0ZWQgYXQtLS1hbmQgbWF5YmUgYmVmb3JlLCBkZXBl bmRpbmcgb24KIEB2YXJ7TX0tLS10aGUgZnVuY3Rpb24gZW50cnkgYWRkcmVz cywgZXZlbiBiZWZvcmUgdGhlIHByb2xvZ3VlLgogCitUaGUgbWF4aW11bSB2 YWx1ZSBvZiBAdmFye059IGFuZCBAdmFye019IGlzIDY1NTM1LgogQGVuZCB0 YWJsZQogCiAKZGlmZiAtLWdpdCBhL2djYy9lbWl0LXJ0bC5oIGIvZ2NjL2Vt aXQtcnRsLmgKaW5kZXggYTg3OGVmZTNjZjcuLjNkNjU2NWM4YTMwIDEwMDY0 NAotLS0gYS9nY2MvZW1pdC1ydGwuaAorKysgYi9nY2MvZW1pdC1ydGwuaApA QCAtMTczLDYgKzE3MywxMiBAQCBzdHJ1Y3QgR1RZKCgpKSBydGxfZGF0YSB7 CiAgICAgICAgIGxvY2FsIHN0YWNrLiAgKi8KICAgdW5zaWduZWQgaW50IHN0 YWNrX2FsaWdubWVudF9lc3RpbWF0ZWQ7CiAKKyAgLyogSG93IG1hbnkgTk9Q IGluc25zIHRvIHBsYWNlIGF0IGVhY2ggZnVuY3Rpb24gZW50cnkgYnkgZGVm YXVsdC4gICovCisgIHVuc2lnbmVkIHNob3J0IHBhdGNoX2FyZWFfc2l6ZTsK KworICAvKiBIb3cgZmFyIHRoZSByZWFsIGFzbSBlbnRyeSBwb2ludCBpcyBp bnRvIHRoaXMgYXJlYS4gICovCisgIHVuc2lnbmVkIHNob3J0IHBhdGNoX2Fy ZWFfZW50cnk7CisKICAgLyogRm9yIHJlb3JnLiAgKi8KIAogICAvKiBOb256 ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGNhbGxlZCBidWlsdGlu X3JldHVybl9hZGRyIG9yCmRpZmYgLS1naXQgYS9nY2Mvb3B0cy5jIGIvZ2Nj L29wdHMuYwppbmRleCA3YWZmZWI0MWE5Ni4uYzYwMTFmMWY5YjcgMTAwNjQ0 Ci0tLSBhL2djYy9vcHRzLmMKKysrIGIvZ2NjL29wdHMuYwpAQCAtMjU5OCwx MCArMjU5OCwxMiBAQCBjb21tb25faGFuZGxlX29wdGlvbiAoc3RydWN0IGdj Y19vcHRpb25zICpvcHRzLAogCSAgICBmdW5jdGlvbl9lbnRyeV9wYXRjaF9h cmVhX3N0YXJ0ID0gMDsKIAkgIH0KIAlpZiAoZnVuY3Rpb25fZW50cnlfcGF0 Y2hfYXJlYV9zaXplIDwgMAorCSAgICB8fCBmdW5jdGlvbl9lbnRyeV9wYXRj aF9hcmVhX3NpemUgPiBVU0hSVF9NQVgKIAkgICAgfHwgZnVuY3Rpb25fZW50 cnlfcGF0Y2hfYXJlYV9zdGFydCA8IDAKKwkgICAgfHwgZnVuY3Rpb25fZW50 cnlfcGF0Y2hfYXJlYV9zdGFydCA+IFVTSFJUX01BWAogCSAgICB8fCBmdW5j dGlvbl9lbnRyeV9wYXRjaF9hcmVhX3NpemUgCiAJCTwgZnVuY3Rpb25fZW50 cnlfcGF0Y2hfYXJlYV9zdGFydCkKLQkgIGVycm9yICgiaW52YWxpZCBhcmd1 bWVudHMgZm9yICU8LWZwYXRjaGFibGVfZnVuY3Rpb25fZW50cnklPiIpOwor CSAgZXJyb3IgKCJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgJTwtZnBhdGNoYWJs ZS1mdW5jdGlvbi1lbnRyeSU+Iik7CiAJZnJlZSAocGF0Y2hfYXJlYV9hcmcp OwogICAgICAgfQogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnkt ZXJyb3ItMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcGF0Y2hh YmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjYwYmY0NmNmZTMKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wYXRjaGFi bGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMS5jCkBAIC0wLDAgKzEsOSBAQAor LyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgISB7IG52cHR4Ki0qLSog dmlzaXVtLSotKiB9IH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAt ZnBhdGNoYWJsZS1mdW5jdGlvbi1lbnRyeT02NTUzNiwxIiB9ICovCisvKiB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZuby1waWUiIHsgdGFyZ2V0IHNw YXJjKi0qLSogfSB9ICovCisvKiB7IGRnLWVycm9yICJpbnZhbGlkIGFyZ3Vt ZW50cyBmb3IgJy1mcGF0Y2hhYmxlLWZ1bmN0aW9uLWVudHJ5JyIgIiIgeyB0 YXJnZXQgKi0qLSogfSAwIH0gKi8KKwordm9pZAorZm9vICh2b2lkKQorewor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcGF0 Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTIuYyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJv ci0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjkwZjg4Yzc4YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9y LTIuYwpAQCAtMCwwICsxLDkgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRh cmdldCB7ICEgeyBudnB0eCotKi0qIHZpc2l1bS0qLSogfSB9IH0gfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLWZwYXRjaGFibGUtZnVuY3Rpb24tZW50 cnk9MSw2NTUzNiIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1mbm8tcGllIiB7IHRhcmdldCBzcGFyYyotKi0qIH0gfSAqLworLyogeyBk Zy1lcnJvciAiaW52YWxpZCBhcmd1bWVudHMgZm9yICctZnBhdGNoYWJsZS1m dW5jdGlvbi1lbnRyeSciICIiIHsgdGFyZ2V0ICotKi0qIH0gMCB9ICovCisK K3ZvaWQKK2ZvbyAodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1l cnJvci0zLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wYXRjaGFi bGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iM2RhZWFiY2JiNgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3BhdGNoYWJs ZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0zLmMKQEAgLTAsMCArMSwyMCBAQAor LyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgISB7IG52cHR4Ki0qLSog dmlzaXVtLSotKiB9IH0gfSB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0 aW9ucyAiLWZuby1waWUiIHsgdGFyZ2V0IHNwYXJjKi0qLSogfSB9ICovCisK K3ZvaWQKKyBfX2F0dHJpYnV0ZV9fKChwYXRjaGFibGVfZnVuY3Rpb25fZW50 cnkoNjU1MzYpKSkKK2ZvbzEgKHZvaWQpIC8qIHsgZGctd2FybmluZyAiJ3Bh dGNoYWJsZV9mdW5jdGlvbl9lbnRyeScgYXR0cmlidXRlIGFyZ3VtZW50ICc2 NTUzNicgaXMgb3V0IG9mIHJhbmdlIiAiIiB7IHRhcmdldCBjKysgfSB9ICov Cit7IC8qIHsgZGctd2FybmluZyAiJ3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRy eScgYXR0cmlidXRlIGFyZ3VtZW50ICc2NTUzNicgaXMgb3V0IG9mIHJhbmdl IiAiIiB7IHRhcmdldCBjIH0gfSAqLworfQorCit2b2lkCisgX19hdHRyaWJ1 dGVfXygocGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5KDY1NTM2LDEpKSkKK2Zv bzIgKHZvaWQpIC8qIHsgZGctd2FybmluZyAiJ3BhdGNoYWJsZV9mdW5jdGlv bl9lbnRyeScgYXR0cmlidXRlIGFyZ3VtZW50ICc2NTUzNicgaXMgb3V0IG9m IHJhbmdlIiAiIiB7IHRhcmdldCBjKysgfSB9ICovCit7IC8qIHsgZGctd2Fy bmluZyAiJ3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeScgYXR0cmlidXRlIGFy Z3VtZW50ICc2NTUzNicgaXMgb3V0IG9mIHJhbmdlIiAiIiB7IHRhcmdldCBj IH0gfSAqLworfQorCit2b2lkCisgX19hdHRyaWJ1dGVfXygocGF0Y2hhYmxl X2Z1bmN0aW9uX2VudHJ5KDY1NTM2LDY1NTM2KSkpCitmb28zICh2b2lkKSAv KiB7IGRnLXdhcm5pbmcgIidwYXRjaGFibGVfZnVuY3Rpb25fZW50cnknIGF0 dHJpYnV0ZSBhcmd1bWVudCAnNjU1MzYnIGlzIG91dCBvZiByYW5nZSIgIiIg eyB0YXJnZXQgYysrIH0gfSAqLworeyAvKiB7IGRnLXdhcm5pbmcgIidwYXRj aGFibGVfZnVuY3Rpb25fZW50cnknIGF0dHJpYnV0ZSBhcmd1bWVudCAnNjU1 MzYnIGlzIG91dCBvZiByYW5nZSIgIiIgeyB0YXJnZXQgYyB9IH0gKi8KK30K ZGlmZiAtLWdpdCBhL2djYy92YXJhc20uYyBiL2djYy92YXJhc20uYwppbmRl eCBkYzZkYTZjMGI1Yi4uOTE3OWZlY2RmODUgMTAwNjQ0Ci0tLSBhL2djYy92 YXJhc20uYworKysgYi9nY2MvdmFyYXNtLmMKQEAgLTE4NTcsMzQgKzE4NTcs OCBAQCBhc3NlbWJsZV9zdGFydF9mdW5jdGlvbiAodHJlZSBkZWNsLCBjb25z dCBjaGFyICpmbm5hbWUpCiAgIGlmIChERUNMX1BSRVNFUlZFX1AgKGRlY2wp KQogICAgIHRhcmdldG0uYXNtX291dC5tYXJrX2RlY2xfcHJlc2VydmVkIChm bm5hbWUpOwogCi0gIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgcGF0Y2hfYXJl YV9zaXplID0gZnVuY3Rpb25fZW50cnlfcGF0Y2hfYXJlYV9zaXplOwotICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBhdGNoX2FyZWFfZW50cnkgPSBmdW5j dGlvbl9lbnRyeV9wYXRjaF9hcmVhX3N0YXJ0OwotCi0gIHRyZWUgcGF0Y2hh YmxlX2Z1bmN0aW9uX2VudHJ5X2F0dHIKLSAgICA9IGxvb2t1cF9hdHRyaWJ1 dGUgKCJwYXRjaGFibGVfZnVuY3Rpb25fZW50cnkiLCBERUNMX0FUVFJJQlVU RVMgKGRlY2wpKTsKLSAgaWYgKHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV9h dHRyKQotICAgIHsKLSAgICAgIHRyZWUgcHBfdmFsID0gVFJFRV9WQUxVRSAo cGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5X2F0dHIpOwotICAgICAgdHJlZSBw YXRjaGFibGVfZnVuY3Rpb25fZW50cnlfdmFsdWUxID0gVFJFRV9WQUxVRSAo cHBfdmFsKTsKLQotICAgICAgcGF0Y2hfYXJlYV9zaXplID0gdHJlZV90b191 aHdpIChwYXRjaGFibGVfZnVuY3Rpb25fZW50cnlfdmFsdWUxKTsKLSAgICAg IHBhdGNoX2FyZWFfZW50cnkgPSAwOwotICAgICAgaWYgKFRSRUVfQ0hBSU4g KHBwX3ZhbCkgIT0gTlVMTF9UUkVFKQotCXsKLQkgIHRyZWUgcGF0Y2hhYmxl X2Z1bmN0aW9uX2VudHJ5X3ZhbHVlMgotCSAgICA9IFRSRUVfVkFMVUUgKFRS RUVfQ0hBSU4gKHBwX3ZhbCkpOwotCSAgcGF0Y2hfYXJlYV9lbnRyeSA9IHRy ZWVfdG9fdWh3aSAocGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5X3ZhbHVlMik7 Ci0JfQotICAgIH0KLQotICBpZiAocGF0Y2hfYXJlYV9lbnRyeSA+IHBhdGNo X2FyZWFfc2l6ZSkKLSAgICB7Ci0gICAgICBpZiAocGF0Y2hfYXJlYV9zaXpl ID4gMCkKLQl3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsCi0JCSAicGF0Y2hh YmxlIGZ1bmN0aW9uIGVudHJ5ICV3dSBleGNlZWRzIHNpemUgJXd1IiwKLQkJ IHBhdGNoX2FyZWFfZW50cnksIHBhdGNoX2FyZWFfc2l6ZSk7Ci0gICAgICBw YXRjaF9hcmVhX2VudHJ5ID0gMDsKLSAgICB9CisgIHVuc2lnbmVkIHNob3J0 IHBhdGNoX2FyZWFfc2l6ZSA9IGNydGwtPnBhdGNoX2FyZWFfc2l6ZTsKKyAg dW5zaWduZWQgc2hvcnQgcGF0Y2hfYXJlYV9lbnRyeSA9IGNydGwtPnBhdGNo X2FyZWFfZW50cnk7CiAKICAgLyogRW1pdCB0aGUgcGF0Y2hpbmcgYXJlYSBi ZWZvcmUgdGhlIGVudHJ5IGxhYmVsLCBpZiBhbnkuICAqLwogICBpZiAocGF0 Y2hfYXJlYV9lbnRyeSA+IDApCi0tIAoyLjI0LjEKCg== --0000000000007dca29059ddc0c48--