From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 839 invoked by alias); 19 Aug 2011 14:47:58 -0000 Received: (qmail 825 invoked by uid 22791); 19 Aug 2011 14:47:56 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-qw0-f47.google.com (HELO mail-qw0-f47.google.com) (209.85.216.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 19 Aug 2011 14:47:41 +0000 Received: by qwh5 with SMTP id 5so2217367qwh.20 for ; Fri, 19 Aug 2011 07:47:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.218.4 with SMTP id ho4mr2072899qab.296.1313765260216; Fri, 19 Aug 2011 07:47:40 -0700 (PDT) Received: by 10.229.29.7 with HTTP; Fri, 19 Aug 2011 07:47:40 -0700 (PDT) In-Reply-To: <20110819081733.GB2687@tyan-ft48-01.lab.bos.redhat.com> References: <20110722123042.GB2687@tyan-ft48-01.lab.bos.redhat.com> <20110819081733.GB2687@tyan-ft48-01.lab.bos.redhat.com> Date: Fri, 19 Aug 2011 14:58:00 -0000 Message-ID: Subject: Re: PING: PATCH: PR target/46770: Use .init_array/.fini_array sections From: "H.J. Lu" To: Jakub Jelinek Cc: GCC Patches Content-Type: multipart/mixed; boundary=20cf3005dee2a748fd04aadccfc1 X-IsSubscribed: yes 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 X-SW-Source: 2011-08/txt/msg01593.txt.bz2 --20cf3005dee2a748fd04aadccfc1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6092 On Fri, Aug 19, 2011 at 1:17 AM, Jakub Jelinek wrote: > Sorry for the delay. > >> --- a/gcc/config.gcc >> +++ b/gcc/config.gcc >> @@ -186,6 +186,9 @@ >> =A0# =A0configure_default_options >> =A0# =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Set to an initializer for co= nfigure_default_options >> =A0# =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0in configargs.h, based on --= with-cpu et cetera. >> +# >> +# =A0use_initfini_array =A0 =A0 =A0 =A0If set to yes, .init_array/.fini= _array sections >> +# =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0will be used if they work. >> >> =A0# The following variables are used in each case-construct to build up= the >> =A0# outgoing variables: >> @@ -238,6 +241,7 @@ default_gnu_indirect_function=3Dno >> =A0target_gtfiles=3D >> =A0need_64bit_hwint=3D >> =A0need_64bit_isa=3D >> +use_initfini_array=3Dyes > > What is this for, when nothing ever sets it to anything but yes? > If the $enable_initfini_array =3D yes test works, then there shouldn't be > any need to override it on a per-target basis... Done. >> --- /dev/null >> +++ b/gcc/config/initfini-array.h >> @@ -0,0 +1,44 @@ >> +/* Definitions for ELF systems with .init_array/.fini_array section >> + =A0 support. >> + =A0 Copyright (C) 2011 >> + =A0 Free Software Foundation, Inc. >> + >> + =A0 This file is part of GCC. >> + >> + =A0 GCC is free software; you can redistribute it and/or modify it >> + =A0 under the terms of the GNU General Public License as published >> + =A0 by the Free Software Foundation; either version 3, or (at your >> + =A0 option) any later version. >> + >> + =A0 GCC is distributed in the hope that it will be useful, but WITHOUT >> + =A0 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY >> + =A0 or FITNESS FOR A PARTICULAR PURPOSE. =A0See the GNU General Public >> + =A0 License for more details. >> + >> + =A0 You should have received a copy of the GNU General Public License >> + =A0 along with GCC; see the file COPYING3. =A0If not see >> + =A0 . =A0*/ >> + >> +#define USE_INITFINI_ARRAY >> + >> +#undef INIT_SECTION_ASM_OP >> +#undef FINI_SECTION_ASM_OP >> + >> +/* FIXME: INIT_ARRAY_SECTION_ASM_OP and FINI_ARRAY_SECTION_ASM_OP >> + =A0 =A0 =A0 aren't used in any assembly codes. =A0But we have to define >> + =A0 =A0 =A0 them to something. =A0*/ >> +#define INIT_ARRAY_SECTION_ASM_OP Something >> +#define FINI_ARRAY_SECTION_ASM_OP Something > > Can't you just define it to an empty string? =A0And, a couple of targets > define INIT_ARRAY_SECTION_ASM_OP/FINI_ARRAY_SECTION_ASM_OP, you either ne= ed > to undef it first, or define only if it wasn't defined. Done. >> + >> +#ifndef TARGET_ASM_INIT_SECTIONS >> +#define TARGET_ASM_INIT_SECTIONS default_elf_initfini_array_init_sectio= ns >> +#endif >> +extern void default_elf_initfini_array_init_sections (void); > > Why do you need this (and the default_initfini_array_init_sections () call > in all the backends)? =A0Isn't it easier to just initialize the two global > vars only when you are actually going to use them (if they are still NULL= )? Done. >> --- a/gcc/varasm.c >> +++ b/gcc/varasm.c >> @@ -7350,4 +7350,62 @@ make_debug_expr_from_rtl (const_rtx exp) >> =A0 =A0return dval; >> =A0} >> >> +static GTY(()) section *elf_init_array_section; >> +static GTY(()) section *elf_fini_array_section; >> + >> +void >> +default_elf_initfini_array_init_sections (void) >> +{ >> + =A0elf_init_array_section =3D get_unnamed_section (0, output_section_a= sm_op, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 "\t.section\t.init_array"); >> + =A0elf_fini_array_section =3D get_unnamed_section (0, output_section_a= sm_op, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 "\t.section\t.fini_array"); >> +} > > Remove above function. Done. >> + >> +static section * >> +get_elf_initfini_array_priority_section (int priority, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0bool constructor_p) >> +{ >> + =A0section *sec; >> + =A0if (priority !=3D DEFAULT_INIT_PRIORITY) >> + =A0 =A0{ >> + =A0 =A0 =A0char buf[18]; >> + =A0 =A0 =A0sprintf (buf, "%s.%.5u", >> + =A0 =A0 =A0 =A0 =A0 =A0constructor_p ? ".init_array" : ".fini_array", >> + =A0 =A0 =A0 =A0 =A0 =A0priority); >> + =A0 =A0 =A0sec =3D get_section (buf, SECTION_WRITE, NULL_TREE); >> + =A0 =A0} > > I'd just put here > =A0 else > =A0 =A0 { > =A0 =A0 =A0 if (elf_init_array_section =3D=3D NULL) > =A0 =A0 =A0 =A0 elf_init_array_section =3D get_unnamed_section... > =A0 =A0 =A0 if (elf_fini_array_section =3D=3D NULL) > =A0 =A0 =A0 =A0 elf_fini_array_section =3D get_unnamed_section... >> + =A0 =A0sec =3D constructor_p ? elf_init_array_section : elf_fini_array= _section; > =A0 =A0 } Done. >> +void >> +default_initfini_array_init_sections (void) >> +{ >> +#ifdef USE_INITFINI_ARRAY >> + =A0default_elf_initfini_array_init_sections (); >> +#endif >> +} > > And remove this (and all callers etc.). Done. > On which targets has it been tested? =A0Would be nice to test it at least= on > targets that define their own INIT_ARRAY_SECTION_ASM_OP (pa64-hpux, arm, > m32c, rx) and on {i?86,x86_64,ia64}-linux and some solaris target. > Here is the updated patch. I tested it on Linux/ia32 and Linux/x86-64. OK for trunk? Bootstrap on Linux/ia64 has failed for a while and I don't have other platforms. If it can't be easily tested on other affected platforms, can we just enable it for Linux/ia32 and Linux/x86-64 first? Thanks. --=20 H.J. ---- 2011-08-19 H.J. Lu PR target/46770 * config.gcc (tm_file): Add initfini-array.h if .init_arary/.fini_array supported. * crtstuff.c: Don't generate .ctors nor .dtors sections if USE_INITFINI_ARRAY is defined. * varasm.c (elf_init_array_section): New. (elf_fini_array_section): Likewise. (get_elf_initfini_array_priority_section): Likewise. (default_elf_init_array_asm_out_constructor): Likewise. (default_elf_fini_array_asm_out_destructor): Likewise. * config/initfini-array.h: New. --20cf3005dee2a748fd04aadccfc1 Content-Type: text/plain; charset=US-ASCII; name="gcc-pr46770-9.patch" Content-Disposition: attachment; filename="gcc-pr46770-9.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_grj9o2id0 Content-length: 8813 MjAxMS0wOC0xOSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgoK CVBSIHRhcmdldC80Njc3MAoJKiBjb25maWcuZ2NjICh0bV9maWxlKTogQWRk IGluaXRmaW5pLWFycmF5LmggaWYKCS5pbml0X2FyYXJ5Ly5maW5pX2FycmF5 IHN1cHBvcnRlZC4KCgkqIGNydHN0dWZmLmM6IERvbid0IGdlbmVyYXRlIC5j dG9ycyBub3IgLmR0b3JzIHNlY3Rpb25zIGlmCglVU0VfSU5JVEZJTklfQVJS QVkgaXMgZGVmaW5lZC4KCgkqIHZhcmFzbS5jIChlbGZfaW5pdF9hcnJheV9z ZWN0aW9uKTogTmV3LgoJKGVsZl9maW5pX2FycmF5X3NlY3Rpb24pOiBMaWtl d2lzZS4KCShnZXRfZWxmX2luaXRmaW5pX2FycmF5X3ByaW9yaXR5X3NlY3Rp b24pOiBMaWtld2lzZS4KCShkZWZhdWx0X2VsZl9pbml0X2FycmF5X2FzbV9v dXRfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KCShkZWZhdWx0X2VsZl9maW5p X2FycmF5X2FzbV9vdXRfZGVzdHJ1Y3Rvcik6IExpa2V3aXNlLgoKCSogY29u ZmlnL2luaXRmaW5pLWFycmF5Lmg6IE5ldy4KCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCmluZGV4IGI5MmNlM2QuLjdm MjkyMTMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcuZ2NjCisrKyBiL2djYy9j b25maWcuZ2NjCkBAIC0zMDU4LDYgKzMwNTgsMTEgQEAgaWYgdGVzdCB4JHdp dGhfc2NoZWR1bGUgPSB4OyB0aGVuCiAJZXNhYwogZmkKIAorIyBTdXBwb3J0 IC0tZW5hYmxlLWluaXRmaW5pLWFycmF5LgoraWYgdGVzdCB4JGVuYWJsZV9p bml0ZmluaV9hcnJheSA9IHh5ZXM7IHRoZW4KKyAgdG1fZmlsZT0iJHt0bV9m aWxlfSBpbml0ZmluaS1hcnJheS5oIgorZmkKKwogIyBWYWxpZGF0ZSBhbmQg bWFyayBhcyB2YWxpZCBhbnkgLS13aXRoIG9wdGlvbnMgc3VwcG9ydGVkCiAj IGJ5IHRoaXMgdGFyZ2V0LiAgSW4gb3JkZXIgdG8gdXNlIGEgcGFydGljdWxh ciAtLXdpdGggb3B0aW9uCiAjIHlvdSBtdXN0IGxpc3QgaXQgaW4gc3VwcG9y dGVkX2RlZmF1bHRzOyB2YWxpZGF0aW5nIHRoZSB2YWx1ZQpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9pbml0ZmluaS1hcnJheS5oIGIvZ2NjL2NvbmZpZy9p bml0ZmluaS1hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmI1Yjk1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmln L2luaXRmaW5pLWFycmF5LmgKQEAgLTAsMCArMSwzOSBAQAorLyogRGVmaW5p dGlvbnMgZm9yIEVMRiBzeXN0ZW1zIHdpdGggLmluaXRfYXJyYXkvLmZpbmlf YXJyYXkgc2VjdGlvbgorICAgc3VwcG9ydC4KKyAgIENvcHlyaWdodCAoQykg MjAxMQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg eW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0ND IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkK KyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2Vl CisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj ZGVmaW5lIFVTRV9JTklURklOSV9BUlJBWQorCisjdW5kZWYgSU5JVF9TRUNU SU9OX0FTTV9PUAorI3VuZGVmIEZJTklfU0VDVElPTl9BU01fT1AKKworI3Vu ZGVmIElOSVRfQVJSQVlfU0VDVElPTl9BU01fT1AKKyNkZWZpbmUgSU5JVF9B UlJBWV9TRUNUSU9OX0FTTV9PUAorCisjdW5kZWYgRklOSV9BUlJBWV9TRUNU SU9OX0FTTV9PUAorI2RlZmluZSBGSU5JX0FSUkFZX1NFQ1RJT05fQVNNX09Q CisKKy8qIFVzZSAuaW5pdF9hcnJheS8uZmluaV9hcnJheSBzZWN0aW9uIGZv ciBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLiAqLworI3VuZGVmIFRB UkdFVF9BU01fQ09OU1RSVUNUT1IKKyNkZWZpbmUgVEFSR0VUX0FTTV9DT05T VFJVQ1RPUiBkZWZhdWx0X2VsZl9pbml0X2FycmF5X2FzbV9vdXRfY29uc3Ry dWN0b3IKKyN1bmRlZiBUQVJHRVRfQVNNX0RFU1RSVUNUT1IKKyNkZWZpbmUg VEFSR0VUX0FTTV9ERVNUUlVDVE9SIGRlZmF1bHRfZWxmX2ZpbmlfYXJyYXlf YXNtX291dF9kZXN0cnVjdG9yCitleHRlcm4gdm9pZCBkZWZhdWx0X2VsZl9p bml0X2FycmF5X2FzbV9vdXRfY29uc3RydWN0b3IgKHJ0eCwgaW50KTsKK2V4 dGVybiB2b2lkIGRlZmF1bHRfZWxmX2ZpbmlfYXJyYXlfYXNtX291dF9kZXN0 cnVjdG9yIChydHgsIGludCk7CmRpZmYgLS1naXQgYS9nY2MvY3J0c3R1ZmYu YyBiL2djYy9jcnRzdHVmZi5jCmluZGV4IGI2NWY0OTAuLjAxMGQ0NzIgMTAw NjQ0Ci0tLSBhL2djYy9jcnRzdHVmZi5jCisrKyBiL2djYy9jcnRzdHVmZi5j CkBAIC0xLDcgKzEsOCBAQAogLyogU3BlY2lhbGl6ZWQgYml0cyBvZiBjb2Rl IG5lZWRlZCB0byBzdXBwb3J0IGNvbnN0cnVjdGlvbiBhbmQKICAgIGRlc3Ry dWN0aW9uIG9mIGZpbGUtc2NvcGUgb2JqZWN0cyBpbiBDKysgY29kZS4KICAg IENvcHlyaWdodCAoQykgMTk5MSwgMTk5NCwgMTk5NSwgMTk5NiwgMTk5Nywg MTk5OCwgMTk5OSwgMjAwMCwgMjAwMQotICAgMjAwMiwgMjAwMywgMjAwNCwg MjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKyAgIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIw MDYsIDIwMDcsIDIwMDksIDIwMTAsIDIwMTEKKyAgIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgogICAgQ29udHJpYnV0ZWQgYnkgUm9uIEd1aWxt ZXR0ZSAocmZnQG1vbmtleXMuY29tKS4KIAogVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgpAQCAtMTg5LDYgKzE5MCw5IEBAIHR5cGVkZWYgdm9pZCAoKmZ1 bmNfcHRyKSAodm9pZCk7CiAgICByZWZlciB0byBvbmx5IHRoZSBfX0NUT1Jf RU5EX18gc3ltYm9sIGluIGNydGVuZC5vIGFuZCB0aGUgX19EVE9SX0xJU1Rf XwogICAgc3ltYm9sIGluIGNydGJlZ2luLm8sIHdoZXJlIHRoZXkgYXJlIGRl ZmluZWQuICAqLwogCisvKiBObyBuZWVkIGZvciAuY3RvcnMvLmR0b3JzIHNl Y3Rpb24gaWYgbGlua2VyIGNhbiBwbGFjZSB0aGVtIGluCisgICAuaW5pdF9h cnJheS8uZmluaV9hcnJheSBzZWN0aW9uLiAgKi8KKyNpZm5kZWYgVVNFX0lO SVRGSU5JX0FSUkFZCiAvKiBUaGUgLTEgaXMgYSBmbGFnIHRvIF9fZG9fZ2xv YmFsX1tjZF10b3JzIGluZGljYXRpbmcgdGhhdCB0aGlzIHRhYmxlCiAgICBk b2VzIG5vdCBzdGFydCB3aXRoIGEgY291bnQgb2YgZWxlbWVudHMuICAqLwog I2lmZGVmIENUT1JfTElTVF9CRUdJTgpAQCAtMjE5LDYgKzIyMyw3IEBAIFNU QVRJQyBmdW5jX3B0ciBfX0RUT1JfTElTVF9fWzFdCiAgIF9fYXR0cmlidXRl X18oKHNlY3Rpb24oIi5kdG9ycyIpLCBhbGlnbmVkKHNpemVvZihmdW5jX3B0 cikpKSkKICAgPSB7IChmdW5jX3B0cikgKC0xKSB9OwogI2VuZGlmIC8qIF9f RFRPUl9MSVNUX18gYWx0ZXJuYXRpdmVzICovCisjZW5kaWYgLyogVVNFX0lO SVRGSU5JX0FSUkFZICovCiAKICNpZmRlZiBVU0VfRUhfRlJBTUVfUkVHSVNU UlkKIC8qIFN0aWNrIGEgbGFiZWwgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg ZnJhbWUgdW53aW5kIGluZm8gc28gd2UgY2FuIHJlZ2lzdGVyCkBAIC00ODks NiArNDk0LDkgQEAgX19kb19nbG9iYWxfY3RvcnNfMSh2b2lkKQogCiAjZWxp ZiBkZWZpbmVkKENSVF9FTkQpIC8qICEgQ1JUX0JFR0lOICovCiAKKy8qIE5v IG5lZWQgZm9yIC5jdG9ycy8uZHRvcnMgc2VjdGlvbiBpZiBsaW5rZXIgY2Fu IHBsYWNlIHRoZW0gaW4KKyAgIC5pbml0X2FycmF5Ly5maW5pX2FycmF5IHNl Y3Rpb24uICAqLworI2lmbmRlZiBVU0VfSU5JVEZJTklfQVJSQVkKIC8qIFB1 dCBhIHdvcmQgY29udGFpbmluZyB6ZXJvIGF0IHRoZSBlbmQgb2YgZWFjaCBv ZiBvdXIgdHdvIGxpc3RzIG9mIGZ1bmN0aW9uCiAgICBhZGRyZXNzZXMuICBO b3RlIHRoYXQgdGhlIHdvcmRzIGRlZmluZWQgaGVyZSBnbyBpbnRvIHRoZSAu Y3RvcnMgYW5kIC5kdG9ycwogICAgc2VjdGlvbnMgb2YgdGhlIGNydGVuZC5v IGZpbGUsIGFuZCBzaW5jZSB0aGF0IGZpbGUgaXMgYWx3YXlzIGxpbmtlZCBp bgpAQCAtNTM0LDYgKzU0Miw3IEBAIFNUQVRJQyBmdW5jX3B0ciBfX0RUT1Jf RU5EX19bMV0KICAgX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiLmR0 b3JzIiksIGFsaWduZWQoc2l6ZW9mKGZ1bmNfcHRyKSkpKQogICA9IHsgKGZ1 bmNfcHRyKSAwIH07CiAjZW5kaWYKKyNlbmRpZiAvKiBVU0VfSU5JVEZJTklf QVJSQVkgKi8KIAogI2lmZGVmIEVIX0ZSQU1FX1NFQ1RJT05fTkFNRQogLyog VGVybWluYXRlIHRoZSBmcmFtZSB1bndpbmQgaW5mbyBzZWN0aW9uIHdpdGgg YSA0Ynl0ZSAwIGFzIGEgc2VudGluZWw7CmRpZmYgLS1naXQgYS9nY2MvdmFy YXNtLmMgYi9nY2MvdmFyYXNtLmMKaW5kZXggY2E1NjgxMy4uMjE4YmFmMyAx MDA2NDQKLS0tIGEvZ2NjL3ZhcmFzbS5jCisrKyBiL2djYy92YXJhc20uYwpA QCAtNzM1Miw0ICs3MzUyLDYyIEBAIG1ha2VfZGVidWdfZXhwcl9mcm9tX3J0 bCAoY29uc3RfcnR4IGV4cCkKICAgcmV0dXJuIGR2YWw7CiB9CiAKK3N0YXRp YyBHVFkoKCkpIHNlY3Rpb24gKmVsZl9pbml0X2FycmF5X3NlY3Rpb247Citz dGF0aWMgR1RZKCgpKSBzZWN0aW9uICplbGZfZmluaV9hcnJheV9zZWN0aW9u OworCitzdGF0aWMgc2VjdGlvbiAqCitnZXRfZWxmX2luaXRmaW5pX2FycmF5 X3ByaW9yaXR5X3NlY3Rpb24gKGludCBwcmlvcml0eSwKKwkJCQkJIGJvb2wg Y29uc3RydWN0b3JfcCkKK3sKKyAgc2VjdGlvbiAqc2VjOworICBpZiAocHJp b3JpdHkgIT0gREVGQVVMVF9JTklUX1BSSU9SSVRZKQorICAgIHsKKyAgICAg IGNoYXIgYnVmWzE4XTsKKyAgICAgIHNwcmludGYgKGJ1ZiwgIiVzLiUuNXUi LCAKKwkgICAgICAgY29uc3RydWN0b3JfcCA/ICIuaW5pdF9hcnJheSIgOiAi LmZpbmlfYXJyYXkiLAorCSAgICAgICBwcmlvcml0eSk7CisgICAgICBzZWMg PSBnZXRfc2VjdGlvbiAoYnVmLCBTRUNUSU9OX1dSSVRFLCBOVUxMX1RSRUUp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChjb25zdHJ1Y3Rv cl9wKQorCXsKKwkgIGlmIChlbGZfaW5pdF9hcnJheV9zZWN0aW9uID09IE5V TEwpCisJICAgIGVsZl9pbml0X2FycmF5X3NlY3Rpb24KKwkgICAgICA9IGdl dF91bm5hbWVkX3NlY3Rpb24gKDAsIG91dHB1dF9zZWN0aW9uX2FzbV9vcCwK KwkJCQkgICAgICJcdC5zZWN0aW9uXHQuaW5pdF9hcnJheSIpOworCSAgc2Vj ID0gZWxmX2luaXRfYXJyYXlfc2VjdGlvbjsKKwl9CisgICAgICBlbHNlCisJ eworCSAgaWYgKGVsZl9maW5pX2FycmF5X3NlY3Rpb24gPT0gTlVMTCkKKwkg ICAgZWxmX2ZpbmlfYXJyYXlfc2VjdGlvbgorCSAgICAgID0gZ2V0X3VubmFt ZWRfc2VjdGlvbiAoMCwgb3V0cHV0X3NlY3Rpb25fYXNtX29wLAorCQkJCSAg ICAgIlx0LnNlY3Rpb25cdC5maW5pX2FycmF5Iik7CisJICBzZWMgPSBlbGZf ZmluaV9hcnJheV9zZWN0aW9uOworCX0KKyAgICB9CisgIHJldHVybiBzZWM7 Cit9CisKKy8qIFVzZSAuaW5pdF9hcnJheSBzZWN0aW9uIGZvciBjb25zdHJ1 Y3RvcnMuICovCisKK3ZvaWQKK2RlZmF1bHRfZWxmX2luaXRfYXJyYXlfYXNt X291dF9jb25zdHJ1Y3RvciAocnR4IHN5bWJvbCwgaW50IHByaW9yaXR5KQor eworICBzZWN0aW9uICpzZWMgPSBnZXRfZWxmX2luaXRmaW5pX2FycmF5X3By aW9yaXR5X3NlY3Rpb24gKHByaW9yaXR5LAorCQkJCQkJCSAgdHJ1ZSk7Cisg IGFzc2VtYmxlX2FkZHJfdG9fc2VjdGlvbiAoc3ltYm9sLCBzZWMpOworfQor CisvKiBVc2UgLmZpbmlfYXJyYXkgc2VjdGlvbiBmb3IgZGVzdHJ1Y3RvcnMu ICovCisKK3ZvaWQKK2RlZmF1bHRfZWxmX2ZpbmlfYXJyYXlfYXNtX291dF9k ZXN0cnVjdG9yIChydHggc3ltYm9sLCBpbnQgcHJpb3JpdHkpCit7CisgIHNl Y3Rpb24gKnNlYyA9IGdldF9lbGZfaW5pdGZpbmlfYXJyYXlfcHJpb3JpdHlf c2VjdGlvbiAocHJpb3JpdHksCisJCQkJCQkJICBmYWxzZSk7CisgIGFzc2Vt YmxlX2FkZHJfdG9fc2VjdGlvbiAoc3ltYm9sLCBzZWMpOworfQorCiAjaW5j bHVkZSAiZ3QtdmFyYXNtLmgiCg== --20cf3005dee2a748fd04aadccfc1--