From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v5 5/6] target-arm: kvm - add support for HW assisted debug Date: Fri, 29 May 2015 16:19:23 +0100 Message-ID: <1432912764-7073-6-git-send-email-alex.bennee@linaro.org> References: <1432912764-7073-1-git-send-email-alex.bennee@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: kvm@vger.kernel.org, marc.zyngier@arm.com, Paolo Bonzini , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org To: qemu-devel@nongnu.org, peter.maydell@linaro.org, christoffer.dall@linaro.org, zhichao.huang@linaro.org Return-path: In-Reply-To: <1432912764-7073-1-git-send-email-alex.bennee@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu List-Id: kvm.vger.kernel.org VGhpcyBhZGRzIGJhc2ljIHN1cHBvcnQgZm9yIEhXIGFzc2lzdGVkIGRlYnVnLiBUaGUgaW9jdGwg aW50ZXJmYWNlIHRvCktWTSBhbGxvd3MgdXMgdG8gcGFzcyBhbiBpbXBsZW1lbnRhdGlvbiBkZWZp bmVkIG51bWJlciBvZiBicmVhayBhbmQKd2F0Y2ggcG9pbnQgcmVnaXN0ZXJzLiBXaGVuIEtWTV9H VUVTVERCR19VU0VfSFdfQlAgaXMgc3BlY2lmaWVkIHRoZXNlCmRlYnVnIHJlZ2lzdGVycyB3aWxs IGJlIGluc3RhbGxlZCBpbiBwbGFjZSBvbiB0aGUgd29ybGQgc3dpdGNoIGludG8gdGhlCmd1ZXN0 LgoKVGhlIGhhcmR3YXJlIGlzIGFjdHVhbGx5IGNhcGFibGUgb2YgbW9yZSBhZHZhbmNlZCBtYXRj aGluZyBidXQgaXQgaXMKdW5jbGVhciBpZiB0aGlzIGV4cHJlc3NpdmVuZXNzIGlzIGF2YWlsYWJs ZSB2aWEgdGhlIGdkYnN0dWIgcHJvdG9jb2wuCgpTaWduZWQtb2ZmLWJ5OiBBbGV4IEJlbm7DqWUg PGFsZXguYmVubmVlQGxpbmFyby5vcmc+CgotLS0KdjIKICAtIGNvcnJlY3Qgc2V0dGluZyBvZiBQ TUMvQkFTL01BU0sKICAtIGltcHJvdmVkIGNvbW1lbnRhcnkKICAtIGFkZGVkIGhlbHBlciBmdW5j dGlvbiB0byBjaGVjayB3YXRjaHBvaW50IGluIHJhbmdlCiAgLSBmaXggZmluZC9kZWxldGlvbiBv ZiB3YXRjaHBvaW50cwp2MwogIC0gdXNlIGludGVybmFscy5oIGRlZmluaXRpb25zCi0tLQogdGFy Z2V0LWFybS9rdm0uYyAgICAgfCAgMzUgKysrLS0tCiB0YXJnZXQtYXJtL2t2bTY0LmMgICB8IDMw NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHRh cmdldC1hcm0va3ZtX2FybS5oIHwgIDIxICsrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzM4IGluc2Vy dGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3RhcmdldC1hcm0va3ZtLmMg Yi90YXJnZXQtYXJtL2t2bS5jCmluZGV4IGRlMjg2NWEuLmUxZmNjZGQgMTAwNjQ0Ci0tLSBhL3Rh cmdldC1hcm0va3ZtLmMKKysrIGIvdGFyZ2V0LWFybS9rdm0uYwpAQCAtMTcsNiArMTcsNyBAQAog CiAjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRlICJxZW11L3RpbWVyLmgiCisjaW5j bHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJzeXNlbXUvc3lzZW11LmgiCiAj aW5jbHVkZSAic3lzZW11L2t2bS5oIgogI2luY2x1ZGUgImt2bV9hcm0uaCIKQEAgLTU0MCw2ICs1 NDEsMTYgQEAgc3RhdGljIGludCBrdm1faGFuZGxlX2RlYnVnKENQVVN0YXRlICpjcywgc3RydWN0 IGt2bV9ydW4gKnJ1bikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg ICAgIGJyZWFrOworICAgIGNhc2UgRUNfQlJFQUtQT0lOVDoKKyAgICAgICAgaWYgKGt2bV9hcm1f ZmluZF9od19icmVha3BvaW50KGNzLCBlbnYtPnBjKSkgeworICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFQ19XQVRDSFBPSU5UOgor ICAgICAgICBpZiAoa3ZtX2FybV9maW5kX2h3X3dhdGNocG9pbnQoY3MsIGFyY2hfaW5mby0+ZmFy KSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7 CiAgICAgZGVmYXVsdDoKICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogdW5oYW5kbGVkIGRlYnVn IGV4aXQgKCUiUFJJeDMyIiwgJSJQUkl4NjQiKVxuIiwKICAgICAgICAgICAgICAgICAgICAgIF9f ZnVuY19fLCBhcmNoX2luZm8tPmhzciwgZW52LT5wYyk7CkBAIC02MDEsNiArNjEyLDEwIEBAIHZv aWQga3ZtX2FyY2hfdXBkYXRlX2d1ZXN0X2RlYnVnKENQVVN0YXRlICpjcywgc3RydWN0IGt2bV9n dWVzdF9kZWJ1ZyAqZGJnKQogICAgIGlmIChrdm1fc3dfYnJlYWtwb2ludHNfYWN0aXZlKGNzKSkg ewogICAgICAgICBkYmctPmNvbnRyb2wgfD0gS1ZNX0dVRVNUREJHX0VOQUJMRSB8IEtWTV9HVUVT VERCR19VU0VfU1dfQlA7CiAgICAgfQorICAgIGlmIChrdm1faHdfYnJlYWtwb2ludHNfYWN0aXZl KGNzKSkgeworICAgICAgICBkYmctPmNvbnRyb2wgfD0gS1ZNX0dVRVNUREJHX0VOQUJMRSB8IEtW TV9HVUVTVERCR19VU0VfSFdfQlA7CisgICAgICAgIGt2bV9jb3B5X2h3X2JyZWFrcG9pbnRfZGF0 YSgmZGJnLT5hcmNoKTsKKyAgICB9CiB9CiAKIC8qIEM2LjYuMjkgQlJLIGluc3RydWN0aW9uICov CkBAIC02MjcsMjYgKzY0Miw2IEBAIGludCBrdm1fYXJjaF9yZW1vdmVfc3dfYnJlYWtwb2ludChD UFVTdGF0ZSAqY3MsIHN0cnVjdCBrdm1fc3dfYnJlYWtwb2ludCAqYnApCiAgICAgcmV0dXJuIDA7 CiB9CiAKLWludCBrdm1fYXJjaF9pbnNlcnRfaHdfYnJlYWtwb2ludCh0YXJnZXRfdWxvbmcgYWRk ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdWxvbmcgbGVuLCBp bnQgdHlwZSkKLXsKLSAgICBxZW11X2xvZ19tYXNrKExPR19VTklNUCwgIiVzOiBub3QgaW1wbGVt ZW50ZWRcbiIsIF9fZnVuY19fKTsKLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLQotaW50IGt2bV9h cmNoX3JlbW92ZV9od19icmVha3BvaW50KHRhcmdldF91bG9uZyBhZGRyLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyBsZW4sIGludCB0eXBlKQotewotICAg IHFlbXVfbG9nX21hc2soTE9HX1VOSU1QLCAiJXM6IG5vdCBpbXBsZW1lbnRlZFxuIiwgX19mdW5j X18pOwotICAgIHJldHVybiAtRUlOVkFMOwotfQotCi0KLXZvaWQga3ZtX2FyY2hfcmVtb3ZlX2Fs bF9od19icmVha3BvaW50cyh2b2lkKQotewotICAgIHFlbXVfbG9nX21hc2soTE9HX1VOSU1QLCAi JXM6IG5vdCBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pOwotfQotCiB2b2lkIGt2bV9hcmNoX2lu aXRfaXJxX3JvdXRpbmcoS1ZNU3RhdGUgKnMpCiB7CiB9CmRpZmYgLS1naXQgYS90YXJnZXQtYXJt L2t2bTY0LmMgYi90YXJnZXQtYXJtL2t2bTY0LmMKaW5kZXggNjE1OTJkMi4uMDZkNGUxZSAxMDA2 NDQKLS0tIGEvdGFyZ2V0LWFybS9rdm02NC5jCisrKyBiL3RhcmdldC1hcm0va3ZtNjQuYwpAQCAt Miw2ICsyLDcgQEAKICAqIEFSTSBpbXBsZW1lbnRhdGlvbiBvZiBLVk0gaG9va3MsIDY0IGJpdCBz cGVjaWZpYyBjb2RlCiAgKgogICogQ29weXJpZ2h0IE1pYW4tTS4gSGFtYXl1biAyMDEzLCBWaXJ0 dWFsIE9wZW4gU3lzdGVtcworICogQ29weXJpZ2h0IEFsZXggQmVubsOpZSAyMDE0LCBMaW5hcm8K ICAqCiAgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R1BMLCB2ZXJzaW9uIDIgb3IgbGF0ZXIuCiAgKiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUg dG9wLWxldmVsIGRpcmVjdG9yeS4KQEAgLTEyLDEyICsxMywxOCBAQAogI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cisj aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorI2luY2x1 ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgogCiAjaW5jbHVkZSAiY29u ZmlnLWhvc3QuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgInFlbXUvdGlt ZXIuaCIKKyNpbmNsdWRlICJxZW11L2hvc3QtdXRpbHMuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9y LXJlcG9ydC5oIgorI2luY2x1ZGUgImV4ZWMvZ2Ric3R1Yi5oIgogI2luY2x1ZGUgInN5c2VtdS9z eXNlbXUuaCIKICNpbmNsdWRlICJzeXNlbXUva3ZtLmgiCiAjaW5jbHVkZSAia3ZtX2FybS5oIgpA QCAtMjYsMjEgKzMzLDMxNCBAQAogI2luY2x1ZGUgImh3L2FybS9hcm0uaCIKIAogc3RhdGljIGJv b2wgaGF2ZV9ndWVzdF9kZWJ1ZzsKKy8qIE1heCBhbmQgY3VycmVudCBicmVhay93YXRjaCBwb2lu dCBjb3VudHMgKi8KK2ludCBtYXhfaHdfYnAsIG1heF9od193cDsKK2ludCBjdXJfaHdfYnAsIGN1 cl9od193cDsKK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCBndWVzdF9kZWJ1Z19yZWdpc3Rl cnM7CiAKIC8qKgotICoga3ZtX2FybV9pbml0X2RlYnVnKCkKKyAqIGt2bV9hcm1faW5pdF9kZWJ1 ZygpIC0gY2hlY2sgZm9yIGd1ZXN0IGRlYnVnIGNhcGFiaWxpdGllcwogICogQGNzOiBDUFVTdGF0 ZQogICoKLSAqIENoZWNrIGZvciBndWVzdCBkZWJ1ZyBjYXBhYmlsaXRpZXMuCisgKiBrdm1fY2hl Y2tfZXh0ZW5zaW9uIHJldHVybnMgMCBpZiB3ZSBoYXZlIG5vIGRlYnVnIHJlZ2lzdGVycyBvciB0 aGUKKyAqIG51bWJlciB3ZSBoYXZlLgogICoKICAqLwogc3RhdGljIHZvaWQga3ZtX2FybV9pbml0 X2RlYnVnKENQVVN0YXRlICpjcykKIHsKICAgICBoYXZlX2d1ZXN0X2RlYnVnID0ga3ZtX2NoZWNr X2V4dGVuc2lvbihjcy0+a3ZtX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHKTsKKyAgICBtYXhfaHdfd3AgPSBr dm1fY2hlY2tfZXh0ZW5zaW9uKGNzLT5rdm1fc3RhdGUsIEtWTV9DQVBfR1VFU1RfREVCVUdfSFdf V1BTKTsKKyAgICBtYXhfaHdfYnAgPSBrdm1fY2hlY2tfZXh0ZW5zaW9uKGNzLT5rdm1fc3RhdGUs IEtWTV9DQVBfR1VFU1RfREVCVUdfSFdfQlBTKTsKICAgICByZXR1cm47CiB9CiAKKy8qKgorICog aW5zZXJ0X2h3X2JyZWFrcG9pbnQoKQorICogQGFkZHI6IGFkZHJlc3Mgb2YgYnJlYWtwb2ludAor ICoKKyAqIFNlZSBBUk0gQVJNIEQyLjkuMSBmb3IgZGV0YWlscyBidXQgaGVyZSB3ZSBhcmUgb25s eSBnb2luZyB0byBjcmVhdGUKKyAqIHNpbXBsZSB1bi1saW5rZWQgYnJlYWtwb2ludHMgKGkuZS4g d2UgZG9uJ3QgY2hhaW4gYnJlYWtwb2ludHMKKyAqIHRvZ2V0aGVyIHRvIG1hdGNoIGFkZHJlc3Mg YW5kIGNvbnRleHQgb3Igdm1pZCkuIFRoZSBoYXJkd2FyZSBpcworICogY2FwYWJsZSBvZiBmYW5j aWVyIG1hdGNoaW5nIGJ1dCB0aGF0IHdpbGwgcmVxdWlyZSBleHBvc2luZyB0aGF0CisgKiBmYW5j aW5lc3MgdG8gR0RCJ3MgaW50ZXJmYWNlCisgKgorICogRDcuMy4yIERCR0JDUjxuPl9FTDEsIERl YnVnIEJyZWFrcG9pbnQgQ29udHJvbCBSZWdpc3RlcnMKKyAqCisgKiAgMzEgIDI0IDIzICAyMCAx OSAgIDE2IDE1IDE0ICAxMyAgMTIgICA5IDggICA1IDQgICAgMyAyICAgMSAgMAorICogKy0tLS0t LSstLS0tLS0rLS0tLS0tLSstLS0tLSstLS0tKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rLS0t KworICogfCBSRVMwIHwgIEJUICB8ICBMQk4gIHwgU1NDIHwgSE1DfCBSRVMwIHwgQkFTIHwgUkVT MCB8IFBNQyB8IEUgfAorICogKy0tLS0tLSstLS0tLS0rLS0tLS0tLSstLS0tLSstLS0tKy0tLS0t LSstLS0tLSstLS0tLS0rLS0tLS0rLS0tKworICoKKyAqIEJUOiBCcmVha3BvaW50IHR5cGUgKDAg PSB1bmxpbmtlZCBhZGRyZXNzIG1hdGNoKQorICogTEJOOiBMaW5rZWQgQlAgbnVtYmVyICgwID0g dW51c2VkKQorICogU1NDL0hNQy9QTUM6IFNlY3VyaXR5LCBIaWdoZXIgYW5kIFByaXYgYWNjZXNz IGNvbnRyb2wgKFRhYmxlIEQtMTIpCisgKiBCQVM6IEJ5dGUgQWRkcmVzcyBTZWxlY3QgKFJFUzEg Zm9yIEFBcmNoNjQpCisgKiBFOiBFbmFibGUgYml0CisgKi8KK3N0YXRpYyBpbnQgaW5zZXJ0X2h3 X2JyZWFrcG9pbnQodGFyZ2V0X3Vsb25nIGFkZHIpCit7CisgICAgdWludDMyX3QgYmNyID0gMHgx OyAvKiBFPTEsIGVuYWJsZSAqLworICAgIGlmIChjdXJfaHdfYnAgPj0gbWF4X2h3X2JwKSB7Cisg ICAgICAgIHJldHVybiAtRU5PQlVGUzsKKyAgICB9CisgICAgYmNyID0gZGVwb3NpdDMyKGJjciwg MSwgMiwgMHgzKTsgICAvKiBQTUMgPSAxMSAqLworICAgIGJjciA9IGRlcG9zaXQzMihiY3IsIDUs IDQsIDB4Zik7ICAgLyogQkFTID0gUkVTMSAqLworICAgIGd1ZXN0X2RlYnVnX3JlZ2lzdGVycy5k YmdfYmNyW2N1cl9od19icF0gPSBiY3I7CisgICAgZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ19i dnJbY3VyX2h3X2JwXSA9IGFkZHI7CisgICAgY3VyX2h3X2JwKys7CisgICAgcmV0dXJuIDA7Cit9 CisKKy8qKgorICogZGVsZXRlX2h3X2JyZWFrcG9pbnQoKQorICogQHBjOiBhZGRyZXNzIG9mIGJy ZWFrcG9pbnQKKyAqCisgKiBEZWxldGUgYSBicmVha3BvaW50IGFuZCBzaHVmZmxlIGFueSBhYm92 ZSBkb3duCisgKi8KKworc3RhdGljIGludCBkZWxldGVfaHdfYnJlYWtwb2ludCh0YXJnZXRfdWxv bmcgcGMpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGN1cl9od19icDsgaSsr KSB7CisgICAgICBpZiAoZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ19idnJbaV0gPT0gcGMpIHsK KyAgICAgICAgICB3aGlsZSAoaSA8IGN1cl9od19icCkgeworICAgICAgICAgICAgICBpZiAoaSA9 PSBtYXhfaHdfYnApIHsKKyAgICAgICAgICAgICAgICAgIGd1ZXN0X2RlYnVnX3JlZ2lzdGVycy5k YmdfYnZyW2ldID0gMDsKKyAgICAgICAgICAgICAgICAgIGd1ZXN0X2RlYnVnX3JlZ2lzdGVycy5k YmdfYmNyW2ldID0gMDsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg IGd1ZXN0X2RlYnVnX3JlZ2lzdGVycy5kYmdfYnZyW2ldID0KKyAgICAgICAgICAgICAgICAgICAg ICBndWVzdF9kZWJ1Z19yZWdpc3RlcnMuZGJnX2J2cltpICsgMV07CisgICAgICAgICAgICAgICAg ICBndWVzdF9kZWJ1Z19yZWdpc3RlcnMuZGJnX2JjcltpXSA9CisgICAgICAgICAgICAgICAgICAg ICAgZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ19iY3JbaSArIDFdOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgY3VyX2h3X2JwLS07 CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAtRU5PRU5U OworfQorCisvKioKKyAqIGluc2VydF9od193YXRjaHBvaW50KCkKKyAqIEBhZGRyOiBhZGRyZXNz IG9mIHdhdGNoIHBvaW50CisgKiBAbGVuOiBzaXplIG9mIGFyZWEKKyAqIEB0eXBlOiB0eXBlIG9m IHdhdGNoIHBvaW50CisgKgorICogU2VlIEFSTSBBUk0gRDIuMTAuIEFzIHdpdGggdGhlIGJyZWFr cG9pbnRzIHdlIGNhbiBkbyBzb21lIGFkdmFuY2VkCisgKiBzdHVmZiBpZiB3ZSB3YW50IHRvLiBU aGUgd2F0Y2ggcG9pbnRzIGNhbiBiZSBsaW5rZWQgd2l0aCB0aGUgYnJlYWsKKyAqIHBvaW50cyBh Ym92ZSB0byBtYWtlIHRoZW0gY29udGV4dCBhd2FyZS4gSG93ZXZlciBmb3Igc2ltcGxpY2l0eQor ICogY3VycmVudGx5IHdlIG9ubHkgZGVhbCB3aXRoIHNpbXBsZSByZWFkL3dyaXRlIHdhdGNoIHBv aW50cy4KKyAqCisgKiBENy4zLjExIERCR1dDUjxuPl9FTDEsIERlYnVnIFdhdGNocG9pbnQgQ29u dHJvbCBSZWdpc3RlcnMKKyAqCisgKiAgMzEgIDI5IDI4ICAgMjQgMjMgIDIxICAyMCAgMTkgMTYg MTUgMTQgIDEzICAgMTIgIDUgNCAgIDMgMiAgIDEgIDAKKyAqICstLS0tLS0rLS0tLS0tLSstLS0t LS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0rCisgKiB8IFJF UzAgfCAgTUFTSyB8IFJFUzAgfCBXVCB8IExCTiB8IFNTQyB8IEhNQyB8IEJBUyB8IExTQyB8IFBB QyB8IEUgfAorICogKy0tLS0tLSstLS0tLS0tKy0tLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0t Ky0tLS0tKy0tLS0tKy0tLS0tKy0tLSsKKyAqCisgKiBNQVNLOiBudW0gYml0cyBhZGRyIG1hc2sg KDA9bm9uZSwwMS8xMD1yZXMsMTE9MyBiaXRzICg4IGJ5dGVzKSkKKyAqIFdUOiAwIC0gdW5saW5r ZWQsIDEgLSBsaW5rZWQgKG5vdCBjdXJyZW50bHkgdXNlZCkKKyAqIExCTjogTGlua2VkIEJQIG51 bWJlciAobm90IGN1cnJlbnRseSB1c2VkKQorICogU1NDL0hNQy9QQUM6IFNlY3VyaXR5LCBIaWdo ZXIgYW5kIFByaXYgYWNjZXNzIGNvbnRyb2wgKFRhYmxlIEQtMTIpCisgKiBCQVM6IEJ5dGUgQWRk cmVzcyBTZWxlY3QKKyAqIExTQzogTG9hZC9TdG9yZSBjb250cm9sICgwMTogbG9hZCwgMTA6IHN0 b3JlLCAxMTogYm90aCkKKyAqIEU6IEVuYWJsZQorICoKKyAqIFRoZSBib3R0b20gMiBiaXRzIG9m IHRoZSB2YWx1ZSByZWdpc3RlciBhcmUgbWFza2VkLiBUaGVyZWZvciB0bworICogYnJlYWsgb24g YW4gc2l6ZXMgc21hbGxlciB0aGFuIHVuYWxpZ25lZCBieXRlIHlvdSBuZWVkIHRvIHNldAorICog TUFTSz0wLCBCQVM9Yml0IHBlciBieXRlIGluIHF1ZXN0aW9uLiBGb3IgbGFyZ2VyIHJlZ2lvbnMg KF4yKSB5b3UKKyAqIG5lZWQgdG8gZW5zdXJlIHlvdSBtYXNrIHRoZSBhZGRyZXNzIGFzIHJlcXVp cmVkIGFuZCBzZXQgQkFTPTB4ZmYKKyAqLworCitzdGF0aWMgaW50IGluc2VydF9od193YXRjaHBv aW50KHRhcmdldF91bG9uZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 YXJnZXRfdWxvbmcgbGVuLCBpbnQgdHlwZSkKK3sKKyAgICB1aW50MzJfdCBkYmd3Y3IgPSAxOyAv KiBFPTEsIGVuYWJsZSAqLworICAgIHVpbnQ2NF90IGRiZ3d2ciA9IGFkZHIgJiAofjB4N1VMTCk7 CisKKyAgICBpZiAoY3VyX2h3X3dwID49IG1heF9od193cCkgeworICAgICAgICByZXR1cm4gLUVO T0JVRlM7CisgICAgfQorCisgICAgLyogUEFDIDAwIGlzIHJlc2VydmVkLCBhc3N1bWUgRUwxIGV4 Y2VwdGlvbiAqLworICAgIGRiZ3djciA9IGRlcG9zaXQzMihkYmd3Y3IsIDEsIDIsIDEpOworCisg ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHREJfV0FUQ0hQT0lOVF9SRUFEOgorICAgICAg ICBkYmd3Y3IgPSBkZXBvc2l0MzIoZGJnd2NyLCAzLCAyLCAxKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBHREJfV0FUQ0hQT0lOVF9XUklURToKKyAgICAgICAgZGJnd2NyID0gZGVwb3NpdDMy KGRiZ3djciwgMywgMiwgMik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RCX1dBVENIUE9J TlRfQUNDRVNTOgorICAgICAgICBkYmd3Y3IgPSBkZXBvc2l0MzIoZGJnd2NyLCAzLCAyLCAzKTsK KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNo ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChsZW4gPD0gOCkgeworICAgICAg ICAvKiB3ZSBhbGlnbiB0aGUgYWRkcmVzcyBhbmQgc2V0IHRoZSBiaXRzIGluIEJBUyAqLworICAg ICAgICBpbnQgb2ZmID0gYWRkciAmIDB4NzsKKyAgICAgICAgaW50IGJhcyA9ICgxIDw8IGxlbikt MTsKKyAgICAgICAgZGJnd2NyID0gZGVwb3NpdDMyKGRiZ3djciwgNStvZmYsIDgtb2ZmLCBiYXMp OworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEZvciByYW5nZXMgYWJvdmUgOCBieXRlcyB3ZSBu ZWVkIHRvIGJlIGEgcG93ZXIgb2YgMiAqLworICAgICAgICBpZiAoY3Rwb3A2NChsZW4pPT0xKSB7 CisgICAgICAgICAgICBpbnQgYml0cyA9IGN0ejY0KGxlbik7CisgICAgICAgICAgICBkYmd3dnIg Jj0gfigoMSA8PCBiaXRzKS0xKTsKKyAgICAgICAgICAgIGRiZ3djciA9IGRlcG9zaXQzMihkYmd3 Y3IsIDI0LCA0LCBiaXRzKTsKKyAgICAgICAgICAgIGRiZ3djciA9IGRlcG9zaXQzMihkYmd3Y3Is IDUsIDgsIDB4ZmYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIC1FTk9C VUZTOworICAgICAgICB9CisgICAgfQorCisgICAgZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ193 Y3JbY3VyX2h3X3dwXSA9IGRiZ3djcjsKKyAgICBndWVzdF9kZWJ1Z19yZWdpc3RlcnMuZGJnX3d2 cltjdXJfaHdfd3BdID0gZGJnd3ZyOworICAgIGN1cl9od193cCsrOworICAgIHJldHVybiAwOwor fQorCisKK3N0YXRpYyBib29sIGNoZWNrX3dhdGNocG9pbnRfaW5fcmFuZ2UoaW50IGksIHRhcmdl dF91bG9uZyBhZGRyKQoreworICAgIHVpbnQzMl90IGRiZ3djciA9IGd1ZXN0X2RlYnVnX3JlZ2lz dGVycy5kYmdfd2NyW2ldOworICAgIHVpbnQ2NF90IGFkZHJfdG9wLCBhZGRyX2JvdHRvbSA9IGd1 ZXN0X2RlYnVnX3JlZ2lzdGVycy5kYmdfd3ZyW2ldOworICAgIGludCBiYXMgPSBleHRyYWN0MzIo ZGJnd2NyLCA1LCA4KTsKKyAgICBpbnQgbWFzayA9IGV4dHJhY3QzMihkYmd3Y3IsIDI0LCA0KTsK KworICAgIGlmIChtYXNrKSB7CisgICAgICAgIGFkZHJfdG9wID0gYWRkcl9ib3R0b20gKyAoMSA8 PCBtYXNrKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBCQVMgbXVzdCBiZSBjb250aWd1b3Vz IGJ1dCBjYW4gb2Zmc2V0IGFnYWluc3QgdGhlIGJhc2UKKyAgICAgICAgICogYWRkcmVzcyBpbiBE QkdXVlIgKi8KKyAgICAgICAgYWRkcl9ib3R0b20gPSBhZGRyX2JvdHRvbSArIGN0ejMyKGJhcyk7 CisgICAgICAgIGFkZHJfdG9wID0gYWRkcl9ib3R0b20gKyBjbG8zMihiYXMpOworICAgIH0KKwor ICAgIGlmIChhZGRyID49IGFkZHJfYm90dG9tICYmIGFkZHIgPD0gYWRkcl90b3AgKSB7CisgICAg ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisg KiBkZWxldGVfaHdfd2F0Y2hwb2ludCgpCisgKiBAYWRkcjogYWRkcmVzcyBvZiBicmVha3BvaW50 CisgKgorICogRGVsZXRlIGEgYnJlYWtwb2ludCBhbmQgc2h1ZmZsZSBhbnkgYWJvdmUgZG93bgor ICovCisKK3N0YXRpYyBpbnQgZGVsZXRlX2h3X3dhdGNocG9pbnQodGFyZ2V0X3Vsb25nIGFkZHIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyBsZW4sIGludCB0 eXBlKQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjdXJfaHdfd3A7IGkrKykg eworICAgICAgICBpZiAoY2hlY2tfd2F0Y2hwb2ludF9pbl9yYW5nZShpLCBhZGRyKSkgeworICAg ICAgICAgICAgd2hpbGUgKGkgPCBjdXJfaHdfd3ApIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9 PSBtYXhfaHdfd3ApIHsKKyAgICAgICAgICAgICAgICAgICAgZ3Vlc3RfZGVidWdfcmVnaXN0ZXJz LmRiZ193dnJbaV0gPSAwOworICAgICAgICAgICAgICAgICAgICBndWVzdF9kZWJ1Z19yZWdpc3Rl cnMuZGJnX3djcltpXSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ193dnJbaV0gPQorICAgICAgICAgICAg ICAgICAgICAgICAgZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ193dnJbaSArIDFdOworICAgICAg ICAgICAgICAgICAgICBndWVzdF9kZWJ1Z19yZWdpc3RlcnMuZGJnX3djcltpXSA9CisgICAgICAg ICAgICAgICAgICAgICAgICBndWVzdF9kZWJ1Z19yZWdpc3RlcnMuZGJnX3djcltpICsgMV07Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGN1cl9od193cC0tOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuIC1FTk9FTlQ7Cit9CisKKworaW50IGt2bV9hcmNoX2luc2VydF9o d19icmVha3BvaW50KHRhcmdldF91bG9uZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhcmdldF91bG9uZyBsZW4sIGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlw ZSkgeworICAgIGNhc2UgR0RCX0JSRUFLUE9JTlRfSFc6CisgICAgICAgIHJldHVybiBpbnNlcnRf aHdfYnJlYWtwb2ludChhZGRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREJfV0FUQ0hQ T0lOVF9SRUFEOgorICAgIGNhc2UgR0RCX1dBVENIUE9JTlRfV1JJVEU6CisgICAgY2FzZSBHREJf V0FUQ0hQT0lOVF9BQ0NFU1M6CisgICAgICAgIHJldHVybiBpbnNlcnRfaHdfd2F0Y2hwb2ludChh ZGRyLCBsZW4sIHR5cGUpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAtRU5PU1lTOwor ICAgIH0KK30KKworaW50IGt2bV9hcmNoX3JlbW92ZV9od19icmVha3BvaW50KHRhcmdldF91bG9u ZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyBs ZW4sIGludCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR0RCX0JSRUFL UE9JTlRfSFc6CisgICAgICAgIHJldHVybiBkZWxldGVfaHdfYnJlYWtwb2ludChhZGRyKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBHREJfV0FUQ0hQT0lOVF9SRUFEOgorICAgIGNhc2UgR0RC X1dBVENIUE9JTlRfV1JJVEU6CisgICAgY2FzZSBHREJfV0FUQ0hQT0lOVF9BQ0NFU1M6CisgICAg ICAgIHJldHVybiBkZWxldGVfaHdfd2F0Y2hwb2ludChhZGRyLCBsZW4sIHR5cGUpOworICAgIGRl ZmF1bHQ6CisgICAgICAgIHJldHVybiAtRU5PU1lTOworICAgIH0KK30KKworCit2b2lkIGt2bV9h cmNoX3JlbW92ZV9hbGxfaHdfYnJlYWtwb2ludHModm9pZCkKK3sKKyAgICBtZW1zZXQoKHZvaWQg KikmZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLCAwLCBzaXplb2YoZ3Vlc3RfZGVidWdfcmVnaXN0ZXJz KSk7CisgICAgY3VyX2h3X2JwID0gMDsKKyAgICBjdXJfaHdfd3AgPSAwOworfQorCit2b2lkIGt2 bV9jb3B5X2h3X2JyZWFrcG9pbnRfZGF0YShzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggKnB0 cikKK3sKKyAgICAvKiBDb21waWxlIHRpbWUgYXNzZXJ0PyAqLworICAgIGdfYXNzZXJ0KHNpemVv ZihzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2gpID09IHNpemVvZihndWVzdF9kZWJ1Z19yZWdp c3RlcnMpKTsKKyAgICBtZW1jcHkocHRyLCAmZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLCBzaXplb2Yo Z3Vlc3RfZGVidWdfcmVnaXN0ZXJzKSk7Cit9CisKK2Jvb2wga3ZtX2h3X2JyZWFrcG9pbnRzX2Fj dGl2ZShDUFVTdGF0ZSAqY3MpCit7CisgICAgcmV0dXJuICggKGN1cl9od19icCA+IDApIHx8IChj dXJfaHdfd3AgPjApICkgPyBUUlVFOkZBTFNFOworfQorCitib29sIGt2bV9hcm1fZmluZF9od19i cmVha3BvaW50KENQVVN0YXRlICpjcHUsIHRhcmdldF91bG9uZyBwYykKK3sKKyAgaWYgKGt2bV9o d19icmVha3BvaW50c19hY3RpdmUoY3B1KSkgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyBp PGN1cl9od19icDsgaSsrKSB7CisgICAgICBpZiAoZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzLmRiZ19i dnJbaV0gPT0gcGMpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9 CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBrdm1fYXJtX2ZpbmRfaHdfd2F0Y2hwb2ludChD UFVTdGF0ZSAqY3B1LCB0YXJnZXRfdWxvbmcgYWRkcikKK3sKKyAgaWYgKGt2bV9od19icmVha3Bv aW50c19hY3RpdmUoY3B1KSkgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyBpPGN1cl9od193 cDsgaSsrKSB7CisgICAgICAgIGlmIChjaGVja193YXRjaHBvaW50X2luX3JhbmdlKGksIGFkZHIp KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgIH0K KyAgcmV0dXJuIGZhbHNlOworfQorCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZmVhdHVyZSh1 aW50NjRfdCAqZmVhdHVyZXMsIGludCBmZWF0dXJlKQogewogICAgICpmZWF0dXJlcyB8PSAxVUxM IDw8IGZlYXR1cmU7CmRpZmYgLS1naXQgYS90YXJnZXQtYXJtL2t2bV9hcm0uaCBiL3RhcmdldC1h cm0va3ZtX2FybS5oCmluZGV4IDVhYmQ1OTEuLjlkNzEzYmMgMTAwNjQ0Ci0tLSBhL3RhcmdldC1h cm0va3ZtX2FybS5oCisrKyBiL3RhcmdldC1hcm0va3ZtX2FybS5oCkBAIC0xNzksNiArMTc5LDI3 IEBAIGludCBrdm1fYXJtX3N5bmNfbXBzdGF0ZV90b19rdm0oQVJNQ1BVICpjcHUpOwogICovCiBp bnQga3ZtX2FybV9zeW5jX21wc3RhdGVfdG9fcWVtdShBUk1DUFUgKmNwdSk7CiAKK2Jvb2wga3Zt X2h3X2JyZWFrcG9pbnRzX2FjdGl2ZShDUFVTdGF0ZSAqY3MpOwordm9pZCBrdm1fY29weV9od19i cmVha3BvaW50X2RhdGEoc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoICpwdHIpOworCisvKioK KyAqIGt2bV9hcm1fZmluZF9od19icmVha3BvaW50OgorICogQGNwdTogQ1BVU3RhdGUKKyAqIEBw YzogcGMgb2YgYnJlYWtwb2ludAorICoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBwYyBtYXRjaGVz IG9uZSBvZiBvdXIgYnJlYWtwb2ludHMuCisgKi8KK2Jvb2wga3ZtX2FybV9maW5kX2h3X2JyZWFr cG9pbnQoQ1BVU3RhdGUgKmNwdSwgdGFyZ2V0X3Vsb25nIHBjKTsKKworLyoqCisgKiBrdm1fYXJt X2ZpbmRfaHdfd2F0Y2hwb2ludDoKKyAqIEBjcHU6IENQVVN0YXRlCisgKiBAYWRkcjogYWRkcmVz cyBvZiB3YXRjaHBvaW50CisgKgorICogUmV0dXJuIFRSVUUgaWYgdGhlIGFkZHIgbWF0Y2hlcyBv bmUgb2Ygb3VyIHdhdGNocG9pbnRzLgorICovCitib29sIGt2bV9hcm1fZmluZF9od193YXRjaHBv aW50KENQVVN0YXRlICpjcHUsIHRhcmdldF91bG9uZyBhZGRyKTsKKwogI2VuZGlmCiAKICNlbmRp ZgotLSAKMi40LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVtYmlhLmVkdQpodHRw czovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2bWFybQo=