From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH v6 1/4] xen: introduce SYMBOL Date: Mon, 14 Jan 2019 13:18:59 -0800 (PST) Message-ID: References: <5C37013C020000780020C17D@prv1-mh.provo.novell.com> <5C387472020000780020C9A7@prv1-mh.provo.novell.com> <0e731cbd10b64a2faac309c04c2030e2@dornerworks.com> <3cc0862e5f0442d49c33c08f21b423ab@dornerworks.com> <5C3C63E0020000780020D22C@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-763683777-1547500740=:27759" Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gj9ds-0007BG-5J for xen-devel@lists.xenproject.org; Mon, 14 Jan 2019 21:19:32 +0000 In-Reply-To: <5C3C63E0020000780020D22C@prv1-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Jan Beulich Cc: Juergen Gross , Stefano Stabellini , Stefano Stabellini , Wei Liu , Andrew Cooper , Julien Grall , Julien Grall , Stewart Hildebrand , xen-devel List-Id: xen-devel@lists.xenproject.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-763683777-1547500740=:27759 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi Jan, One question below to make a decision on the way forward. On Mon, 14 Jan 2019, Jan Beulich wrote: > >>> On 14.01.19 at 04:45, wrote: > > So let's keep the linker-accessible variable as a type that works for the > > linker (which really could be anything as long as you use the address, not > > the value), but name it something else - a name that screams "DON'T USE ME > > UNLESS YOU KNOW WHAT YOU'RE DOING". And then before the first use, copy > > that value to "uintptr_t _start;". > > > > The following is a quick proof of concept for aarch64. I changed the type > > of _start and _end, and added code to copy the linker-assigned value to > > _start and _end. Upon booting, I see the correct values: > > Global symbols starting with underscores should already be shouting > enough. But what's worse - the whole idea if using array types is to > avoid the intermediate variables. > > > --- a/xen/arch/arm/setup.c > > +++ b/xen/arch/arm/setup.c > > @@ -726,6 +726,12 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size) > > > > size_t __read_mostly dcache_line_bytes; > > > > +typedef char TYPE_DOESNT_MATTER; > > +extern TYPE_DOESNT_MATTER _start_linker_assigned_dont_use_me, > > + _end_linker_assigned_dont_use_me; > > This and ... > > > @@ -770,10 +776,17 @@ void __init start_xen(unsigned long boot_phys_offset, > > printk("Command line: %s\n", cmdline); > > cmdline_parse(cmdline); > > > > + _start = (uintptr_t)&_start_linker_assigned_dont_use_me; > > + _end = (uintptr_t)&_end_linker_assigned_dont_use_me; > > ... this violates what the symbol names say. And if you want to > avoid issues, you'd want to keep out of C files uses of those > symbols altogether anyway, and you easily can: In any > assembly file, have > > _start: .long _start_linker_assigned_dont_use_me > _end: .long _end_linker_assigned_dont_use_me > > In particular, they don't need to be runtime initialized, saving > you from needing to set them before first use. But as said - > things are the way they are precisely to avoid such variables. > > >> But, instead of converting _start to unsigned long via SYMBOL_HIDE, we > >> could convert it to uintptr_t instead, it would be a trivial change on > >> top of the existing unsigned long series. Not sure if it is beneficial. > > > > The difference would be whether we want to rely on implementation-defined > > behavior or not. > > Why not? Simply specify that compilers with implementation defined > behavior not matching our expectations are unsuitable. And btw, I > suppose this is just the tiny tip of the iceberg of our reliance on > implementation defined behavior. The reason is that relying on undefined behavior is not reliable, it is not C compliant, it is not allowed by MISRA-C, and not guaranteed to work with any compiler. Yes, this instance is only the tip of the iceberg, we have a long road ahead, but we shouldn't really give up because it is going to be difficult :-) Stewart's approach would actually be compliant and help toward reducing reliance on undefined behavior. Would you be OK if I rework the series to follow his approach using intermediate variables? See the attached patch as a reference, it only "converts" _start and _end as an example. Fortunately, it will be textually similar to the previous SYMBOL returning unsigned long version of the series. If you are OK with it, do you have any suggestions on how would you like the intermediate variables to be called? I went with _start/start_ and _end/end_ but I am open to suggestions. Also to which assembly file you would like the new variables being added -- I created a new one for the purpose named var.S in the attached example. --8323329-763683777-1547500740=:27759 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=change-type-poc Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=change-type-poc ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jIGIveGVu L2FyY2gvYXJtL2FsdGVybmF0aXZlLmMNCmluZGV4IDUyZWQ3ZWQuLmI3OTUz NmQgMTAwNjQ0DQotLS0gYS94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYw0K KysrIGIveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMNCkBAIC0xODcsOCAr MTg3LDggQEAgc3RhdGljIGludCBfX2FwcGx5X2FsdGVybmF0aXZlc19tdWx0 aV9zdG9wKHZvaWQgKnVudXNlZCkNCiAgICAgew0KICAgICAgICAgaW50IHJl dDsNCiAgICAgICAgIHN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbjsNCi0gICAg ICAgIG1mbl90IHhlbl9tZm4gPSB2aXJ0X3RvX21mbihfc3RhcnQpOw0KLSAg ICAgICAgcGFkZHJfdCB4ZW5fc2l6ZSA9IF9lbmQgLSBfc3RhcnQ7DQorICAg ICAgICBtZm5fdCB4ZW5fbWZuID0gdmlydF90b19tZm4oc3RhcnRfKTsNCisg ICAgICAgIHBhZGRyX3QgeGVuX3NpemUgPSBlbmRfIC0gc3RhcnRfOw0KICAg ICAgICAgdW5zaWduZWQgaW50IHhlbl9vcmRlciA9IGdldF9vcmRlcl9mcm9t X2J5dGVzKHhlbl9zaXplKTsNCiAgICAgICAgIHZvaWQgKnhlbm1hcDsNCiAN CkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIGludCBfX2FwcGx5X2FsdGVy bmF0aXZlc19tdWx0aV9zdG9wKHZvaWQgKnVudXNlZCkNCiAgICAgICAgIHJl Z2lvbi5iZWdpbiA9IF9fYWx0X2luc3RydWN0aW9uczsNCiAgICAgICAgIHJl Z2lvbi5lbmQgPSBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kOw0KIA0KLSAgICAg ICAgcmV0ID0gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbiwgeGVubWFw IC0gKHZvaWQgKilfc3RhcnQpOw0KKyAgICAgICAgcmV0ID0gX19hcHBseV9h bHRlcm5hdGl2ZXMoJnJlZ2lvbiwgKHVpbnRwdHJfdCl4ZW5tYXAgLSBzdGFy dF8pOw0KICAgICAgICAgLyogVGhlIHBhdGNoaW5nIGlzIG5vdCBleHBlY3Rl ZCB0byBmYWlsIGR1cmluZyBib290LiAqLw0KICAgICAgICAgQlVHX09OKHJl dCAhPSAwKTsNCiANCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYXJtMzIv TWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vYXJtMzIvTWFrZWZpbGUNCmluZGV4 IDBhYzI1NGYuLjk4M2ZiODIgMTAwNjQ0DQotLS0gYS94ZW4vYXJjaC9hcm0v YXJtMzIvTWFrZWZpbGUNCisrKyBiL3hlbi9hcmNoL2FybS9hcm0zMi9NYWtl ZmlsZQ0KQEAgLTEwLDQgKzEwLDUgQEAgb2JqLXkgKz0gcHJvYy12Ny5vIHBy b2MtY2F4eC5vDQogb2JqLXkgKz0gc21wYm9vdC5vDQogb2JqLXkgKz0gdHJh cHMubw0KIG9iai15ICs9IHZmcC5vDQorb2JqLXkgKz0gdmFyLm8NCiANCmRp ZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYXJtMzIvbGl2ZXBhdGNoLmMgYi94 ZW4vYXJjaC9hcm0vYXJtMzIvbGl2ZXBhdGNoLmMNCmluZGV4IDQxMzc4YTUu LmFkOWU5Y2EgMTAwNjQ0DQotLS0gYS94ZW4vYXJjaC9hcm0vYXJtMzIvbGl2 ZXBhdGNoLmMNCisrKyBiL3hlbi9hcmNoL2FybS9hcm0zMi9saXZlcGF0Y2gu Yw0KQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBhcmNoX2xpdmVwYXRjaF9hcHBs eShzdHJ1Y3QgbGl2ZXBhdGNoX2Z1bmMgKmZ1bmMpDQogICAgIGVsc2UNCiAg ICAgICAgIGluc24gPSAweGUxYTAwMDAwOyAvKiBtb3YgcjAsIHIwICovDQog DQotICAgIG5ld19wdHIgPSBmdW5jLT5vbGRfYWRkciAtICh2b2lkICopX3N0 YXJ0ICsgdm1hcF9vZl94ZW5fdGV4dDsNCisgICAgbmV3X3B0ciA9ICh1aW50 cHRyX3QpZnVuYy0+b2xkX2FkZHIgLSBzdGFydF8gKyAodWludHB0cl90KXZt YXBfb2ZfeGVuX3RleHQ7DQogICAgIGxlbiA9IGxlbiAvIHNpemVvZih1aW50 MzJfdCk7DQogDQogICAgIC8qIFBBVENIISAqLw0KZGlmZiAtLWdpdCBhL3hl bi9hcmNoL2FybS9hcm0zMi92YXIuUyBiL3hlbi9hcmNoL2FybS9hcm0zMi92 YXIuUw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmY4 Yjk0YTENCi0tLSAvZGV2L251bGwNCisrKyBiL3hlbi9hcmNoL2FybS9hcm0z Mi92YXIuUw0KQEAgLTAsMCArMSw0IEBADQorR0xPQkFMKHN0YXJ0XykNCisg IC5sb25nICBfc3RhcnQNCitHTE9CQUwoZW5kXykNCisgIC5sb25nICBfZW5k DQpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FybTY0L01ha2VmaWxlIGIv eGVuL2FyY2gvYXJtL2FybTY0L01ha2VmaWxlDQppbmRleCBjNGYzYTI4Li5h NWQ5NTU4IDEwMDY0NA0KLS0tIGEveGVuL2FyY2gvYXJtL2FybTY0L01ha2Vm aWxlDQorKysgYi94ZW4vYXJjaC9hcm0vYXJtNjQvTWFrZWZpbGUNCkBAIC0x MywzICsxMyw0IEBAIG9iai15ICs9IHNtcGJvb3Qubw0KIG9iai15ICs9IHRy YXBzLm8NCiBvYmoteSArPSB2ZnAubw0KIG9iai15ICs9IHZzeXNyZWcubw0K K29iai15ICs9IHZhci5vDQpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2Fy bTY0L2xpdmVwYXRjaC5jIGIveGVuL2FyY2gvYXJtL2FybTY0L2xpdmVwYXRj aC5jDQppbmRleCAyMjQ3YjkyLi42MDYxNmQ2IDEwMDY0NA0KLS0tIGEveGVu L2FyY2gvYXJtL2FybTY0L2xpdmVwYXRjaC5jDQorKysgYi94ZW4vYXJjaC9h cm0vYXJtNjQvbGl2ZXBhdGNoLmMNCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQg YXJjaF9saXZlcGF0Y2hfYXBwbHkoc3RydWN0IGxpdmVwYXRjaF9mdW5jICpm dW5jKQ0KICAgICAvKiBWZXJpZmllZCBpbiBsaXZlcGF0Y2hfdmVyaWZ5X2Rp c3RhbmNlLiAqLw0KICAgICBBU1NFUlQoaW5zbiAhPSBBQVJDSDY0X0JSRUFL X0ZBVUxUKTsNCiANCi0gICAgbmV3X3B0ciA9IGZ1bmMtPm9sZF9hZGRyIC0g KHZvaWQgKilfc3RhcnQgKyB2bWFwX29mX3hlbl90ZXh0Ow0KKyAgICBuZXdf cHRyID0gKHVpbnRwdHJfdClmdW5jLT5vbGRfYWRkciAtIHN0YXJ0XyArICh1 aW50cHRyX3Qpdm1hcF9vZl94ZW5fdGV4dDsNCiAgICAgbGVuID0gbGVuIC8g c2l6ZW9mKHVpbnQzMl90KTsNCiANCiAgICAgLyogUEFUQ0ghICovDQpkaWZm IC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FybTY0L3Zhci5TIGIveGVuL2FyY2gv YXJtL2FybTY0L3Zhci5TDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uNTY2ZTA2Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIveGVuL2Fy Y2gvYXJtL2FybTY0L3Zhci5TDQpAQCAtMCwwICsxLDQgQEANCitHTE9CQUwo c3RhcnRfKQ0KKyAgLnF1YWQgIF9zdGFydA0KK0dMT0JBTChlbmRfKQ0KKyAg LnF1YWQgIF9lbmQNCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vbGl2ZXBh dGNoLmMgYi94ZW4vYXJjaC9hcm0vbGl2ZXBhdGNoLmMNCmluZGV4IDI3OWQ1 MmMuLjdhYjY2ZDMgMTAwNjQ0DQotLS0gYS94ZW4vYXJjaC9hcm0vbGl2ZXBh dGNoLmMNCisrKyBiL3hlbi9hcmNoL2FybS9saXZlcGF0Y2guYw0KQEAgLTI2 LDggKzI2LDggQEAgaW50IGFyY2hfbGl2ZXBhdGNoX3F1aWVzY2Uodm9pZCkN CiAgICAgaWYgKCB2bWFwX29mX3hlbl90ZXh0ICkNCiAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KIA0KLSAgICB0ZXh0X21mbiA9IHZpcnRfdG9fbWZuKF9z dGFydCk7DQotICAgIHRleHRfb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9ieXRl cyhfZW5kIC0gX3N0YXJ0KTsNCisgICAgdGV4dF9tZm4gPSB2aXJ0X3RvX21m bihzdGFydF8pOw0KKyAgICB0ZXh0X29yZGVyID0gZ2V0X29yZGVyX2Zyb21f Ynl0ZXMoZW5kXyAtIHN0YXJ0Xyk7DQogDQogICAgIC8qDQogICAgICAqIFRo ZSB0ZXh0IHNlY3Rpb24gaXMgcmVhZC1vbmx5LiBTbyByZS1tYXAgWGVuIHRv IGJlIGFibGUgdG8gcGF0Y2gNCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgYXJj aF9saXZlcGF0Y2hfcmV2ZXJ0KGNvbnN0IHN0cnVjdCBsaXZlcGF0Y2hfZnVu YyAqZnVuYykNCiAgICAgdWludDMyX3QgKm5ld19wdHI7DQogICAgIHVuc2ln bmVkIGludCBsZW47DQogDQotICAgIG5ld19wdHIgPSBmdW5jLT5vbGRfYWRk ciAtICh2b2lkICopX3N0YXJ0ICsgdm1hcF9vZl94ZW5fdGV4dDsNCisgICAg bmV3X3B0ciA9ICh1aW50cHRyX3QpZnVuYy0+b2xkX2FkZHIgLSBzdGFydF8g KyAodWludHB0cl90KXZtYXBfb2ZfeGVuX3RleHQ7DQogDQogICAgIGxlbiA9 IGxpdmVwYXRjaF9pbnNuX2xlbihmdW5jKTsNCiAgICAgbWVtY3B5KG5ld19w dHIsIGZ1bmMtPm9wYXF1ZSwgbGVuKTsNCmRpZmYgLS1naXQgYS94ZW4vYXJj aC9hcm0vbW0uYyBiL3hlbi9hcmNoL2FybS9tbS5jDQppbmRleCAwMWFlMmNj Li4yYTA4M2JlIDEwMDY0NA0KLS0tIGEveGVuL2FyY2gvYXJtL21tLmMNCisr KyBiL3hlbi9hcmNoL2FybS9tbS5jDQpAQCAtMTA3Myw3ICsxMDczLDcgQEAg aW50IG1vZGlmeV94ZW5fbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzLCB1bnNp Z25lZCBsb25nIGUsIHVuc2lnbmVkIGludCBmbGFncykNCiB9DQogDQogZW51 bSBtZyB7IG1nX2NsZWFyLCBtZ19ybywgbWdfcncsIG1nX3J4IH07DQotc3Rh dGljIHZvaWQgc2V0X3B0ZV9mbGFnc19vbl9yYW5nZShjb25zdCBjaGFyICpw LCB1bnNpZ25lZCBsb25nIGwsIGVudW0gbWcgbWcpDQorc3RhdGljIHZvaWQg c2V0X3B0ZV9mbGFnc19vbl9yYW5nZShjb25zdCB1aW50cHRyX3QgcCwgdW5z aWduZWQgbG9uZyBsLCBlbnVtIG1nIG1nKQ0KIHsNCiAgICAgbHBhZV90IHB0 ZTsNCiAgICAgaW50IGk7DQpAQCAtMTA4NCw4ICsxMDg0LDggQEAgc3RhdGlj IHZvaWQgc2V0X3B0ZV9mbGFnc19vbl9yYW5nZShjb25zdCBjaGFyICpwLCB1 bnNpZ25lZCBsb25nIGwsIGVudW0gbWcgbWcpDQogICAgIEFTU0VSVCghKCh1 bnNpZ25lZCBsb25nKSBwICYgflBBR0VfTUFTSykpOw0KICAgICBBU1NFUlQo IShsICYgflBBR0VfTUFTSykpOw0KIA0KLSAgICBmb3IgKCBpID0gKHAgLSBf c3RhcnQpIC8gUEFHRV9TSVpFOyANCi0gICAgICAgICAgaSA8IChwICsgbCAt IF9zdGFydCkgLyBQQUdFX1NJWkU7IA0KKyAgICBmb3IgKCBpID0gKHAgLSBz dGFydF8pIC8gUEFHRV9TSVpFOyANCisgICAgICAgICAgaSA8IChwICsgbCAt IHN0YXJ0XykgLyBQQUdFX1NJWkU7IA0KICAgICAgICAgICBpKysgKQ0KICAg ICB7DQogICAgICAgICBwdGUgPSB4ZW5feGVubWFwW2ldOw0KQEAgLTExMjcs NyArMTEyNyw3IEBAIHZvaWQgZnJlZV9pbml0X21lbW9yeSh2b2lkKQ0KICAg ICB1bnNpZ25lZCBpbnQgaSwgbnIgPSBsZW4gLyBzaXplb2YoaW5zbik7DQog ICAgIHVpbnQzMl90ICpwOw0KIA0KLSAgICBzZXRfcHRlX2ZsYWdzX29uX3Jh bmdlKF9faW5pdF9iZWdpbiwgbGVuLCBtZ19ydyk7DQorICAgIHNldF9wdGVf ZmxhZ3Nfb25fcmFuZ2UoKHVpbnRwdHJfdClfX2luaXRfYmVnaW4sIGxlbiwg bWdfcncpOw0KICNpZmRlZiBDT05GSUdfQVJNXzMyDQogICAgIC8qIHVkZiBp bnN0cnVjdGlvbiBpLmUgKHNlZSBBOC44LjI0NyBpbiBBUk0gRERJIDA0MDZD LmMpICovDQogICAgIGluc24gPSAweGU3ZjAwMGYwOw0KQEAgLTExMzgsNyAr MTEzOCw3IEBAIHZvaWQgZnJlZV9pbml0X21lbW9yeSh2b2lkKQ0KICAgICBm b3IgKCBpID0gMDsgaSA8IG5yOyBpKysgKQ0KICAgICAgICAgKihwICsgaSkg PSBpbnNuOw0KIA0KLSAgICBzZXRfcHRlX2ZsYWdzX29uX3JhbmdlKF9faW5p dF9iZWdpbiwgbGVuLCBtZ19jbGVhcik7DQorICAgIHNldF9wdGVfZmxhZ3Nf b25fcmFuZ2UoKHVpbnRwdHJfdClfX2luaXRfYmVnaW4sIGxlbiwgbWdfY2xl YXIpOw0KICAgICBpbml0X2RvbWhlYXBfcGFnZXMocGEsIHBhICsgbGVuKTsN CiAgICAgcHJpbnRrKCJGcmVlZCAlbGRrQiBpbml0IG1lbW9yeS5cbiIsIChs b25nKShfX2luaXRfZW5kLV9faW5pdF9iZWdpbik+PjEwKTsNCiB9DQpkaWZm IC0tZ2l0IGEveGVuL2FyY2gvYXJtL3NldHVwLmMgYi94ZW4vYXJjaC9hcm0v c2V0dXAuYw0KaW5kZXggNDQ0ODU3YS4uOWEwZGY0MyAxMDA2NDQNCi0tLSBh L3hlbi9hcmNoL2FybS9zZXR1cC5jDQorKysgYi94ZW4vYXJjaC9hcm0vc2V0 dXAuYw0KQEAgLTc3Miw4ICs3NzIsOCBAQCB2b2lkIF9faW5pdCBzdGFydF94 ZW4odW5zaWduZWQgbG9uZyBib290X3BoeXNfb2Zmc2V0LA0KIA0KICAgICAv KiBSZWdpc3RlciBYZW4ncyBsb2FkIGFkZHJlc3MgYXMgYSBib290IG1vZHVs ZS4gKi8NCiAgICAgeGVuX2Jvb3Rtb2R1bGUgPSBhZGRfYm9vdF9tb2R1bGUo Qk9PVE1PRF9YRU4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGFkZHJfdCkodWludHB0cl90KShfc3RhcnQgKyBib290X3BoeXNfb2Zmc2V0 KSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWRkcl90KSh1 aW50cHRyX3QpKF9lbmQgLSBfc3RhcnQgKyAxKSwgZmFsc2UpOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0XyArIGJvb3RfcGh5c19v ZmZzZXQpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZF8g LSBzdGFydF8gKyAxKSwgZmFsc2UpOw0KICAgICBCVUdfT04oIXhlbl9ib290 bW9kdWxlKTsNCiANCiAgICAgc2V0dXBfcGFnZXRhYmxlcyhib290X3BoeXNf b2Zmc2V0KTsNCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvYm9vdC9NYWtl ZmlsZSBiL3hlbi9hcmNoL3g4Ni9ib290L01ha2VmaWxlDQppbmRleCBlMTAz ODgyLi44MzI3ZDJhIDEwMDY0NA0KLS0tIGEveGVuL2FyY2gveDg2L2Jvb3Qv TWFrZWZpbGUNCisrKyBiL3hlbi9hcmNoL3g4Ni9ib290L01ha2VmaWxlDQpA QCAtMSw0ICsxLDUgQEANCiBvYmotYmluLXkgKz0gaGVhZC5vDQorb2JqLWJp bi15ICs9IHZhci5vDQogDQogREVGU19IX0RFUFMgPSBkZWZzLmggJChCQVNF RElSKS9pbmNsdWRlL3hlbi9zdGRib29sLmgNCiANCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvYm9vdC92YXIuUyBiL3hlbi9hcmNoL3g4Ni9ib290L3Zh ci5TDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNTY2 ZTA2Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIveGVuL2FyY2gveDg2L2Jvb3Qv dmFyLlMNCkBAIC0wLDAgKzEsNCBAQA0KK0dMT0JBTChzdGFydF8pDQorICAu cXVhZCAgX3N0YXJ0DQorR0xPQkFMKGVuZF8pDQorICAucXVhZCAgX2VuZA0K ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jIGIveGVuL2FyY2gv eDg2L3NldHVwLmMNCmluZGV4IDA2ZWI0ODMuLjdkNmMzZWMgMTAwNjQ0DQot LS0gYS94ZW4vYXJjaC94ODYvc2V0dXAuYw0KKysrIGIveGVuL2FyY2gveDg2 L3NldHVwLmMNCkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIF9faW5pdCBu b3JldHVybiBfX3N0YXJ0X3hlbih1bnNpZ25lZCBsb25nIG1iaV9wKQ0KICAg ICAgICAgICogSXMgdGhlIHJlZ2lvbiBzaXplIGdyZWF0ZXIgdGhhbiB6ZXJv IGFuZCBkb2VzIGl0IGJlZ2luDQogICAgICAgICAgKiBhdCBvciBhYm92ZSB0 aGUgZW5kIG9mIGN1cnJlbnQgWGVuIGltYWdlIHBsYWNlbWVudD8NCiAgICAg ICAgICAqLw0KLSAgICAgICAgaWYgKCAoZW5kID4gcykgJiYgKGVuZCAtIHJl bG9jX3NpemUgKyBYRU5fSU1HX09GRlNFVCA+PSBfX3BhKF9lbmQpKSApDQor ICAgICAgICBpZiAoIChlbmQgPiBzKSAmJiAoZW5kIC0gcmVsb2Nfc2l6ZSAr IFhFTl9JTUdfT0ZGU0VUID49IF9fcGEoZW5kXykpICkNCiAgICAgICAgIHsN CiAgICAgICAgICAgICBsNF9wZ2VudHJ5X3QgKnBsNGU7DQogICAgICAgICAg ICAgbDNfcGdlbnRyeV90ICpwbDNlOw0KQEAgLTEwNjcsNyArMTA2Nyw3IEBA IHZvaWQgX19pbml0IG5vcmV0dXJuIF9fc3RhcnRfeGVuKHVuc2lnbmVkIGxv bmcgbWJpX3ApDQogICAgICAgICAgICAgICogZGF0YSB1bnRpbCBhZnRlciB3 ZSBoYXZlIHN3aXRjaGVkIHRvIHRoZSByZWxvY2F0ZWQgcGFnZXRhYmxlcyEN CiAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICBiYXJyaWVyKCk7DQot ICAgICAgICAgICAgbW92ZV9tZW1vcnkoZSArIFhFTl9JTUdfT0ZGU0VULCBY RU5fSU1HX09GRlNFVCwgX2VuZCAtIF9zdGFydCwgMSk7DQorICAgICAgICAg ICAgbW92ZV9tZW1vcnkoZSArIFhFTl9JTUdfT0ZGU0VULCBYRU5fSU1HX09G RlNFVCwgZW5kXyAtIHN0YXJ0XywgMSk7DQogDQogICAgICAgICAgICAgLyog V2FsayBpbml0aWFsIHBhZ2V0YWJsZXMsIHJlbG9jYXRpbmcgcGFnZSBkaXJl Y3RvcnkgZW50cmllcy4gKi8NCiAgICAgICAgICAgICBwbDRlID0gX192YShf X3BhKGlkbGVfcGdfdGFibGUpKTsNCkBAIC0xMzgyLDcgKzEzODIsNyBAQCB2 b2lkIF9faW5pdCBub3JldHVybiBfX3N0YXJ0X3hlbih1bnNpZ25lZCBsb25n IG1iaV9wKQ0KICAgICB9DQogI2VuZGlmDQogDQotICAgIHhlbl92aXJ0X2Vu ZCA9ICgodW5zaWduZWQgbG9uZylfZW5kICsgKDFVTCA8PCBMMl9QQUdFVEFC TEVfU0hJRlQpIC0gMSkgJg0KKyAgICB4ZW5fdmlydF9lbmQgPSAoZW5kXyAr ICgxVUwgPDwgTDJfUEFHRVRBQkxFX1NISUZUKSAtIDEpICYNCiAgICAgICAg ICAgICAgICAgICAgfigoMVVMIDw8IEwyX1BBR0VUQUJMRV9TSElGVCkgLSAx KTsNCiAgICAgZGVzdHJveV94ZW5fbWFwcGluZ3MoeGVuX3ZpcnRfZW5kLCBY RU5fVklSVF9TVEFSVCArIEJPT1RTVFJBUF9NQVBfQkFTRSk7DQogDQpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L3g4Nl82NC9tYWNoaW5lX2tleGVjLmMg Yi94ZW4vYXJjaC94ODYveDg2XzY0L21hY2hpbmVfa2V4ZWMuYw0KaW5kZXgg ZjRhMDA1Yy4uY2Y0MzVhYyAxMDA2NDQNCi0tLSBhL3hlbi9hcmNoL3g4Ni94 ODZfNjQvbWFjaGluZV9rZXhlYy5jDQorKysgYi94ZW4vYXJjaC94ODYveDg2 XzY0L21hY2hpbmVfa2V4ZWMuYw0KQEAgLTEzLDggKzEzLDggQEANCiANCiBp bnQgbWFjaGluZV9rZXhlY19nZXRfeGVuKHhlbl9rZXhlY19yYW5nZV90ICpy YW5nZSkNCiB7DQotICAgICAgICByYW5nZS0+c3RhcnQgPSB2aXJ0X3RvX21h ZGRyKF9zdGFydCk7DQotICAgICAgICByYW5nZS0+c2l6ZSA9IHZpcnRfdG9f bWFkZHIoX2VuZCkgLSAodW5zaWduZWQgbG9uZylyYW5nZS0+c3RhcnQ7DQor ICAgICAgICByYW5nZS0+c3RhcnQgPSB2aXJ0X3RvX21hZGRyKHN0YXJ0Xyk7 DQorICAgICAgICByYW5nZS0+c2l6ZSA9IHZpcnRfdG9fbWFkZHIoZW5kXykg LSAodW5zaWduZWQgbG9uZylyYW5nZS0+c3RhcnQ7DQogICAgICAgICByZXR1 cm4gMDsNCiB9DQogDQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFy bS9tbS5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9tbS5oDQppbmRleCBlYWZh MjZmLi5lNzJmZmIyIDEwMDY0NA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFy bS9tbS5oDQorKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL21tLmgNCkBAIC0x NTEsOCArMTUxLDggQEAgZXh0ZXJuIHZhZGRyX3QgeGVuaGVhcF92aXJ0X3N0 YXJ0Ow0KICNlbmRpZg0KIA0KICNkZWZpbmUgaXNfeGVuX2ZpeGVkX21mbiht Zm4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAg ICgocGZuX3RvX3BhZGRyKG1mbikgPj0gdmlydF90b19tYWRkcigmX3N0YXJ0 KSkgJiYgICAgICAgXA0KLSAgICAgKHBmbl90b19wYWRkcihtZm4pIDw9IHZp cnRfdG9fbWFkZHIoJl9lbmQpKSkNCisgICAgKChwZm5fdG9fcGFkZHIobWZu KSA+PSB2aXJ0X3RvX21hZGRyKCZzdGFydF8pKSAmJiAgICAgICBcDQorICAg ICAocGZuX3RvX3BhZGRyKG1mbikgPD0gdmlydF90b19tYWRkcigmZW5kXykp KQ0KIA0KICNkZWZpbmUgcGFnZV9nZXRfb3duZXIoX3ApICAgIChfcCktPnYu aW51c2UuZG9tYWluDQogI2RlZmluZSBwYWdlX3NldF9vd25lcihfcCxfZCkg KChfcCktPnYuaW51c2UuZG9tYWluID0gKF9kKSkNCmRpZmYgLS1naXQgYS94 ZW4vaW5jbHVkZS94ZW4va2VybmVsLmggYi94ZW4vaW5jbHVkZS94ZW4va2Vy bmVsLmgNCmluZGV4IDU0OGI2NGQuLmI1MDhmNjUgMTAwNjQ0DQotLS0gYS94 ZW4vaW5jbHVkZS94ZW4va2VybmVsLmgNCisrKyBiL3hlbi9pbmNsdWRlL3hl bi9rZXJuZWwuaA0KQEAgLTY1LDEwICs2NSwxMSBAQA0KIAkxOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KIH0pDQogDQotZXh0 ZXJuIGNoYXIgX3N0YXJ0W10sIF9lbmRbXSwgc3RhcnRbXTsNCi0jZGVmaW5l IGlzX2tlcm5lbChwKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICBcDQot ICAgIGNoYXIgKl9fcCA9IChjaGFyICopKHVuc2lnbmVkIGxvbmcpKHApOyAg ICAgXA0KLSAgICAoX19wID49IF9zdGFydCkgJiYgKF9fcCA8IF9lbmQpOyAg ICAgICAgICAgIFwNCitleHRlcm4gY2hhciBzdGFydFtdOw0KK2V4dGVybiB1 aW50cHRyX3Qgc3RhcnRfLCBlbmRfOw0KKyNkZWZpbmUgaXNfa2VybmVsKHAp ICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAg ICBjb25zdCB1aW50cHRyX3QgcF9fID0gKGNvbnN0IHVpbnRwdHJfdCkocCk7 ICAgICAgICAgICAgXA0KKyAgICAocF9fID49IHN0YXJ0XykgJiYgKHBfXyA8 IGVuZF8pOyAgICAgICAgICAgICAgICAgICAgICAgXA0KIH0pDQogDQogZXh0 ZXJuIGNoYXIgX3N0ZXh0W10sIF9ldGV4dFtdOw0K --8323329-763683777-1547500740=:27759 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0 cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA== --8323329-763683777-1547500740=:27759--