From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd44.google.com (mail-io1-xd44.google.com [IPv6:2607:f8b0:4864:20::d44]) by sourceware.org (Postfix) with ESMTPS id 46661386F471 for ; Sat, 2 May 2020 01:24:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 46661386F471 Received: by mail-io1-xd44.google.com with SMTP id j8so2337666iog.13 for ; Fri, 01 May 2020 18:24:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=9nZJ+IXW1Dk27qDE+crJlnWFyLZsg4OLzUDzx6xQ9Yg=; b=f84kYg/ZtxjLLq83X1hGsab4frIi1uJya7o0/IowOVRk5MpXHFlRHuxsTiRyh7Ww// itkiOiJGg/o1ZXV++J+Hwf3lHfhWvQCmIY4MuzZ1LhTbEyKBlKVwCykuwgrV7e5aI7Af B3ampHcDTmbgJliFkFWhpcuNO9xJqB5yd0tAWgWSXVCjBnQRHatRzLqtGPOLI7lHDHC7 RyIQ9zm+YgQIrOuIL5mck8GuIPhyjSKuVDCcN8yLuYdZ8ugwndHBNXVBO8hC6/b1hRPh S180+FKOZKZ0+swZ6H+aHQM7H0XlbaWUbF1/ZyF5oeTWUK+rdsgoUWCttYmMnoztYMU+ yGJw== X-Gm-Message-State: AGi0PubUbJ+WwWppw64/j0+DQX/wN9DGFrcBVcQk6PGRwpXPAUxft1uq 5JiXbF1yWJfAk1OvsaSFVY6KCkw+2Sx/znTCcMI= X-Google-Smtp-Source: APiQypIIjWpxvJZa8HOxwbHPAD1DoVqVNphp90GY0Jum/lf36oJJRPyHW+4QkrGvb1vOOy5g33LPoc3qeFwAgrboAtA= X-Received: by 2002:a05:6602:26d5:: with SMTP id g21mr6129647ioo.91.1588382640489; Fri, 01 May 2020 18:24:00 -0700 (PDT) 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: Fri, 1 May 2020 18:23:24 -0700 Message-ID: Subject: Re: [PATCH] Add patch_area_size and patch_area_entry to crtl To: Marek Polacek , 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="0000000000000df85705a4a0278f" X-Spam-Status: No, score=-19.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_MANYTO, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 May 2020 01:24:05 -0000 --0000000000000df85705a4a0278f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 6, 2020 at 12:01 AM Richard Sandiford wrote: > > "H.J. Lu" writes: > > On Wed, Feb 5, 2020 at 2:51 PM H.J. Lu wrote: > >> > >> On Wed, Feb 5, 2020 at 2:37 PM Marek Polacek wrot= e: > >> > > >> > 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 wrot= e: > >> > > > > >> > > > 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 s= hould 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 th= e patchable > >> > > > > > area info is available in RTL passes. > >> > > > > > >> > > > > It might be better to add it to crtl, since it should only be = needed > >> > > > > during rtl generation. > >> > > > > > >> > > > > > It also limits patch_area_size and patch_area_entry to 65535= , which is > >> > > > > > a reasonable maximum size for patchable area. > >> > > > > > > >> > > > > > gcc/ > >> > > > > > > >> > > > > > PR target/93492 > >> > > > > > * function.c (expand_function_start): Set cfun->patch_= area_size > >> > > > > > and cfun->patch_area_entry. > >> > > > > > * function.h (function): Add patch_area_size and patch= _area_entry. > >> > > > > > * opts.c (common_handle_option): Limit > >> > > > > > function_entry_patch_area_size and function_entry_patc= h_area_start > >> > > > > > to USHRT_MAX. Fix a typo in error message. > >> > > > > > * varasm.c (assemble_start_function): Use cfun->patch_= area_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= test. > >> > > > > > * c-c++-common/patchable_function_entry-error-2.c: Lik= ewise. > >> > > > > > * c-c++-common/patchable_function_entry-error-3.c: Lik= ewise. > >> > > > > > --- > >> > > > > > 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_fun= ction_entry-error-1.c > >> > > > > > create mode 100644 gcc/testsuite/c-c++-common/patchable_fun= ction_entry-error-2.c > >> > > > > > create mode 100644 gcc/testsuite/c-c++-common/patchable_fun= ction_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 = recorded. > >> > > > > > The NOP instructions are inserted at---and maybe before, de= pending on > >> > > > > > @var{M}---the function entry address, even before the prolo= gue. > >> > > > > > > >> > > > > > +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 shou= ld 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= _patch_area_size; > >> > > > > > + unsigned HOST_WIDE_INT patch_area_entry =3D function_entr= y_patch_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_= attr); > >> > > > > > + tree patchable_function_entry_value1 =3D TREE_VALUE (= pp_val); > >> > > > > > + > >> > > > > > + patch_area_size =3D tree_to_uhwi (patchable_function_= entry_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_functio= n_entry_value2); > >> > > > > > + } > >> > > > > > + if (patch_area_size > USHRT_MAX || patch_area_size > = USHRT_MAX) > >> > > > > > + error ("invalid values for % attribute"); > >> > > > > > >> > > > > This should probably go in handle_patchable_function_entry_att= ribute > >> > > > > instead. It doesn't look like we have a clear policy about wh= ether > >> > > > > errors or warnings are right for unrecognised arguments to kno= wn > >> > > > > attribute names, but handle_patchable_function_entry_attribute= reports > >> > > > > an OPT_Wattributes warning for arguments that aren't integers.= Doing the > >> > > > > same for out-of-range integers would be more consistent and me= ans that > >> > > > > we wouldn't break existing code if we relaxed/changed the rule= s in future. > >> > > > > >> > > > Like this? OK for master if there is no regression? > >> > > > > >> > > > >> > > There is a small problem. Warnings from C and C++ frond-ends are = different: > >> > > > >> > > [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 attri= bute 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 attr= ibute 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 te= sts > >> > > 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. > > > > > > -- > > H.J. > > > > From 8320bbb83e53f9e135fe1eca50840baacf157881 Mon Sep 17 00:00:00 2001 > > From: "H.J. Lu" > > Date: Wed, 5 Feb 2020 04:01:59 -0800 > > Subject: [PATCH] Add patch_area_size and patch_area_entry to crtl > > > > Currently patchable area is at the wrong place. It is placed immediate= ly > > after function label and before .cfi_startproc. A backend should be ab= le > > to add a pseudo patchable area instruction durectly into RTL. This pat= ch > > adds patch_area_size and patch_area_entry to crtl so that the patchable > > area info is available in RTL passes. > > > > It also limits patch_area_size and patch_area_entry to 65535, which is > > a reasonable maximum size for patchable area. > > > > gcc/c-family/ > > > > PR target/93492 > > * c-attribs.c (handle_patchable_function_entry_attribute): Limit > > value to USHRT_MAX (65535). > > > > gcc/ > > > > PR target/93492 > > * cfgexpand.c (pass_expand::execute): Set crtl->patch_area_size > > and crtl->patch_area_entry. > > * emit-rtl.h (rtl_data): Add patch_area_size and patch_area_entry= . > > * opts.c (common_handle_option): Limit > > function_entry_patch_area_size and function_entry_patch_area_star= t > > to USHRT_MAX. Fix a typo in error message. > > * varasm.c (assemble_start_function): Use crtl->patch_area_size > > and crtl->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 test. > > * c-c++-common/patchable_function_entry-error-2.c: Likewise. > > * c-c++-common/patchable_function_entry-error-3.c: Likewise. > > LGTM, but an RM should have the final say on whether this is > suitable for stage 4. > This is the patch I am checking in. Thanks. --=20 H.J. --0000000000000df85705a4a0278f 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_k9oxyxh00 RnJvbSBmNGE4OWY1YzliZWIzMWY3MDdjOTcwZGIwMzIwZTQ2ODdlOTYyYzg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNSBGZWIgMjAyMCAwNDowMTo1OSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBwYXRj aF9hcmVhX3NpemUgYW5kIHBhdGNoX2FyZWFfZW50cnkgdG8gY3J0bAoKQ3VycmVudGx5IHBhdGNo YWJsZSBhcmVhIGlzIGF0IHRoZSB3cm9uZyBwbGFjZS4gIEl0IGlzIHBsYWNlZCBpbW1lZGlhdGVs eQphZnRlciBmdW5jdGlvbiBsYWJlbCBhbmQgYmVmb3JlIC5jZmlfc3RhcnRwcm9jLiAgQSBiYWNr ZW5kIHNob3VsZCBiZSBhYmxlCnRvIGFkZCBhIHBzZXVkbyBwYXRjaGFibGUgYXJlYSBpbnN0cnVj dGlvbiBkdXJlY3RseSBpbnRvIFJUTC4gIFRoaXMgcGF0Y2gKYWRkcyBwYXRjaF9hcmVhX3NpemUg YW5kIHBhdGNoX2FyZWFfZW50cnkgdG8gY3J0bCBzbyB0aGF0IHRoZSBwYXRjaGFibGUKYXJlYSBp bmZvIGlzIGF2YWlsYWJsZSBpbiBSVEwgcGFzc2VzLgoKSXQgYWxzbyBsaW1pdHMgcGF0Y2hfYXJl YV9zaXplIGFuZCBwYXRjaF9hcmVhX2VudHJ5IHRvIDY1NTM1LCB3aGljaCBpcwphIHJlYXNvbmFi bGUgbWF4aW11bSBzaXplIGZvciBwYXRjaGFibGUgYXJlYS4KCmdjYy9jLWZhbWlseS8KCglQUiB0 YXJnZXQvOTM0OTIKCSogYy1hdHRyaWJzLmMgKGhhbmRsZV9wYXRjaGFibGVfZnVuY3Rpb25fZW50 cnlfYXR0cmlidXRlKTogTGltaXQKCXZhbHVlIHRvIFVTSFJUX01BWCAoNjU1MzUpLgoKZ2NjLwoK CVBSIHRhcmdldC85MzQ5MgoJKiBjZmdleHBhbmQuYyAocGFzc19leHBhbmQ6OmV4ZWN1dGUpOiBT ZXQgY3J0bC0+cGF0Y2hfYXJlYV9zaXplCglhbmQgY3J0bC0+cGF0Y2hfYXJlYV9lbnRyeS4KCSog ZW1pdC1ydGwuaCAocnRsX2RhdGEpOiBBZGQgcGF0Y2hfYXJlYV9zaXplIGFuZCBwYXRjaF9hcmVh X2VudHJ5LgoJKiBvcHRzLmMgKGNvbW1vbl9oYW5kbGVfb3B0aW9uKTogTGltaXQKCWZ1bmN0aW9u X2VudHJ5X3BhdGNoX2FyZWFfc2l6ZSBhbmQgZnVuY3Rpb25fZW50cnlfcGF0Y2hfYXJlYV9zdGFy dAoJdG8gVVNIUlRfTUFYLiAgRml4IGEgdHlwbyBpbiBlcnJvciBtZXNzYWdlLgoJKiB2YXJhc20u YyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24pOiBVc2UgY3J0bC0+cGF0Y2hfYXJlYV9zaXplCglh bmQgY3J0bC0+cGF0Y2hfYXJlYV9lbnRyeS4KCSogZG9jL2ludm9rZS50ZXhpOiBEb2N1bWVudCB0 aGUgbWF4aW11bSB2YWx1ZSBmb3IKCS1mcGF0Y2hhYmxlLWZ1bmN0aW9uLWVudHJ5LgoKZ2NjL3Rl c3RzdWl0ZS8KCglQUiB0YXJnZXQvOTM0OTIKCSogYy1jKystY29tbW9uL3BhdGNoYWJsZV9mdW5j dGlvbl9lbnRyeS1lcnJvci0xLmM6IE5ldyB0ZXN0LgoJKiBjLWMrKy1jb21tb24vcGF0Y2hhYmxl X2Z1bmN0aW9uX2VudHJ5LWVycm9yLTIuYzogTGlrZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9wYXRj aGFibGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMy5jOiBMaWtld2lzZS4KLS0tCiBnY2MvYy1mYW1p bHkvYy1hdHRyaWJzLmMgICAgICAgICAgICAgICAgICAgICAgfCAgOSArKysrKwogZ2NjL2NmZ2V4 cGFuZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzMgKysrKysrKysrKysrKysr KysrKwogZ2NjL2RvYy9pbnZva2UudGV4aSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEg KwogZ2NjL2VtaXQtcnRsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYgKysr KwogZ2NjL29wdHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKyst CiAuLi4vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTEuYyAgICAgICAgfCAgOSArKysr KwogLi4uL3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0yLmMgICAgICAgIHwgIDkgKysr KysKIC4uLi9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMy5jICAgICAgICB8IDIwICsr KysrKysrKysrCiBnY2MvdmFyYXNtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAzMCArKy0tLS0tLS0tLS0tLS0tLQogOSBmaWxlcyBjaGFuZ2VkLCA5MiBpbnNlcnRpb25zKCsp LCAyOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5 LWVycm9yLTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0zLmMKCmRpZmYgLS1naXQgYS9nY2MvYy1m YW1pbHkvYy1hdHRyaWJzLmMgYi9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMKaW5kZXggYWM5MzZk NWJiYmIuLmExMDEzMTJjNTgxIDEwMDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1hdHRyaWJzLmMK KysrIGIvZ2NjL2MtZmFtaWx5L2MtYXR0cmlicy5jCkBAIC00NTUzLDYgKzQ1NTMsMTUgQEAgaGFu ZGxlX3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSBuYW1l LCB0cmVlIGFyZ3MsCiAJICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKIAkgIHJldHVybiBOVUxMX1RS RUU7CiAJfQorCisgICAgICBpZiAodHJlZV90b191aHdpICh2YWwpID4gVVNIUlRfTUFYKQorCXsK KwkgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywKKwkJICAgIiVxRSBhdHRyaWJ1dGUgYXJndW1l bnQgJXFFIGlzIG91dCBvZiByYW5nZSAoPiA2NTUzNSkiLAorCQkgICBuYW1lLCB2YWwpOworCSAg Km5vX2FkZF9hdHRycyA9IHRydWU7CisJICByZXR1cm4gTlVMTF9UUkVFOworCX0KICAgICB9CiAg IHJldHVybiBOVUxMX1RSRUU7CiB9CmRpZmYgLS1naXQgYS9nY2MvY2ZnZXhwYW5kLmMgYi9nY2Mv Y2ZnZXhwYW5kLmMKaW5kZXggYTdlYzc3ZDVjODUuLjg2ZWZhMjJiZjYwIDEwMDY0NAotLS0gYS9n Y2MvY2ZnZXhwYW5kLmMKKysrIGIvZ2NjL2NmZ2V4cGFuZC5jCkBAIC02NjU2LDYgKzY2NTYsMzkg QEAgcGFzc19leHBhbmQ6OmV4ZWN1dGUgKGZ1bmN0aW9uICpmdW4pCiAgIGlmIChjcnRsLT50YWls X2NhbGxfZW1pdCkKICAgICBmaXh1cF90YWlsX2NhbGxzICgpOwogCisgIHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgcGF0Y2hfYXJlYV9zaXplID0gZnVuY3Rpb25fZW50cnlfcGF0Y2hfYXJlYV9zaXpl OworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBhdGNoX2FyZWFfZW50cnkgPSBmdW5jdGlvbl9l bnRyeV9wYXRjaF9hcmVhX3N0YXJ0OworCisgIHRyZWUgcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5 X2F0dHIKKyAgICA9IGxvb2t1cF9hdHRyaWJ1dGUgKCJwYXRjaGFibGVfZnVuY3Rpb25fZW50cnki LAorCQkJREVDTF9BVFRSSUJVVEVTIChjZnVuLT5kZWNsKSk7CisgIGlmIChwYXRjaGFibGVfZnVu Y3Rpb25fZW50cnlfYXR0cikKKyAgICB7CisgICAgICB0cmVlIHBwX3ZhbCA9IFRSRUVfVkFMVUUg KHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV9hdHRyKTsKKyAgICAgIHRyZWUgcGF0Y2hhYmxlX2Z1 bmN0aW9uX2VudHJ5X3ZhbHVlMSA9IFRSRUVfVkFMVUUgKHBwX3ZhbCk7CisKKyAgICAgIHBhdGNo X2FyZWFfc2l6ZSA9IHRyZWVfdG9fdWh3aSAocGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5X3ZhbHVl MSk7CisgICAgICBwYXRjaF9hcmVhX2VudHJ5ID0gMDsKKyAgICAgIGlmIChUUkVFX0NIQUlOIChw cF92YWwpICE9IE5VTExfVFJFRSkKKwl7CisJICB0cmVlIHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRy eV92YWx1ZTIKKwkgICAgPSBUUkVFX1ZBTFVFIChUUkVFX0NIQUlOIChwcF92YWwpKTsKKwkgIHBh dGNoX2FyZWFfZW50cnkgPSB0cmVlX3RvX3Vod2kgKHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV92 YWx1ZTIpOworCX0KKyAgICB9CisKKyAgaWYgKHBhdGNoX2FyZWFfZW50cnkgPiBwYXRjaF9hcmVh X3NpemUpCisgICAgeworICAgICAgaWYgKHBhdGNoX2FyZWFfc2l6ZSA+IDApCisJd2FybmluZyAo T1BUX1dhdHRyaWJ1dGVzLAorCQkgInBhdGNoYWJsZSBmdW5jdGlvbiBlbnRyeSAld3UgZXhjZWVk cyBzaXplICV3dSIsCisJCSBwYXRjaF9hcmVhX2VudHJ5LCBwYXRjaF9hcmVhX3NpemUpOworICAg ICAgcGF0Y2hfYXJlYV9lbnRyeSA9IDA7CisgICAgfQorCisgIGNydGwtPnBhdGNoX2FyZWFfc2l6 ZSA9IHBhdGNoX2FyZWFfc2l6ZTsKKyAgY3J0bC0+cGF0Y2hfYXJlYV9lbnRyeSA9IHBhdGNoX2Fy ZWFfZW50cnk7CisKICAgLyogQkIgc3ViZGl2aXNpb24gbWF5IGhhdmUgY3JlYXRlZCBiYXNpYyBi bG9ja3MgdGhhdCBhcmUgb25seSByZWFjaGFibGUKICAgICAgZnJvbSB1bmxpa2VseSBiYnMgYnV0 IG5vdCBtYXJrZWQgYXMgc3VjaCBpbiB0aGUgcHJvZmlsZS4gICovCiAgIGlmIChvcHRpbWl6ZSkK ZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCmlu ZGV4IDUyN2QzNjI1MzNhLi43NjdkMWYwNzgwMSAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZva2Uu dGV4aQorKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCkBAIC0xNDExMiw2ICsxNDExMiw3IEBAIElm IEBjb2Rle049MH0sIG5vIHBhZCBsb2NhdGlvbiBpcyByZWNvcmRlZC4KIFRoZSBOT1AgaW5zdHJ1 Y3Rpb25zIGFyZSBpbnNlcnRlZCBhdC0tLWFuZCBtYXliZSBiZWZvcmUsIGRlcGVuZGluZyBvbgog QHZhcntNfS0tLXRoZSBmdW5jdGlvbiBlbnRyeSBhZGRyZXNzLCBldmVuIGJlZm9yZSB0aGUgcHJv bG9ndWUuCiAKK1RoZSBtYXhpbXVtIHZhbHVlIG9mIEB2YXJ7Tn0gYW5kIEB2YXJ7TX0gaXMgNjU1 MzUuCiBAZW5kIHRhYmxlCiAKIApkaWZmIC0tZ2l0IGEvZ2NjL2VtaXQtcnRsLmggYi9nY2MvZW1p dC1ydGwuaAppbmRleCBhODc4ZWZlM2NmNy4uM2Q2NTY1YzhhMzAgMTAwNjQ0Ci0tLSBhL2djYy9l bWl0LXJ0bC5oCisrKyBiL2djYy9lbWl0LXJ0bC5oCkBAIC0xNzMsNiArMTczLDEyIEBAIHN0cnVj dCBHVFkoKCkpIHJ0bF9kYXRhIHsKICAgICAgICAgbG9jYWwgc3RhY2suICAqLwogICB1bnNpZ25l ZCBpbnQgc3RhY2tfYWxpZ25tZW50X2VzdGltYXRlZDsKIAorICAvKiBIb3cgbWFueSBOT1AgaW5z bnMgdG8gcGxhY2UgYXQgZWFjaCBmdW5jdGlvbiBlbnRyeSBieSBkZWZhdWx0LiAgKi8KKyAgdW5z aWduZWQgc2hvcnQgcGF0Y2hfYXJlYV9zaXplOworCisgIC8qIEhvdyBmYXIgdGhlIHJlYWwgYXNt IGVudHJ5IHBvaW50IGlzIGludG8gdGhpcyBhcmVhLiAgKi8KKyAgdW5zaWduZWQgc2hvcnQgcGF0 Y2hfYXJlYV9lbnRyeTsKKwogICAvKiBGb3IgcmVvcmcuICAqLwogCiAgIC8qIE5vbnplcm8gaWYg ZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgY2FsbGVkIGJ1aWx0aW5fcmV0dXJuX2FkZHIgb3IKZGlm ZiAtLWdpdCBhL2djYy9vcHRzLmMgYi9nY2Mvb3B0cy5jCmluZGV4IGMyMTJhMWE1N2RjLi4zZGNj ZWYzOTcwMSAxMDA2NDQKLS0tIGEvZ2NjL29wdHMuYworKysgYi9nY2Mvb3B0cy5jCkBAIC0yNjE1 LDEwICsyNjE1LDEyIEBAIGNvbW1vbl9oYW5kbGVfb3B0aW9uIChzdHJ1Y3QgZ2NjX29wdGlvbnMg Km9wdHMsCiAJICAgIGZ1bmN0aW9uX2VudHJ5X3BhdGNoX2FyZWFfc3RhcnQgPSAwOwogCSAgfQog CWlmIChmdW5jdGlvbl9lbnRyeV9wYXRjaF9hcmVhX3NpemUgPCAwCisJICAgIHx8IGZ1bmN0aW9u X2VudHJ5X3BhdGNoX2FyZWFfc2l6ZSA+IFVTSFJUX01BWAogCSAgICB8fCBmdW5jdGlvbl9lbnRy eV9wYXRjaF9hcmVhX3N0YXJ0IDwgMAorCSAgICB8fCBmdW5jdGlvbl9lbnRyeV9wYXRjaF9hcmVh X3N0YXJ0ID4gVVNIUlRfTUFYCiAJICAgIHx8IGZ1bmN0aW9uX2VudHJ5X3BhdGNoX2FyZWFfc2l6 ZSAKIAkJPCBmdW5jdGlvbl9lbnRyeV9wYXRjaF9hcmVhX3N0YXJ0KQotCSAgZXJyb3IgKCJpbnZh bGlkIGFyZ3VtZW50cyBmb3IgJTwtZnBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeSU+Iik7CisJICBl cnJvciAoImludmFsaWQgYXJndW1lbnRzIGZvciAlPC1mcGF0Y2hhYmxlLWZ1bmN0aW9uLWVudHJ5 JT4iKTsKIAlmcmVlIChwYXRjaF9hcmVhX2FyZyk7CiAgICAgICB9CiAgICAgICBicmVhazsKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3BhdGNoYWJsZV9mdW5jdGlvbl9l bnRyeS1lcnJvci0xLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wYXRjaGFibGVfZnVu Y3Rpb25fZW50cnktZXJyb3ItMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5mNjBiZjQ2Y2ZlMwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0xLmMKQEAgLTAsMCArMSw5IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAhIHsgbnZwdHgqLSotKiB2aXNpdW0tKi0q IH0gfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mcGF0Y2hhYmxlLWZ1bmN0aW9uLWVu dHJ5PTY1NTM2LDEiIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm5vLXBpZSIg eyB0YXJnZXQgc3BhcmMqLSotKiB9IH0gKi8KKy8qIHsgZGctZXJyb3IgImludmFsaWQgYXJndW1l bnRzIGZvciAnLWZwYXRjaGFibGUtZnVuY3Rpb24tZW50cnknIiAiIiB7IHRhcmdldCAqLSotKiB9 IDAgfSAqLworCit2b2lkCitmb28gKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9wYXRjaGFibGVfZnVuY3Rpb25fZW50cnktZXJyb3ItMi5jIGIvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTBmODhjNzhiZTcKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wYXRjaGFibGVfZnVu Y3Rpb25fZW50cnktZXJyb3ItMi5jCkBAIC0wLDAgKzEsOSBAQAorLyogeyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IHsgISB7IG52cHR4Ki0qLSogdmlzaXVtLSotKiB9IH0gfSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtZnBhdGNoYWJsZS1mdW5jdGlvbi1lbnRyeT0xLDY1NTM2IiB9ICovCisv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZuby1waWUiIHsgdGFyZ2V0IHNwYXJjKi0qLSog fSB9ICovCisvKiB7IGRnLWVycm9yICJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgJy1mcGF0Y2hhYmxl LWZ1bmN0aW9uLWVudHJ5JyIgIiIgeyB0YXJnZXQgKi0qLSogfSAwIH0gKi8KKwordm9pZAorZm9v ICh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcGF0 Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTMuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeS1lcnJvci0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1ZTkzOTg4ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5LWVycm9yLTMu YwpAQCAtMCwwICsxLDIwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAhIHsgbnZw dHgqLSotKiB2aXNpdW0tKi0qIH0gfSB9IH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItZm5vLXBpZSIgeyB0YXJnZXQgc3BhcmMqLSotKiB9IH0gKi8KKwordm9pZAorIF9fYXR0cmli dXRlX18oKHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeSg2NTUzNikpKQorZm9vMSAodm9pZCkKK3sg LyogeyBkZy13YXJuaW5nICIncGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5JyBhdHRyaWJ1dGUgYXJn dW1lbnQgJzY1NTM2JyBpcyBvdXQgb2YgcmFuZ2UiIH0gKi8KK30KKwordm9pZAorIF9fYXR0cmli dXRlX18oKHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeSg2NTUzNiwxKSkpCitmb28yICh2b2lkKQor eyAvKiB7IGRnLXdhcm5pbmcgIidwYXRjaGFibGVfZnVuY3Rpb25fZW50cnknIGF0dHJpYnV0ZSBh cmd1bWVudCAnNjU1MzYnIGlzIG91dCBvZiByYW5nZSIgfSAqLworfQorCit2b2lkCisgX19hdHRy aWJ1dGVfXygocGF0Y2hhYmxlX2Z1bmN0aW9uX2VudHJ5KDY1NTM2LDY1NTM2KSkpCitmb28zICh2 b2lkKQoreyAvKiB7IGRnLXdhcm5pbmcgIidwYXRjaGFibGVfZnVuY3Rpb25fZW50cnknIGF0dHJp YnV0ZSBhcmd1bWVudCAnNjU1MzYnIGlzIG91dCBvZiByYW5nZSIgfSAqLworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3ZhcmFzbS5jIGIvZ2NjL3ZhcmFzbS5jCmluZGV4IDI3MWE2N2FiZjU2Li5mMDYyZTQ4 MDcxZiAxMDA2NDQKLS0tIGEvZ2NjL3ZhcmFzbS5jCisrKyBiL2djYy92YXJhc20uYwpAQCAtMTg1 NywzNCArMTg1Nyw4IEBAIGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uICh0cmVlIGRlY2wsIGNvbnN0 IGNoYXIgKmZubmFtZSkKICAgaWYgKERFQ0xfUFJFU0VSVkVfUCAoZGVjbCkpCiAgICAgdGFyZ2V0 bS5hc21fb3V0Lm1hcmtfZGVjbF9wcmVzZXJ2ZWQgKGZubmFtZSk7CiAKLSAgdW5zaWduZWQgSE9T VF9XSURFX0lOVCBwYXRjaF9hcmVhX3NpemUgPSBmdW5jdGlvbl9lbnRyeV9wYXRjaF9hcmVhX3Np emU7Ci0gIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgcGF0Y2hfYXJlYV9lbnRyeSA9IGZ1bmN0aW9u X2VudHJ5X3BhdGNoX2FyZWFfc3RhcnQ7Ci0KLSAgdHJlZSBwYXRjaGFibGVfZnVuY3Rpb25fZW50 cnlfYXR0cgotICAgID0gbG9va3VwX2F0dHJpYnV0ZSAoInBhdGNoYWJsZV9mdW5jdGlvbl9lbnRy eSIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOwotICBpZiAocGF0Y2hhYmxlX2Z1bmN0aW9uX2Vu dHJ5X2F0dHIpCi0gICAgewotICAgICAgdHJlZSBwcF92YWwgPSBUUkVFX1ZBTFVFIChwYXRjaGFi bGVfZnVuY3Rpb25fZW50cnlfYXR0cik7Ci0gICAgICB0cmVlIHBhdGNoYWJsZV9mdW5jdGlvbl9l bnRyeV92YWx1ZTEgPSBUUkVFX1ZBTFVFIChwcF92YWwpOwotCi0gICAgICBwYXRjaF9hcmVhX3Np emUgPSB0cmVlX3RvX3Vod2kgKHBhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV92YWx1ZTEpOwotICAg ICAgcGF0Y2hfYXJlYV9lbnRyeSA9IDA7Ci0gICAgICBpZiAoVFJFRV9DSEFJTiAocHBfdmFsKSAh PSBOVUxMX1RSRUUpCi0JewotCSAgdHJlZSBwYXRjaGFibGVfZnVuY3Rpb25fZW50cnlfdmFsdWUy Ci0JICAgID0gVFJFRV9WQUxVRSAoVFJFRV9DSEFJTiAocHBfdmFsKSk7Ci0JICBwYXRjaF9hcmVh X2VudHJ5ID0gdHJlZV90b191aHdpIChwYXRjaGFibGVfZnVuY3Rpb25fZW50cnlfdmFsdWUyKTsK LQl9Ci0gICAgfQotCi0gIGlmIChwYXRjaF9hcmVhX2VudHJ5ID4gcGF0Y2hfYXJlYV9zaXplKQot ICAgIHsKLSAgICAgIGlmIChwYXRjaF9hcmVhX3NpemUgPiAwKQotCXdhcm5pbmcgKE9QVF9XYXR0 cmlidXRlcywKLQkJICJwYXRjaGFibGUgZnVuY3Rpb24gZW50cnkgJXd1IGV4Y2VlZHMgc2l6ZSAl d3UiLAotCQkgcGF0Y2hfYXJlYV9lbnRyeSwgcGF0Y2hfYXJlYV9zaXplKTsKLSAgICAgIHBhdGNo X2FyZWFfZW50cnkgPSAwOwotICAgIH0KKyAgdW5zaWduZWQgc2hvcnQgcGF0Y2hfYXJlYV9zaXpl ID0gY3J0bC0+cGF0Y2hfYXJlYV9zaXplOworICB1bnNpZ25lZCBzaG9ydCBwYXRjaF9hcmVhX2Vu dHJ5ID0gY3J0bC0+cGF0Y2hfYXJlYV9lbnRyeTsKIAogICAvKiBFbWl0IHRoZSBwYXRjaGluZyBh cmVhIGJlZm9yZSB0aGUgZW50cnkgbGFiZWwsIGlmIGFueS4gICovCiAgIGlmIChwYXRjaF9hcmVh X2VudHJ5ID4gMCkKLS0gCjIuMjYuMgoK --0000000000000df85705a4a0278f--