From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1MXwIu-0008BF-Eq for mharc-grub-devel@gnu.org; Mon, 03 Aug 2009 08:06:12 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MXwIr-000881-PS for grub-devel@gnu.org; Mon, 03 Aug 2009 08:06:09 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MXwIn-000855-MD for grub-devel@gnu.org; Mon, 03 Aug 2009 08:06:09 -0400 Received: from [199.232.76.173] (port=46263 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MXwIn-00084v-Gz for grub-devel@gnu.org; Mon, 03 Aug 2009 08:06:05 -0400 Received: from mail-fx0-f226.google.com ([209.85.220.226]:46197) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MXwIm-0002vR-Kp for grub-devel@gnu.org; Mon, 03 Aug 2009 08:06:05 -0400 Received: by fxm26 with SMTP id 26so825018fxm.42 for ; Mon, 03 Aug 2009 05:06:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=Unqo+I1IqInMHlcISieHGJ814yLGNGanjLAx5ICJXc4=; b=pxFaOfF9IF7Q0kkuKJS41pBdffh0gewpNtgK/KuIFOwSWasSUfhA79B7OxWz2uwHqa mkN35NCH0BqPVCM7eU37uj9aYnQ0+l/ysmnMVYRsfu+8QSH7tsdStfyv6hunt/ZN+Cyt co38lWxA9jSM6u22U8rr7S0Wmbqyi5lLT3K9M= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=rdpeD4jlg1coFzhFLMVprM/kCKxR4zqt83J+p+CDbxAZxHy/ufyNy6T3a+hgJponAe Vl6AlaS6JCsZ3WEfNcHWrG15gCFJPKIpytH0M25TzcAQeTIGNpJFz7JtuHS+PNoKiK5h 7rTMhi4IXjy8Mx+GTqDOf6QEIEJfnAxmv059I= MIME-Version: 1.0 Received: by 10.204.71.65 with SMTP id g1mr8240880bkj.27.1249301163699; Mon, 03 Aug 2009 05:06:03 -0700 (PDT) Date: Mon, 3 Aug 2009 14:06:03 +0200 Message-ID: From: "Vladimir 'phcoder' Serbinenko" To: The development of GRUB 2 Content-Type: multipart/mixed; boundary=00504502ddc6146ec104703b982c X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) Subject: [PATCH 1/2] Relocator framework X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Aug 2009 12:06:09 -0000 --00504502ddc6146ec104703b982c Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello. As discussed on IRC it would be preferable if all loaders use flexible technics for loading kernels using relocators as currently multiboot and xnu does. Here is a relocator framework based on multiboot and xnu relocator. As an advantage it switches from x86-64 to i386 if necessary. With it and some more patches I was able to load mbtest on qemu64 with tianocore -- Regards Vladimir 'phcoder' Serbinenko Personal git repository: http://repo.or.cz/w/grub2/phcoder.git --00504502ddc6146ec104703b982c Content-Type: text/plain; charset=US-ASCII; name="relocator.diff" Content-Disposition: attachment; filename="relocator.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxx5m6jm0 ZGlmZiAtLWdpdCBhL2NvbmYvaTM4Ni5ybWsgYi9jb25mL2kzODYucm1rCmluZGV4IDkzZjg0Y2Uu LjMzZDQ5YjUgMTAwNjQ0Ci0tLSBhL2NvbmYvaTM4Ni5ybWsKKysrIGIvY29uZi9pMzg2LnJtawpA QCAtMTQsMyArMTQsOSBAQCBwa2dsaWJfTU9EVUxFUyArPSB2Z2FfdGV4dC5tb2QKIHZnYV90ZXh0 X21vZF9TT1VSQ0VTID0gdGVybS9pMzg2L3BjL3ZnYV90ZXh0LmMgdGVybS9pMzg2L3ZnYV9jb21t b24uYwogdmdhX3RleHRfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKIHZnYV90ZXh0X21v ZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKKworcGtnbGliX01PRFVMRVMgKz0gcmVsb2Nh dG9yLm1vZAorcmVsb2NhdG9yX21vZF9TT1VSQ0VTID0gbGliL2kzODYvcmVsb2NhdG9yLmMgbGli L2kzODYvcmVsb2NhdG9yX2FzbS5TIGxpYi9pMzg2L3JlbG9jYXRvcl9iYWNrd2FyZC5TCityZWxv Y2F0b3JfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKK3JlbG9jYXRvcl9tb2RfQVNGTEFH UyA9ICQoQ09NTU9OX0FTRkxBR1MpCityZWxvY2F0b3JfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9M REZMQUdTKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2kzODYvcmVsb2NhdG9yLmggYi9pbmNs dWRlL2dydWIvaTM4Ni9yZWxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jYmM3NWVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ncnViL2kzODYvcmVsb2Nh dG9yLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBC b290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICog IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEdSVUIgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEdSVUJfUkVMT0NB VE9SX0NQVV9IRUFERVIKKyNkZWZpbmUgR1JVQl9SRUxPQ0FUT1JfQ1BVX0hFQURFUgkxCisKK3N0 cnVjdCBncnViX3JlbG9jYXRvcjMyX3N0YXRlCit7CisgIGdydWJfdWludDMyX3QgZXNwOworICBn cnViX3VpbnQzMl90IGVheDsKKyAgZ3J1Yl91aW50MzJfdCBlYng7CisgIGdydWJfdWludDMyX3Qg ZWN4OworICBncnViX3VpbnQzMl90IGVkeDsKKyAgZ3J1Yl91aW50MzJfdCBlaXA7Cit9OworCit2 b2lkICoKK2dydWJfcmVsb2NhdG9yMzJfYWxsb2MgKGdydWJfc2l6ZV90IHNpemUpOworZ3J1Yl9l cnJfdAorZ3J1Yl9yZWxvY2F0b3IzMl9ib290ICh2b2lkICpyZWxvY2F0b3IsIGdydWJfdWludDMy X3QgZGVzdCwKKwkJICAgICAgIHN0cnVjdCBncnViX3JlbG9jYXRvcjMyX3N0YXRlIHN0YXRlKTsK K3ZvaWQKK2dydWJfcmVsb2NhdG9yMzJfZnJlZSAodm9pZCAqcmVsb2NhdG9yKTsKKworI2VuZGlm IC8qICEgR1JVQl9SRUxPQ0FUT1JfQ1BVX0hFQURFUiAqLwpkaWZmIC0tZ2l0IGEvbGliL2kzODYv cmVsb2NhdG9yLmMgYi9saWIvaTM4Ni9yZWxvY2F0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi42YTliM2NlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2kzODYvcmVsb2Nh dG9yLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQg Qm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAq ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGdydWIvbW0u aD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKworI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNp bmNsdWRlIDxncnViL3R5cGVzLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKworI2luY2x1ZGUg PGdydWIvaTM4Ni9yZWxvY2F0b3IuaD4KKworZXh0ZXJuIGdydWJfdWludDhfdCBncnViX3JlbG9j YXRvcjMyX2ZvcndhcmRfc3RhcnQ7CitleHRlcm4gZ3J1Yl91aW50OF90IGdydWJfcmVsb2NhdG9y MzJfZm9yd2FyZF9lbmQ7CitleHRlcm4gZ3J1Yl91aW50OF90IGdydWJfcmVsb2NhdG9yMzJfYmFj a3dhcmRfc3RhcnQ7CitleHRlcm4gZ3J1Yl91aW50OF90IGdydWJfcmVsb2NhdG9yMzJfYmFja3dh cmRfZW5kOworCitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX3JlbG9jYXRvcjMyX2JhY2t3YXJk X2Rlc3Q7CitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX3JlbG9jYXRvcjMyX2JhY2t3YXJkX3Np emU7CisjaWZkZWYgX194ODZfNjRfXworZXh0ZXJuIGdydWJfdWludDY0X3QgZ3J1Yl9yZWxvY2F0 b3IzMl9iYWNrd2FyZF9zcmM7CisjZWxzZQorZXh0ZXJuIGdydWJfdWludDMyX3QgZ3J1Yl9yZWxv Y2F0b3IzMl9iYWNrd2FyZF9zcmM7CisjZW5kaWYKKworZXh0ZXJuIGdydWJfdWludDMyX3QgZ3J1 Yl9yZWxvY2F0b3IzMl9mb3J3YXJkX2Rlc3Q7CitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX3Jl bG9jYXRvcjMyX2ZvcndhcmRfc2l6ZTsKKyNpZmRlZiBfX3g4Nl82NF9fCitleHRlcm4gZ3J1Yl91 aW50NjRfdCBncnViX3JlbG9jYXRvcjMyX2ZvcndhcmRfc3JjOworI2Vsc2UKK2V4dGVybiBncnVi X3VpbnQzMl90IGdydWJfcmVsb2NhdG9yMzJfZm9yd2FyZF9zcmM7CisjZW5kaWYKKworZXh0ZXJu IGdydWJfdWludDMyX3QgZ3J1Yl9yZWxvY2F0b3IzMl9mb3J3YXJkX2VheDsKK2V4dGVybiBncnVi X3VpbnQzMl90IGdydWJfcmVsb2NhdG9yMzJfZm9yd2FyZF9lYng7CitleHRlcm4gZ3J1Yl91aW50 MzJfdCBncnViX3JlbG9jYXRvcjMyX2ZvcndhcmRfZWN4OworZXh0ZXJuIGdydWJfdWludDMyX3Qg Z3J1Yl9yZWxvY2F0b3IzMl9mb3J3YXJkX2VkeDsKK2V4dGVybiBncnViX3VpbnQzMl90IGdydWJf cmVsb2NhdG9yMzJfZm9yd2FyZF9laXA7CitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX3JlbG9j YXRvcjMyX2ZvcndhcmRfZXNwOworCitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX3JlbG9jYXRv cjMyX2JhY2t3YXJkX2VheDsKK2V4dGVybiBncnViX3VpbnQzMl90IGdydWJfcmVsb2NhdG9yMzJf YmFja3dhcmRfZWJ4OworZXh0ZXJuIGdydWJfdWludDMyX3QgZ3J1Yl9yZWxvY2F0b3IzMl9iYWNr d2FyZF9lY3g7CitleHRlcm4gZ3J1Yl91aW50MzJfdCBncnViX3JlbG9jYXRvcjMyX2JhY2t3YXJk X2VkeDsKK2V4dGVybiBncnViX3VpbnQzMl90IGdydWJfcmVsb2NhdG9yMzJfYmFja3dhcmRfZWlw OworZXh0ZXJuIGdydWJfdWludDMyX3QgZ3J1Yl9yZWxvY2F0b3IzMl9iYWNrd2FyZF9lc3A7CisK KyNkZWZpbmUgUkVMT0NBVE9SX1NJWkVPRih4KQkoJmdydWJfcmVsb2NhdG9yMzJfIyN4IyNfZW5k IC0gJmdydWJfcmVsb2NhdG9yMzJfIyN4IyNfc3RhcnQpCisjZGVmaW5lIFJFTE9DQVRPUl9BTElH TiAxNgorCit2b2lkICoKK2dydWJfcmVsb2NhdG9yMzJfYWxsb2MgKGdydWJfc2l6ZV90IHNpemUp Cit7CisgIGNoYXIgKnBsYXlncm91bmQ7CisKKyAgcGxheWdyb3VuZCA9IGdydWJfbWFsbG9jICgo UkVMT0NBVE9SX1NJWkVPRiAoZm9yd2FyZCkgKyBSRUxPQ0FUT1JfQUxJR04pCisJCQkgICAgKyBz aXplCisJCQkgICAgKyAoUkVMT0NBVE9SX1NJWkVPRiAoYmFja3dhcmQpICsKKwkJCSAgICAgICBS RUxPQ0FUT1JfQUxJR04pKTsKKyAgaWYgKCFwbGF5Z3JvdW5kKQorICAgIHJldHVybiAwOworCisg ICooZ3J1Yl9zaXplX3QgKikgcGxheWdyb3VuZCA9IHNpemU7CisKKyAgcmV0dXJuIHBsYXlncm91 bmQgKyBSRUxPQ0FUT1JfU0laRU9GIChmb3J3YXJkKTsKK30KKwordm9pZAorZ3J1Yl9yZWxvY2F0 b3IzMl9mcmVlICh2b2lkICpyZWxvY2F0b3IpCit7CisgIGlmIChyZWxvY2F0b3IpCisgICAgZ3J1 Yl9mcmVlICgoY2hhciAqKSByZWxvY2F0b3IgLSBSRUxPQ0FUT1JfU0laRU9GIChmb3J3YXJkKSk7 Cit9CisKKworZ3J1Yl9lcnJfdAorZ3J1Yl9yZWxvY2F0b3IzMl9ib290ICh2b2lkICpyZWxvY2F0 b3IsIGdydWJfdWludDMyX3QgZGVzdCwKKwkJICAgICAgIHN0cnVjdCBncnViX3JlbG9jYXRvcjMy X3N0YXRlIHN0YXRlKQoreworICBncnViX3NpemVfdCBzaXplOworICBjaGFyICpwbGF5Z3JvdW5k OworICB2b2lkICgqZW50cnkpICgpOworCisgIHBsYXlncm91bmQgPSAoY2hhciAqKSByZWxvY2F0 b3IgLSBSRUxPQ0FUT1JfU0laRU9GIChmb3J3YXJkKTsKKyAgc2l6ZSA9ICooZ3J1Yl9zaXplX3Qg KikgcGxheWdyb3VuZDsKKworICBpZiAoVUlOVF9UT19QVFIgKGRlc3QpID49IHJlbG9jYXRvcikK KyAgICB7CisgICAgICBpbnQgb3ZlcmhlYWQ7CisKKyAgICAgIG92ZXJoZWFkID0KKwlBTElHTl9V UCAoZGVzdCAtIFJFTE9DQVRPUl9TSVpFT0YgKGJhY2t3YXJkKSAtIFJFTE9DQVRPUl9BTElHTiwK KwkJICBSRUxPQ0FUT1JfQUxJR04pOworICAgICAgZ3J1Yl9yZWxvY2F0b3IzMl9iYWNrd2FyZF9k ZXN0ID0gZGVzdCAtIG92ZXJoZWFkOworICAgICAgZ3J1Yl9yZWxvY2F0b3IzMl9iYWNrd2FyZF9z cmMgPSBQVFJfVE9fVUlOVDY0IChyZWxvY2F0b3IgLSBvdmVyaGVhZCk7CisgICAgICBncnViX3Jl bG9jYXRvcjMyX2JhY2t3YXJkX3NpemUgPSBzaXplICsgb3ZlcmhlYWQ7CisKKyAgICAgIGdydWJf cmVsb2NhdG9yMzJfYmFja3dhcmRfZWF4ID0gc3RhdGUuZWF4OworICAgICAgZ3J1Yl9yZWxvY2F0 b3IzMl9iYWNrd2FyZF9lYnggPSBzdGF0ZS5lYng7CisgICAgICBncnViX3JlbG9jYXRvcjMyX2Jh Y2t3YXJkX2VjeCA9IHN0YXRlLmVjeDsKKyAgICAgIGdydWJfcmVsb2NhdG9yMzJfYmFja3dhcmRf ZWR4ID0gc3RhdGUuZWR4OworICAgICAgZ3J1Yl9yZWxvY2F0b3IzMl9iYWNrd2FyZF9laXAgPSBz dGF0ZS5laXA7CisgICAgICBncnViX3JlbG9jYXRvcjMyX2JhY2t3YXJkX2VzcCA9IHN0YXRlLmVz cDsKKworICAgICAgZ3J1Yl9tZW1tb3ZlIChyZWxvY2F0b3IgLSBvdmVyaGVhZCwKKwkJICAgICZn cnViX3JlbG9jYXRvcjMyX2JhY2t3YXJkX3N0YXJ0LAorCQkgICAgUkVMT0NBVE9SX1NJWkVPRiAo YmFja3dhcmQpKTsKKyAgICAgIGVudHJ5ID0gKHZvaWQgKCopKCkpIChyZWxvY2F0b3IgLSBvdmVy aGVhZCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IG92ZXJoZWFkOworCisgICAg ICBvdmVyaGVhZCA9IEFMSUdOX1VQIChkZXN0ICsgc2l6ZSwgUkVMT0NBVE9SX0FMSUdOKQorCSsg UkVMT0NBVE9SX1NJWkVPRiAoZm9yd2FyZCkgLSAoZGVzdCArIHNpemUpOworCisgICAgICBncnVi X3JlbG9jYXRvcjMyX2ZvcndhcmRfZGVzdCA9IGRlc3Q7CisgICAgICBncnViX3JlbG9jYXRvcjMy X2ZvcndhcmRfc3JjID0gUFRSX1RPX1VJTlQ2NCAocmVsb2NhdG9yKTsKKyAgICAgIGdydWJfcmVs b2NhdG9yMzJfZm9yd2FyZF9zaXplID0gc2l6ZSArIG92ZXJoZWFkOworCisgICAgICBncnViX3Jl bG9jYXRvcjMyX2ZvcndhcmRfZWF4ID0gc3RhdGUuZWF4OworICAgICAgZ3J1Yl9yZWxvY2F0b3Iz Ml9mb3J3YXJkX2VieCA9IHN0YXRlLmVieDsKKyAgICAgIGdydWJfcmVsb2NhdG9yMzJfZm9yd2Fy ZF9lY3ggPSBzdGF0ZS5lY3g7CisgICAgICBncnViX3JlbG9jYXRvcjMyX2ZvcndhcmRfZWR4ID0g c3RhdGUuZWR4OworICAgICAgZ3J1Yl9yZWxvY2F0b3IzMl9mb3J3YXJkX2VpcCA9IHN0YXRlLmVp cDsKKyAgICAgIGdydWJfcmVsb2NhdG9yMzJfZm9yd2FyZF9lc3AgPSBzdGF0ZS5lc3A7CisKKyAg ICAgIGdydWJfbWVtbW92ZSAocmVsb2NhdG9yICsgc2l6ZSArIG92ZXJoZWFkIC0gUkVMT0NBVE9S X1NJWkVPRiAoZm9yd2FyZCksCisJCSAgICAmZ3J1Yl9yZWxvY2F0b3IzMl9mb3J3YXJkX3N0YXJ0 LAorCQkgICAgUkVMT0NBVE9SX1NJWkVPRiAoZm9yd2FyZCkpOworICAgICAgZW50cnkgPQorCSh2 b2lkICgqKSgpKSAocmVsb2NhdG9yICsgc2l6ZSArIG92ZXJoZWFkIC0KKwkJICAgICAgUkVMT0NB VE9SX1NJWkVPRiAoZm9yd2FyZCkpOworICAgIH0KKyAgZW50cnkgKCk7CisKKyAgLyogTm90IHJl YWNoZWQuICAqLworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KZGlmZiAtLWdpdCBhL2xpYi9p Mzg2L3JlbG9jYXRvcl9hc20uUyBiL2xpYi9pMzg2L3JlbG9jYXRvcl9hc20uUwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDIyYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGli L2kzODYvcmVsb2NhdG9yX2FzbS5TCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogIEdSVUIgIC0t ICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVC LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNp bmNsdWRlIDxncnViL3N5bWJvbC5oPgorCisjaWZkZWYgQkFDS1dBUkQKKyNkZWZpbmUgUkVMT0NB VE9SX1ZBUklBQkxFKHgpIFZBUklBQkxFKGdydWJfcmVsb2NhdG9yMzJfYmFja3dhcmRfICMjIHgp CisjZWxzZQorI2RlZmluZSBSRUxPQ0FUT1JfVkFSSUFCTEUoeCkgVkFSSUFCTEUoZ3J1Yl9yZWxv Y2F0b3IzMl9mb3J3YXJkXyAjIyB4KQorI2VuZGlmCisJLnAyYWxpZ24JNAkvKiBmb3JjZSAxNi1i eXRlIGFsaWdubWVudCAqLworCitSRUxPQ0FUT1JfVkFSSUFCTEUoc3RhcnQpCisjaWZkZWYgQkFD S1dBUkQKK2Jhc2U6CisjZW5kaWYKKwljbGkKKworI2lmbmRlZiBfX3g4Nl82NF9fCisJLyogbW92 IGltbTMyLCAlZWF4ICovCisJLmJ5dGUJMHhiOAorUkVMT0NBVE9SX1ZBUklBQkxFKGRlc3QpCisJ LmxvbmcgMAorCW1vdiAlZWF4LCAlZWRpCisKKwkvKiBtb3YgaW1tMzIsICVlYXggKi8KKwkuYnl0 ZQkweGI4CitSRUxPQ0FUT1JfVkFSSUFCTEUoc3JjKQorCS5sb25nIDAKKwltb3YgJWVheCwgJWVz aQorCisJLyogbW92IGltbTMyLCAlZWN4ICovCisJLmJ5dGUJMHhiOQorUkVMT0NBVE9SX1ZBUklB QkxFKHNpemUpCisJLmxvbmcgMAorCW1vdiAlZWRpLCAlZWF4CisjaWZuZGVmIEJBQ0tXQVJECisJ YWRkICVlY3gsICVlYXgKKyNlbmRpZgorCWFkZCAkMHgzLCAlZWN4CisJc2hyICQyLCAlZWN4CisK KyNpZmRlZiBCQUNLV0FSRAorCS8qIEJhY2t3YXJkIG1vdnNsIGlzIGltcGxpY2l0bHkgb2ZmLWJ5 LWZvdXIuICBjb21wZW5zYXRlIHRoYXQuICAqLworCXN1YmwJJDQsCSVlc2kKKwlzdWJsCSQ0LAkl ZWRpCisKKwkvKiBCYWNrd2FyZCBjb3B5LiAgKi8KKwlzdGQKKwlhZGRsCSVlY3gsICVlc2kKKwlh ZGRsCSVlY3gsICVlZGkKKworCXJlcAorCW1vdnNsCisKKyNlbHNlCisJLyogRm9yd2FyZCBjb3B5 LiAgKi8KKwljbGQKKwlyZXAKKwltb3ZzbAorI2VuZGlmCisJLyogJWVheCBjb250YWlucyBub3cg b3VyIG5ldyBiYXNlLiAgKi8KKwltb3YgJWVheCwgJWVzaQorCWFkZCAkKGNvbnQwIC0gYmFzZSks ICVlYXgKKwlqbXAgKiVlYXgKK2NvbnQwOgorI2Vsc2UKKwl4b3JxICVyYXgsICVyYXgKKworCS8q IG1vdiBpbW0zMiwgJWVheCAqLworCS5ieXRlCTB4YjgKK1JFTE9DQVRPUl9WQVJJQUJMRShkZXN0 KQorCS5sb25nIDAKKwltb3YgJWVheCwgJWVkaQorCisJLyogbW92IGltbTY0LCAlcmF4ICovCisJ LmJ5dGUJMHg0OAorCS5ieXRlCTB4YjgKK1JFTE9DQVRPUl9WQVJJQUJMRShzcmMpCisJLmxvbmcg MCwgMAorCW1vdiAlcmF4LCAlcnNpCisKKwl4b3JxICVyY3gsICVyY3gKKwkvKiBtb3YgaW1tMzIs ICVlY3ggKi8KKwkuYnl0ZQkweGI5CitSRUxPQ0FUT1JfVkFSSUFCTEUoc2l6ZSkKKwkubG9uZyAw CisKKwltb3YgJXJkaSwgJXJheAorI2lmbmRlZiBCQUNLV0FSRAorCWFkZCAlcmN4LCAlcmF4Cisj ZW5kaWYKKwlhZGQgJDB4MywgJXJjeAorCXNociAkMiwgJXJjeAorCisjaWZkZWYgQkFDS1dBUkQK KwkvKiBCYWNrd2FyZCBtb3ZzbCBpcyBpbXBsaWNpdGx5IG9mZi1ieS1mb3VyLiAgY29tcGVuc2F0 ZSB0aGF0LiAgKi8KKwlzdWJxCSQ0LAklcnNpCisJc3VicQkkNCwJJXJkaQorCisJLyogQmFja3dh cmQgY29weS4gICovCisJc3RkCisJYWRkcQklcmN4LCAlcnNpCisJYWRkcQklcmN4LCAlcmRpCisK KwlyZXAKKwltb3ZzbAorCisjZWxzZQorCS8qIEZvcndhcmQgY29weS4gICovCisJY2xkCisJcmVw CisJbW92c2wKKyNlbmRpZgorCisJLyogJXJheCBjb250YWlucyBub3cgb3VyIG5ldyAnYmFzZScu ICAqLworCW1vdiAlcmF4LCAlcnNpCisjaWZkZWYgQVBQTEVfQ0MKKwlhZGQgJChjb250MCAtIGJh c2UpLCAlZWF4CisjZWxzZQorCWFkZCAkKGNvbnQwIC0gYmFzZSksICVyYXgKKyNlbmRpZgorCWpt cCAqJXJheAorY29udDA6CisjaWZkZWYgQVBQTEVfQ0MKKwlsZWEgKGNvbnQxIC0gYmFzZSkgKCVl c2ksIDEpLCAlZWF4CisJbW92ICVlYXgsIChqdW1wX3ZlY3RvciAtIGJhc2UpICglZXNpLCAxKQor CisJbGVhIChnZHQgLSBiYXNlKSAoJWVzaSwgMSksICVlYXgKKwltb3YgJWVheCwgKGdkdF9hZGRy IC0gYmFzZSkgKCVlc2ksIDEpCisKKwkvKiBTd2l0Y2ggdG8gY29tcGF0aWJpbGl0eSBtb2RlLiAq LworCisJbGdkdCAoZ2R0ZGVzYyAtIGJhc2UpICglZXNpLCAxKQorCisJLyogVXBkYXRlICVjcy4g VGhhbmtzIHRvIERhdmlkIE1pbGxlciBmb3IgcG9pbnRpbmcgdGhpcyBtaXN0YWtlIG91dC4gKi8K Kwlsam1wICooanVtcF92ZWN0b3IgLSBiYXNlKSAoJWVzaSwxKQorI2Vsc2UKKwlsZWEgKGNvbnQx IC0gYmFzZSkgKCVyc2ksIDEpLCAlcmF4CisJbW92ICVlYXgsIChqdW1wX3ZlY3RvciAtIGJhc2Up ICglcnNpLCAxKQorCisJbGVhIChnZHQgLSBiYXNlKSAoJXJzaSwgMSksICVyYXgKKwltb3YgJXJh eCwgKGdkdF9hZGRyIC0gYmFzZSkgKCVyc2ksIDEpCisKKwkvKiBTd2l0Y2ggdG8gY29tcGF0aWJp bGl0eSBtb2RlLiAqLworCisJbGdkdCAoZ2R0ZGVzYyAtIGJhc2UpICglcnNpLCAxKQorCisJLyog VXBkYXRlICVjcy4gVGhhbmtzIHRvIERhdmlkIE1pbGxlciBmb3IgcG9pbnRpbmcgdGhpcyBtaXN0 YWtlIG91dC4gKi8KKwlsam1wICooanVtcF92ZWN0b3IgLSBiYXNlKSAoJXJzaSwgMSkKKyNlbmRp ZgorCitjb250MToKKwkuY29kZTMyCisKKwkvKiBVcGRhdGUgb3RoZXIgcmVnaXN0ZXJzLiAqLwor CW1vdiAkMHgxOCwgJWVheAorCW1vdiAlZWF4LCAlZHMKKwltb3YgJWVheCwgJWVzCisJbW92ICVl YXgsICVmcworCW1vdiAlZWF4LCAlZ3MKKwltb3YgJWVheCwgJXNzCisKKwkvKiBEaXNhYmxlIHBh Z2luZy4gKi8KKwltb3YgJWNyMCwgJWVheAorCWFuZCAkMHg3ZmZmZmZmZiwgJWVheAorCW1vdiAl ZWF4LCAlY3IwCisKKwkvKiBEaXNhYmxlIGFtZDY0LiAqLworCW1vdiAkMHhjMDAwMDA4MCwgJWVj eAorCXJkbXNyCisJYW5kICQweGZmZmZmZWZmLCAlZWF4CisJd3Jtc3IKKworCS8qIFR1cm4gb2Zm IFBBRS4gKi8KKwltb3ZsICVjcjQsICVlYXgKKwlhbmQgJDB4ZmZmZmZmY2YsICVlYXgKKwltb3Yg JWVheCwgJWNyNAorCisJam1wIGNvbnQyCitjb250MjoKKyNlbmRpZgorCS5jb2RlMzIKKworCS8q IG1vdiBpbW0zMiwgJWVheCAqLworCS5ieXRlCTB4YjgKK1JFTE9DQVRPUl9WQVJJQUJMRSAoZXNw KQorCS5sb25nIDAKKworCW1vdmwgJWVheCwgJWVzcAorCisJLyogbW92IGltbTMyLCAlZWF4ICov CisJLmJ5dGUJMHhiOAorUkVMT0NBVE9SX1ZBUklBQkxFIChlYXgpCisJLmxvbmcgMAorCisJLyog bW92IGltbTMyLCAlZWJ4ICovCisJLmJ5dGUJMHhiYgorUkVMT0NBVE9SX1ZBUklBQkxFIChlYngp CisJLmxvbmcgMAorCisJLyogbW92IGltbTMyLCAlZWN4ICovCisJLmJ5dGUJMHhiOQorUkVMT0NB VE9SX1ZBUklBQkxFIChlY3gpCisJLmxvbmcgMAorCisJLyogbW92IGltbTMyLCAlZWR4ICovCisJ LmJ5dGUJMHhiYQorUkVMT0NBVE9SX1ZBUklBQkxFIChlZHgpCisJLmxvbmcgMAorCisJLyogQ2xl YXJlZCBkaXJlY3Rpb24gZmxhZyBpcyBvZiBubyBwcm9ibGVtIHdpdGggYW55IGN1cnJlbnQKKwkg ICBwYXlsb2FkIGFuZCBtYWtlcyB0aGlzIGltcGxlbWVudGF0aW9uIGVhc2llci4gICovCisJY2xk CisKKwkuYnl0ZSAweGVhCitSRUxPQ0FUT1JfVkFSSUFCTEUgKGVpcCkKKwkubG9uZyAwCisjaWZk ZWYgX194ODZfNjRfXworCS53b3JkIDB4MTAKKyNlbHNlCisJLndvcmQgMHgwOAorI2VuZGlmCisK KyNpZmRlZiBfX3g4Nl82NF9fCisJLyogR0RULiBDb3BpZWQgZnJvbSBsb2FkZXIvaTM4Ni9saW51 eC5jLiAqLworCS5wMmFsaWduIDQKK2dkdDoKKwkvKiBOVUxMLiAgKi8KKwkuYnl0ZSAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisKKwkvKiBSZXNlcnZlZC4g ICovCisJLmJ5dGUgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MAorCisJLyogQ29kZSBzZWdtZW50LiAgKi8KKwkuYnl0ZSAweEZGLCAweEZGLCAweDAwLCAweDAw LCAweDAwLCAweDlBLCAweENGLCAweDAwCisKKwkvKiBEYXRhIHNlZ21lbnQuICAqLworCS5ieXRl IDB4RkYsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4Q0YsIDB4MDAKKworZ2R0ZGVz YzoKKwkud29yZCAzMQorZ2R0X2FkZHI6CisJLyogRmlsbGVkIGJ5IHRoZSBjb2RlLiAqLworCS5x dWFkIDAKKworCS5wMmFsaWduIDQKK2p1bXBfdmVjdG9yOgorCS8qIEp1bXAgbG9jYXRpb24uIElz IGZpbGxlZCBieSB0aGUgY29kZSAqLworCS5sb25nIDAKKwkubG9uZyAweDEwCisjZW5kaWYKKwor I2lmbmRlZiBCQUNLV0FSRAorYmFzZToKKyNlbmRpZgorCitSRUxPQ0FUT1JfVkFSSUFCTEUoZW5k KQpkaWZmIC0tZ2l0IGEvbGliL2kzODYvcmVsb2NhdG9yX2JhY2t3YXJkLlMgYi9saWIvaTM4Ni9y ZWxvY2F0b3JfYmFja3dhcmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w NjkxMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2kzODYvcmVsb2NhdG9yX2JhY2t3YXJkLlMK QEAgLTAsMCArMSwyIEBACisjZGVmaW5lIEJBQ0tXQVJECisjaW5jbHVkZSAicmVsb2NhdG9yX2Fz bS5TIgo= --00504502ddc6146ec104703b982c--