From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb35.google.com (mail-yb1-xb35.google.com [IPv6:2607:f8b0:4864:20::b35]) by sourceware.org (Postfix) with ESMTPS id A0BE93858416 for ; Wed, 31 Jan 2024 19:32:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A0BE93858416 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A0BE93858416 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706729525; cv=none; b=b2tp7ft/hKsBvdDlECvpTII0yzfQkvUgBqmaooX2OIe9sPAQQBfgwSt7bW3fxIOmG8f7NwHJR9ypm6UGSBAR0eqVpDkCSIFHX6vBtQ6bGcPctbUogy5ZPpwXst52zXp537V3ttyPpr0Qk7a67MZVI4juSJlm7YqSvT8ldmvpMxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706729525; c=relaxed/simple; bh=4fvDGeIgqrRfva1UbZstB61EAr4J6jtk6a+u7nc/kP4=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=r73vVxyAGJHXtkIGY71gGwRCTL3tTfAH4Cbui37jQNNKoFICOfcZ/hGb4K6+cD//lkqhOtRBg3KCtlKlSH1dVyoaQn5Cp5pqhxf9paxYWoi5phS2CU0ekpvrNnEEuaQsv+iKwm3FAgX5o6759aVNWc2fJ0XYjjKFsUtNNmH2sBw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb35.google.com with SMTP id 3f1490d57ef6-dc6c0dc50dcso77970276.2 for ; Wed, 31 Jan 2024 11:32:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706729522; x=1707334322; darn=gcc.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=IjPiWCNUKynskGHmUlHGCFXwPQQxlhYK3+zR83Oq+Og=; b=mhU6oQ40SDGieDGH2owMhuHT5v3yCWJo2d4Zk8UEWVwKEUs7ghOzn80jwg05y3Mf3e YgDjif6cF7XebPD5Y3GSQUMu9bRaQ56bhroZCCqB+jNyftAUci+qHSNtImDY1KDhNjR7 jsZIBX6KFoEfayHFBEY8JktmFmaXoZeMlzl7UhZqhznnhhndd5DwsFMlpyw2DCfPIded gWVTGadiOqyuCMkJ1ROLeL+gl3fZfqRwpX01df5aCIW4lX7UJYCqImY2KcK4g1pEWvvL Xjz/uAZzWPT3Y6K6CLJAhVqGoe/gVYjU8FZ2KxjrBlvIZW/aNxWliqdUL5kVbkB4hM8I 96eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706729522; x=1707334322; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IjPiWCNUKynskGHmUlHGCFXwPQQxlhYK3+zR83Oq+Og=; b=I5M/PH6kSuXKFYeyyvcqPdF433roVQ58oSXD+8RjjA0V+nC5P8srCZyzwvXKstHVfH ddhxznPwPKdOaoPfjHkuuk93KN16qmIcbJo/PL8M4EVL4RTe02cIgfk57dnTF+kMYhBT xckNDa5eqXbJgYjsGf1oqjJpbAcuFpdxE8cIB+zVjlFS1s3bLNtOC2hE5e4IKlUzi1Lf +U0nyWUBLpN8ZtFiFWAJn9yaQDWaTN5oyKRZaNh+1MaKW8jDUE8oy16N/prQ09D3fXav RLFwUPr+5sxrVKyO8PxcEo9PdFc0GghQHhJMWHNScOk01aA3PM1h5bJTBhZr+FJ2Pn2a H35g== X-Gm-Message-State: AOJu0YweQrqQyNMjUd5xHfgZIKxTf7kQNzX4eNnGyoxDL86d8JUuZKUP HV4ok4c73oxl+XHx3mxkOcJSh9BS7ldqE1TsrlW9SVsCzWo9PKQik3IA7IiyulgvAeqIxFKkzzt JE54p2jgMyxhtA/qzXh2yjTk+JfY= X-Google-Smtp-Source: AGHT+IG6zlrUoM6C1EF6iB8+H40tgdVxv27aWxoThm+kgpPjqrArpMmndCo3O4MtTVqJKWIe75JCw/jj1yx7/hWItKY= X-Received: by 2002:a25:aad0:0:b0:dc2:1f53:3a4f with SMTP id t74-20020a25aad0000000b00dc21f533a4fmr2860915ybi.5.1706729521962; Wed, 31 Jan 2024 11:32:01 -0800 (PST) MIME-Version: 1.0 References: <20240131022136.572689-1-hjl.tools@gmail.com> In-Reply-To: From: "H.J. Lu" Date: Wed, 31 Jan 2024 11:31:25 -0800 Message-ID: Subject: Re: [PATCH v2] Handle private COMDAT function symbol reference in readonly data section To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="000000000000e27eec061042eeb3" X-Spam-Status: No, score=-3019.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000e27eec061042eeb3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 31, 2024 at 10:11=E2=80=AFAM Jakub Jelinek w= rote: > > On Wed, Jan 31, 2024 at 09:39:12AM -0800, H.J. Lu wrote: > > GNU binutils has no issues with it: > > I know, I meant gcc. > If I try the proposed: > --- gcc/varasm.cc.jj 2024-01-30 08:44:43.304175273 +0100 > +++ gcc/varasm.cc 2024-01-31 18:45:57.271087170 +0100 > @@ -7459,15 +7459,46 @@ default_elf_select_rtx_section (machine_ > { > int reloc =3D compute_reloc_for_rtx (x); > > + tree decl =3D nullptr; > + > + /* If it is a private COMDAT function symbol reference, call > + function_rodata_section for the read-only or relocated read-only > + data section associated with function DECL so that the COMDAT > + section will be used for the private COMDAT function symbol. */ > + if (HAVE_COMDAT_GROUP) > + { > + if (GET_CODE (x) =3D=3D CONST > + && GET_CODE (XEXP (x, 0)) =3D=3D PLUS > + && CONST_INT_P (XEXP (XEXP (x, 0), 1))) > + x =3D XEXP (XEXP (x, 0), 0); > + > + if (GET_CODE (x) =3D=3D SYMBOL_REF) > + { > + decl =3D SYMBOL_REF_DECL (x); > + if (decl > + && (TREE_CODE (decl) !=3D FUNCTION_DECL > + || !DECL_COMDAT_GROUP (decl) > + || TREE_PUBLIC (decl))) > + decl =3D nullptr; > + } > + } > + > /* ??? Handle small data here somehow. */ > > if (reloc & targetm.asm_out.reloc_rw_mask ()) > { > + if (decl) > + return get_section (reloc =3D=3D 1 > + ? ".data.rel.ro.local" : ".data.rel.ro", > + SECTION_WRITE | SECTION_RELRO | SECTION_LINKO= NCE, > + decl); > if (reloc =3D=3D 1) > return get_named_section (NULL, ".data.rel.ro.local", 1); > else > return get_named_section (NULL, ".data.rel.ro", 3); > } > + else if (decl) > + return get_section (".rodata", SECTION_LINKONCE, decl); > > return mergeable_constant_section (mode, align, 0); > } > > and append > typedef unsigned long int VV __attribute__((vector_size (2 * sizeof (long= )))); > VV vv; > __attribute__((noipa)) static void fn1 (void) {} > __attribute__((noipa)) static void fn2 (void) {} > > void > fn3 () > { > VV a =3D { (unsigned long) &fn1, (unsigned long) &fn2 }; > vv =3D a; > } > to the first testcase (this is just to get a normal non-comdat > .data.rel.ro.local section referencing non-comdat non-public syumbol), > then I get the > pr113617.C:19:1: error: section type conflict with =E2=80=98static bool R= ::B<_R(_A ...), _F>::F(R::H&, const R::H&, R::G) [with _R =3D void; _F =3D = R::I, false>*, long lon= g int, long long int, long long int))(void*, long long int, long long int, = long long int)>; _A =3D {}]=E2=80=99 > 19 | } > | ^ > In file included from pr113617.C:1: > pr113617.h:21:15: note: =E2=80=98static bool R::B<_R(_A ...), _F>::F(R::H= &, const R::H&, R::G) [with _R =3D void; _F =3D R::I, false>*, long long int, long long int, long = long int))(void*, long long int, long long int, long long int)>; _A =3D {}]= =E2=80=99 was declared here > 21 | static bool F(H &, const H &, G) { return false; } > | ^ > I feared. > So, it seems get_section handles section purely by name lookup > and isn't prepared to deal with multiple different sections > of the same name, but different comdat group. > > Thus, maybe at least temporarily we need to use unique > section names here, say > .data.rel.ro.local.pool. > .data.rel.ro.pool. > .rodata.pool. > where would be the name of the comdat group, i.e. > IDENTIFIER_POINTER (DECL_COMDAT_GROUP (decl)) > > Jakub > I am testing this patch. --=20 H.J. --000000000000e27eec061042eeb3 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Handle-private-COMDAT-function-symbol-reference-i.patch" Content-Disposition: attachment; filename="v3-0001-Handle-private-COMDAT-function-symbol-reference-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls26nfbb0 RnJvbSAzYzhiOWFkNjczODNkNjQ1ZTE5NzQ2NzIwZGViNmU4ZjAyMGZjY2QwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjYgSmFuIDIwMjQgMTI6MjA6MTEgLTA4MDAKU3ViamVjdDogW1BBVENIIHYzXSBIYW5k bGUgcHJpdmF0ZSBDT01EQVQgZnVuY3Rpb24gc3ltYm9sIHJlZmVyZW5jZSBpbiByZWFkb25seSBk YXRhIHNlY3Rpb24KCkNoYW5nZXMgaW4gdjM6CgoxLiBBZGQgZ2V0X2NvbWRhdF9mdW5jdGlvbl9y b2RhdGFfc2VjdGlvbi4KMi4gQWRkIGEgbmV3IHRlc3QuCgpDaGFuZ2VzIGluIHYyOgoKMS4gQ2hl Y2sgZGVjbCBub24tbnVsbCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4KMi4gVXBkYXRlIFBSIHJ0 bC1vcHRpbWl6YXRpb24vMTEzNjE3IGZyb20KCmh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEv c2hvd19idWcuY2dpP2lkPTExMzYxNyNjMTQKCi0tLQpGb3IgYSBwcml2YXRlIENPTURBVCBmdW5j dGlvbiBzeW1ib2wgcmVmZXJlbmNlIGluIHJlYWRvbmx5IGRhdGEgc2VjdGlvbiwKaW5zdGVhZCBv ZiBwdXR0aW5nIGl0IGluIC5kYXRhLnJlbC5ybyBvciAucm9kYXRhLmNzdCBzZWN0aW9uLCBjYWxs CmdldF9jb21kYXRfZnVuY3Rpb25fcm9kYXRhX3NlY3Rpb24gdG8gcHV0IHRoZSBwcml2YXRlIENP TURBVCBmdW5jdGlvbgpzeW1ib2wgcmVmZXJlbmNlIGluIC5kYXRhLnJlbC5ybyBvciAucm9kYXRh IHNlY3Rpb24gaW4gdGhlIHNhbWUgQ09NREFUCmdyb3VwIGFzIHRoZSBmdW5jdGlvbiBERUNMLgoK Z2NjLwoKCVBSIHJ0bC1vcHRpbWl6YXRpb24vMTEzNjE3CgkqIHZhcmFzbS5jYyAoZ2V0X2NvbWRh dF9mdW5jdGlvbl9yb2RhdGFfc2VjdGlvbik6IE5ldy4KCShkZWZhdWx0X2VsZl9zZWxlY3RfcnR4 X3NlY3Rpb24pOiBDYWxsCglnZXRfY29tZGF0X2Z1bmN0aW9uX3JvZGF0YV9zZWN0aW9uIHRvIHB1 dCB0aGUgcHJpdmF0ZSBDT01EQVQKCWZ1bmN0aW9uIHN5bWJvbCByZWZlcmVuY2UgaW4gLmRhdGEu cmVsLnJvIG9yIC5yb2RhdGEgc2VjdGlvbgoJaW4gdGhlIHNhbWUgQ09NREFUIGdyb3VwIGFzIHRo ZSBmdW5jdGlvbiBERUNMLgoKZ2NjL3Rlc3RzdWl0ZS8KCglQUiBydGwtb3B0aW1pemF0aW9uLzEx MzYxNwoJKiBnKysuZGcvcHIxMTM2MTctMWEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9wcjExMzYx Ny0xYi5DOiBMaWtld2lzZS4KCSogZysrLmRnL3ByMTEzNjE3LTFjLkM6IExpa2V3aXNlLgoKRml4 Ci0tLQogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWEuQyB8IDE0NSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWIuQyB8 ICAgOCArKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWMuQyB8ICAxNyArKysrCiBn Y2MvdmFyYXNtLmNjICAgICAgICAgICAgICAgICAgICAgIHwgIDY0ICsrKysrKysrKysrKysKIDQg ZmlsZXMgY2hhbmdlZCwgMjM0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2crKy5kZy9wcjExMzYxNy0xYS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWIuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZysrLmRnL3ByMTEzNjE3LTFjLkMKCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9wcjExMzYxNy0xYS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWEuQwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmY0NDVkMjZkNzkKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9wcjExMzYxNy0xYS5DCkBAIC0wLDAg KzEsMTQ1IEBACisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgZnBpYyB9IH0KKy8vIHsgZGct cmVxdWlyZS12aXNpYmlsaXR5ICIiIH0KKy8vIHsgZGctb3B0aW9ucyAiLU8yIC1zdGQ9YysrMTEg LWZQSUMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iIH0K KworbmFtZXNwYWNlIHsKK3RlbXBsYXRlIDxpbnQgVj4gc3RydWN0IEogeyBzdGF0aWMgY29uc3Rl eHByIGludCB2YWx1ZSA9IFY7IH07Cit0ZW1wbGF0ZSA8Ym9vbCBWPiB1c2luZyBLID0gSjxWPjsK K3VzaW5nIE0gPSBLPHRydWU+OwordGVtcGxhdGUgPGludD4gc3RydWN0IEwgeyB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZT4gdXNpbmcgdHlwZSA9IF9UcDsgfTsKK3RlbXBsYXRlIDxi b29sIF9Db25kLCB0eXBlbmFtZSBfSWYsIHR5cGVuYW1lIF9FbHNlPiB1c2luZyBOID0gdHlwZW5h bWUgTDxfQ29uZD46OnR5cGU8X0lmLCBfRWxzZT47CitNIGs7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg X1RwPiBzdHJ1Y3QgTyB7IHVzaW5nIHR5cGUgPSBfVHA7IH07Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg X1VwPgorc3RydWN0IFAgOiBOPE0gOjp2YWx1ZSwgTzxfVXA+LCBfVXA+IHt9OwordGVtcGxhdGUg PHR5cGVuYW1lIF9UcD4gc3RydWN0IFEgeyB1c2luZyB0eXBlID0gdHlwZW5hbWUgUDxfVHA+Ojp0 eXBlOyB9OworfQorbmFtZXNwYWNlIFIgeworc3RydWN0IEg7CitlbnVtIEcge307Cit0ZW1wbGF0 ZSA8dHlwZW5hbWU+IGNsYXNzIFM7CitzdHJ1Y3QgVCB7IHVzaW5nIFUgPSBib29sICgqKSAoSCAm LCBjb25zdCBIICYsIEcpOyBVIEY7IH07Cit0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lPiBj bGFzcyBCOwordGVtcGxhdGUgPHR5cGVuYW1lIF9SLCB0eXBlbmFtZSBfRiwgdHlwZW5hbWUuLi4g X0E+CitzdHJ1Y3QgQjxfUihfQS4uLiksIF9GPiB7CisgIHN0YXRpYyBib29sIEYoSCAmLCBjb25z dCBIICYsIEcpIHsgcmV0dXJuIGZhbHNlOyB9CisgIF9fYXR0cmlidXRlX18oKG5vaXBhKSkgc3Rh dGljIF9SIGJhcihjb25zdCBIICYpIHt9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIF9SLCB0eXBl bmFtZS4uLiBfQT4KK3N0cnVjdCBTPF9SKF9BLi4uKT4gOiBUIHsKKyAgdGVtcGxhdGUgPHR5cGVu YW1lIF9GPiB1c2luZyBBSCA9IEI8X1IoKSwgX0Y+OworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Y+ IFMoX0YpIHsKKyAgICB1c2luZyBBRyA9IEFIPF9GPjsKKyAgICBiYXJyID0gQUc6OmJhcjsKKyAg ICBGID0gQUc6OkY7CisgIH0KKyAgdXNpbmcgQUYgPSBfUiAoKikoY29uc3QgSCAmKTsKKyAgQUYg YmFycjsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNzIEk7Cit0ZW1wbGF0ZSA8dHlwZW5h bWUgX0YsIHR5cGVuYW1lLi4uIF9CPgorc3RydWN0IEk8X0YoX0IuLi4pPiB7fTsKK3RlbXBsYXRl IDx0eXBlbmFtZT4gdXNpbmcgVyA9IGRlY2x0eXBlKGspOwordGVtcGxhdGUgPGludCwgdHlwZW5h bWUgX0YsIHR5cGVuYW1lLi4uIF9CPiBzdHJ1Y3QgViB7CisgIHR5cGVkZWYgSTx0eXBlbmFtZSBR PF9GPjo6dHlwZSh0eXBlbmFtZSBRPF9CPjo6dHlwZS4uLik+IHR5cGU7Cit9OwordGVtcGxhdGUg PHR5cGVuYW1lIF9GLCB0eXBlbmFtZS4uLiBfQj4KK19fYXR0cmlidXRlX18oKG5vaXBhKSkgdHlw ZW5hbWUgVjxXPF9GPjo6dmFsdWUsIF9GLCBfQi4uLj46OnR5cGUKK2JheihfRiwgX0IuLi4pIHsg cmV0dXJuIHR5cGVuYW1lIFY8VzxfRj46OnZhbHVlLCBfRiwgX0IuLi4+Ojp0eXBlICgpOyB9Cit0 ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgQUogeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUg X1VwPiBzdHJ1Y3QgX1B0ciB7IHVzaW5nIHR5cGUgPSBfVXAgKjsgfTsKKyAgdXNpbmcgQUkgPSB0 eXBlbmFtZSBfUHRyPF9UcD46OnR5cGU7Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4gc3Ry dWN0IFkgeworICB1c2luZyBBSSA9IHR5cGVuYW1lIEFKPF9UcD46OkFJOworICBBSSBvcGVyYXRv ci0+KCk7Cit9OworfQorZXh0ZXJuIGludCB6OworbmFtZXNwYWNlIE4xIHsKK25hbWVzcGFjZSBO MiB7CituYW1lc3BhY2UgTjMgeworZW51bSBaIHsgWjEsIFoyIH07Cit0ZW1wbGF0ZSA8aW50PiBz dHJ1Y3QgWCB7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRj4KKyAgX19hdHRyaWJ1dGVfXygobm9p cGEpKSB2b2lkIGJvbyhsb25nIGxvbmcsIGxvbmcgbG9uZywgbG9uZyBsb25nLCBfRiAmKSB7fQor fTsKK3N0cnVjdCBBQyB7CisgIEFDKGludCk7CisgIHZvaWQgbTEoUjo6Uzx2b2lkKCk+KTsKK307 Cit0ZW1wbGF0ZSA8dHlwZW5hbWU+CitfX2F0dHJpYnV0ZV9fKChub2lwYSkpIHZvaWQgZ2FycGx5 KHZvaWQgKiwgbG9uZyBsb25nLCBsb25nIGxvbmcsIGxvbmcgbG9uZykge30KK3RlbXBsYXRlIDw+ Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Y+Cit2b2lkIFg8WjI+Ojpib28obG9uZyBsb25nLCBsb25n IGxvbmcgeCwgbG9uZyBsb25nIHksIF9GICZmaSkgeworICBBQyBwb29sKHopOworICBmb3IgKDs7 KSB7CisgICAgYXV0byBqb2IgPSBSOjpiYXooZ2FycGx5PF9GPiwgJmZpLCB5LCB5LCB4KTsKKyAg ICBwb29sLm0xKGpvYik7CisgIH0KK30KK3N0cnVjdCBBQiB7CisgIHN0YXRpYyBBQiAmYmxlaCgp OworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Y+CisgIHZvaWQgYm9vKGxvbmcgZmlyc3QsIGxvbmcg eCwgbG9uZyB5LCBfRiBmaSkgeworICAgIHN3aXRjaCAoYWIxKSB7CisgICAgY2FzZSBaMToKKyAg ICAgIGFiMi0+Ym9vKGZpcnN0LCB4LCB5LCBmaSk7CisgICAgY2FzZSBaMjoKKyAgICAgIGFiMy0+ Ym9vKGZpcnN0LCB4LCB5LCBmaSk7CisgICAgfQorICB9CisgIFogYWIxOworICBSOjpZPFg8WjE+ PiBhYjI7CisgIFI6Olk8WDxaMj4+IGFiMzsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUsIGJvb2w+ IHN0cnVjdCBDOwordGVtcGxhdGUgPHR5cGVuYW1lIF9GPiBzdHJ1Y3QgQzxfRiwgZmFsc2U+IHsK KyAgX19hdHRyaWJ1dGVfXygobm9pcGEpKSBDKF9GKSB7fQorICB2b2lkIGJvbyhsb25nIGZpcnN0 LCBsb25nIHgsIGxvbmcgeSkgeworICAgIGF1dG8gdSA9IEFCOjpibGVoKCk7CisgICAgdS5ib28o Zmlyc3QsIHgsIHksICp0aGlzKTsKKyAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBfRj4gc3Ry dWN0IEFBIHsgdHlwZWRlZiBDPF9GLCAwPiB0eXBlOyB9OworfQorfQorfQorc3RydWN0IEFEIHsK KyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9GPgorICBzdGF0aWMgdm9pZCBib28obG9uZyBmaXJzdCwg bG9uZyB4LCBsb25nIHksIF9GIGYpIHsKKyAgICB0eXBlbmFtZSBOMTo6TjI6Ok4zOjpBQTxfRj46 OnR5cGUgZmkoZik7CisgICAgZmkuYm9vKGZpcnN0LCB4LCB5KTsKKyAgfQorICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0Y+CisgIHN0YXRpYyB2b2lkIGJvbyhsb25nIGZpcnN0LCBsb25nIHgsIF9GIGYp IHsKKyAgICBib28oZmlyc3QsIHgsIDAsIGYpOworICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1l PiBzdHJ1Y3QgQSB7CisgIHZvaWQgZm9vKGxvbmcgbG9uZywgbG9uZyBsb25nKTsKKyAgaW50ICpj OworfTsKK25hbWVzcGFjZSB7Cit0ZW1wbGF0ZSA8dHlwZW5hbWU+IHN0cnVjdCBEIHsgX19hdHRy aWJ1dGVfXygobm9pcGEpKSBEKGludCAqKSB7fSB9OworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Cit2b2lkIEE8VD46OmZvbyhsb25nIGxvbmcgeCwgbG9uZyBsb25nIHkpCit7CisgIGludCBlOwor ICBEPFQ+IGQoJmUpOworICBBRDo6Ym9vKDAsIHksIGQpOworICBsb25nIHA7CisgIGZvciAocCA9 IDA7IHAgPCB4OyBwKyspCisgICAgY1twXSA9IGNbcCAtIDFdOworfQoraW50IHo7Citsb25nIHh4 MTsKK3ZvaWQgY29yZ2UoKSB7CisgIEE8bG9uZyBsb25nPiBhOworICBhLmZvbyh4eDEsIDApOwor fQorCisvLyB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIuc2VjdGlvblx0XC5kYXRh XC5yZWxcLnJvXC5sb2NhbCxcImF3XCIiIHsgdGFyZ2V0IHsgeyBpPzg2LSotbGludXgqIHg4Nl82 NC0qLWxpbnV4KiB9ICYmIHsgISBpYTMyIH0gfSB9IH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICIuc2VjdGlvblx0LmRhdGFcLnJlbFwucm9cLmxvY2FsLnBvb2wuX1pOMUFJeEUz Zm9vRXh4LFwiYXdHXCIsQHByb2diaXRzLF9aTjFBSXhFM2Zvb0V4eCxjb21kYXQiIHsgdGFyZ2V0 IHsgeyBpPzg2LSotbGludXgqIHg4Nl82NC0qLWxpbnV4KiB9ICYmIHsgISBpYTMyIH0gfSB9IH0g fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWIuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL3ByMTEzNjE3LTFiLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjcwMDIxNjkxNTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvcHIxMTM2MTctMWIuQwpAQCAtMCwwICsxLDggQEAKKy8vIHsgZGctZG8gY29tcGls ZSB7IHRhcmdldCBmcGljIH0gfQorLy8geyBkZy1yZXF1aXJlLXZpc2liaWxpdHkgIiIgfQorLy8g eyBkZy1vcHRpb25zICItTzIgLXN0ZD1jKysxMSAtZm5vLXBpYyAtZnZpc2liaWxpdHk9aGlkZGVu IC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIgfQorCisjaW5jbHVkZSAicHIxMTM2MTctMWEu QyIKKworLy8geyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiLnNlY3Rpb25cdFwucm9k YXRhXC5jc3QoNHw4KSxcImFNXCIiIHsgdGFyZ2V0IHsgeyBpPzg2LSotbGludXgqIHg4Nl82NC0q LWxpbnV4KiB9ICYmIHsgISBpYTMyIH0gfSB9IH0gfQorLy8geyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICIuc2VjdGlvblx0LnJvZGF0YS5wb29sLl9aTjFBSXhFM2Zvb0V4eCxcImFHXCIsQHBy b2diaXRzLF9aTjFBSXhFM2Zvb0V4eCxjb21kYXQiIHsgdGFyZ2V0IHsgeyBpPzg2LSotbGludXgq IHg4Nl82NC0qLWxpbnV4KiB9ICYmIHsgISBpYTMyIH0gfSB9IH0gfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTctMWMuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3By MTEzNjE3LTFjLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM1OTE3 Yjc1NWRjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHIxMTM2MTct MWMuQwpAQCAtMCwwICsxLDE3IEBACisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgZnBpYyB9 IH0KKy8vIHsgZGctcmVxdWlyZS12aXNpYmlsaXR5ICIiIH0KKy8vIHsgZGctb3B0aW9ucyAiLU8y IC1zdGQ9YysrMTEgLWZwaWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtZnZpc2liaWxpdHktaW5saW5l cy1oaWRkZW4iIH0KKworI2luY2x1ZGUgInByMTEzNjE3LTFhLkMiCisKK3R5cGVkZWYgdW5zaWdu ZWQgbG9uZyBpbnQgVlYgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUgKDIgKiBzaXplb2YgKGxv bmcpKSkpOworVlYgdnY7CitfX2F0dHJpYnV0ZV9fKChub2lwYSkpIHN0YXRpYyB2b2lkIGZuMSAo dm9pZCkge30KK19fYXR0cmlidXRlX18oKG5vaXBhKSkgc3RhdGljIHZvaWQgZm4yICh2b2lkKSB7 fQorCit2b2lkCitmbjMgKCkKK3sKKyAgVlYgYSA9IHsgKHVuc2lnbmVkIGxvbmcpICZmbjEsICh1 bnNpZ25lZCBsb25nKSAmZm4yIH07CisgIHZ2ID0gYTsKK30KZGlmZiAtLWdpdCBhL2djYy92YXJh c20uY2MgYi9nY2MvdmFyYXNtLmNjCmluZGV4IGZhMTdlZmY1NTFlLi42ZTJhNDZlOWU2YyAxMDA2 NDQKLS0tIGEvZ2NjL3ZhcmFzbS5jYworKysgYi9nY2MvdmFyYXNtLmNjCkBAIC03NDUzLDIxICs3 NDUzLDg1IEBAIGRlZmF1bHRfc2VsZWN0X3J0eF9zZWN0aW9uIChtYWNoaW5lX21vZGUgbW9kZSBB VFRSSUJVVEVfVU5VU0VELAogICAgIHJldHVybiByZWFkb25seV9kYXRhX3NlY3Rpb247CiB9CiAK Ky8qIFJldHVybiB0aGUgcmVhZC1vbmx5IG9yIHJlbG9jYXRlZCByZWFkLW9ubHkgZGF0YSBzZWN0 aW9uIGFzc29jaWF0ZWQKKyAgIHdpdGggdGhlIENPTURBVCBmdW5jdGlvbiBERUNMLiAgKi8KKwor c3RhdGljIHNlY3Rpb24gKgorZ2V0X2NvbWRhdF9mdW5jdGlvbl9yb2RhdGFfc2VjdGlvbiAodHJl ZSBkZWNsLCBpbnQgcmVsb2MpCit7CisgIGNvbnN0IGNoYXIgKnNuYW1lOworICB1bnNpZ25lZCBp bnQgZmxhZ3M7CisKKyAgaWYgKHJlbG9jKQorICAgIHsKKyAgICAgIGZsYWdzID0gU0VDVElPTl9X UklURSB8IFNFQ1RJT05fUkVMUk8gfCBTRUNUSU9OX0xJTktPTkNFOworICAgICAgaWYgKHJlbG9j ID09IDEpCisJc25hbWUgPSAiLmRhdGEucmVsLnJvLmxvY2FsLnBvb2wuIjsKKyAgICAgIGVsc2UK KwlzbmFtZSA9ICIuZGF0YS5yZWwucm8ucG9vbC4iOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIGZsYWdzID0gU0VDVElPTl9MSU5LT05DRTsKKyAgICAgIHNuYW1lID0gIi5yb2RhdGEucG9v bC4iOworICAgIH0KKworICAvKiBBcHBlbmQgdGhlIENPTURBVCBuYW1lIHRvIHRoZSBzZWN0aW9u IG5hbWUuICAqLworICBjb25zdCBjaGFyICpnbmFtZSA9IElERU5USUZJRVJfUE9JTlRFUiAoREVD TF9DT01EQVRfR1JPVVAgKGRlY2wpKTsKKyAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoc25hbWUpICsg c3RybGVuIChnbmFtZSk7CisgIGNoYXIgKm5hbWUgPSBuZXcgY2hhcltsZW4gKyAxXTsKKyAgc3Ry Y3B5IChuYW1lLCBzbmFtZSk7CisgIHN0cmNhdCAobmFtZSwgZ25hbWUpOworICBzZWN0aW9uICpz ID0gZ2V0X3NlY3Rpb24gKG5hbWUsIGZsYWdzLCBkZWNsKTsKKyAgZGVsZXRlW10gbmFtZTsKKwor ICByZXR1cm4gczsKK30KKwogc2VjdGlvbiAqCiBkZWZhdWx0X2VsZl9zZWxlY3RfcnR4X3NlY3Rp b24gKG1hY2hpbmVfbW9kZSBtb2RlLCBydHggeCwKIAkJCQl1bnNpZ25lZCBIT1NUX1dJREVfSU5U IGFsaWduKQogewogICBpbnQgcmVsb2MgPSBjb21wdXRlX3JlbG9jX2Zvcl9ydHggKHgpOwogCisg IHRyZWUgZGVjbCA9IG51bGxwdHI7CisKKyAgLyogSWYgaXQgaXMgYSBwcml2YXRlIENPTURBVCBm dW5jdGlvbiBzeW1ib2wgcmVmZXJlbmNlLCBjYWxsCisgICAgIGdldF9jb21kYXRfZnVuY3Rpb25f cm9kYXRhX3NlY3Rpb24gdG8gcHV0IHRoZSBwcml2YXRlIENPTURBVAorICAgICBmdW5jdGlvbiBz eW1ib2wgcmVmZXJlbmNlIGluIC5kYXRhLnJlbC5ybyBvciAucm9kYXRhIHNlY3Rpb24KKyAgICAg aW4gdGhlIHNhbWUgQ09NREFUIGdyb3VwIGFzIHRoZSBmdW5jdGlvbiBERUNMLiAgKi8KKyAgaWYg KEhBVkVfQ09NREFUX0dST1VQKQorICAgIHsKKyAgICAgIGlmIChHRVRfQ09ERSAoeCkgPT0gQ09O U1QKKwkgICYmIEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gUExVUworCSAgJiYgQ09OU1RfSU5U X1AgKFhFWFAgKFhFWFAgKHgsIDApLCAxKSkpCisJeCA9IFhFWFAgKFhFWFAgKHgsIDApLCAwKTsK KworICAgICAgaWYgKEdFVF9DT0RFICh4KSA9PSBTWU1CT0xfUkVGKQorCXsKKwkgIGRlY2wgPSBT WU1CT0xfUkVGX0RFQ0wgKHgpOworCSAgaWYgKGRlY2wKKwkgICAgICAmJiAoVFJFRV9DT0RFIChk ZWNsKSAhPSBGVU5DVElPTl9ERUNMCisJCSAgfHwgIURFQ0xfQ09NREFUX0dST1VQIChkZWNsKQor CQkgIHx8IFRSRUVfUFVCTElDIChkZWNsKSkpCisJICAgIGRlY2wgPSBudWxscHRyOworCX0KKyAg ICB9CisKICAgLyogPz8/IEhhbmRsZSBzbWFsbCBkYXRhIGhlcmUgc29tZWhvdy4gICovCiAKICAg aWYgKHJlbG9jICYgdGFyZ2V0bS5hc21fb3V0LnJlbG9jX3J3X21hc2sgKCkpCiAgICAgeworICAg ICAgaWYgKGRlY2wpCisJcmV0dXJuIGdldF9jb21kYXRfZnVuY3Rpb25fcm9kYXRhX3NlY3Rpb24g KGRlY2wsIHJlbG9jKTsKKwogICAgICAgaWYgKHJlbG9jID09IDEpCiAJcmV0dXJuIGdldF9uYW1l ZF9zZWN0aW9uIChOVUxMLCAiLmRhdGEucmVsLnJvLmxvY2FsIiwgMSk7CiAgICAgICBlbHNlCiAJ cmV0dXJuIGdldF9uYW1lZF9zZWN0aW9uIChOVUxMLCAiLmRhdGEucmVsLnJvIiwgMyk7CiAgICAg fQorICBlbHNlIGlmIChkZWNsKQorICAgIHJldHVybiBnZXRfY29tZGF0X2Z1bmN0aW9uX3JvZGF0 YV9zZWN0aW9uIChkZWNsLCAwKTsKIAogICByZXR1cm4gbWVyZ2VhYmxlX2NvbnN0YW50X3NlY3Rp b24gKG1vZGUsIGFsaWduLCAwKTsKIH0KLS0gCjIuNDMuMAoK --000000000000e27eec061042eeb3--