From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [RFC 10/16] xen/arm: Introduce alternative runtime patching Date: Thu, 5 May 2016 17:34:19 +0100 Message-ID: <1462466065-30212-11-git-send-email-julien.grall@arm.com> References: <1462466065-30212-1-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1462466065-30212-1-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: andre.przywara@arm.com, Julien Grall , sstabellini@kernel.org, wei.chen@arm.com, steve.capper@arm.com List-Id: xen-devel@lists.xenproject.org U29tZSBvZiB0aGUgcHJvY2Vzc29yIGVycmF0dW0gd2lsbCByZXF1aXJlIHRvIG1vZGlmeSBjb2Rl IHNlcXVlbmNlLgpBcyB0aG9zZSBtb2RpZmljYXRpb25zIG1heSBpbXBhY3QgdGhlIHBlcmZvcm1h bmNlLCB0aGV5IHNob3VsZCBvbmx5CmJlIGVuYWJsZWQgb24gYWZmZWN0ZWQgY29yZXMuIEZ1cnRo ZXJtb3JlLCBYZW4gbWF5IGFsc28gd2FudCB0byB0YWtlCmFkdmFudGFnZSBvZiBuZXcgaGFyZHdh cmUgZmVhdHVyZXMgY29taW5nIHVwIHdpdGggdjguMSBhbmQgdjguMi4KClRoaXMgcGF0Y2ggYWRk cyBhbiBpbmZyYXN0cnVjdHVyZSB0byBwYXRjaCBYZW4gZHVyaW5nIGJvb3QgdGltZQpkZXBlbmRp bmcgb24gdGhlICJmZWF0dXJlcyIgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KClRoaXMgY29k ZSBpcyBiYXNlZCBvbiB0aGUgZmlsZSBhcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGlu CkxpbnV4IDQuNi1yYzMuIEFueSByZWZlcmVuY2VzIHRvIGFybTY0IGhhdmUgYmVlbiBkcm9wcGVk IHRvIG1ha2UgdGhlCmNvZGUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZS4KCkZ1cnRoZXJtb3JlLCBp biBYZW4gdGhlIGV4ZWN1dGFibGUgc2VjdGlvbnMgKC50ZXh0IGFuZCAuaW5pdC50ZXh0KQphcmUg YWx3YXlzIG1hcHBlZCByZWFkLW9ubHkgYW5kIGVuZm9yY2VkIGJ5IFNDVExSLldOWC4gU28gaXQg aXMgbm90CnBvc3NpYmxlIHRvIGRpcmVjdGx5IHBhdGNoIFhlbi4KClRvIGJ5LXBhc3MgdGhpcyBy ZXN0cmljdGlvbiwgYSB0ZW1wb3Jhcnkgd3JpdGVhYmxlIG1hcHBpbmcgaXMgbWFkZSB3aXRoCnZt YXAuIFRoaXMgbWFwcGluZyB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG5ldyBpbnN0cnVjdGlv bnMuCgpMYXN0bHksIHJ1bnRpbWUgcGF0Y2hpbmcgaXMgY3VycmVudGx5IG5vdCBuZWNlc3Nhcnkg Zm9yIEFSTTMyLiBTbyB0aGUKY29kZSBpcyBvbmx5IGVuYWJsZWQgZm9yIEFSTTY0LgoKU2lnbmVk LW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KLS0tCiB4ZW4vYXJj aC9hcm0vS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDUgKwogeGVuL2FyY2gvYXJtL01ha2VmaWxl ICAgICAgICAgICAgIHwgICAxICsKIHhlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jICAgICAgICB8 IDIxNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2FyY2gvYXJt L3NldHVwLmMgICAgICAgICAgICAgIHwgICA4ICsrCiB4ZW4vYXJjaC9hcm0veGVuLmxkcy5TICAg ICAgICAgICAgfCAgIDcgKysKIHhlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJuYXRpdmUuaCB8IDE2 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUvYXNtLWFybS9hcm02 NC9pbnNuLmggIHwgIDE2ICsrKwogNyBmaWxlcyBjaGFuZ2VkLCA0MTkgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCgpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gvYXJtL0tjb25maWcgYi94ZW4vYXJjaC9hcm0vS2NvbmZpZwppbmRleCA2MjMxY2Q1 Li45YjNlNjZiIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vS2NvbmZpZworKysgYi94ZW4vYXJj aC9hcm0vS2NvbmZpZwpAQCAtMTQsNiArMTQsNyBAQCBjb25maWcgQVJNXzY0CiAJZGVmX2Jvb2wg eQogCWRlcGVuZHMgb24gNjRCSVQKIAlzZWxlY3QgSEFTX0dJQ1YzCisgICAgc2VsZWN0IEFMVEVS TkFUSVZFCiAKIGNvbmZpZyBBUk0KIAlkZWZfYm9vbCB5CkBAIC00Niw2ICs0NywxMCBAQCBjb25m aWcgQUNQSQogY29uZmlnIEhBU19HSUNWMwogCWJvb2wKIAorIyBTZWxlY3QgQUxURVJOQVRJVkUg aWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBydW50aW1lIHBhdGNoaW5nCitjb25maWcgQUxU RVJOQVRJVkUKKyAgICBib29sCisKIGVuZG1lbnUKIAogc291cmNlICJjb21tb24vS2NvbmZpZyIK ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZSBiL3hlbi9hcmNoL2FybS9NYWtlZmls ZQppbmRleCA5MTIyZjc4Li4yZDMzMGFhIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vTWFrZWZp bGUKKysrIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQCBzdWJkaXIteSAr PSBwbGF0Zm9ybXMKIHN1YmRpci0kKENPTkZJR19BUk1fNjQpICs9IGVmaQogc3ViZGlyLSQoQ09O RklHX0FDUEkpICs9IGFjcGkKIAorb2JqLSQoQ09ORklHX0FMVEVSTkFUSVZFKSArPSBhbHRlcm5h dGl2ZS5vCiBvYmoteSArPSBib290ZmR0Lm8KIG9iai15ICs9IGNwdS5vCiBvYmoteSArPSBjcHVm ZWF0dXJlLm8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jIGIveGVuL2Fy Y2gvYXJtL2FsdGVybmF0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MGE1ZDFjOAotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jCkBA IC0wLDAgKzEsMjE3IEBACisvKgorICogYWx0ZXJuYXRpdmUgcnVudGltZSBwYXRjaGluZworICog aW5zcGlyZWQgYnkgdGhlIHg4NiB2ZXJzaW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFS TSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8eGVuL2Nv bmZpZy5oPgorI2luY2x1ZGUgPHhlbi9pbml0Lmg+CisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+Cisj aW5jbHVkZSA8eGVuL2tlcm5lbC5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgorI2luY2x1ZGUgPHhl bi92bWFwLmg+CisjaW5jbHVkZSA8eGVuL3NtcC5oPgorI2luY2x1ZGUgPHhlbi9zdG9wX21hY2hp bmUuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWlj Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJl Lmg+CisjaW5jbHVkZSA8YXNtL2luc24uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVm aW5lIF9fQUxUX1BUUihhLGYpICAgICAgKHUzMiAqKSgodm9pZCAqKSYoYSktPmYgKyAoYSktPmYp CisjZGVmaW5lIEFMVF9PUklHX1BUUihhKSAgICAgX19BTFRfUFRSKGEsIG9yaWdfb2Zmc2V0KQor I2RlZmluZSBBTFRfUkVQTF9QVFIoYSkgICAgIF9fQUxUX1BUUihhLCBhbHRfb2Zmc2V0KQorCitl eHRlcm4gY29uc3Qgc3RydWN0IGFsdF9pbnN0ciBfX2FsdF9pbnN0cnVjdGlvbnNbXSwgX19hbHRf aW5zdHJ1Y3Rpb25zX2VuZFtdOworCitzdHJ1Y3QgYWx0X3JlZ2lvbiB7CisgICAgY29uc3Qgc3Ry dWN0IGFsdF9pbnN0ciAqYmVnaW47CisgICAgY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqZW5kOwor fTsKKworLyoKKyAqIENoZWNrIGlmIHRoZSB0YXJnZXQgUEMgaXMgd2l0aGluIGFuIGFsdGVybmF0 aXZlIGJsb2NrLgorICovCitzdGF0aWMgYm9vbF90IGJyYW5jaF9pbnNuX3JlcXVpcmVzX3VwZGF0 ZShjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBjKQoreworICAgIHVuc2lnbmVkIGxvbmcg cmVwbHB0cjsKKworICAgIGlmICggaXNfYWN0aXZlX2tlcm5lbF90ZXh0KHBjKSApCisgICAgICAg IHJldHVybiAxOworCisgICAgcmVwbHB0ciA9ICh1bnNpZ25lZCBsb25nKUFMVF9SRVBMX1BUUihh bHQpOworICAgIGlmICggcGMgPj0gcmVwbHB0ciAmJiBwYyA8PSAocmVwbHB0ciArIGFsdC0+YWx0 X2xlbikgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qCisgICAgICogQnJhbmNoaW5nIGlu dG8gKmFub3RoZXIqIGFsdGVybmF0ZSBzZXF1ZW5jZSBpcyBkb29tZWQsIGFuZAorICAgICAqIHdl J3JlIG5vdCBldmVuIHRyeWluZyB0byBmaXggaXQgdXAuCisgICAgICovCisgICAgQlVHKCk7Cit9 CisKK3N0YXRpYyB1MzIgZ2V0X2FsdF9pbnNuKGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmFsdCwK KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHUzMiAqaW5zbnB0ciwgY29uc3QgdTMyICph bHRpbnNucHRyKQoreworICAgIHUzMiBpbnNuOworCisgICAgaW5zbiA9IGxlMzJfdG9fY3B1KCph bHRpbnNucHRyKTsKKworICAgIGlmICggaW5zbl9pc19icmFuY2hfaW1tKGluc24pICkKKyAgICB7 CisgICAgICAgIHMzMiBvZmZzZXQgPSBpbnNuX2dldF9icmFuY2hfb2Zmc2V0KGluc24pOworICAg ICAgICB1bnNpZ25lZCBsb25nIHRhcmdldDsKKworICAgICAgICB0YXJnZXQgPSAodW5zaWduZWQg bG9uZylhbHRpbnNucHRyICsgb2Zmc2V0OworCisgICAgICAgIC8qCisgICAgICAgICAqIElmIHdl J3JlIGJyYW5jaGluZyBpbnNpZGUgdGhlIGFsdGVybmF0ZSBzZXF1ZW5jZSwKKyAgICAgICAgICog ZG8gbm90IHJld3JpdGUgdGhlIGluc3RydWN0aW9uLCBhcyBpdCBpcyBhbHJlYWR5CisgICAgICAg ICAqIGNvcnJlY3QuIE90aGVyd2lzZSwgZ2VuZXJhdGUgdGhlIG5ldyBpbnN0cnVjdGlvbi4KKyAg ICAgICAgICovCisgICAgICAgIGlmICggYnJhbmNoX2luc25fcmVxdWlyZXNfdXBkYXRlKGFsdCwg dGFyZ2V0KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCA9IHRhcmdldCAtICh1bnNp Z25lZCBsb25nKWluc25wdHI7CisgICAgICAgICAgICBpbnNuID0gaW5zbl9zZXRfYnJhbmNoX29m ZnNldChpbnNuLCBvZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGluc247 Cit9CisKK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXMoY29uc3Qgc3RydWN0IGFsdF9y ZWdpb24gKnJlZ2lvbikKK3sKKyAgICBjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQ7CisgICAg Y29uc3QgdTMyICpvcmlncHRyLCAqcmVwbHB0cjsKKyAgICB1MzIgKndyaXRlcHRyLCAqd3JpdGVt YXA7CisgICAgbWZuX3QgdGV4dF9tZm4gPSBfbWZuKHZpcnRfdG9fbWZuKF9zdGV4dCkpOworICAg IHVuc2lnbmVkIGludCB0ZXh0X29yZGVyID0gZ2V0X29yZGVyX2Zyb21fYnl0ZXMoX2VuZCAtIF9z dGFydCk7CisKKyAgICBwcmludGsoIlBhdGNoaW5nIGtlcm5lbCBjb2RlXG4iKTsKKworICAgIC8q CisgICAgICogVGhlIHRleHQgc2VjdGlvbiBpcyByZWFkLW9ubHkuIFNvIHJlLW1hcCBYZW4gdG8g YmUgYWJsZSB0byBwYXRjaAorICAgICAqIHRoZSBjb2RlLgorICAgICAqLworICAgIHdyaXRlbWFw ID0gX192bWFwKCZ0ZXh0X21mbiwgMSA8PCB0ZXh0X29yZGVyLCAxLCAxLCBQQUdFX0hZUEVSVklT T1IsCisgICAgICAgICAgICAgICAgICAgICAgVk1BUF9ERUZBVUxUKTsKKyAgICBpZiAoICF3cml0 ZW1hcCApCisgICAgeworICAgICAgICBwcmludGsoImFsdGVybmF0aXZlczogVW5hYmxlIHRvIG1h cCB0aGUgdGV4dCBzZWN0aW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQor CisgICAgZm9yICggYWx0ID0gcmVnaW9uLT5iZWdpbjsgYWx0IDwgcmVnaW9uLT5lbmQ7IGFsdCsr ICkKKyAgICB7CisgICAgICAgIHUzMiBpbnNuOworICAgICAgICBpbnQgaSwgbnJfaW5zdDsKKwor ICAgICAgICBpZiAoICFjcHVzX2hhdmVfY2FwKGFsdC0+Y3B1ZmVhdHVyZSkgKQorICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgQlVHX09OKGFsdC0+YWx0X2xlbiAhPSBhbHQtPm9yaWdf bGVuKTsKKworICAgICAgICBvcmlncHRyID0gQUxUX09SSUdfUFRSKGFsdCk7CisgICAgICAgIHdy aXRlcHRyID0gb3JpZ3B0ciAtICh1MzIgKilfc3RhcnQgKyB3cml0ZW1hcDsKKyAgICAgICAgcmVw bHB0ciA9IEFMVF9SRVBMX1BUUihhbHQpOworCisgICAgICAgIG5yX2luc3QgPSBhbHQtPmFsdF9s ZW4gLyBzaXplb2YoaW5zbik7CisKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucl9pbnN0OyBp KysgKQorICAgICAgICB7CisgICAgICAgICAgICBpbnNuID0gZ2V0X2FsdF9pbnNuKGFsdCwgb3Jp Z3B0ciArIGksIHJlcGxwdHIgKyBpKTsKKyAgICAgICAgICAgICood3JpdGVwdHIgKyBpKSA9IGNw dV90b19sZTMyKGluc24pOworICAgICAgICB9CisKKyAgICAgICAgLyogRW5zdXJlIHRoZSBuZXcg aW5zdHJ1Y3Rpb25zIHJlYWNoZWQgdGhlIG1lbW9yeSBhbmQgbnVrZSAqLworICAgICAgICBjbGVh bl9hbmRfaW52YWxpZGF0ZV9kY2FjaGVfdmFfcmFuZ2Uod3JpdGVwdHIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mICgqd3JpdGVwdHIpICogbnJf aW5zdCkpOworICAgIH0KKworICAgIC8qIE51a2UgdGhlIGluc3RydWN0aW9uIGNhY2hlICovCisg ICAgaW52YWxpZGF0ZV9pY2FjaGUoKTsKKworICAgIHZ1bm1hcCh3cml0ZW1hcCk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIG1pZ2h0IGJlIHBhdGNoaW5nIHRoZSBzdG9wX21hY2hp bmUgc3RhdGUgbWFjaGluZSwgc28gaW1wbGVtZW50IGEKKyAqIHJlYWxseSBzaW1wbGUgcG9sbGlu ZyBwcm90b2NvbCBoZXJlLgorICovCitzdGF0aWMgaW50IF9fYXBwbHlfYWx0ZXJuYXRpdmVzX211 bHRpX3N0b3Aodm9pZCAqdW51c2VkKQoreworICAgIHN0YXRpYyBpbnQgcGF0Y2hlZCA9IDA7Cisg ICAgc3RydWN0IGFsdF9yZWdpb24gcmVnaW9uID0geworICAgICAgICAuYmVnaW4gPSBfX2FsdF9p bnN0cnVjdGlvbnMsCisgICAgICAgIC5lbmQgPSBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kLAorICAg IH07CisKKyAgICAvKiBXZSBhbHdheXMgaGF2ZSBhIENQVSAwIGF0IHRoaXMgcG9pbnQgKF9faW5p dCkgKi8KKyAgICBpZiAoIHNtcF9wcm9jZXNzb3JfaWQoKSApCisgICAgeworICAgICAgICB3aGls ZSAoICFyZWFkX2F0b21pYygmcGF0Y2hlZCkgKQorICAgICAgICAgICAgY3B1X3JlbGF4KCk7Cisg ICAgICAgIGlzYigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgcmV0Owor CisgICAgICAgIEJVR19PTihwYXRjaGVkKTsKKyAgICAgICAgcmV0ID0gX19hcHBseV9hbHRlcm5h dGl2ZXMoJnJlZ2lvbik7CisgICAgICAgIC8qIFRoZSBwYXRjaGluZyBpcyBub3QgZXhwZWN0ZWQg dG8gZmFpbCBkdXJpbmcgYm9vdC4gKi8KKyAgICAgICAgQlVHX09OKHJldCAhPSAwKTsKKworICAg ICAgICAvKiBCYXJyaWVycyBwcm92aWRlZCBieSB0aGUgY2FjaGUgZmx1c2hpbmcgKi8KKyAgICAg ICAgd3JpdGVfYXRvbWljKCZwYXRjaGVkLCAxKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kwordm9pZCBfX2luaXQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQoreworICAgIGludCBy ZXQ7CisKKwkvKiBiZXR0ZXIgbm90IHRyeSBjb2RlIHBhdGNoaW5nIG9uIGEgbGl2ZSBTTVAgc3lz dGVtICovCisgICAgcmV0ID0gc3RvcF9tYWNoaW5lX3J1bihfX2FwcGx5X2FsdGVybmF0aXZlc19t dWx0aV9zdG9wLCBOVUxMLCBOUl9DUFVTKTsKKworICAgIC8qIHN0b3BfbWFjaGluZV9ydW4gc2hv dWxkIG5ldmVyIGZhaWwgYXQgdGhpcyBzdGFnZSBvZiB0aGUgYm9vdCAqLworICAgIEJVR19PTihy ZXQpOworfQorCitpbnQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVu Z3RoKQoreworICAgIHN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKKyAgICAgICAgLmJlZ2lu ID0gc3RhcnQsCisgICAgICAgIC5lbmQgPSBzdGFydCArIGxlbmd0aCwKKyAgICB9OworCisgICAg cmV0dXJuIF9fYXBwbHlfYWx0ZXJuYXRpdmVzKCZyZWdpb24pOworfQorCisvKgorICogTG9jYWwg dmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNp Yy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYg LS1naXQgYS94ZW4vYXJjaC9hcm0vc2V0dXAuYyBiL3hlbi9hcmNoL2FybS9zZXR1cC5jCmluZGV4 IDA5ZmYxZWEuLmM0Mzg5ZWYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9zZXR1cC5jCisrKyBi L3hlbi9hcmNoL2FybS9zZXR1cC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8eGVuL3Zt YXAuaD4KICNpbmNsdWRlIDx4ZW4vbGliZmR0L2xpYmZkdC5oPgogI2luY2x1ZGUgPHhlbi9hY3Bp Lmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4K ICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtODM0 LDYgKzgzNSwxMyBAQCB2b2lkIF9faW5pdCBzdGFydF94ZW4odW5zaWduZWQgbG9uZyBib290X3Bo eXNfb2Zmc2V0LAogCiAgICAgZG9faW5pdGNhbGxzKCk7CiAKKyAgICAvKgorICAgICAqIEl0IG5l ZWRzIHRvIGJlIGNhbGxlZCBhZnRlciBkb19pbml0Y2FsbHMgdG8gYmUgYWJsZSB0byB1c2UKKyAg ICAgKiBzdG9wX21hY2hpbmUgKHRhc2tsZXRzIGluaXRpYWxpemVkIHZpYSBhbiBpbml0Y2FsbCku CisgICAgICogWFhYOiBJcyBpdCB0b28gbGF0ZT8KKyAgICAgKi8KKyAgICBhcHBseV9hbHRlcm5h dGl2ZXNfYWxsKCk7CisKICAgICAvKiBDcmVhdGUgaW5pdGlhbCBkb21haW4gMC4gKi8KICAgICAv KiBUaGUgdkdJQyBmb3IgRE9NMCBpcyBleGFjdGx5IGVtdWxhdGluZyB0aGUgaGFyZHdhcmUgR0lD ICovCiAgICAgY29uZmlnLmdpY192ZXJzaW9uID0gWEVOX0RPTUNUTF9DT05GSUdfR0lDX05BVElW RTsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMgYi94ZW4vYXJjaC9hcm0veGVu Lmxkcy5TCmluZGV4IDFmMDEwYmQuLjgwZDk3MDMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS94 ZW4ubGRzLlMKKysrIGIveGVuL2FyY2gvYXJtL3hlbi5sZHMuUwpAQCAtMTY3LDYgKzE2NywxMyBA QCBTRUNUSU9OUwogICAgICAgICooLnhzbV9pbml0Y2FsbC5pbml0KQogICAgICAgIF9feHNtX2lu aXRjYWxsX2VuZCA9IC47CiAgIH0gOnRleHQKKyNpZmRlZiBDT05GSUdfQUxURVJOQVRJVkUKKyAg LmluaXQuYWx0ZXJuYXRpdmVzIDogeworICAgICAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKKyAg ICAgICooLmFsdGluc3RydWN0aW9ucykKKyAgICAgIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAu OworICB9CisjZW5kaWYKICAgX19pbml0X2VuZF9lZmkgPSAuOwogICAuID0gQUxJR04oU1RBQ0tf U0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFy bS9hbHRlcm5hdGl2ZS5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2E2MTAKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNp Zm5kZWYgX19BU01fQUxURVJOQVRJVkVfSAorI2RlZmluZSBfX0FTTV9BTFRFUk5BVElWRV9ICisK KyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNp bmNsdWRlIDx4ZW4va2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0FMVEVSTkFUSVZFCisKKyNp Zm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhl bi90eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9zdHJpbmdpZnkuaD4KKworc3RydWN0IGFsdF9pbnN0 ciB7CisJczMyIG9yaWdfb2Zmc2V0OwkvKiBvZmZzZXQgdG8gb3JpZ2luYWwgaW5zdHJ1Y3Rpb24g Ki8KKwlzMzIgYWx0X29mZnNldDsJCS8qIG9mZnNldCB0byByZXBsYWNlbWVudCBpbnN0cnVjdGlv biAqLworCXUxNiBjcHVmZWF0dXJlOwkJLyogY3B1ZmVhdHVyZSBiaXQgc2V0IGZvciByZXBsYWNl bWVudCAqLworCXU4ICBvcmlnX2xlbjsJCS8qIHNpemUgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24o cykgKi8KKwl1OCAgYWx0X2xlbjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBv cmlnX2xlbiAqLworfTsKKwordm9pZCBfX2luaXQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lk KTsKK2ludCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpOwor CisjZGVmaW5lIEFMVElOU1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJICAgICAgXAorCSIgLndvcmQg NjYxYiAtIC5cbiIJCQkJLyogbGFiZWwgICAgICAgICAgICovIFwKKwkiIC53b3JkIDY2M2YgLSAu XG4iCQkJCS8qIG5ldyBpbnN0cnVjdGlvbiAqLyBcCisJIiAuaHdvcmQgIiBfX3N0cmluZ2lmeShm ZWF0dXJlKSAiXG4iCQkvKiBmZWF0dXJlIGJpdCAgICAgKi8gXAorCSIgLmJ5dGUgNjYyYi02NjFi XG4iCQkJCS8qIHNvdXJjZSBsZW4gICAgICAqLyBcCisJIiAuYnl0ZSA2NjRmLTY2M2ZcbiIJCQkJ LyogcmVwbGFjZW1lbnQgbGVuICovCisKKy8qCisgKiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmlt aXRpdmU6CisgKgorICogSWYgYW55IG9mIHRoZXNlIC5vcmcgZGlyZWN0aXZlIGZhaWwsIGl0IG1l YW5zIHRoYXQgaW5zbjEgYW5kIGluc24yCisgKiBkb24ndCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4g VGhpcyB1c2VkIHRvIGJlIHdyaXR0ZW4gYXMKKyAqCisgKiAuaWYgKCg2NjRiLTY2M2IpICE9ICg2 NjJiLTY2MWIpKQorICogCS5lcnJvciAiQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9uIGxlbmd0aCBt aXNtYXRjaCIKKyAqIC5lbmRpZgorICoKKyAqIGJ1dCBtb3N0IGFzc2VtYmxlcnMgZGllIGlmIGlu c24xIG9yIGluc24yIGhhdmUgYSAuaW5zdC4gVGhpcyBzaG91bGQKKyAqIGJlIGZpeGVkIGluIGEg YmludXRpbHMgcmVsZWFzZSBwb3N0ZXJpb3IgdG8gMi4yNS41MS4wLjIgKGFueXRoaW5nCisgKiBj b250YWluaW5nIGNvbW1pdCA0ZTRkMDhjZjczOTliNjA2IG9yIGMxYmFhZGRmODg2MSkuCisgKi8K KyNkZWZpbmUgX19BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBj ZmdfZW5hYmxlZCkJXAorCSIuaWYgIl9fc3RyaW5naWZ5KGNmZ19lbmFibGVkKSIgPT0gMVxuIgkJ CQlcCisJIjY2MTpcblx0IgkJCQkJCQlcCisJb2xkaW5zdHIgIlxuIgkJCQkJCQlcCisJIjY2Mjpc biIJCQkJCQkJXAorCSIucHVzaHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJCQlc CisJQUxUSU5TVFJfRU5UUlkoZmVhdHVyZSkJCQkJCQlcCisJIi5wb3BzZWN0aW9uXG4iCQkJCQkJ CVwKKwkiLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgXCJhXCJcbiIJCQlcCisJ IjY2Mzpcblx0IgkJCQkJCQlcCisJbmV3aW5zdHIgIlxuIgkJCQkJCQlcCisJIjY2NDpcblx0IgkJ CQkJCQlcCisJIi5wb3BzZWN0aW9uXG5cdCIJCQkJCQlcCisJIi5vcmcJLiAtICg2NjRiLTY2M2Ip ICsgKDY2MmItNjYxYilcblx0IgkJCVwKKwkiLm9yZwkuIC0gKDY2MmItNjYxYikgKyAoNjY0Yi02 NjNiKVxuIgkJCVwKKwkiLmVuZGlmXG4iCisKKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NGRyhvbGRp bnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNmZywgLi4uKQlcCisJX19BTFRFUk5BVElWRV9DRkco b2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBJU19FTkFCTEVEKGNmZykpCisKKyNlbHNlCisK KyNpbmNsdWRlIDxhc20vYXNtX2RlZm5zLmg+CisKKy5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRy eSBvcmlnX29mZnNldCBhbHRfb2Zmc2V0IGZlYXR1cmUgb3JpZ19sZW4gYWx0X2xlbgorCS53b3Jk IFxvcmlnX29mZnNldCAtIC4KKwkud29yZCBcYWx0X29mZnNldCAtIC4KKwkuaHdvcmQgXGZlYXR1 cmUKKwkuYnl0ZSBcb3JpZ19sZW4KKwkuYnl0ZSBcYWx0X2xlbgorLmVuZG0KKworLm1hY3JvIGFs dGVybmF0aXZlX2luc24gaW5zbjEsIGluc24yLCBjYXAsIGVuYWJsZSA9IDEKKwkuaWYgXGVuYWJs ZQorNjYxOglcaW5zbjEKKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgor CWFsdGluc3RydWN0aW9uX2VudHJ5IDY2MWIsIDY2M2YsIFxjYXAsIDY2MmItNjYxYiwgNjY0Zi02 NjNmCisJLnBvcHNlY3Rpb24KKwkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAi YXgiCis2NjM6CVxpbnNuMgorNjY0OgkucG9wc2VjdGlvbgorCS5vcmcJLiAtICg2NjRiLTY2M2Ip ICsgKDY2MmItNjYxYikKKwkub3JnCS4gLSAoNjYyYi02NjFiKSArICg2NjRiLTY2M2IpCisJLmVu ZGlmCisuZW5kbQorCisvKgorICogQmVnaW4gYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZS4K KyAqCisgKiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgdGhpcyBtYWNybyB3aWxsIGJlIGFzc2VtYmxl ZCBhbmQgbGlua2VkIGFzCisgKiBub3JtYWwuIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24g dGhpcyBjb2RlLgorICovCisubWFjcm8gYWx0ZXJuYXRpdmVfaWZfbm90IGNhcCwgZW5hYmxlID0g MQorCS5pZiBcZW5hYmxlCisJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgorCWFs dGluc3RydWN0aW9uX2VudHJ5IDY2MWYsIDY2M2YsIFxjYXAsIDY2MmYtNjYxZiwgNjY0Zi02NjNm CisJLnBvcHNlY3Rpb24KKzY2MToKKwkuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBQcm92aWRlIHRo ZSBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlLgorICoKKyAqIFRoZSBjb2RlIHRoYXQgZm9sbG93 cyB0aGlzIG1hY3JvIGlzIGFzc2VtYmxlZCBpbnRvIGEgc3BlY2lhbAorICogc2VjdGlvbiB0byBi ZSB1c2VkIGZvciBkeW5hbWljIHBhdGNoaW5nLiBDb2RlIHRoYXQgZm9sbG93cyB0aGlzCisgKiBt YWNybyBtdXN0OgorICoKKyAqIDEuIEJlIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIChpbiBieXRl cykgYXMgdGhlIGRlZmF1bHQgY29kZQorICogICAgc2VxdWVuY2UuCisgKgorICogMi4gTm90IGNv bnRhaW4gYSBicmFuY2ggdGFyZ2V0IHRoYXQgaXMgdXNlZCBvdXRzaWRlIG9mIHRoZQorICogICAg YWx0ZXJuYXRpdmUgc2VxdWVuY2UgaXQgaXMgZGVmaW5lZCBpbiAoYnJhbmNoZXMgaW50byBhbgor ICogICAgYWx0ZXJuYXRpdmUgc2VxdWVuY2UgYXJlIG5vdCBmaXhlZCB1cCkuCisgKi8KKy5tYWNy byBhbHRlcm5hdGl2ZV9lbHNlCis2NjI6CS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1l bnQsICJheCIKKzY2MzoKKy5lbmRtCisKKy8qCisgKiBDb21wbGV0ZSBhbiBhbHRlcm5hdGl2ZSBj b2RlIHNlcXVlbmNlLgorICovCisubWFjcm8gYWx0ZXJuYXRpdmVfZW5kaWYKKzY2NDoJLnBvcHNl Y3Rpb24KKwkub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJiLTY2MWIpCisJLm9yZwkuIC0gKDY2 MmItNjYxYikgKyAoNjY0Yi02NjNiKQorLmVuZG0KKworI2RlZmluZSBfQUxURVJOQVRJVkVfQ0ZH KGluc24xLCBpbnNuMiwgY2FwLCBjZmcsIC4uLikJXAorCWFsdGVybmF0aXZlX2luc24gaW5zbjEs IGluc24yLCBjYXAsIElTX0VOQUJMRUQoY2ZnKQorCisjZW5kaWYgIC8qICBfX0FTU0VNQkxZX18g ICovCisKKy8qCisgKiBVc2FnZTogYXNtKEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwg ZmVhdHVyZSkpOworICoKKyAqIFVzYWdlOiBhc20oQUxURVJOQVRJVkUob2xkaW5zdHIsIG5ld2lu c3RyLCBmZWF0dXJlLCBDT05GSUdfRk9PKSk7CisgKiBOLkIuIElmIENPTkZJR19GT08gaXMgc3Bl Y2lmaWVkLCBidXQgbm90IHNlbGVjdGVkLCB0aGUgd2hvbGUgYmxvY2sKKyAqICAgICAgd2lsbCBi ZSBvbWl0dGVkLCBpbmNsdWRpbmcgb2xkaW5zdHIuCisgKi8KKyNkZWZpbmUgQUxURVJOQVRJVkUo b2xkaW5zdHIsIG5ld2luc3RyLCAuLi4pICAgXAorCV9BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIs IG5ld2luc3RyLCBfX1ZBX0FSR1NfXywgMSkKKworI2Vsc2UgLyogIUNPTkZJR19BTFRFUk5BVElW RSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQor eworfQorCitpbnQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ2h0 KQoreworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0FMVEVS TkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5o IGIveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKaW5kZXggY2ZjZGJlOS4uNmNlMzdi ZSAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKKysrIGIveGVu L2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKQEAgLTYxLDYgKzYxLDIyIEBAIHUzMiBhYXJj aDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShlbnVtIGFhcmNoNjRfaW5zbl9pbW1fdHlwZSB0eXBl LAogczMyIGFhcmNoNjRfZ2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24pOwogdTMyIGFhcmNoNjRf c2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMzMiBvZmZzZXQpOwogCisvKiBXcmFwcGVyIGZv ciBjb21tb24gY29kZSAqLworc3RhdGljIGlubGluZSBib29sIGluc25faXNfYnJhbmNoX2ltbSh1 MzIgaW5zbikKK3sKKyAgICByZXR1cm4gYWFyY2g2NF9pbnNuX2lzX2JyYW5jaF9pbW0oaW5zbik7 Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyIGluc25fZ2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24p Cit7CisgICAgcmV0dXJuIGFhcmNoNjRfZ2V0X2JyYW5jaF9vZmZzZXQoaW5zbik7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdTMyIGluc25fc2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMzMiBvZmZz ZXQpCit7CisgICAgcmV0dXJuIGFhcmNoNjRfc2V0X2JyYW5jaF9vZmZzZXQoaW5zbiwgb2Zmc2V0 KTsKK30KKwogI2VuZGlmIC8qICFfX0FSQ0hfQVJNX0FSTTY0X0lOU04gKi8KIC8qCiAgKiBMb2Nh bCB2YXJpYWJsZXM6Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==