From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH 2/5] libelf: rewrite symtab/strtab loading for Dom0 Date: Wed, 13 Jan 2016 13:32:15 +0100 Message-ID: <1452688338-70075-3-git-send-email-roger.pau@citrix.com> References: <1452688338-70075-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1aJKbw-000542-QV for xen-devel@lists.xenproject.org; Wed, 13 Jan 2016 12:33:13 +0000 In-Reply-To: <1452688338-70075-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Keir Fraser , Ian Campbell , Ian Jackson , Tim Deegan , Jan Beulich , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Q3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBlbGZfbG9hZF9ic2RzeW1zIGlzIGJyb2tlbiB3aGVu IGxvYWRpbmcgaW5zaWRlIG9mCmEgSFZNIGd1ZXN0LCBiZWNhdXNlIGl0IGFzc3VtZXMgZWxmX21l bWNweV9zYWZlIGlzIGFibGUgdG8gd3JpdGUgaW50byBndWVzdAptZW1vcnkgc3BhY2UsIHdoaWNo IGl0IGlzIG5vdC4KClRha2UgdGhlIG9wb3J0dW5pdHkgdG8gZG8gc29tZSBjbGVhbnVwIGFuZCBw cm9wZXJseSBkb2N1bWVudCBob3cKZWxmX3twYXJzZS9sb2FkfV9ic2RzeW1zIHdvcmtzLiBUaGUg bmV3IGltcGxlbWVudGF0aW9uIHVzZXMgZWxmX2xvYWRfaW1hZ2UKd2hlbiBkZWFsaW5nIHdpdGgg ZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZCB0byB0aGUgZ3Vlc3QgbWVtb3J5IHNwYWNlLgpB bHNvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVycyBjb3BpZWQgdG8gdGhlIG1p bmltdW0gbmVjZXNzYXJ5LgoKU2lnbmVkLW9mZi1ieTogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIu cGF1QGNpdHJpeC5jb20+Ci0tLQpDYzogSWFuIENhbXBiZWxsIDxpYW4uY2FtcGJlbGxAY2l0cml4 LmNvbT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFu IEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9y Zz4KQ2M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgotLS0KIHhlbi9jb21tb24vbGliZWxmL2xp YmVsZi1sb2FkZXIuYyB8IDIxMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS94ZW4vY29tbW9uL2xpYmVsZi9saWJlbGYtbG9hZGVyLmMgYi94ZW4vY29tbW9u L2xpYmVsZi9saWJlbGYtbG9hZGVyLmMKaW5kZXggNmY0MmJlYS4uOTU1MmQ0YyAxMDA2NDQKLS0t IGEveGVuL2NvbW1vbi9saWJlbGYvbGliZWxmLWxvYWRlci5jCisrKyBiL3hlbi9jb21tb24vbGli ZWxmL2xpYmVsZi1sb2FkZXIuYwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgZWxmX3BhcnNlX2Jz ZHN5bXMoc3RydWN0IGVsZl9iaW5hcnkgKmVsZiwgdWludDY0X3QgcHN0YXJ0KQogewogICAgIHVp bnQ2NF90IHN6OwogICAgIEVMRl9IQU5ETEVfREVDTChlbGZfc2hkcikgc2hkcjsKLSAgICB1bnNp Z25lZCBpLCB0eXBlOworICAgIHVuc2lnbmVkIGludCBpOwogCiAgICAgaWYgKCAhRUxGX0hBTkRM RV9WQUxJRChlbGYtPnN5bV90YWIpICkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY0LDIwICsxNjQs MzMgQEAgdm9pZCBlbGZfcGFyc2VfYnNkc3ltcyhzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCB1aW50 NjRfdCBwc3RhcnQpCiAgICAgc3ogPSBzaXplb2YodWludDMyX3QpOwogCiAgICAgLyogU3BhY2Ug Zm9yIHRoZSBlbGYgYW5kIGVsZiBzZWN0aW9uIGhlYWRlcnMgKi8KLSAgICBzeiArPSAoZWxmX3V2 YWwoZWxmLCBlbGYtPmVoZHIsIGVfZWhzaXplKSArCi0gICAgICAgICAgIGVsZl9zaGRyX2NvdW50 KGVsZikgKiBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaGVudHNpemUpKTsKKyAgICBzeiAr PSBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9laHNpemUpICsKKyAgICAgICAgICAzICogZWxm X3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hlbnRzaXplKTsKICAgICBzeiA9IGVsZl9yb3VuZF91 cChlbGYsIHN6KTsKIAotICAgIC8qIFNwYWNlIGZvciB0aGUgc3ltYm9sIGFuZCBzdHJpbmcgdGFi bGVzLiAqLworICAgIC8qIFNwYWNlIGZvciB0aGUgc3ltYm9sIGFuZCBzdHJpbmcgdGFibGUuICov CiAgICAgZm9yICggaSA9IDA7IGkgPCBlbGZfc2hkcl9jb3VudChlbGYpOyBpKysgKQogICAgIHsK ICAgICAgICAgc2hkciA9IGVsZl9zaGRyX2J5X2luZGV4KGVsZiwgaSk7CiAgICAgICAgIGlmICgg IWVsZl9hY2Nlc3Nfb2soZWxmLCBFTEZfSEFORExFX1BUUlZBTChzaGRyKSwgMSkgKQogICAgICAg ICAgICAgLyogaW5wdXQgaGFzIGFuIGluc2FuZSBzZWN0aW9uIGhlYWRlciBjb3VudCBmaWVsZCAq LwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHR5cGUgPSBlbGZfdXZhbChlbGYsIHNoZHIs IHNoX3R5cGUpOwotICAgICAgICBpZiAoICh0eXBlID09IFNIVF9TVFJUQUIpIHx8ICh0eXBlID09 IFNIVF9TWU1UQUIpICkKLSAgICAgICAgICAgIHN6ID0gZWxmX3JvdW5kX3VwKGVsZiwgc3ogKyBl bGZfdXZhbChlbGYsIHNoZHIsIHNoX3NpemUpKTsKKworICAgICAgICBpZiAoIGVsZl91dmFsKGVs Ziwgc2hkciwgc2hfdHlwZSkgIT0gU0hUX1NZTVRBQiApCisgICAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICBzeiA9IGVsZl9yb3VuZF91cChlbGYsIHN6ICsgZWxmX3V2YWwoZWxmLCBzaGRy LCBzaF9zaXplKSk7CisgICAgICAgIHNoZHIgPSBlbGZfc2hkcl9ieV9pbmRleChlbGYsIGVsZl91 dmFsKGVsZiwgc2hkciwgc2hfbGluaykpOworCisgICAgICAgIGlmICggIWVsZl9hY2Nlc3Nfb2so ZWxmLCBFTEZfSEFORExFX1BUUlZBTChzaGRyKSwgMSkgKQorICAgICAgICAgICAgLyogaW5wdXQg aGFzIGFuIGluc2FuZSBzZWN0aW9uIGhlYWRlciBjb3VudCBmaWVsZCAqLworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgaWYgKCBlbGZfdXZhbChlbGYsIHNoZHIsIHNoX3R5cGUpICE9IFNI VF9TVFJUQUIgKQorICAgICAgICAgICAgLyogSW52YWxpZCBzeW10YWIgLT4gc3RydGFiIGxpbmsg Ki8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHN6ID0gZWxmX3JvdW5kX3VwKGVsZiwg c3ogKyBlbGZfdXZhbChlbGYsIHNoZHIsIHNoX3NpemUpKTsKICAgICB9CiAKICAgICBlbGYtPmJz ZF9zeW10YWJfcHN0YXJ0ID0gcHN0YXJ0OwpAQCAtMTg2LDEzICsxOTksMzEgQEAgdm9pZCBlbGZf cGFyc2VfYnNkc3ltcyhzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCB1aW50NjRfdCBwc3RhcnQpCiAK IHN0YXRpYyB2b2lkIGVsZl9sb2FkX2JzZHN5bXMoc3RydWN0IGVsZl9iaW5hcnkgKmVsZikKIHsK LSAgICBFTEZfSEFORExFX0RFQ0woZWxmX2VoZHIpIHN5bV9laGRyOwotICAgIHVuc2lnbmVkIGxv bmcgc3o7Ci0gICAgZWxmX3B0cnZhbCBtYXh2YTsKLSAgICBlbGZfcHRydmFsIHN5bWJhc2U7Ci0g ICAgZWxmX3B0cnZhbCBzeW10YWJfYWRkcjsKLSAgICBFTEZfSEFORExFX0RFQ0woZWxmX3NoZHIp IHNoZHI7Ci0gICAgdW5zaWduZWQgaSwgdHlwZTsKKyAgICAvKgorICAgICAqIEhlYWRlciB0aGF0 IGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBrZXJuZWwgYW5kIGFsbG93cworICAgICAqIHRo ZSBPUyB0byBmaW5kIHdoZXJlIHRoZSBzeW10YWIgYW5kIHN0cnRhYiBoYXZlIGJlZW4gbG9hZGVk LgorICAgICAqIEl0IG1pbWljcyBhIHZhbGlkIEVMRiBmaWxlIGhlYWRlciwgYWx0aG91Z2ggaXQg b25seSBjb250YWlucworICAgICAqIGEgc3ltdGFiIGFuZCBhIHN0cnRhYiBzZWN0aW9uLgorICAg ICAqCisgICAgICogTkI6IGFjY29yZGluZyB0byB0aGUgRUxGIHNwZWMgdGhlcmUncyBvbmx5IE9O RSBzeW10YWIgcGVyIEVMRgorICAgICAqIGZpbGUsIGFuZCBhY2NvcmRpbmdseSB3ZSB3aWxsIG9u bHkgbG9hZCB0aGUgY29ycmVzcG9uZGluZworICAgICAqIHN0cnRhYiwgc28gd2Ugb25seSBuZWVk IHRocmVlIHNlY3Rpb24gaGVhZGVycyBpbiBvdXIgZmFrZSBFTEYKKyAgICAgKiBoZWFkZXIgKGZp cnN0IHNlY3Rpb24gaGVhZGVyIGlzIGFsd2F5cyBhIGR1bW15KS4KKyAgICAgKi8KKyAgICBzdHJ1 Y3QgX19wYWNrZWQgeworICAgICAgICBlbGZfZWhkciBoZWFkZXI7CisgICAgICAgIGVsZl9zaGRy IHNlY3Rpb25bM107CisgICAgfSBzeW1ib2xfaGVhZGVyOworCisgICAgRUxGX0hBTkRMRV9ERUNM KGVsZl9laGRyKSBoZWFkZXJfaGFuZGxlOworICAgIHVuc2lnbmVkIGxvbmcgc2hkcl9zaXplOwor ICAgIHVpbnQzMl90IHN5bXNpemU7CisgICAgRUxGX0hBTkRMRV9ERUNMKGVsZl9zaGRyKSBzZWN0 aW9uX2hhbmRsZTsKKyAgICBFTEZfSEFORExFX0RFQ0woZWxmX3NoZHIpIGltYWdlX2hhbmRsZTsK KyAgICB1bnNpZ25lZCBpbnQgaSwgbGluazsKKyAgICBlbGZfcHRydmFsIGhlYWRlcl9iYXNlOwor ICAgIGVsZl9wdHJ2YWwgc3ltdGFiX2Jhc2U7CisgICAgZWxmX3B0cnZhbCBzdHJ0YWJfYmFzZTsK IAogICAgIGlmICggIWVsZi0+YnNkX3N5bXRhYl9wc3RhcnQgKQogICAgICAgICByZXR1cm47CkBA IC0yMDAsNjQgKzIzMSwxMzYgQEAgc3RhdGljIHZvaWQgZWxmX2xvYWRfYnNkc3ltcyhzdHJ1Y3Qg ZWxmX2JpbmFyeSAqZWxmKQogI2RlZmluZSBlbGZfaGRyX2VsbShfZWxmLCBfaGRyLCBfZWxtLCBf dmFsKSAgICAgXAogZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAogICAgIGlmICggZWxmXzY0Yml0KF9lbGYpICkgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICBlbGZfc3RvcmVfZmllbGQoX2VsZiwgX2hkciwgZTY0Ll9lbG0sIF92YWwpOyAgXAor ICAgICAgICAoX2hkcikuZTY0Ll9lbG0gPSBfdmFsOyAgICAgICAgICAgICAgICAgXAogICAgIGVs c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbGZf c3RvcmVfZmllbGQoX2VsZiwgX2hkciwgZTMyLl9lbG0sIF92YWwpOyAgXAorICAgICAgICAoX2hk cikuZTMyLl9lbG0gPSBfdmFsOyAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoIDAgKQogCi0g ICAgc3ltYmFzZSA9IGVsZl9nZXRfcHRyKGVsZiwgZWxmLT5ic2Rfc3ltdGFiX3BzdGFydCk7Ci0g ICAgc3ltdGFiX2FkZHIgPSBtYXh2YSA9IHN5bWJhc2UgKyBzaXplb2YodWludDMyX3QpOworI2Rl ZmluZSBTWU1UQUJfSU5ERVggICAgMQorI2RlZmluZSBTVFJUQUJfSU5ERVggICAgMgogCi0gICAg LyogU2V0IHVwIEVsZiBoZWFkZXIuICovCi0gICAgc3ltX2VoZHIgPSBFTEZfTUFLRV9IQU5ETEUo ZWxmX2VoZHIsIHN5bXRhYl9hZGRyKTsKLSAgICBzeiA9IGVsZl91dmFsKGVsZiwgZWxmLT5laGRy LCBlX2Voc2l6ZSk7Ci0gICAgZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwo c3ltX2VoZHIpLCBFTEZfSEFORExFX1BUUlZBTChlbGYtPmVoZHIpLCBzeik7Ci0gICAgbWF4dmEg Kz0gc3o7IC8qIG5vIHJvdW5kIHVwICovCisgICAgLyogQWxsb3cgZWxmX21lbWNweV9zYWZlIHRv IHdyaXRlIHRvIHN5bWJvbF9oZWFkZXIuICovCisgICAgZWxmLT5jYWxsZXJfeGRlc3RfYmFzZSA9 ICZzeW1ib2xfaGVhZGVyOworICAgIGVsZi0+Y2FsbGVyX3hkZXN0X3NpemUgPSBzaXplb2Yoc3lt Ym9sX2hlYWRlcik7CiAKLSAgICBlbGZfaGRyX2VsbShlbGYsIHN5bV9laGRyLCBlX3Bob2ZmLCAw KTsKLSAgICBlbGZfaGRyX2VsbShlbGYsIHN5bV9laGRyLCBlX3Nob2ZmLCBlbGZfdXZhbChlbGYs IGVsZi0+ZWhkciwgZV9laHNpemUpKTsKLSAgICBlbGZfaGRyX2VsbShlbGYsIHN5bV9laGRyLCBl X3BoZW50c2l6ZSwgMCk7Ci0gICAgZWxmX2hkcl9lbG0oZWxmLCBzeW1fZWhkciwgZV9waG51bSwg MCk7Ci0KLSAgICAvKiBDb3B5IEVsZiBzZWN0aW9uIGhlYWRlcnMuICovCi0gICAgc2hkciA9IEVM Rl9NQUtFX0hBTkRMRShlbGZfc2hkciwgbWF4dmEpOwotICAgIHN6ID0gZWxmX3NoZHJfY291bnQo ZWxmKSAqIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3NoZW50c2l6ZSk7Ci0gICAgZWxmX21l bWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2hkciksCi0gICAgICAgICAgICAgICAg ICAgIEVMRl9JTUFHRV9CQVNFKGVsZikgKyBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaG9m ZiksCi0gICAgICAgICAgICAgICAgICAgIHN6KTsKLSAgICBtYXh2YSA9IGVsZl9yb3VuZF91cChl bGYsICh1bnNpZ25lZCBsb25nKW1heHZhICsgc3opOworICAgIC8qCisgICAgICogQ2FsY3VsYXRl IHRoZSBwb3NpdGlvbiBvZiB0aGUgdmFyaW91cyBlbGVtZW50cyBpbiBHVUVTVCBNRU1PUlkgU1BB Q0UuCisgICAgICogVGhpcyBhZGRyZXNzZXMgTVVTVCBvbmx5IGJlIHVzZWQgd2l0aCBlbGZfbG9h ZF9pbWFnZS4KKyAgICAgKgorICAgICAqIE5COiBzdHJ0YWJfYmFzZSBjYW5ub3QgYmUgY2FsY3Vs YXRlZCBhdCB0aGlzIHBvaW50IGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgKiBrbm93IHRoZSBzaXpl IG9mIHRoZSBzeW10YWIgeWV0LCBhbmQgdGhlIHN0cnRhYiB3aWxsIGJlIHBsYWNlZCBhZnRlciBp dC4KKyAgICAgKi8KKyAgICBoZWFkZXJfYmFzZSA9IGVsZl9nZXRfcHRyKGVsZiwgZWxmLT5ic2Rf c3ltdGFiX3BzdGFydCkgKyBzaXplb2YodWludDMyX3QpOworICAgIHN5bXRhYl9iYXNlID0gZWxm X3JvdW5kX3VwKGVsZiwgaGVhZGVyX2Jhc2UgKyBzaXplb2Yoc3ltYm9sX2hlYWRlcikpOworCisg ICAgLyogRmlsbCB0aGUgRUxGIGhlYWRlciwgY29waWVkIGZyb20gdGhlIG9yaWdpbmFsIEVMRiBo ZWFkZXIuICovCisgICAgaGVhZGVyX2hhbmRsZSA9IEVMRl9NQUtFX0hBTkRMRShlbGZfZWhkciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVMRl9SRUFMUFRSMlBUUlZBTCgm c3ltYm9sX2hlYWRlci5oZWFkZXIpKTsKKyAgICBlbGZfbWVtY3B5X3NhZmUoZWxmLCBFTEZfSEFO RExFX1BUUlZBTChoZWFkZXJfaGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgRUxGX0hBTkRM RV9QVFJWQUwoZWxmLT5laGRyKSwKKyAgICAgICAgICAgICAgICAgICAgZWxmX3V2YWwoZWxmLCBl bGYtPmVoZHIsIGVfZWhzaXplKSk7CisKKyAgICAvKiBTZXQgdGhlIG9mZnNldCB0byB0aGUgc2hk ciBhcnJheS4gKi8KKyAgICBlbGZfaGRyX2VsbShlbGYsIHN5bWJvbF9oZWFkZXIuaGVhZGVyLCBl X3Nob2ZmLAorICAgICAgICAgICAgICAgIG9mZnNldG9mKHR5cGVvZihzeW1ib2xfaGVhZGVyKSwg c2VjdGlvbikpOworCisgICAgLyogU2V0IHRoZSByaWdodCBudW1iZXIgb2Ygc2VjdGlvbiBoZWFk ZXJzLiAqLworICAgIGVsZl9oZHJfZWxtKGVsZiwgc3ltYm9sX2hlYWRlci5oZWFkZXIsIGVfc2hu dW0sIDMpOworCisgICAgLyogQ2xlYXIgYSBjb3VwbGUgb2YgZmllbGRzIHdlIGRvbid0IHVzZS4g Ki8KKyAgICBlbGZfaGRyX2VsbShlbGYsIHN5bWJvbF9oZWFkZXIuaGVhZGVyLCBlX3Bob2ZmLCAw KTsKKyAgICBlbGZfaGRyX2VsbShlbGYsIHN5bWJvbF9oZWFkZXIuaGVhZGVyLCBlX3BoZW50c2l6 ZSwgMCk7CisgICAgZWxmX2hkcl9lbG0oZWxmLCBzeW1ib2xfaGVhZGVyLmhlYWRlciwgZV9waG51 bSwgMCk7CisKKyAgICAvKiBaZXJvIHRoZSBkdW1teSBzZWN0aW9uLiAqLworICAgIHNlY3Rpb25f aGFuZGxlID0gRUxGX01BS0VfSEFORExFKGVsZl9zaGRyLAorICAgICAgICAgICAgICAgICAgICAg RUxGX1JFQUxQVFIyUFRSVkFMKCZzeW1ib2xfaGVhZGVyLnNlY3Rpb25bU0hOX1VOREVGXSkpOwor ICAgIHNoZHJfc2l6ZSA9IGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3NoZW50c2l6ZSk7Cisg ICAgZWxmX21lbXNldF9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2VjdGlvbl9oYW5kbGUp LCAwLCBzaGRyX3NpemUpOwogCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBhY3R1YWwgc3ltdGFi IGFuZCBzdHJ0YWIgaW4gdGhlIEVMRi4KKyAgICAgKgorICAgICAqIFRoZSBzeW10YWIgc2VjdGlv biBoZWFkZXIgaXMgZ29pbmcgdG8gcmVzaWRlIGluIHNlY3Rpb25bU1lNVEFCX0lOREVYXSwKKyAg ICAgKiB3aGlsZSB0aGUgY29ycmVzcG9uZGluZyBzdHJ0YWIgaXMgZ29pbmcgdG8gYmUgcGxhY2Vk IGluCisgICAgICogc2VjdGlvbltTVFJUQUJfSU5ERVhdLiBzaF9vZmZzZXQgaXMgbWFuZ2xlZCBz byBpdCBwb2ludHMgdG8gdGhlIG9mZnNldAorICAgICAqIHdoZXJlIHRoZSBzZWN0aW9ucyBhcmUg YWN0dWFsbHkgbG9hZGVkIChyZWxhdGl2ZSB0byB0aGUgRUxGIGhlYWRlcgorICAgICAqIGxvY2F0 aW9uKS4KKyAgICAgKi8KKyAgICBzZWN0aW9uX2hhbmRsZSA9IEVMRl9NQUtFX0hBTkRMRShlbGZf c2hkciwKKyAgICAgICAgICAgICAgICAgICAgIEVMRl9SRUFMUFRSMlBUUlZBTCgmc3ltYm9sX2hl YWRlci5zZWN0aW9uW1NZTVRBQl9JTkRFWF0pKTsKICAgICBmb3IgKCBpID0gMDsgaSA8IGVsZl9z aGRyX2NvdW50KGVsZik7IGkrKyApCiAgICAgewotICAgICAgICBlbGZfcHRydmFsIG9sZF9zaGRy X3A7Ci0gICAgICAgIGVsZl9wdHJ2YWwgbmV3X3NoZHJfcDsKIAotICAgICAgICB0eXBlID0gZWxm X3V2YWwoZWxmLCBzaGRyLCBzaF90eXBlKTsKLSAgICAgICAgaWYgKCAodHlwZSA9PSBTSFRfU1RS VEFCKSB8fCAodHlwZSA9PSBTSFRfU1lNVEFCKSApCisgICAgICAgIGltYWdlX2hhbmRsZSA9IGVs Zl9zaGRyX2J5X2luZGV4KGVsZiwgaSk7CisgICAgICAgIGlmICggZWxmX3V2YWwoZWxmLCBpbWFn ZV9oYW5kbGUsIHNoX3R5cGUpICE9IFNIVF9TWU1UQUIgKQorICAgICAgICAgICAgY29udGludWU7 CisKKyAgICAgICAgZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2VjdGlv bl9oYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgRUxGX0hBTkRMRV9QVFJWQUwoaW1h Z2VfaGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoZHJfc2l6ZSk7CisKKyAgICAg ICAgbGluayA9IGVsZl91dmFsKGVsZiwgc2VjdGlvbl9oYW5kbGUsIHNoX2xpbmspOworICAgICAg ICBpZiAoIGxpbmsgPT0gU0hOX1VOREVGICkKICAgICAgICAgewotICAgICAgICAgICAgIGVsZl9t c2coZWxmLCAiJXM6IHNoZHIgJWkgYXQgMHglIkVMRl9QUlBUUlZBTCIgLT4gMHglIkVMRl9QUlBU UlZBTCJcbiIsIF9fZnVuY19fLCBpLAotICAgICAgICAgICAgICAgICAgICAgZWxmX3NlY3Rpb25f c3RhcnQoZWxmLCBzaGRyKSwgbWF4dmEpOwotICAgICAgICAgICAgIHN6ID0gZWxmX3V2YWwoZWxm LCBzaGRyLCBzaF9zaXplKTsKLSAgICAgICAgICAgICBlbGZfbWVtY3B5X3NhZmUoZWxmLCBtYXh2 YSwgZWxmX3NlY3Rpb25fc3RhcnQoZWxmLCBzaGRyKSwgc3opOwotICAgICAgICAgICAgIC8qIE1h bmdsZWQgdG8gYmUgYmFzZWQgb24gRUxGIGhlYWRlciBsb2NhdGlvbi4gKi8KLSAgICAgICAgICAg ICBlbGZfaGRyX2VsbShlbGYsIHNoZHIsIHNoX29mZnNldCwgbWF4dmEgLSBzeW10YWJfYWRkcik7 Ci0gICAgICAgICAgICAgbWF4dmEgPSBlbGZfcm91bmRfdXAoZWxmLCAodW5zaWduZWQgbG9uZylt YXh2YSArIHN6KTsKKyAgICAgICAgICAgIGVsZl9tYXJrX2Jyb2tlbihlbGYsICJiYWQgbGluayBp biBzeW10YWIiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG9sZF9z aGRyX3AgPSBFTEZfSEFORExFX1BUUlZBTChzaGRyKTsKLSAgICAgICAgbmV3X3NoZHJfcCA9IG9s ZF9zaGRyX3AgKyBlbGZfdXZhbChlbGYsIGVsZi0+ZWhkciwgZV9zaGVudHNpemUpOwotICAgICAg ICBpZiAoIG5ld19zaGRyX3AgPD0gb2xkX3NoZHJfcCApIC8qIHdyYXBwZWQgb3Igc3R1Y2sgKi8K KworICAgICAgICAvKiBMb2FkIHN5bXRhYiBpbnRvIGd1ZXN0IG1lbW9yeS4gKi8KKyAgICAgICAg ZWxmX2xvYWRfaW1hZ2UoZWxmLCBzeW10YWJfYmFzZSwgZWxmX3NlY3Rpb25fc3RhcnQoZWxmLCBz ZWN0aW9uX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgIGVsZl91dmFsKGVsZiwgc2Vj dGlvbl9oYW5kbGUsIHNoX3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgICBlbGZfdXZhbChl bGYsIHNlY3Rpb25faGFuZGxlLCBzaF9zaXplKSk7CisgICAgICAgIGVsZl9oZHJfZWxtKGVsZiwg c3ltYm9sX2hlYWRlci5zZWN0aW9uW1NZTVRBQl9JTkRFWF0sIHNoX29mZnNldCwKKyAgICAgICAg ICAgICAgICAgICAgc3ltdGFiX2Jhc2UgLSBoZWFkZXJfYmFzZSk7CisgICAgICAgIGVsZl9oZHJf ZWxtKGVsZiwgc3ltYm9sX2hlYWRlci5zZWN0aW9uW1NZTVRBQl9JTkRFWF0sIHNoX2xpbmssCisg ICAgICAgICAgICAgICAgICAgIFNUUlRBQl9JTkRFWCk7CisKKyAgICAgICAgLyogQ2FsY3VsYXRl IHRoZSBndWVzdCBhZGRyZXNzIHdoZXJlIHN0cnRhYiBpcyBsb2FkZWQuICovCisgICAgICAgIHN0 cnRhYl9iYXNlID0gZWxmX3JvdW5kX3VwKGVsZiwgc3ltdGFiX2Jhc2UgKworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbGZfdXZhbChlbGYsIHNlY3Rpb25faGFuZGxlLCBzaF9z aXplKSk7CisKKyAgICAgICAgLyogTG9hZCBzdHJ0YWIgc2VjdGlvbiBoZWFkZXIuICovCisgICAg ICAgIHNlY3Rpb25faGFuZGxlID0gRUxGX01BS0VfSEFORExFKGVsZl9zaGRyLAorICAgICAgICAg ICAgICAgICAgICBFTEZfUkVBTFBUUjJQVFJWQUwoJnN5bWJvbF9oZWFkZXIuc2VjdGlvbltTVFJU QUJfSU5ERVhdKSk7CisgICAgICAgIGVsZl9tZW1jcHlfc2FmZShlbGYsIEVMRl9IQU5ETEVfUFRS VkFMKHNlY3Rpb25faGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVMRl9IQU5ETEVf UFRSVkFMKGVsZl9zaGRyX2J5X2luZGV4KGVsZiwgbGluaykpLAorICAgICAgICAgICAgICAgICAg ICAgICAgc2hkcl9zaXplKTsKKworICAgICAgICBpZiAoIGVsZl91dmFsKGVsZiwgc2VjdGlvbl9o YW5kbGUsIHNoX3R5cGUpICE9IFNIVF9TVFJUQUIgKQogICAgICAgICB7Ci0gICAgICAgICAgICBl bGZfbWFya19icm9rZW4oZWxmLCAiYmFkIHNlY3Rpb24gaGVhZGVyIGxlbmd0aCIpOworICAgICAg ICAgICAgZWxmX21hcmtfYnJva2VuKGVsZiwgInN0cnRhYiBub3QgZm91bmQiKTsKICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICggIWVsZl9hY2Nlc3Nfb2soZWxmLCBu ZXdfc2hkcl9wLCAxKSApIC8qIG91dHNpZGUgaW1hZ2UgKi8KLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICBzaGRyID0gRUxGX01BS0VfSEFORExFKGVsZl9zaGRyLCBuZXdfc2hkcl9wKTsKKwor ICAgICAgICAvKiBMb2FkIHN0cnRhYiBpbnRvIGd1ZXN0IG1lbW9yeS4gKi8KKyAgICAgICAgZWxm X2xvYWRfaW1hZ2UoZWxmLCBzdHJ0YWJfYmFzZSwgZWxmX3NlY3Rpb25fc3RhcnQoZWxmLCBzZWN0 aW9uX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgIGVsZl91dmFsKGVsZiwgc2VjdGlv bl9oYW5kbGUsIHNoX3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgICBlbGZfdXZhbChlbGYs IHNlY3Rpb25faGFuZGxlLCBzaF9zaXplKSk7CisgICAgICAgIGVsZl9oZHJfZWxtKGVsZiwgc3lt Ym9sX2hlYWRlci5zZWN0aW9uW1NUUlRBQl9JTkRFWF0sIHNoX29mZnNldCwKKyAgICAgICAgICAg ICAgICAgICAgc3RydGFiX2Jhc2UgLSBoZWFkZXJfYmFzZSk7CisKKyAgICAgICAgLyogU3RvcmUg dGhlIHdob2xlIHNpemUgKGluY2x1ZGluZyBoZWFkZXJzIGFuZCBsb2FkZWQgc2VjdGlvbnMpLiAq LworICAgICAgICBzeW1zaXplID0gc3RydGFiX2Jhc2UgKyBlbGZfdXZhbChlbGYsIHNlY3Rpb25f aGFuZGxlLCBzaF9zaXplKSAtCisgICAgICAgICAgICAgICAgICBoZWFkZXJfYmFzZTsKKyAgICAg ICAgYnJlYWs7CiAgICAgfQogCi0gICAgLyogV3JpdGUgZG93biB0aGUgYWN0dWFsIHN5bSBzaXpl LiAqLwotICAgIGVsZl9zdG9yZV92YWwoZWxmLCB1aW50MzJfdCwgc3ltYmFzZSwgbWF4dmEgLSBz eW10YWJfYWRkcik7CisgICAgLyogTG9hZCB0aGUgdG90YWwgc2l6ZSBhdCBzeW10YWJfcHN0YXJ0 LiAqLworICAgIGVsZl9sb2FkX2ltYWdlKGVsZiwgZWxmX2dldF9wdHIoZWxmLCBlbGYtPmJzZF9z eW10YWJfcHN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICBFTEZfUkVBTFBUUjJQVFJWQUwoJnN5 bXNpemUpLCBzaXplb2Yoc3ltc2l6ZSksCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN5bXNp emUpKTsKKworICAgIC8qIExvYWQgdGhlIGhlYWRlcnMuICovCisgICAgZWxmX2xvYWRfaW1hZ2Uo ZWxmLCBoZWFkZXJfYmFzZSwgRUxGX1JFQUxQVFIyUFRSVkFMKCZzeW1ib2xfaGVhZGVyKSwKKyAg ICAgICAgICAgICAgICAgICBzaXplb2Yoc3ltYm9sX2hlYWRlciksIHNpemVvZihzeW1ib2xfaGVh ZGVyKSk7CisKKyAgICAvKiBSZW1vdmUgcGVybWlzc2lvbnMgZnJvbSBlbGZfbWVtY3B5X3NhZmUu ICovCisgICAgZWxmLT5jYWxsZXJfeGRlc3RfYmFzZSA9IE5VTEw7CisgICAgZWxmLT5jYWxsZXJf eGRlc3Rfc2l6ZSA9IDA7CiAKKyN1bmRlZiBTWU1UQUJfSU5ERVgKKyN1bmRlZiBTVFJUQUJfSU5E RVgKICN1bmRlZiBlbGZfZWhkcl9lbG0KIH0KIAotLSAKMS45LjUgKEFwcGxlIEdpdC01MC4zKQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==