Date: Fri, 16 Dec 2005 06:43:38 +0300 From: Alexei Mandrykine Message-ID: <13438936343.20051216064338@mail.ru> To: l4ka@lists.ira.uni-karlsruhe.de Subject: Compound string kernel fixes MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------F1501122EB4DE23" ------------F1501122EB4DE23 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello l4ka, There is some bug with sending compound strings into a simple string buffer. Following code describes problem: Receiver: L4_Clear(&MsgBuff); rcv_str = L4_StringItem (sizeof(Buffer), (void*) Buffer); L4_Append(&MsgBuff, rcv_str); L4_Accept( L4_StringItemsAcceptor, &MsgBuff ); Sender: L4_StringItem_t string[4]; *string = L4_StringItem ( 10, (void*) "First arg"); *string += L4_StringItem ( 7, (void*) "Second"); *string += L4_StringItem ( 6, (void*) "minix"); *string += L4_StringItem ( 5, (void*) "fake"); L4_Clear( &msg ); L4_Append( &msg, string ); L4_Load( &msg ); Reciever's MR registers with orginal kernel : TAG : [0x001b0200] -> [0x0000001b] Untyped 0 Typed 8 Receive [0]: 0x00002a00 Receive [1]: 0x0033a000 <- pointer to buffer which resides in a sender address space Receive [2]: 0x00000000 <- broken Receive [3]: 0x0033a00a Receive [4]: 0x00000000 <- broken Receive [5]: 0x0033a011 Receive [6]: 0x00000000 <- broken Receive [7]: 0x00309017 Receiver's MR registers of with patched kernel : TAG : [0x001b0200] -> [0x0000001b] Untyped 0 Typed 8 Receive [0]: 0x00002a00 Receive [1]: 0x00309000 <- pointer to real destination buffer Receive [2]: 0x00001e00 Receive [3]: 0x0030900a Receive [4]: 0x00001a00 Receive [5]: 0x00309011 Receive [6]: 0x00001400 Receive [7]: 0x00309017 I hope this fix would be useful for many people. -- Best regards, Alexei mailto:mandrookin@mail.ru ------------F1501122EB4DE23 Content-Type: text/plain; name="ipcx.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ipcx.cc" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogQ29weXJpZ2h0IChDKSAyMDAyLCAy MDA1LTIwMDQsICBLYXJsc3J1aGUgVW5pdmVyc2l0eQogKiAgICAgICAgICAgICAgICAKICogRmls ZSBwYXRoOiAgICAgYXBpL3Y0L2lwY3guY2MKICogRGVzY3JpcHRpb246ICAgRXh0ZW5kZWQgdHJh bnNmZXIgb2YgSVBDCiAqICAgICAgICAgICAgICAgIAogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAogKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogKiBTVUNIIERB TUFHRS4KICogICAgICAgICAgICAgICAgCiAqICRJZDogaXBjeC5jYyx2IDEuMTcuNC43IDIwMDUv MDYvMjQgMTQ6MjM6NDkgc3RvZXNzIEV4cCAkCiAqICAgICAgICAgICAgICAgIAogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCiNpbmNsdWRlIDxkZWJ1Zy5oPgojaW5jbHVkZSA8a2RiL3RyYWNlcG9pbnRzLmg+CiNpbmNs dWRlIElOQ19BUEkodGNiLmgpCiNpbmNsdWRlIElOQ19BUEkoaXBjLmgpCiNpbmNsdWRlIElOQ19B UEkoZnBhZ2UuaCkKI2luY2x1ZGUgSU5DX0FQSShzY2hlZHVsZS5oKQojaW5jbHVkZSBJTkNfR0xV RShtYXAuaCkKCiNkZWZpbmUgQ0hFQ0tfQlJfSURYKGlkeCkgaWYgKGlkeCA+IElQQ19OVU1fQlIp IGdvdG8gbWVzc2FnZV9vdmVyZmxvdwojZGVmaW5lIENIRUNLX01SX0lEWChpZHgsIHRvdGFsKSBp ZiAoaWR4ID4gdG90YWwpIGdvdG8gbWVzc2FnZV9vdmVyZmxvdwoKCkRFQ0xBUkVfVFJBQ0VQT0lO VChJUENfU1RSSU5HX0NPUFkpOwpERUNMQVJFX1RSQUNFUE9JTlQoSVBDX1NUUklOR19JVEVNKTsK REVDTEFSRV9UUkFDRVBPSU5UKElQQ19NQVBHUkFOVF9JVEVNKTsKREVDTEFSRV9UUkFDRVBPSU5U KElQQ19NRVNTQUdFX09WRVJGTE9XKTsKREVDTEFSRV9UUkFDRVBPSU5UKElQQ19FWFRfVFJBTlNG RVIpOwoKI2lmICFkZWZpbmVkKElQQ19TVFJJTkdfQ09QWSkKZXh0ZXJuICJDIiB2b2lkICogbWVt Y3B5ICh2b2lkICogZHN0LCBjb25zdCB2b2lkICogc3JjLCB3b3JkX3QgbGVuKTsKI2RlZmluZSBJ UENfU1RSSU5HX0NPUFkgbWVtY3B5CiNlbmRpZgoKd29yZF90IGlwY19jb3B5ICh0Y2JfdCAqIHNy YywgYWRkcl90IHNyY19hZGRyLAoJCSB0Y2JfdCAqIGRzdCwgYWRkcl90IGRzdF9hZGRyLCB3b3Jk X3QgbGVuKQp7CiAgICBUUkFDRVBPSU5UIChJUENfU1RSSU5HX0NPUFksCgkJcHJpbnRmICgiSVBD IHN0cmluZyBjb3B5OiAldCBAICVwIC0+ICV0IEAgJXAsIGxlbj0weCV4XG4iLAoJCQlzcmMsIHNy Y19hZGRyLCBkc3QsIGRzdF9hZGRyLCBsZW4pKTsKCiAgICBzcGFjZV90ICogc3JjX3NwYWNlID0g c3JjLT5nZXRfc3BhY2UgKCk7CiAgICBzcGFjZV90ICogZHN0X3NwYWNlID0gZHN0LT5nZXRfc3Bh Y2UgKCk7CgogICAgLy8gQ2hlY2sgbGltaXRzIG9mIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3Ry aW5nLgogICAgd29yZF90IHNyY19sZW4gPSBzcmNfc3BhY2UtPmdldF9jb3B5X2xpbWl0IChzcmNf YWRkciwgbGVuKTsKICAgIHdvcmRfdCBkc3RfbGVuID0gZHN0X3NwYWNlLT5nZXRfY29weV9saW1p dCAoZHN0X2FkZHIsIGxlbik7CgogICAgLy8gU3RyaW5nIG1pZ2h0IG5lZWQgdG8gYmUgY2xpcHBl ZC4KICAgIGlmIChzcmNfbGVuIDwgbGVuKSBsZW4gPSBzcmNfbGVuOwogICAgaWYgKGRzdF9sZW4g PCBsZW4pIGxlbiA9IGRzdF9sZW47CgogICAgLy8gRm9yIGludGVyLXNwYWNlIHN0cmluZyBjb3B5 IHdlIG5lZWQgdG8gdXNlIGEgY29weSBhcmVhLgogICAgaWYgKHNyY19zcGFjZSAhPSBkc3Rfc3Bh Y2UpCglzcmMtPmFkanVzdF9mb3JfY29weV9hcmVhIChkc3QsICZzcmNfYWRkciwgJmRzdF9hZGRy KTsKCiAgICBzcmMtPm1pc2MuaXBjX2NvcHkuY29weV9zdGFydF9zcmMgPQoJc3JjLT5taXNjLmlw Y19jb3B5LmNvcHlfZmF1bHQgPSBzcmNfYWRkcjsKICAgIHNyYy0+bWlzYy5pcGNfY29weS5jb3B5 X3N0YXJ0X2RzdCA9IGRzdF9hZGRyOwoKICAgIElQQ19TVFJJTkdfQ09QWSAoZHN0X2FkZHIsIHNy Y19hZGRyLCBsZW4pOwoKICAgIHNyYy0+bWlzYy5pcGNfY29weS5jb3B5X2xlbmd0aCArPSBsZW47 CgogICAgcmV0dXJuIGxlbjsKfQoKc3RhdGljIHZvaWQgY29weV9tcih0Y2JfdCAqIGRzdCwgdGNi X3QgKiBzcmMsIGludCBpbmRleCkKewogICAgQVNTRVJUKGluZGV4IDwgSVBDX05VTV9NUik7CiAg ICBkc3QtPnNldF9tcihpbmRleCwgc3JjLT5nZXRfbXIoaW5kZXgpKTsKfQoKbXNnX3RhZ190IGV4 dGVuZGVkX3RyYW5zZmVyKHRjYl90ICogc3JjLCB0Y2JfdCAqIGRzdCwgbXNnX3RhZ190IG1zZ3Rh ZykKewogICAgbXNnX2l0ZW1fdCBzcmNfaXRlbTsKICAgIGFjY2VwdG9yX3QgYWNjZXB0b3I7CiAg ICBpbnQgYnJfaWR4ID0gMTsKICAgIHdvcmRfdCB0b3RhbF9tcnMgPSBtc2d0YWcuZ2V0X3VudHlw ZWQoKSArIG1zZ3RhZy5nZXRfdHlwZWQoKTsKICAgIHdvcmRfdCB0b3RhbF9sZW4gPSAwOwogICAg Ym9vbCBhY2NlcHRfc3RyaW5nczsKCi8vICAgIEVOQUJMRV9UUkFDRVBPSU5UIChJUENfU1RSSU5H X0NPUFksIGZhbHNlKTsKLy8gICAgRU5BQkxFX1RSQUNFUE9JTlQgKElQQ19TVFJJTkdfSVRFTSwg ZmFsc2UpOwovLyAgICBFTkFCTEVfVFJBQ0VQT0lOVCAoSVBDX01FU1NBR0VfT1ZFUkZMT1csIGZh bHNlKTsKI3VuZGVmIFRSQUNFRgojZGVmaW5lIFRSQUNFRihhcmdzLi4uKQogICAgCiAgICBpZiAo dG90YWxfbXJzID4gSVBDX05VTV9NUikKICAgIHsKCXByaW50ZigibWVzc2FnZSBleGNlZWRzIE1S J3MgKHVudHlwZWQ9JWQsIHR5cGVkPSVkKVxuIiwgCgkgICAgbXNndGFnLmdldF91bnR5cGVkKCks IG1zZ3RhZy5nZXRfdHlwZWQoKSk7CgllbnRlcl9rZGVidWcoIm1lc3NhZ2UgZXhjZWVkcyBNUidz Iik7Cglnb3RvIG1lc3NhZ2Vfb3ZlcmZsb3c7CiAgICB9CgogICAgc3JjLT5zZXRfc3RhdGUgKHRo cmVhZF9zdGF0ZV90Ojpsb2NrZWRfcnVubmluZyk7CiAgICBkc3QtPnNldF9zdGF0ZSAodGhyZWFk X3N0YXRlX3Q6OmxvY2tlZF93YWl0aW5nKTsKCiAgICBzcmMtPnNldF9wYXJ0bmVyIChkc3QtPmdl dF9nbG9iYWxfaWQgKCkpOwogICAgc3JjLT5taXNjLmlwY19jb3B5LmNvcHlfbGVuZ3RoID0gMDsK CiAgICBhY2NlcHRvciA9IGRzdC0+Z2V0X2JyKDApOwogICAgCiAgICAvKiBkb2VzIHRoZSByZWNl aXZlciAoc3RpbGwpIGFjY2VwdHMgc3RyaW5ncz8gKi8KICAgIGFjY2VwdF9zdHJpbmdzID0gYWNj ZXB0b3IuYWNjZXB0X3N0cmluZ3MoKTsKCiAgICBUUkFDRVBPSU5UKElQQ19FWFRfVFJBTlNGRVIs CglwcmludGYoInRhZz0lcCwgdW50eXBlZDogJWQsIHR5cGVkOiAlZCwgYWNjZXB0b3I6ICV4XG4i LCAKCSAgIG1zZ3RhZy5yYXcsIG1zZ3RhZy5nZXRfdW50eXBlZCgpLCBtc2d0YWcuZ2V0X3R5cGVk KCksIGFjY2VwdG9yKSk7CgogICAgZm9yICh3b3JkX3Qgc3JjX2lkeCA9IG1zZ3RhZy5nZXRfdW50 eXBlZCgpICsgMTsgc3JjX2lkeCA8IHRvdGFsX21yczsgKQogICAgewoJc3JjX2l0ZW0gPSBzcmMt PmdldF9tcihzcmNfaWR4KTsKCglpZiAoc3JjX2l0ZW0uaXNfbWFwX2l0ZW0oKSB8fCBzcmNfaXRl bS5pc19ncmFudF9pdGVtKCkpCgl7CgkgICAgLyogaXMgdGhlIGRlc2NyaXB0b3IgYmV5b25kIHRo ZSB2YWxpZCByYW5nZT8gKi8KCSAgICBDSEVDS19NUl9JRFgoc3JjX2lkeCArIDEsIHRvdGFsX21y cyk7CgkgICAgCgkgICAgZnBhZ2VfdCBzbmRfZnBhZ2UsIHJjdl9mcGFnZTsKCSAgICBzbmRfZnBh Z2UucmF3ID0gc3JjLT5nZXRfbXIoc3JjX2lkeCArIDEpOwoKCSAgICBpZiAoc25kX2ZwYWdlLmlz X21lbXBhZ2UgKCkpCgkJcmN2X2ZwYWdlLnJhdyA9IGFjY2VwdG9yLmdldF9yY3Zfd2luZG93KCk7 CgkgICAgZWxzZSBpZiAoc25kX2ZwYWdlLmlzX2FyY2hwYWdlICgpKQoJCXJjdl9mcGFnZSA9IGFj Y2VwdG9yLmdldF9hcmNoX3NwZWNpZmljX3JjdndpbmRvdyAoZHN0KTsKCSAgICBlbHNlCgkJLy8g VW5rbm93biBmcGFnZSB0eXBlCgkJZ290byBtZXNzYWdlX292ZXJmbG93OwoKCgkgICAgVFJBQ0VQ T0lOVChJUENfTUFQR1JBTlRfSVRFTSwKCQlwcmludGYoIiVzIGl0ZW06IHNuZF9iYXNlPSVwLCBm cGFnZT0lcFxuIiwKCQkgICAgc3JjX2l0ZW0uaXNfbWFwX2l0ZW0oKSA/ICJtYXAiIDogImdyYW50 IiwKCQkgICAgc3JjX2l0ZW0uZ2V0X3NuZF9iYXNlKCksIHNuZF9mcGFnZS5yYXcpKTsKCSAgICAK CSAgICAvKiBkb2VzIHRoZSByZWNlaXZlciBhY2NlcHQgbWFwcGluZ3MgKi8KCSAgICBpZiAoRVhQ RUNUX0ZBTFNFKCByY3ZfZnBhZ2UuaXNfbmlsX2ZwYWdlKCkgKSkKCQlnb3RvIG1lc3NhZ2Vfb3Zl cmZsb3c7CgoJICAgIGNvcHlfbXIoZHN0LCBzcmMsIHNyY19pZHgrKyk7CgkgICAgY29weV9tcihk c3QsIHNyYywgc3JjX2lkeCsrKTsKCgkgICAgaWYgKHNuZF9mcGFnZS5pc19tZW1wYWdlICgpKQoJ CXNyYy0+Z2V0X3NwYWNlKCktPm1hcF9mcGFnZShzbmRfZnBhZ2UsIHNyY19pdGVtLmdldF9zbmRf YmFzZSgpLCAKCQkJCQkgICAgZHN0LT5nZXRfc3BhY2UoKSwgcmN2X2ZwYWdlLCBzcmNfaXRlbS5p c19ncmFudF9pdGVtKCkpOwoJICAgIGVsc2UgaWYgKHNuZF9mcGFnZS5pc19hcmNocGFnZSAoKSkK CQlhcmNoX21hcF9mcGFnZShzcmMsIHNuZF9mcGFnZSwgc3JjX2l0ZW0uZ2V0X3NuZF9iYXNlICgp LAoJCSAgICAgZHN0LCByY3ZfZnBhZ2UsIHNyY19pdGVtLmlzX2dyYW50X2l0ZW0gKCkpOwoJfQoJ ZWxzZSBpZiAoc3JjX2l0ZW0uaXNfc3RyaW5nX2l0ZW0oKSkKCXsKCSAgICAvKiAKCSAgICAgKiBD b3B5IHRoZSBNUiBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgdG8gbWFrZSBzdXJlIHRoZQoJICAgICAq IHJlY2VpdmVyIGNhbiBkZWFsIHdpdGggY3V0IG1lc3NhZ2Ugc2l0dWF0aW9ucy4KCSAgICAgKi8K CSAgICBjb3B5X21yIChkc3QsIHNyYywgc3JjX2lkeCk7CgkKCSAgICBpZiAoISBhY2NlcHRfc3Ry aW5ncykKCQlnb3RvIG1lc3NhZ2Vfb3ZlcmZsb3c7CgoJICAgIC8vIFdlIG1pZ2h0IGhhdmUgb3Zl cmZsb3cgb24gTVJzCgkgICAgQ0hFQ0tfTVJfSURYIChzcmNfaWR4ICsgc3JjX2l0ZW0uZ2V0X3N0 cmluZ19wdHJfY291bnQgKCksCgkJCSAgdG90YWxfbXJzKTsKCgkgICAgbXNnX2l0ZW1fdCBkc3Rf aXRlbTsKCSAgICB3b3JkX3Qgc3JjX2FkZHIsIHNyY19sZW4sIHNyY19wdHJpZHg7CgkgICAgd29y ZF90IGRzdF9hZGRyLCBkc3RfbGVuLCBkc3RfcHRyaWR4OwoKCSAgICBzcmNfYWRkciA9IHNyYy0+ Z2V0X21yIChzcmNfaWR4ICsgMSk7CgkgICAgc3JjX2xlbiAgPSBzcmNfaXRlbS5nZXRfc3RyaW5n X2xlbmd0aCAoKTsKCSAgICBzcmNfcHRyaWR4ID0gMTsKCgkgICAgLy8gQ2hlY2sgZm9yIG92ZXJm bG93IG9uIEJScy4gIGJyX2lkeCBpcyBhbHdheXMgZ3VhcmFudGVlZAoJICAgIC8vIHRvIGJlIGlu IHJhbmdlLgoJICAgIGRzdF9pdGVtID0gZHN0LT5nZXRfYnIgKGJyX2lkeCk7CgkgICAgQ0hFQ0tf QlJfSURYIChicl9pZHggKyBkc3RfaXRlbS5nZXRfc3RyaW5nX3B0cl9jb3VudCAoKSk7CgoJICAg IGRzdF9hZGRyID0gZHN0LT5nZXRfYnIgKGJyX2lkeCArIDEpOwoJICAgIGRzdF9sZW4gID0gZHN0 X2l0ZW0uZ2V0X3N0cmluZ19sZW5ndGggKCk7CgkgICAgZHN0X3B0cmlkeCA9IDE7CgoJICAgIFRS QUNFUE9JTlQgKElQQ19TVFJJTkdfSVRFTSwKCQkJcHJpbnRmICgiSVBDIHN0cmluZyBpdGVtOiAg c3JjX2l0ZW09JXAgIGRzdF9pdGVtPSVwXG4iCgkJCQkiICBzcmM6IHN1YnN0cmluZ3M9JWQgKGlk eD0lZCkgIGxlbj0lcCAlc1xuIgoJCQkJIiAgZHN0OiBzdWJzdHJpbmdzPSVkIChpZHg9JWQpICBs ZW49JXAgJXNcbiIsCgkJCQlzcmNfaXRlbS5yYXcsIGRzdF9pdGVtLnJhdywKCQkJCXNyY19pdGVt LmdldF9zdHJpbmdfcHRyX2NvdW50ICgpLAoJCQkJc3JjX3B0cmlkeCwgc3JjX2xlbiwKCQkJCXNy Y19pdGVtLmlzX3N0cmluZ19jb21wb3VuZCAoKSA/CQoJCQkJImNvbXBvdW5kIiA6ICIiLAoJCQkJ ZHN0X2l0ZW0uZ2V0X3N0cmluZ19wdHJfY291bnQgKCksCgkJCQlkc3RfcHRyaWR4LCBkc3RfbGVu LAoJCQkJZHN0X2l0ZW0uaXNfc3RyaW5nX2NvbXBvdW5kICgpID8KCQkJCSJjb21wb3VuZCIgOiAi IikpOwoKCSAgICAvLyBTYW5pdHkgY2hlY2tpbmcKCSAgICBpZiAoISBkc3RfaXRlbS5pc19zdHJp bmdfaXRlbSAoKSkKCQlnb3RvIG1lc3NhZ2Vfb3ZlcmZsb3c7CgoJICAgIC8vIENoZWNrIGlmIHRo ZXJlIGFyZSBtb3JlIHJlY2VpdmUgYnVmZmVycyBhZnRlciB0aGlzIG9uZQoJICAgIGFjY2VwdF9z dHJpbmdzID0gZHN0X2l0ZW0ubW9yZV9zdHJpbmdzICgpOwoKCSAgICBib29sIGVuZF9vZl9zZW5k X3N0cmluZyA9IGZhbHNlOwoKCSAgICB3aGlsZSAoISBlbmRfb2Zfc2VuZF9zdHJpbmcpCgkgICAg ewoJCVRSQUNFUE9JTlQgKElQQ19TVFJJTkdfSVRFTSwKCQkJICAgIHByaW50ZiAoIiAgc3JjOiBh ZGRyPSVwIGxlbj0lcCAoaWR4PSVkKVxuIgoJCQkJICAgICIgIGRzdDogYWRkcj0lcCBsZW49JXAg KGlkeD0lZClcbiIsCgkJCQkgICAgc3JjX2FkZHIsIHNyY19sZW4sIHNyY19wdHJpZHgsCgkJCQkg ICAgZHN0X2FkZHIsIGRzdF9sZW4sIGRzdF9wdHJpZHgpKTsKCgkJCiNpZiAwCS8vIHBhdGNoZWQg YnkgYWxtYW4gCgkJY29weV9tciAoZHN0LCBzcmMsIHNyY19pZHggKyBzcmNfcHRyaWR4KTsKI2Vs c2UKCQlkc3QtPnNldF9tciggc3JjX2lkeCArIHNyY19wdHJpZHgsIGRzdF9hZGRyICk7CiNlbmRp ZgoKCQl3b3JkX3QgY29weV9sZW5ndGggPSBkc3RfbGVuIDwgc3JjX2xlbiA/IGRzdF9sZW4gOiBz cmNfbGVuOwoJCXdvcmRfdCBjcHlfbGVuID0gaXBjX2NvcHkgKHNyYywgKGFkZHJfdCkgc3JjX2Fk ZHIsCgkJCQkJICAgZHN0LCAoYWRkcl90KSBkc3RfYWRkciwKCQkJCQkgICBjb3B5X2xlbmd0aCk7 CgoJCXRvdGFsX2xlbiArPSBjcHlfbGVuOwoKCQkvLyBDb3B5IG9wZXJhdGlvbiBtaWdodCBoYXZl IGJlZW4gY2xpcHBlZC4KCQlpZiAoY3B5X2xlbiA8IGNvcHlfbGVuZ3RoKQoJCSAgICBnb3RvIG1l c3NhZ2Vfb3ZlcmZsb3c7CgoJCXNyY19sZW4gIC09IGNweV9sZW47CgkJZHN0X2xlbiAgLT0gY3B5 X2xlbjsKCQlzcmNfYWRkciArPSBjcHlfbGVuOwoJCWRzdF9hZGRyICs9IGNweV9sZW47CgoJCWlm IChzcmNfbGVuID09IDApCgkJewoJCSAgICAvLyBDdXJyZW50IHBhcnQgb2Ygc2VuZCBzdHJpbmcg ZXhoYXVzdGVkLiAgQ2hlY2sKCQkgICAgLy8gaWYgdGhlcmUgYXJlIG1vcmUgc3Vic3RyaW5ncyBv ciBjb21wdW5kIHN0cmluZ3MKCQkgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2VuZCBzdHJpbmcuCgoJ CSAgICBpZiAoc3JjX3B0cmlkeCA8IHNyY19pdGVtLmdldF9zdHJpbmdfcHRyX2NvdW50ICgpKQoJ CSAgICB7CgkJCS8vIE1vcmUgc3Vic3RyaW5ncyB0byBzZW5kCgkJCXNyY19wdHJpZHgrKzsKCQkJ c3JjX2FkZHIgPSBzcmMtPmdldF9tciAoc3JjX2lkeCArIHNyY19wdHJpZHgpOwoJCQlzcmNfbGVu ICA9IHNyY19pdGVtLmdldF9zdHJpbmdfbGVuZ3RoICgpOwoJCSAgICB9CgkJICAgIGVsc2UgaWYg KHNyY19pdGVtLmlzX3N0cmluZ19jb21wb3VuZCAoKSkKCQkgICAgewoJCQkvLyBTZW5kIHN0cmlu ZyBpcyBjb21wdW5kCgkJCXNyY19pZHggKz0gc3JjX3B0cmlkeCArIDE7CgkJCXNyY19wdHJpZHgg PSAxOwoJCQlDSEVDS19NUl9JRFggKHNyY19pZHggKyAxLCB0b3RhbF9tcnMpOwoKCQkJc3JjX2l0 ZW0gPSBzcmMtPmdldF9tciAoc3JjX2lkeCk7CgkJCWNvcHlfbXIgKGRzdCwgc3JjLCBzcmNfaWR4 KTsJLy8gcGF0Y2hlZCBieSBhbG1hbiAKCQkJc3JjX2FkZHIgPSBzcmMtPmdldF9tciAoc3JjX2lk eCArIHNyY19wdHJpZHgpOwoJCQlzcmNfbGVuICA9IHNyY19pdGVtLmdldF9zdHJpbmdfbGVuZ3Ro ICgpOwoKCQkJQ0hFQ0tfTVJfSURYIChzcmNfaWR4ICsKCQkJCSAgICAgIHNyY19pdGVtLmdldF9z dHJpbmdfcHRyX2NvdW50ICgpLAoJCQkJICAgICAgdG90YWxfbXJzKTsKCgkJCVRSQUNFUE9JTlQg KElQQ19TVFJJTkdfSVRFTSwKCQkJCSAgICBwcmludGYgKCIgIHNyYzogc3Vic3RyaW5ncz0lZCAo aWR4PSVkKSIKCQkJCQkgICAgIiAgbGVuPSVwICVzXG4iLAoJCQkJCSAgICBzcmNfaXRlbS5nZXRf c3RyaW5nX3B0cl9jb3VudCAoKSwKCQkJCQkgICAgc3JjX3B0cmlkeCwgc3JjX2xlbiwKCQkJCQkg ICAgc3JjX2l0ZW0uaXNfc3RyaW5nX2NvbXBvdW5kICgpID8KCQkJCQkgICAgImNvbXBvdW5kIiA6 ICIiKSk7CgkJICAgIH0KCQkgICAgZWxzZQoJCSAgICB7CgkJCS8vIEVuZCBvZiBzZW5kIHN0cmlu ZwoJCQllbmRfb2Zfc2VuZF9zdHJpbmcgPSB0cnVlOwoJCQlzcmNfaWR4ICs9IHNyY19wdHJpZHgg KyAxOwoJCSAgICB9CgkJfQoKCQlpZiAoZW5kX29mX3NlbmRfc3RyaW5nKQoJCXsKCQkgICAgLy8g Tm8gbW9yZSBkYXRhIGluIHRoZSBjdXJyZW50IHNlbmQgc3RyaW5nLiAgU2tpcAoJCSAgICAvLyBw YXN0IHRoZSBjdXJyZW50IHJlY2VpdmUgYnVmZmVyLgoKCQkgICAgVFJBQ0VGICgiU2tpcCByZWNl aXZlIGJ1ZmZlclxuIik7CgkJICAgIGJvb2wgY29tcG91bmQ7CgkJICAgIGRvIHsKCQkJY29tcG91 bmQgPSBkc3RfaXRlbS5pc19zdHJpbmdfY29tcG91bmQgKCk7CgkJCVRSQUNFRiAoImNvbXB1bmQ9 JWQgIG1vcmU9JWRcbiIsCgkJCQlkc3RfaXRlbS5pc19zdHJpbmdfY29tcG91bmQgKCksCgkJCQlk c3RfaXRlbS5tb3JlX3N0cmluZ3MgKCkpOwoKCQkJLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9mIG5l eHQgc3RyaW5nIGl0ZW0KCQkJYnJfaWR4ICs9IGRzdF9pdGVtLmdldF9zdHJpbmdfcHRyX2NvdW50 ICgpICsgMTsKCgkJCWlmIChicl9pZHggPj0gSVBDX05VTV9CUikKCQkJewoJCQkgICAgLy8gQlIg cmVnaXN0ZXIgb3ZlcmZsb3cKCQkJICAgIFRSQUNFRiAoIkxhc3QgcmVjZWl2ZSBidWZmZXJcbiIp OwoJCQkgICAgYWNjZXB0X3N0cmluZ3MgPSBmYWxzZTsKCQkJICAgIGJyZWFrOwoJCQl9CgoJCQlk c3RfaXRlbS5yYXcgPSBkc3QtPmdldF9iciAoYnJfaWR4KTsKCQkgICAgfSB3aGlsZSAoY29tcG91 bmQpOwoJCX0KCQllbHNlCgkJewoJCSAgICAvLyBNb3JlIGRhdGEgaW4gc2VuZCBzdHJpbmcuICBD aGVjayBpZiB3ZSBoYXZlCgkJICAgIC8vIHJvb20gaW4gdGhlIHJlY2VpdmUgYnVmZmVycy4KCgkJ ICAgIGlmIChkc3RfbGVuID09IDApCgkJICAgIHsKCQkJaWYgKGRzdF9wdHJpZHggPCBkc3RfaXRl bS5nZXRfc3RyaW5nX3B0cl9jb3VudCAoKSkKCQkJewoJCQkgICAgLy8gTW9yZSBzdWJzdHJpbmdz IGluIHJlY2VpdmUgYnVmZmVyCgkJCSAgICBkc3RfcHRyaWR4Kys7CgkJCSAgICBkc3RfYWRkciA9 IGRzdC0+Z2V0X2JyIChicl9pZHggKyBkc3RfcHRyaWR4KTsKCQkJICAgIGRzdF9sZW4gID0gZHN0 X2l0ZW0uZ2V0X3N0cmluZ19sZW5ndGggKCk7CgkJCX0KCQkJZWxzZSBpZiAoZHN0X2l0ZW0uaXNf c3RyaW5nX2NvbXBvdW5kICgpKQoJCQl7CgkJCSAgICAvLyBSZWNlaXZlIGJ1ZmZlciBpcyBjb21w dW5kCgkJCSAgICBicl9pZHggKz0gZHN0X3B0cmlkeCArIDE7CgkJCSAgICBkc3RfcHRyaWR4ID0g MTsKCQkJICAgIENIRUNLX0JSX0lEWCAoYnJfaWR4ICsgMSk7CgoJCQkgICAgZHN0X2l0ZW0gPSBk c3QtPmdldF9iciAoYnJfaWR4KTsKCQkJICAgIGRzdF9hZGRyID0gZHN0LT5nZXRfYnIgKGJyX2lk eCArIGRzdF9wdHJpZHgpOwoJCQkgICAgZHN0X2xlbiAgPSBkc3RfaXRlbS5nZXRfc3RyaW5nX2xl bmd0aCAoKTsKCgkJCSAgICBDSEVDS19CUl9JRFggKGJyX2lkeCArCgkJCQkJICBkc3RfaXRlbS5n ZXRfc3RyaW5nX3B0cl9jb3VudCAoKSk7CgoJCQkgICAgVFJBQ0VQT0lOVCAoCgkJCQlJUENfU1RS SU5HX0lURU0sCgkJCQlwcmludGYgKCIgIGRzdDogc3Vic3RyaW5ncz0lZCAoaWR4PSVkKSIKCQkJ CQkiICBsZW49JXAgJXNcbiIsCgkJCQkJZHN0X2l0ZW0uZ2V0X3N0cmluZ19wdHJfY291bnQgKCks CgkJCQkJZHN0X3B0cmlkeCwgc3JjX2xlbiwKCQkJCQlkc3RfaXRlbS5pc19zdHJpbmdfY29tcG91 bmQgKCkgPwoJCQkJCSJjb21wb3VuZCIgOiAiIikpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkgICAg Ly8gTm8gbW9yZSByZWNlaXZlIGJ1ZmZlcnMKCQkJICAgIFRSQUNFRiAoIk5vIG1vcmUgcmVjZWl2 ZSBidWZmZXJzXG4iKTsKCQkJICAgIGdvdG8gbWVzc2FnZV9vdmVyZmxvdzsKCQkJfQoJCSAgICB9 CgkJfQoKCSAgICB9IC8vIHdoaWxlICghIGVuZF9vZl9zZW5kX3N0cmluZykKCX0KICAgICAgIAll bHNlIAoJewoJICAgIFRSQUNFRigidW5rbm93biBpdGVtIHR5cGVcbiIpOwoJICAgIGdvdG8gbWVz c2FnZV9vdmVyZmxvdzsKCX0KICAgIH0KCiAgICAvLyBSZWxlYXNlIGNvcHkgYXJlYQogICAgc3Jj LT5yZWxlYXNlX2NvcHlfYXJlYSAoKTsKCiAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgWEZFUiB0 aW1lb3V0cy4KICAgIGdldF9jdXJyZW50X3NjaGVkdWxlciAoKS0+Y2FuY2VsX3RpbWVvdXQgKHNy Yyk7CiAgICBzcmMtPmZsYWdzIC09IHRjYl90OjpoYXNfeGZlcl90aW1lb3V0OwogICAgcmV0dXJu IG1zZ3RhZzsKCm1lc3NhZ2Vfb3ZlcmZsb3c6CgogICAgLy8gUmVsZWFzZSBjb3B5IGFyZWEKICAg IHNyYy0+cmVsZWFzZV9jb3B5X2FyZWEgKCk7CgogICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIFhG RVIgdGltZW91dHMuCiAgICBnZXRfY3VycmVudF9zY2hlZHVsZXIgKCktPmNhbmNlbF90aW1lb3V0 IChzcmMpOwoKICAgIFRSQUNFUE9JTlQgKElQQ19NRVNTQUdFX09WRVJGTE9XLAoJCXByaW50Zigi SVBDIG1lc3NhZ2Ugb3ZlcmZsb3cgKCV0LT4ldCksIGxlbj0weCV4XG4iLAoJCSAgICAgICBzcmMs IGRzdCwgdG90YWxfbGVuKSk7CgogICAgLy8gUmVwb3J0IG1lc3NhZ2Ugb3ZlcmZsb3cgZXJyb3IK ICAgIGRzdC0+c2V0X2Vycm9yX2NvZGUgKElQQ19SQ1ZfRVJST1IgKEVSUl9JUENfTVNHX09WRVJG TE9XICh0b3RhbF9sZW4pKSk7CiAgICBzcmMtPnNldF9lcnJvcl9jb2RlIChJUENfU05EX0VSUk9S IChFUlJfSVBDX01TR19PVkVSRkxPVyAodG90YWxfbGVuKSkpOwogICAgbXNndGFnLnNldF9lcnJv cigpOwogICAgcmV0dXJuIG1zZ3RhZzsKfQo= ------------F1501122EB4DE23--