From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17408 invoked by alias); 30 Apr 2009 23:18:44 -0000 Received: (qmail 17389 invoked by uid 22791); 30 Apr 2009 23:18:40 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_102,J_CHICKENPOX_37,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 30 Apr 2009 23:18:34 +0000 Received: from wpaz9.hot.corp.google.com (wpaz9.hot.corp.google.com [172.24.198.73]) by smtp-out.google.com with ESMTP id n3UNITf7019073 for ; Thu, 30 Apr 2009 16:18:30 -0700 Received: from qyk4 (qyk4.prod.google.com [10.241.83.132]) by wpaz9.hot.corp.google.com with ESMTP id n3UNIRJo000766 for ; Thu, 30 Apr 2009 16:18:28 -0700 Received: by qyk4 with SMTP id 4so2779839qyk.20 for ; Thu, 30 Apr 2009 16:18:26 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.81.66 with SMTP id w2mr1930414qck.12.1241133506727; Thu, 30 Apr 2009 16:18:26 -0700 (PDT) In-Reply-To: <8ac60eac0904301211x245c8b7cp546042d832eb1fe@mail.gmail.com> References: <8ac60eac0904201019g7ba8056bx5e84e6bfdf5935d8@mail.gmail.com> <20090422172517.GA17235@caradoc.them.org> <8ac60eac0904221810x24763ecaj4a888927b766e7f7@mail.gmail.com> <8ac60eac0904230001w1afd9179wcb76e1cfd7f3f386@mail.gmail.com> <8ac60eac0904291330m78b43c47p1cc9b8379e31e923@mail.gmail.com> <20090430185551.GB10734@adacore.com> <8ac60eac0904301211x245c8b7cp546042d832eb1fe@mail.gmail.com> Date: Thu, 30 Apr 2009 23:18:00 -0000 Message-ID: <8ac60eac0904301618j61051e9du38b34afbc7ed64a3@mail.gmail.com> Subject: Re: [patch][rfc] Allow GDB to search for the right libthread_db.so.1 From: Paul Pluzhnikov To: Joel Brobecker Cc: Hui Zhu , tromey@redhat.com, Thiago Jung Bauermann , gdb-patches ml , Eli Zaretskii Content-Type: multipart/mixed; boundary=00163646d8e6c990210468cde9be X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-04/txt/msg00830.txt.bz2 --00163646d8e6c990210468cde9be Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2294 On Thu, Apr 30, 2009 at 12:11 PM, Paul Pluzhnikov wrote: > On Thu, Apr 30, 2009 at 11:55 AM, Joel Brobecker = wrote: > >>> 1. If libthread_db_search_path is set, use it *before* trying to load >>> =A0 =A0libthread_db from the same directory where libpthread was loaded= in the >>> =A0 =A0inferior. >> >> From my naive perspective (never really had a need for this feature), >> it seems better to check the path before checking the path that was >> used by the inferior. =A0Otherwise, if the local host has a library >> at the same location but that's different from the library used >> by the inferior, we wouldn't be able to force the debugger to use >> a different library, would we? > > Assume inferior is using remote:/a/b/c/libpthread.so.0. Actually, in case of remote debugging gdb will not use libthread_db at all (gdbserver uses it). > I'll invert the order of search, get rid of symbol lookup, and send an > updated patch shortly. Attached. Note that documentation changed slightly to reflect the new search order. Tested on Linux/x86_64, no regressions. Also tested by running with several incompatible versions of libpthread. Thanks, --=20 Paul Pluzhnikov 2009-04-30 Paul Pluzhnikov * NEWS: Mention set/show libthread-db-search-path. * gdb_thread_db.h (LIBTHREAD_DB_SEARCH_PATH): New define. (LIBTHREAD_DB_SO): Moved from linux-thread-db.c * linux-thread-db.c (libthread_db_search_path): New setting. (thread_db_handle): New variable (replaces using_thread_db). (try_thread_db_load_1): New function. (try_thread_db_load, thread_db_load_search): Likewise. (dladdr_to_soname): Likewise. (thread_db_load): Iterate over possibly multiple libthread_db's. (check_for_thread_db): Attempt to load new libthread_db. (thread_db_detach, thread_db_wait): Unload libthread_db. (thread_db_mourn_inferior): Likewise. (_initialize_thread_db): Add new libthread-db-search-path option. Defer loading of libthread_db to check_for_thread_db. * solib.c (libpthread_name_p): New function. (libpthread_solib_p): Call it. * solib.h (libpthread_name_p): New prototype. doc/ChangeLog 2009-04-30 Paul Pluzhnikov * gdb.texinfo (Threads): Document libthread-db-search-path. --00163646d8e6c990210468cde9be Content-Type: text/plain; charset=US-ASCII; name="gdb-thread-db.20090430.txt" Content-Disposition: attachment; filename="gdb-thread-db.20090430.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fu62l4km0 Content-length: 29764 SW5kZXg6IE5FV1MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjMwOApkaWZmIC11IC1wIC11IC1yMS4zMDggTkVXUwotLS0gTkVXUwkyMCBB cHIgMjAwOSAyMToxMTowNSAtMDAwMAkxLjMwOAorKysgTkVXUwkzMCBBcHIg MjAwOSAyMjowODozNSAtMDAwMApAQCAtMjg4LDYgKzI4OCwxMSBAQCBzaG93 IHRjcCBjb25uZWN0LXRpbWVvdXQKICAgd2l0aCBhIHNwZWNpZmllZCB0aW1l b3V0IHBlcmlvZDsgdGhpcyBpcyB1c2VmdWwgaWYgdGhlIHN0dWIgaXMgbGF1 bmNoZWQKICAgaW4gcGFyYWxsZWwgd2l0aCBHREIgYnV0IG1heSBub3QgYmUg cmVhZHkgdG8gYWNjZXB0IGNvbm5lY3Rpb25zIGltbWVkaWF0ZWx5LgogCitz ZXQgbGlidGhyZWFkLWRiLXNlYXJjaC1wYXRoCitzaG93IGxpYnRocmVhZC1k Yi1zZWFyY2gtcGF0aAorICBDb250cm9sIGxpc3Qgb2YgZGlyZWN0b3JpZXMg d2hpY2ggR0RCIHdpbGwgc2VhcmNoIGZvciBhcHByb3ByaWF0ZQorICBsaWJ0 aHJlYWRfZGIuCisKICogTmV3IG5hdGl2ZSBjb25maWd1cmF0aW9ucwogCiB4 ODYveDg2XzY0IERhcndpbgkJaVszNDU2N104Ni0qLWRhcndpbioKSW5kZXg6 IGdkYl90aHJlYWRfZGIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYl90aHJlYWRfZGIuaCx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC11IC1yMS4xMiBnZGJf dGhyZWFkX2RiLmgKLS0tIGdkYl90aHJlYWRfZGIuaAkxOCBNYXIgMjAwOSAw ODo1MToxMSAtMDAwMAkxLjEyCisrKyBnZGJfdGhyZWFkX2RiLmgJMzAgQXBy IDIwMDkgMjI6MDg6MzUgLTAwMDAKQEAgLTEsNSArMSwxNCBAQAogI2lmZGVm IEhBVkVfVEhSRUFEX0RCX0gKICNpbmNsdWRlIDx0aHJlYWRfZGIuaD4KKwor I2lmbmRlZiBMSUJUSFJFQURfREJfU08KKyNkZWZpbmUgTElCVEhSRUFEX0RC X1NPICJsaWJ0aHJlYWRfZGIuc28uMSIKKyNlbmRpZgorCisjaWZuZGVmIExJ QlRIUkVBRF9EQl9TRUFSQ0hfUEFUSAorI2RlZmluZSBMSUJUSFJFQURfREJf U0VBUkNIX1BBVEggIiIKKyNlbmRpZgorCiAjZWxzZQogCiAvKiBDb3B5cmln aHQgKEMpIDE5OTksIDIwMDAsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkluZGV4OiBsaW51eC10aHJlYWQtZGIu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL2xpbnV4LXRocmVhZC1kYi5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjU0CmRpZmYgLXUgLXAgLXUgLXIxLjU0IGxpbnV4LXRocmVhZC1kYi5j Ci0tLSBsaW51eC10aHJlYWQtZGIuYwkyNyBGZWIgMjAwOSAyMDozNDo0MSAt MDAwMAkxLjU0CisrKyBsaW51eC10aHJlYWQtZGIuYwkzMCBBcHIgMjAwOSAy MjowODozNSAtMDAwMApAQCAtMjYsMTMgKzI2LDE2IEBACiAjaW5jbHVkZSAi Z2RiX3RocmVhZF9kYi5oIgogCiAjaW5jbHVkZSAiYmZkLmgiCisjaW5jbHVk ZSAiY29tbWFuZC5oIgogI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNs dWRlICJnZGJjbWQuaCIKICNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKICNpbmNs dWRlICJpbmZlcmlvci5oIgogI2luY2x1ZGUgInN5bWZpbGUuaCIKICNpbmNs dWRlICJvYmpmaWxlcy5oIgogI2luY2x1ZGUgInRhcmdldC5oIgogI2luY2x1 ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAic29saWIuaCIKICNpbmNsdWRl ICJzb2xpYi1zdnI0LmgiCiAjaW5jbHVkZSAiZ2RiY29yZS5oIgogI2luY2x1 ZGUgIm9ic2VydmVyLmgiCkBAIC00NCwxMCArNDcsNiBAQAogI2luY2x1ZGUg PGdudS9saWJjLXZlcnNpb24uaD4KICNlbmRpZgogCi0jaWZuZGVmIExJQlRI UkVBRF9EQl9TTwotI2RlZmluZSBMSUJUSFJFQURfREJfU08gImxpYnRocmVh ZF9kYi5zby4xIgotI2VuZGlmCi0KIC8qIEdOVS9MaW51eCBsaWJ0aHJlYWRf ZGIgc3VwcG9ydC4KIAogICAgbGlidGhyZWFkX2RiIGlzIGEgbGlicmFyeSwg cHJvdmlkZWQgYWxvbmcgd2l0aCBsaWJwdGhyZWFkLnNvLCB3aGljaApAQCAt NzQsMTQgKzczLDE3IEBACiAgICBvZiB0aGUgcHRpZF90IHByZXZlbnRzIHRo cmVhZCBJRHMgY2hhbmdpbmcgd2hlbiBsaWJwdGhyZWFkIGlzCiAgICBsb2Fk ZWQgb3IgdW5sb2FkZWQuICAqLwogCitzdGF0aWMgY2hhciAqbGlidGhyZWFk X2RiX3NlYXJjaF9wYXRoOworCiAvKiBJZiB3ZSdyZSBydW5uaW5nIG9uIEdO VS9MaW51eCwgd2UgbXVzdCBleHBsaWNpdGx5IGF0dGFjaCB0byBhbnkgbmV3 CiAgICB0aHJlYWRzLiAgKi8KIAogLyogVGhpcyBtb2R1bGUncyB0YXJnZXQg dmVjdG9yLiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyB0aHJlYWRf ZGJfb3BzOwogCi0vKiBOb24temVybyBpZiB3ZSdyZSB1c2luZyB0aGlzIG1v ZHVsZSdzIHRhcmdldCB2ZWN0b3IuICAqLwotc3RhdGljIGludCB1c2luZ190 aHJlYWRfZGI7CisvKiBIYW5kbGUgZnJvbSBkbG9wZW4gZm9yIGxpYnRocmVh ZF9kYi5zby4gIE5vdCBOVUxMIGlmIHdlJ3JlIHVzaW5nIHRoaXMKKyAgIG1v ZHVsZSdzIHRhcmdldCB2ZWN0b3IuICAqLworc3RhdGljIHZvaWQgKnRocmVh ZF9kYl9oYW5kbGU7CiAKIC8qIE5vbi16ZXJvIGlmIHdlIGhhdmUgZGV0ZXJt aW5lZCB0aGUgc2lnbmFscyB1c2VkIGJ5IHRoZSB0aHJlYWRzCiAgICBsaWJy YXJ5LiAgKi8KQEAgLTM0NCw3ICszNDYsNyBAQCB0aHJlYWRfZGJfYXR0YWNo X2x3cCAocHRpZF90IHB0aWQpCiAgIHRkX3RocmluZm9fdCB0aTsKICAgdGRf ZXJyX2UgZXJyOwogCi0gIGlmICghdXNpbmdfdGhyZWFkX2RiKQorICBpZiAo dGhyZWFkX2RiX2hhbmRsZSA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCiAg IC8qIFRoaXMgcHRpZCBjb21lcyBmcm9tIGxpbnV4LW5hdC5jLCB3aGljaCBz aG91bGQgYWx3YXlzIGZpbGwgaW4gdGhlCkBAIC0zODUsNzEgKzM4Nyw2IEBA IHZlcmJvc2VfZGxzeW0gKHZvaWQgKmhhbmRsZSwgY29uc3QgY2hhciAKICAg cmV0dXJuIHN5bTsKIH0KIAotc3RhdGljIGludAotdGhyZWFkX2RiX2xvYWQg KHZvaWQpCi17Ci0gIHZvaWQgKmhhbmRsZTsKLSAgdGRfZXJyX2UgZXJyOwot Ci0gIGhhbmRsZSA9IGRsb3BlbiAoTElCVEhSRUFEX0RCX1NPLCBSVExEX05P Vyk7Ci0gIGlmIChoYW5kbGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBmcHJp bnRmX2ZpbHRlcmVkIChnZGJfc3RkZXJyLCAiXG5cbmRsb3BlbiBmYWlsZWQg b24gJyVzJyAtICVzXG4iLAotCQkJTElCVEhSRUFEX0RCX1NPLCBkbGVycm9y ICgpKTsKLSAgICAgIGZwcmludGZfZmlsdGVyZWQgKGdkYl9zdGRlcnIsCi0J CQkiR0RCIHdpbGwgbm90IGJlIGFibGUgdG8gZGVidWcgcHRocmVhZHMuXG5c biIpOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gIC8qIEluaXRpYWxp emUgcG9pbnRlcnMgdG8gdGhlIGR5bmFtaWMgbGlicmFyeSBmdW5jdGlvbnMg d2Ugd2lsbCB1c2UuCi0gICAgIEVzc2VudGlhbCBmdW5jdGlvbnMgZmlyc3Qu ICAqLwotCi0gIHRkX2luaXRfcCA9IHZlcmJvc2VfZGxzeW0gKGhhbmRsZSwg InRkX2luaXQiKTsKLSAgaWYgKHRkX2luaXRfcCA9PSBOVUxMKQotICAgIHJl dHVybiAwOwotCi0gIHRkX3RhX25ld19wID0gdmVyYm9zZV9kbHN5bSAoaGFu ZGxlLCAidGRfdGFfbmV3Iik7Ci0gIGlmICh0ZF90YV9uZXdfcCA9PSBOVUxM KQotICAgIHJldHVybiAwOwotCi0gIHRkX3RhX21hcF9pZDJ0aHJfcCA9IHZl cmJvc2VfZGxzeW0gKGhhbmRsZSwgInRkX3RhX21hcF9pZDJ0aHIiKTsKLSAg aWYgKHRkX3RhX21hcF9pZDJ0aHJfcCA9PSBOVUxMKQotICAgIHJldHVybiAw OwotCi0gIHRkX3RhX21hcF9sd3AydGhyX3AgPSB2ZXJib3NlX2Rsc3ltICho YW5kbGUsICJ0ZF90YV9tYXBfbHdwMnRociIpOwotICBpZiAodGRfdGFfbWFw X2x3cDJ0aHJfcCA9PSBOVUxMKQotICAgIHJldHVybiAwOwotCi0gIHRkX3Rh X3Rocl9pdGVyX3AgPSB2ZXJib3NlX2Rsc3ltIChoYW5kbGUsICJ0ZF90YV90 aHJfaXRlciIpOwotICBpZiAodGRfdGFfdGhyX2l0ZXJfcCA9PSBOVUxMKQot ICAgIHJldHVybiAwOwotCi0gIHRkX3Rocl92YWxpZGF0ZV9wID0gdmVyYm9z ZV9kbHN5bSAoaGFuZGxlLCAidGRfdGhyX3ZhbGlkYXRlIik7Ci0gIGlmICh0 ZF90aHJfdmFsaWRhdGVfcCA9PSBOVUxMKQotICAgIHJldHVybiAwOwotCi0g IHRkX3Rocl9nZXRfaW5mb19wID0gdmVyYm9zZV9kbHN5bSAoaGFuZGxlLCAi dGRfdGhyX2dldF9pbmZvIik7Ci0gIGlmICh0ZF90aHJfZ2V0X2luZm9fcCA9 PSBOVUxMKQotICAgIHJldHVybiAwOwotCi0gIC8qIEluaXRpYWxpemUgdGhl IGxpYnJhcnkuICAqLwotICBlcnIgPSB0ZF9pbml0X3AgKCk7Ci0gIGlmIChl cnIgIT0gVERfT0spCi0gICAgewotICAgICAgd2FybmluZyAoXygiQ2Fubm90 IGluaXRpYWxpemUgbGlidGhyZWFkX2RiOiAlcyIpLCB0aHJlYWRfZGJfZXJy X3N0ciAoZXJyKSk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgLyog VGhlc2UgYXJlIG5vdCBlc3NlbnRpYWwuICAqLwotICB0ZF90YV9ldmVudF9h ZGRyX3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGFfZXZlbnRfYWRkciIpOwot ICB0ZF90YV9zZXRfZXZlbnRfcCA9IGRsc3ltIChoYW5kbGUsICJ0ZF90YV9z ZXRfZXZlbnQiKTsKLSAgdGRfdGFfZXZlbnRfZ2V0bXNnX3AgPSBkbHN5bSAo aGFuZGxlLCAidGRfdGFfZXZlbnRfZ2V0bXNnIik7Ci0gIHRkX3Rocl9ldmVu dF9lbmFibGVfcCA9IGRsc3ltIChoYW5kbGUsICJ0ZF90aHJfZXZlbnRfZW5h YmxlIik7Ci0gIHRkX3Rocl90bHNfZ2V0X2FkZHJfcCA9IGRsc3ltIChoYW5k bGUsICJ0ZF90aHJfdGxzX2dldF9hZGRyIik7Ci0KLSAgcmV0dXJuIDE7Ci19 Ci0KIHN0YXRpYyB0ZF9lcnJfZQogZW5hYmxlX3RocmVhZF9ldmVudCAodGRf dGhyYWdlbnRfdCAqdGhyZWFkX2FnZW50LCBpbnQgZXZlbnQsIENPUkVfQURE UiAqYnApCiB7CkBAIC01NDEsNiArNDc4LDI3OCBAQCBlbmFibGVfdGhyZWFk X2V2ZW50X3JlcG9ydGluZyAodm9pZCkKICAgICB9CiB9CiAKKy8qIEF0dGVt cHQgdG8gaW5pdGlhbGl6ZSBkbG9wZW4oKWVkIGxpYnRocmVhZF9kYiwgZGVz Y3JpYmVkIGJ5IEhBTkRMRS4KKyAgIFJldHVybiAxIG9uIHN1Y2Nlc3MuCisg ICBGYWlsdXJlIGNvdWxkIGhhcHBlbiBpZiBsaWJ0aHJlYWRfZGIgZG9lcyBu b3QgaGF2ZSBzeW1ib2xzIHdlIGV4cGVjdCwKKyAgIG9yIHdoZW4gaXQgcmVm dXNlcyB0byB3b3JrIHdpdGggdGhlIGN1cnJlbnQgaW5mZXJpb3IgKGUuZy4g ZHVlIHRvCisgICB2ZXJzaW9uIG1pc21hdGNoIGJldHdlZW4gbGlidGhyZWFk X2RiIGFuZCBsaWJwdGhyZWFkKS4gICovCisKK3N0YXRpYyBpbnQKK3RyeV90 aHJlYWRfZGJfbG9hZF8xICh2b2lkICpoYW5kbGUpCit7CisgIHRkX2Vycl9l IGVycjsKKworICAvKiBJbml0aWFsaXplIHBvaW50ZXJzIHRvIHRoZSBkeW5h bWljIGxpYnJhcnkgZnVuY3Rpb25zIHdlIHdpbGwgdXNlLgorICAgICBFc3Nl bnRpYWwgZnVuY3Rpb25zIGZpcnN0LiAgKi8KKworICB0ZF9pbml0X3AgPSB2 ZXJib3NlX2Rsc3ltIChoYW5kbGUsICJ0ZF9pbml0Iik7CisgIGlmICh0ZF9p bml0X3AgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICBlcnIgPSB0ZF9p bml0X3AgKCk7CisgIGlmIChlcnIgIT0gVERfT0spCisgICAgeworICAgICAg d2FybmluZyAoXygiQ2Fubm90IGluaXRpYWxpemUgbGlidGhyZWFkX2RiOiAl cyIpLCB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CisgICAgICByZXR1cm4g MDsKKyAgICB9CisKKyAgdGRfdGFfbmV3X3AgPSB2ZXJib3NlX2Rsc3ltICho YW5kbGUsICJ0ZF90YV9uZXciKTsKKyAgaWYgKHRkX3RhX25ld19wID09IE5V TEwpCisgICAgcmV0dXJuIDA7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgc3Ry dWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUgY2hpbGQgcHJvY2Vzcy4gICov CisgIHByb2NfaGFuZGxlLnB0aWQgPSBpbmZlcmlvcl9wdGlkOworCisgIC8q IE5vdyBhdHRlbXB0IHRvIG9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSB0aHJl YWQgbGlicmFyeS4gICovCisgIGVyciA9IHRkX3RhX25ld19wICgmcHJvY19o YW5kbGUsICZ0aHJlYWRfYWdlbnQpOworICBpZiAoZXJyICE9IFREX09LKQor ICAgIHsKKyAgICAgIHRkX3RhX25ld19wID0gTlVMTDsKKyAgICAgIGlmIChp bmZvX3ZlcmJvc2UpCisJcHJpbnRmX3VuZmlsdGVyZWQgKF8oInRkX3RhX25l dyBmYWlsZWQ6ICVzXG4iKSwKKwkJCSAgIHRocmVhZF9kYl9lcnJfc3RyIChl cnIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChlcnIpCisgICAg ICAgICAgeworICAgICAgICAgICAgY2FzZSBURF9OT0xJQlRIUkVBRDoKKyNp ZmRlZiBUSFJFQURfREJfSEFTX1REX1ZFUlNJT04KKyAgICAgICAgICAgIGNh c2UgVERfVkVSU0lPTjoKKyNlbmRpZgorICAgICAgICAgICAgICAvKiBUaGUg ZXJyb3JzIGFib3ZlIGFyZSBub3QgdW5leHBlY3RlZCBhbmQgc2lsZW50bHkg aWdub3JlZDoKKyAgICAgICAgICAgICAgICAgdGhleSBqdXN0IG1lYW4gd2Ug aGF2ZW4ndCBmb3VuZCBjb3JyZWN0IHZlcnNpb24gb2YKKyAgICAgICAgICAg ICAgICAgbGlidGhyZWFkX2RiIHlldC4gICovCisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgd2Fy bmluZyAoXygidGRfdGFfbmV3IGZhaWxlZDogJXMiKSwgdGhyZWFkX2RiX2Vy cl9zdHIgKGVycikpOworICAgICAgICAgIH0KKyAgICAgIHJldHVybiAwOwor ICAgIH0KKworICB0ZF90YV9tYXBfaWQydGhyX3AgPSB2ZXJib3NlX2Rsc3lt IChoYW5kbGUsICJ0ZF90YV9tYXBfaWQydGhyIik7CisgIGlmICh0ZF90YV9t YXBfaWQydGhyX3AgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICB0ZF90 YV9tYXBfbHdwMnRocl9wID0gdmVyYm9zZV9kbHN5bSAoaGFuZGxlLCAidGRf dGFfbWFwX2x3cDJ0aHIiKTsKKyAgaWYgKHRkX3RhX21hcF9sd3AydGhyX3Ag PT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICB0ZF90YV90aHJfaXRlcl9w ID0gdmVyYm9zZV9kbHN5bSAoaGFuZGxlLCAidGRfdGFfdGhyX2l0ZXIiKTsK KyAgaWYgKHRkX3RhX3Rocl9pdGVyX3AgPT0gTlVMTCkKKyAgICByZXR1cm4g MDsKKworICB0ZF90aHJfdmFsaWRhdGVfcCA9IHZlcmJvc2VfZGxzeW0gKGhh bmRsZSwgInRkX3Rocl92YWxpZGF0ZSIpOworICBpZiAodGRfdGhyX3ZhbGlk YXRlX3AgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKworICB0ZF90aHJfZ2V0 X2luZm9fcCA9IHZlcmJvc2VfZGxzeW0gKGhhbmRsZSwgInRkX3Rocl9nZXRf aW5mbyIpOworICBpZiAodGRfdGhyX2dldF9pbmZvX3AgPT0gTlVMTCkKKyAg ICByZXR1cm4gMDsKKworICAvKiBUaGVzZSBhcmUgbm90IGVzc2VudGlhbC4g ICovCisgIHRkX3RhX2V2ZW50X2FkZHJfcCA9IGRsc3ltIChoYW5kbGUsICJ0 ZF90YV9ldmVudF9hZGRyIik7CisgIHRkX3RhX3NldF9ldmVudF9wID0gZGxz eW0gKGhhbmRsZSwgInRkX3RhX3NldF9ldmVudCIpOworICB0ZF90YV9ldmVu dF9nZXRtc2dfcCA9IGRsc3ltIChoYW5kbGUsICJ0ZF90YV9ldmVudF9nZXRt c2ciKTsKKyAgdGRfdGhyX2V2ZW50X2VuYWJsZV9wID0gZGxzeW0gKGhhbmRs ZSwgInRkX3Rocl9ldmVudF9lbmFibGUiKTsKKyAgdGRfdGhyX3Rsc19nZXRf YWRkcl9wID0gZGxzeW0gKGhhbmRsZSwgInRkX3Rocl90bHNfZ2V0X2FkZHIi KTsKKworICBwcmludGZfdW5maWx0ZXJlZCAoXygiW1RocmVhZCBkZWJ1Z2dp bmcgdXNpbmcgbGlidGhyZWFkX2RiIGVuYWJsZWRdXG4iKSk7CisKKyAgLyog VGhlIHRocmVhZCBsaWJyYXJ5IHdhcyBkZXRlY3RlZC4gIEFjdGl2YXRlIHRo ZSB0aHJlYWRfZGIgdGFyZ2V0LiAgKi8KKyAgcHVzaF90YXJnZXQgKCZ0aHJl YWRfZGJfb3BzKTsKKyAgdGhyZWFkX2RiX2hhbmRsZSA9IGhhbmRsZTsKKwor ICBlbmFibGVfdGhyZWFkX2V2ZW50X3JlcG9ydGluZyAoKTsKKyAgdGhyZWFk X2RiX2ZpbmRfbmV3X3RocmVhZHNfMSAoKTsKKyAgcmV0dXJuIDE7Cit9CisK Ky8qIExvb2t1cCBhIGxpYnJhcnkgaW4gd2hpY2ggZ2l2ZW4gc3ltYm9sIHJl c2lkZXMuCisgICBOb3RlOiB0aGlzIGlzIGxvb2tpbmcgaW4gR0RCIHByb2Nl c3MsIG5vdCBpbiB0aGUgaW5mZXJpb3IuCisgICBSZXR1cm5zIGxpYnJhcnkg bmFtZSwgb3IgTlVMTC4gICovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2Rs YWRkcl90b19zb25hbWUgKGNvbnN0IHZvaWQgKmFkZHIpCit7CisgIERsX2lu Zm8gaW5mbzsKKworICBpZiAoZGxhZGRyIChhZGRyLCAmaW5mbykgIT0gMCkK KyAgICByZXR1cm4gaW5mby5kbGlfZm5hbWU7CisgIHJldHVybiBOVUxMOwor fQorCisvKiBBdHRlbXB0IHRvIHVzZSBMSUJSQVJZIGFzIGxpYnRocmVhZF9k Yi4gIExJQlJBUlkgY291bGQgYmUgYWJzb2x1dGUsCisgICByZWxhdGl2ZSwg b3IganVzdCBMSUJUSFJFQURfREIuICAqLworCitzdGF0aWMgaW50Cit0cnlf dGhyZWFkX2RiX2xvYWQgKGNvbnN0IGNoYXIgKmxpYnJhcnkpCit7CisgIHZv aWQgKmhhbmRsZTsKKworICBpZiAoaW5mb192ZXJib3NlKQorICAgIHByaW50 Zl91bmZpbHRlcmVkIChfKCJUcnlpbmcgaG9zdCBsaWJ0aHJlYWRfZGIgbGli cmFyeTogJXMuXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbGlicmFy eSk7CisgIGhhbmRsZSA9IGRsb3BlbiAobGlicmFyeSwgUlRMRF9OT1cpOwor ICBpZiAoaGFuZGxlID09IE5VTEwpCisgICAgeworICAgICAgaWYgKGluZm9f dmVyYm9zZSkKKwlwcmludGZfdW5maWx0ZXJlZCAoXygiZGxvcGVuIGZhaWxl ZDogJXMuXG4iKSwgZGxlcnJvciAoKSk7CisgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgaWYgKGluZm9fdmVyYm9zZSAmJiBzdHJjaHIgKGxpYnJhcnks ICcvJykgPT0gTlVMTCkKKyAgICB7CisgICAgICB2b2lkICp0ZF9pbml0Owor CisgICAgICB0ZF9pbml0ID0gZGxzeW0gKGhhbmRsZSwgInRkX2luaXQiKTsK KyAgICAgIGlmICh0ZF9pbml0ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAg ICAgICBjb25zdCBjaGFyICpjb25zdCBsaWJwYXRoID0gZGxhZGRyX3RvX3Nv bmFtZSAodGRfaW5pdCk7CisKKyAgICAgICAgICBpZiAobGlicGF0aCAhPSBO VUxMKQorICAgICAgICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIkhvc3Qg JXMgcmVzb2x2ZWQgdG86ICVzLlxuIiksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlicmFyeSwgbGlicGF0aCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgaWYgKHRyeV90aHJlYWRfZGJfbG9hZF8xIChoYW5kbGUpKQor ICAgIHJldHVybiAxOworCisgIC8qIFRoaXMgbGlicmFyeSAicmVmdXNlZCIg dG8gd29yayBvbiBjdXJyZW50IGluZmVyaW9yLiAgKi8KKyAgZGxjbG9zZSAo aGFuZGxlKTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogU2VhcmNoIGxpYnRo cmVhZF9kYl9zZWFyY2hfcGF0aCBmb3IgbGlidGhyZWFkX2RiIHdoaWNoICJh Z3JlZXMiCisgICB0byB3b3JrIG9uIGN1cnJlbnQgaW5mZXJpb3IuICAqLwor CitzdGF0aWMgaW50Cit0aHJlYWRfZGJfbG9hZF9zZWFyY2ggKCkKK3sKKyAg Y2hhciBwYXRoW1BBVEhfTUFYXTsKKyAgY29uc3QgY2hhciAqc2VhcmNoX3Bh dGggPSBsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGg7CisgIGludCByYyA9IDA7 CisKKyAgd2hpbGUgKCpzZWFyY2hfcGF0aCkKKyAgICB7CisgICAgICBjb25z dCBjaGFyICplbmQgPSBzdHJjaHIgKHNlYXJjaF9wYXRoLCAnOicpOworICAg ICAgaWYgKGVuZCkKKwl7CisJICBzaXplX3QgbGVuID0gZW5kIC0gc2VhcmNo X3BhdGg7CisgICAgICAgICAgaWYgKGxlbiArIDEgKyBzdHJsZW4gKExJQlRI UkVBRF9EQl9TTykgKyAxID4gc2l6ZW9mIChwYXRoKSkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgY2hhciAqY3AgPSB4bWFsbG9jIChsZW4gKyAx KTsKKyAgICAgICAgICAgICAgbWVtY3B5IChjcCwgc2VhcmNoX3BhdGgsIGxl bik7CisgICAgICAgICAgICAgIGNwW2xlbl0gPSAnXDAnOworICAgICAgICAg ICAgICB3YXJuaW5nIChfKCJsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGggY29t cG9uZW50IHRvbyBsb25nLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi IGlnbm9yZWQ6ICVzLiIpLCBjcCk7CisgICAgICAgICAgICAgIHhmcmVlIChj cCk7CisgICAgICAgICAgICAgIHNlYXJjaF9wYXRoICs9IGxlbiArIDE7Cisg ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCSAgbWVt Y3B5IChwYXRoLCBzZWFyY2hfcGF0aCwgbGVuKTsKKwkgIHBhdGhbbGVuXSA9 ICdcMCc7CisJICBzZWFyY2hfcGF0aCArPSBsZW4gKyAxOworCX0KKyAgICAg IGVsc2UKKwl7CisgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoc2Vh cmNoX3BhdGgpOworCisgICAgICAgICAgaWYgKGxlbiArIDEgKyBzdHJsZW4g KExJQlRIUkVBRF9EQl9TTykgKyAxID4gc2l6ZW9mIChwYXRoKSkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgd2FybmluZyAoXygibGlidGhyZWFk X2RiX3NlYXJjaF9wYXRoIGNvbXBvbmVudCB0b28gbG9uZywiCisgICAgICAg ICAgICAgICAgICAgICAgICAgIiBpZ25vcmVkOiAlcy4iKSwgc2VhcmNoX3Bh dGgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkg IG1lbWNweSAocGF0aCwgc2VhcmNoX3BhdGgsIGxlbiArIDEpOworCSAgc2Vh cmNoX3BhdGggKz0gbGVuOworCX0KKyAgICAgIHN0cmNhdCAocGF0aCwgIi8i KTsKKyAgICAgIHN0cmNhdCAocGF0aCwgTElCVEhSRUFEX0RCX1NPKTsKKyAg ICAgIGlmICh0cnlfdGhyZWFkX2RiX2xvYWQgKHBhdGgpKQorCXsKKwkgIHJj ID0gMTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIGlmIChyYyA9PSAwKQor ICAgIHJjID0gdHJ5X3RocmVhZF9kYl9sb2FkIChMSUJUSFJFQURfREJfU08p OworICByZXR1cm4gcmM7Cit9CisKKy8qIEF0dGVtcHQgdG8gbG9hZCBhbmQg aW5pdGlhbGl6ZSBsaWJ0aHJlYWRfZGIuCisgICBSZXR1cm4gMSBvbiBzdWNj ZXNzLgorICovCisKK3N0YXRpYyBpbnQKK3RocmVhZF9kYl9sb2FkICh2b2lk KQoreworICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqOworCisgIGlmICh0aHJlYWRf ZGJfaGFuZGxlICE9IE5VTEwpCisgICAgcmV0dXJuIDE7CisKKyAgLyogRG9u J3QgYXR0ZW1wdCB0byB1c2UgdGhyZWFkX2RiIG9uIHRhcmdldHMgd2hpY2gg Y2FuIG5vdCBydW4KKyAgICAgKGV4ZWN1dGFibGVzIG5vdCBydW5uaW5nIHll dCwgY29yZSBmaWxlcykgZm9yIG5vdy4gICovCisgIGlmICghdGFyZ2V0X2hh c19leGVjdXRpb24pCisgICAgcmV0dXJuIDA7CisKKyAgLyogRG9uJ3QgYXR0 ZW1wdCB0byB1c2UgdGhyZWFkX2RiIGZvciByZW1vdGUgdGFyZ2V0cy4gICov CisgIGlmICghdGFyZ2V0X2Nhbl9ydW4gKCZjdXJyZW50X3RhcmdldCkpCisg ICAgcmV0dXJuIDA7CisKKyAgaWYgKHRocmVhZF9kYl9sb2FkX3NlYXJjaCAo KSkKKyAgICByZXR1cm4gMTsKKworICAvKiBOb25lIG9mIHRoZSBsaWJ0aHJl YWRfZGIncyBvbiBvdXIgc2VhcmNoIHBhdGgsIG5vdCB0aGUgc3lzdGVtIGRl ZmF1bHQKKyAgICAgb25lcyB3b3JrZWQuICBJZiB0aGUgZXhlY3V0YWJsZSBp cyBkeW5hbWljYWxseSBsaW5rZWQgYWdhaW5zdAorICAgICBsaWJwdGhyZWFk LCB0cnkgbG9hZGluZyBsaWJ0aHJlYWRfZGIgZnJvbSB0aGUgc2FtZSBkaXJl Y3RvcnkuICAqLworCisgIEFMTF9PQkpGSUxFUyAob2JqKQorICAgIGlmIChs aWJwdGhyZWFkX25hbWVfcCAob2JqLT5uYW1lKSkKKyAgICAgIHsKKwljaGFy IHBhdGhbUEFUSF9NQVhdLCAqY3A7CisKKwlnZGJfYXNzZXJ0IChzdHJsZW4g KG9iai0+bmFtZSkgPCBzaXplb2YgKHBhdGgpKTsKKwlzdHJjcHkgKHBhdGgs IG9iai0+bmFtZSk7CisJY3AgPSBzdHJyY2hyIChwYXRoLCAnLycpOworCisJ aWYgKGNwID09IE5VTEwpCisJICB7CisJICAgIHdhcm5pbmcgKF8oIkV4cGVj dGVkIGFic29sdXRlIHBhdGhuYW1lIGZvciBsaWJwdGhyZWFkIGluIHRoZSIK KwkJICAgICAgICIgaW5mZXJpb3IsIGJ1dCBnb3QgJXMuIiksIHBhdGgpOwor CSAgfQorCWVsc2UgaWYgKGNwICsgMSArIHN0cmxlbiAoTElCVEhSRUFEX0RC X1NPKSArIDEgPiBwYXRoICsgc2l6ZW9mIChwYXRoKSkKKwkgIHsKKwkgICAg d2FybmluZyAoXygiVW5leHBlY3RlZDogcGF0aCB0byBsaWJwdGhyZWFkIGlu IHRoZSBpbmZlcmlvciBpcyIKKwkJICAgICAgICIgdG9vIGxvbmc6ICVzIiks IHBhdGgpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgc3RyY3B5IChjcCAr IDEsIExJQlRIUkVBRF9EQl9TTyk7CisJICAgIGlmICh0cnlfdGhyZWFkX2Ri X2xvYWQgKHBhdGgpKQorCSAgICAgIHJldHVybiAxOworCSAgfQorCXdhcm5p bmcgKF8oIlVuYWJsZSB0byBmaW5kIGxpYnRocmVhZF9kYiBtYXRjaGluZyBp bmZlcmlvcidzIHRocmVhZCIKKwkJICAgIiBsaWJyYXJ5LCB0aHJlYWQgZGVi dWdnaW5nIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4iKSk7CisJcmV0dXJuIDA7 CisgICAgfQorICAvKiBFaXRoZXIgdGhpcyBleGVjdXRhYmxlIGlzbid0IHVz aW5nIGxpYnB0aHJlYWQgYXQgYWxsLCBvciBpdCBpcworICAgICBzdGF0aWNh bGx5IGxpbmtlZC4gIFNpbmNlIHdlIGNhbid0IGVhc2lseSBkaXN0aW5ndWlz aCB0aGVzZSB0d28gY2FzZXMsCisgICAgIG5vIHdhcm5pbmcgaXMgaXNzdWVk LiAgKi8KKyAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkCiBkaXNhYmxl X3RocmVhZF9ldmVudF9yZXBvcnRpbmcgKHZvaWQpCiB7CkBAIC01OTMsNzUg KzgwMiwzNCBAQCB2b2lkCiBjaGVja19mb3JfdGhyZWFkX2RiICh2b2lkKQog ewogICB0ZF9lcnJfZSBlcnI7Ci0gIHN0YXRpYyBpbnQgYWxyZWFkeV9sb2Fk ZWQ7CisgIHN0YXRpYyB2b2lkICpsYXN0X2xvYWRlZDsKIAogICAvKiBEbyBu b3RoaW5nIGlmIHdlIGNvdWxkbid0IGxvYWQgbGlidGhyZWFkX2RiLnNvLjEu ICAqLwotICBpZiAodGRfdGFfbmV3X3AgPT0gTlVMTCkKKyAgaWYgKCF0aHJl YWRfZGJfbG9hZCAoKSkKICAgICByZXR1cm47CiAKICAgLyogRmlyc3QgdGlt ZSB0aHJvdWdoLCByZXBvcnQgdGhhdCBsaWJ0aHJlYWRfZGIgd2FzIHN1Y2Nl c3NmdWx5CiAgICAgIGxvYWRlZC4gIENhbid0IHByaW50IHRoaXMgaW4gaW4g dGhyZWFkX2RiX2xvYWQgYXMsIGF0IHRoYXQgc3RhZ2UsCi0gICAgIHRoZSBp bnRlcnByZXRlciBhbmQgaXQncyBjb25zb2xlIGhhdmVuJ3Qgc3RhcnRlZC4g ICovCi0KLSAgaWYgKCFhbHJlYWR5X2xvYWRlZCkKLSAgICB7Ci0gICAgICBE bF9pbmZvIGluZm87Ci0gICAgICBjb25zdCBjaGFyICpsaWJyYXJ5ID0gTlVM TDsKLSAgICAgIGlmIChkbGFkZHIgKCgqdGRfdGFfbmV3X3ApLCAmaW5mbykg IT0gMCkKLQlsaWJyYXJ5ID0gaW5mby5kbGlfZm5hbWU7Ci0KLSAgICAgIC8q IFRyeSBkbGluZm8/ICAqLwotCi0gICAgICBpZiAobGlicmFyeSA9PSBOVUxM KQotCS8qIFBhcmFub2lkIC0gZG9uJ3QgbGV0IGEgTlVMTCBwYXRoIHNsaXAg dGhyb3VnaC4gICovCi0JbGlicmFyeSA9IExJQlRIUkVBRF9EQl9TTzsKLQot ICAgICAgaWYgKGluZm9fdmVyYm9zZSkKLQlwcmludGZfdW5maWx0ZXJlZCAo XygiVXNpbmcgaG9zdCBsaWJ0aHJlYWRfZGIgbGlicmFyeSBcIiVzXCIuXG4i KSwKLQkJCSAgIGxpYnJhcnkpOwotICAgICAgYWxyZWFkeV9sb2FkZWQgPSAx OwotICAgIH0KKyAgICAgdGhlIGludGVycHJldGVyIGFuZCBpdCdzIGNvbnNv bGUgaGF2ZW4ndCBzdGFydGVkLgorICAgICBXZSB0cmFjayB0ZF90YV9uZXdf cCBiZWNhdXNlIHRoZSB1c2VyIG1heSBzd2l0Y2ggZXhlY3V0YWJsZXMsCisg ICAgIGFuZCBhcyBhIHJlc3VsdCB3ZSBtYXkgZGVjaWRlIHRvIHVzZSBhIGRp ZmZlcmVudCB2ZXJzaW9uIG9mCisgICAgIGxpYnRocmVhZF9kYi4gKi8KIAot ICBpZiAodXNpbmdfdGhyZWFkX2RiKQotICAgIC8qIE5vdGhpbmcgdG8gZG8u ICBUaGUgdGhyZWFkIGxpYnJhcnkgd2FzIGFscmVhZHkgZGV0ZWN0ZWQgYW5k IHRoZQotICAgICAgIHRhcmdldCB2ZWN0b3Igd2FzIGFscmVhZHkgYWN0aXZh dGVkLiAgKi8KLSAgICByZXR1cm47Ci0KLSAgLyogRG9uJ3QgYXR0ZW1wdCB0 byB1c2UgdGhyZWFkX2RiIG9uIHRhcmdldHMgd2hpY2ggY2FuIG5vdCBydW4K LSAgICAgKGV4ZWN1dGFibGVzIG5vdCBydW5uaW5nIHlldCwgY29yZSBmaWxl cykgZm9yIG5vdy4gICovCi0gIGlmICghdGFyZ2V0X2hhc19leGVjdXRpb24p Ci0gICAgcmV0dXJuOwotCi0gIC8qIERvbid0IGF0dGVtcHQgdG8gdXNlIHRo cmVhZF9kYiBmb3IgcmVtb3RlIHRhcmdldHMuICAqLwotICBpZiAoIXRhcmdl dF9jYW5fcnVuICgmY3VycmVudF90YXJnZXQpKQotICAgIHJldHVybjsKLQot ICAvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgdGhhdCBpZGVudGlmaWVz IHRoZSBjaGlsZCBwcm9jZXNzLiAgKi8KLSAgcHJvY19oYW5kbGUucHRpZCA9 IGluZmVyaW9yX3B0aWQ7Ci0KLSAgLyogTm93IGF0dGVtcHQgdG8gb3BlbiBh IGNvbm5lY3Rpb24gdG8gdGhlIHRocmVhZCBsaWJyYXJ5LiAgKi8KLSAgZXJy ID0gdGRfdGFfbmV3X3AgKCZwcm9jX2hhbmRsZSwgJnRocmVhZF9hZ2VudCk7 Ci0gIHN3aXRjaCAoZXJyKQorICBpZiAobGFzdF9sb2FkZWQgIT0gdGRfdGFf bmV3X3ApCiAgICAgewotICAgIGNhc2UgVERfTk9MSUJUSFJFQUQ6Ci0gICAg ICAvKiBObyB0aHJlYWQgbGlicmFyeSB3YXMgZGV0ZWN0ZWQuICAqLwotICAg ICAgYnJlYWs7Ci0KLSAgICBjYXNlIFREX09LOgotICAgICAgcHJpbnRmX3Vu ZmlsdGVyZWQgKF8oIltUaHJlYWQgZGVidWdnaW5nIHVzaW5nIGxpYnRocmVh ZF9kYiBlbmFibGVkXVxuIikpOwotCi0gICAgICAvKiBUaGUgdGhyZWFkIGxp YnJhcnkgd2FzIGRldGVjdGVkLiAgQWN0aXZhdGUgdGhlIHRocmVhZF9kYiB0 YXJnZXQuICAqLwotICAgICAgcHVzaF90YXJnZXQgKCZ0aHJlYWRfZGJfb3Bz KTsKLSAgICAgIHVzaW5nX3RocmVhZF9kYiA9IDE7CisgICAgICBsYXN0X2xv YWRlZCA9IHRkX3RhX25ld19wOwogCi0gICAgICBlbmFibGVfdGhyZWFkX2V2 ZW50X3JlcG9ydGluZyAoKTsKLSAgICAgIHRocmVhZF9kYl9maW5kX25ld190 aHJlYWRzXzEgKCk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0g ICAgICB3YXJuaW5nIChfKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aHJlYWQgZGVi dWdnaW5nIGxpYnJhcnk6ICVzIiksCi0JICAgICAgIHRocmVhZF9kYl9lcnJf c3RyIChlcnIpKTsKLSAgICAgIGJyZWFrOworICAgICAgaWYgKGluZm9fdmVy Ym9zZSB8fCAqbGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoKQorICAgICAgICB7 CisgICAgICAgICAgY29uc3QgY2hhciAqbGlicmFyeTsKKworICAgICAgICAg IGxpYnJhcnkgPSBkbGFkZHJfdG9fc29uYW1lICgqdGRfdGFfbmV3X3ApOwor ICAgICAgICAgIGlmIChsaWJyYXJ5ID09IE5VTEwpCisgICAgICAgICAgICBs aWJyYXJ5ID0gTElCVEhSRUFEX0RCX1NPOworCisgICAgICAgICAgcHJpbnRm X3VuZmlsdGVyZWQgKF8oIlVzaW5nIGhvc3QgbGlidGhyZWFkX2RiIGxpYnJh cnkgXCIlc1wiLlxuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnJhcnkpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC03ODMsNyAr OTUxLDkgQEAgdGhyZWFkX2RiX2RldGFjaCAoc3RydWN0IHRhcmdldF9vcHMg Km9wcwogCiAgIC8qIERldGFjaCB0aHJlYWRfZGIgdGFyZ2V0IG9wcy4gICov CiAgIHVucHVzaF90YXJnZXQgKCZ0aHJlYWRfZGJfb3BzKTsKLSAgdXNpbmdf dGhyZWFkX2RiID0gMDsKKyAgaWYgKHRocmVhZF9kYl9oYW5kbGUpCisgICAg ZGxjbG9zZSAodGhyZWFkX2RiX2hhbmRsZSk7CisgIHRocmVhZF9kYl9oYW5k bGUgPSBOVUxMOwogCiAgIHRhcmdldF9iZW5lYXRoLT50b19kZXRhY2ggKHRh cmdldF9iZW5lYXRoLCBhcmdzLCBmcm9tX3R0eSk7CiB9CkBAIC04OTYsNyAr MTA2Niw5IEBAIHRocmVhZF9kYl93YWl0IChzdHJ1Y3QgdGFyZ2V0X29wcyAq b3BzLAogICAgIHsKICAgICAgIHJlbW92ZV90aHJlYWRfZXZlbnRfYnJlYWtw b2ludHMgKCk7CiAgICAgICB1bnB1c2hfdGFyZ2V0ICgmdGhyZWFkX2RiX29w cyk7Ci0gICAgICB1c2luZ190aHJlYWRfZGIgPSAwOworICAgICAgaWYgKHRo cmVhZF9kYl9oYW5kbGUpCisJZGxjbG9zZSAodGhyZWFkX2RiX2hhbmRsZSk7 CisgICAgICB0aHJlYWRfZGJfaGFuZGxlID0gTlVMTDsKIAogICAgICAgcmV0 dXJuIHB0aWQ7CiAgICAgfQpAQCAtOTQ0LDcgKzExMTYsOSBAQCB0aHJlYWRf ZGJfbW91cm5faW5mZXJpb3IgKHN0cnVjdCB0YXJnZXRfCiAKICAgLyogRGV0 YWNoIHRocmVhZF9kYiB0YXJnZXQgb3BzLiAgKi8KICAgdW5wdXNoX3Rhcmdl dCAob3BzKTsKLSAgdXNpbmdfdGhyZWFkX2RiID0gMDsKKyAgaWYgKHRocmVh ZF9kYl9oYW5kbGUpCisgICAgZGxjbG9zZSAodGhyZWFkX2RiX2hhbmRsZSk7 CisgIHRocmVhZF9kYl9oYW5kbGUgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50 CkBAIC0xMTg3LDEzICsxMzYxLDI4IEBAIGV4dGVybiBpbml0aWFsaXplX2Zp bGVfZnR5cGUgX2luaXRpYWxpemUKIHZvaWQKIF9pbml0aWFsaXplX3RocmVh ZF9kYiAodm9pZCkKIHsKLSAgLyogT25seSBpbml0aWFsaXplIHRoZSBtb2R1 bGUgaWYgd2UgY2FuIGxvYWQgbGlidGhyZWFkX2RiLiAgKi8KLSAgaWYgKHRo cmVhZF9kYl9sb2FkICgpKQotICAgIHsKLSAgICAgIGluaXRfdGhyZWFkX2Ri X29wcyAoKTsKLSAgICAgIGFkZF90YXJnZXQgKCZ0aHJlYWRfZGJfb3BzKTsK KyAgaW5pdF90aHJlYWRfZGJfb3BzICgpOworICBhZGRfdGFyZ2V0ICgmdGhy ZWFkX2RiX29wcyk7CiAKLSAgICAgIC8qIEFkZCBvdXJzZWx2ZXMgdG8gb2Jq ZmlsZSBldmVudCBjaGFpbi4gICovCi0gICAgICBvYnNlcnZlcl9hdHRhY2hf bmV3X29iamZpbGUgKHRocmVhZF9kYl9uZXdfb2JqZmlsZSk7Ci0gICAgfQor ICAvKiBEZWZlciBsb2FkaW5nIG9mIGxpYnRocmVhZF9kYi5zbyB1bnRpbCBp bmZlcmlvciBpcyBydW5uaW5nLgorICAgICBUaGlzIGFsbG93cyBnZGIgdG8g bG9hZCBjb3JyZWN0IGxpYnRocmVhZF9kYiBmb3IgYSBnaXZlbgorICAgICBl eGVjdXRhYmxlIC0tIHRoZXJlIGNvdWxkIGJlIG11dGlwbGUgdmVyc2lvbnMg b2YgZ2xpYmMsCisgICAgIGNvbXBpbGVkIHdpdGggTGludXhUaHJlYWRzIG9y IE5QVEwsIGFuZCB1bnRpbCB0aGVyZSBpcworICAgICBhIHJ1bm5pbmcgaW5m ZXJpb3IsIHdlIGNhbid0IHRlbGwgd2hpY2ggbGlidGhyZWFkX2RiIGlzCisg ICAgIHRoZSBjb3JyZWN0IG9uZSB0byBsb2FkLiAqLworCisgIGxpYnRocmVh ZF9kYl9zZWFyY2hfcGF0aCA9IHhzdHJkdXAgKExJQlRIUkVBRF9EQl9TRUFS Q0hfUEFUSCk7CisKKyAgYWRkX3NldHNob3dfb3B0aW9uYWxfZmlsZW5hbWVf Y21kICgibGlidGhyZWFkLWRiLXNlYXJjaC1wYXRoIiwKKwkJCQkgICAgIGNs YXNzX3N1cHBvcnQsCisJCQkJICAgICAmbGlidGhyZWFkX2RiX3NlYXJjaF9w YXRoLCBfKCJcCitTZXQgc2VhcmNoIHBhdGggZm9yIGxpYnRocmVhZF9kYi4i KSwgXygiXAorU2hvdyB0aGUgY3VycmVudCBzZWFyY2ggcGF0aCBvciBsaWJ0 aHJlYWRfZGIuIiksIF8oIlwKK1RoaXMgcGF0aCBpcyB1c2VkIHRvIHNlYXJj aCBmb3IgbGlidGhyZWFkX2RiIHRvIGJlIGxvYWRlZCBpbnRvIFwKK2dkYiBp dHNlbGYuIiksCisJCQkgICAgTlVMTCwKKwkJCSAgICBOVUxMLAorCQkJICAg ICZzZXRsaXN0LCAmc2hvd2xpc3QpOworICAvKiBBZGQgb3Vyc2VsdmVzIHRv IG9iamZpbGUgZXZlbnQgY2hhaW4uICAqLworICBvYnNlcnZlcl9hdHRhY2hf bmV3X29iamZpbGUgKHRocmVhZF9kYl9uZXdfb2JqZmlsZSk7CiB9CkluZGV4 OiBzb2xpYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvc29saWIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4xMTUKZGlmZiAtdSAtcCAtdSAtcjEuMTE1IHNvbGliLmMKLS0tIHNvbGli LmMJOSBNYXIgMjAwOSAyMjozODozNyAtMDAwMAkxLjExNQorKysgc29saWIu YwkzMCBBcHIgMjAwOSAyMjowODozNSAtMDAwMApAQCAtNjg0LDE2ICs2ODQs MjQgQEAgdXBkYXRlX3NvbGliX2xpc3QgKGludCBmcm9tX3R0eSwgc3RydWN0 IAogICAgIH0KIH0KIAotLyogUmV0dXJuIG5vbi16ZXJvIGlmIFNPIGlzIHRo ZSBsaWJwdGhyZWFkIHNoYXJlZCBsaWJyYXJ5LgorCisvKiBSZXR1cm4gbm9u LXplcm8gaWYgTkFNRSBpcyB0aGUgbGlicHRocmVhZCBzaGFyZWQgbGlicmFy eS4KIAogICAgVXNlcyBhIGZhaXJseSBzaW1wbGlzdGljIGhldXJpc3RpYyBh cHByb2FjaCB3aGVyZSB3ZSBjaGVjawogICAgdGhlIGZpbGUgbmFtZSBhZ2Fp bnN0ICIvbGlicHRocmVhZCIuICBUaGlzIGNhbiBsZWFkIHRvIGZhbHNlCiAg ICBwb3NpdGl2ZXMsIGJ1dCB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaCBp biBwcmFjdGljZS4gICovCiAKK2ludCBsaWJwdGhyZWFkX25hbWVfcCAoY29u c3QgY2hhciAqbmFtZSkKK3sKKyAgcmV0dXJuIChzdHJzdHIgKG5hbWUsICIv bGlicHRocmVhZCIpICE9IE5VTEwpOworfQorCisvKiBSZXR1cm4gbm9uLXpl cm8gaWYgU08gaXMgdGhlIGxpYnB0aHJlYWQgc2hhcmVkIGxpYnJhcnkuICAq LworCiBzdGF0aWMgaW50CiBsaWJwdGhyZWFkX3NvbGliX3AgKHN0cnVjdCBz b19saXN0ICpzbykKIHsKLSAgcmV0dXJuIChzdHJzdHIgKHNvLT5zb19uYW1l LCAiL2xpYnB0aHJlYWQiKSAhPSBOVUxMKTsKKyAgcmV0dXJuIGxpYnB0aHJl YWRfbmFtZV9wKHNvLT5zb19uYW1lKTsKIH0KIAogLyogR0xPQkFMIEZVTkNU SU9OCkluZGV4OiBzb2xpYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvc29saWIuaCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC11IC1yMS4yMyBzb2xpYi5oCi0t LSBzb2xpYi5oCTkgTWFyIDIwMDkgMjI6Mzg6MzcgLTAwMDAJMS4yMworKysg c29saWIuaAkzMCBBcHIgMjAwOSAyMjowODozNSAtMDAwMApAQCAtNjUsNCAr NjUsOCBAQCBleHRlcm4gdm9pZCBub19zaGFyZWRfbGlicmFyaWVzIChjaGFy ICppCiBleHRlcm4gdm9pZCBzZXRfc29saWJfb3BzIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwKIAkJCSAgIHN0cnVjdCB0YXJnZXRfc29fb3BzICpuZXdf b3BzKTsKIAorLyogUmV0dXJuIG5vbi16ZXJvIGlmIE5BTUUgaXMgdGhlIGxp YnB0aHJlYWQgc2hhcmVkIGxpYnJhcnkuICAqLworCitleHRlcm4gaW50IGxp YnB0aHJlYWRfbmFtZV9wIChjb25zdCBjaGFyICpuYW1lKTsKKwogI2VuZGlm IC8qIFNPTElCX0ggKi8KSW5kZXg6IGRvYy9nZGIudGV4aW5mbwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2Rv Yy9nZGIudGV4aW5mbyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41ODgKZGlm ZiAtdSAtcCAtdSAtcjEuNTg4IGdkYi50ZXhpbmZvCi0tLSBkb2MvZ2RiLnRl eGluZm8JMzAgQXByIDIwMDkgMDM6MjQ6NDggLTAwMDAJMS41ODgKKysrIGRv Yy9nZGIudGV4aW5mbwkzMCBBcHIgMjAwOSAyMjowODozNiAtMDAwMApAQCAt MjQzMCw2ICsyNDMwLDkgQEAgYSBjb21tYW5kIHRvIGFwcGx5IGEgY29tbWFu ZCB0byBhIGxpc3QgbwogQGl0ZW0gdGhyZWFkLXNwZWNpZmljIGJyZWFrcG9p bnRzCiBAaXRlbSBAc2FtcHtzZXQgcHJpbnQgdGhyZWFkLWV2ZW50c30sIHdo aWNoIGNvbnRyb2xzIHByaW50aW5nIG9mIAogbWVzc2FnZXMgb24gdGhyZWFk IHN0YXJ0IGFuZCBleGl0LgorQGl0ZW0gQHNhbXB7c2V0IGxpYnRocmVhZC1k Yi1zZWFyY2gtcGF0aCBAdmFye3BhdGh9fSwgd2hpY2ggbGV0cwordGhlIHVz ZXIgc3BlY2lmeSB3aGljaCBAY29kZXtsaWJ0aHJlYWRfZGJ9IHRvIHVzZSBp ZiB0aGUgZGVmYXVsdCBjaG9pY2UKK2lzbid0IGNvbXBhdGlibGUgd2l0aCB0 aGUgcHJvZ3JhbS4KIEBlbmQgaXRlbWl6ZQogCiBAcXVvdGF0aW9uCkBAIC0y NjQ4LDYgKzI2NTEsMzggQEAgcHJvZ3JhbXMgd2l0aCBtdWx0aXBsZSB0aHJl YWRzLgogQHhyZWZ7U2V0IFdhdGNocG9pbnRzLCxTZXR0aW5nIFdhdGNocG9p bnRzfSwgZm9yIGluZm9ybWF0aW9uIGFib3V0CiB3YXRjaHBvaW50cyBpbiBw cm9ncmFtcyB3aXRoIG11bHRpcGxlIHRocmVhZHMuCiAKK0B0YWJsZSBAY29k ZQorQGtpbmRleCBzZXQgbGlidGhyZWFkLWRiLXNlYXJjaC1wYXRoCitAY2lu ZGV4IHNlYXJjaCBwYXRoIGZvciBAY29kZXtsaWJ0aHJlYWRfZGJ9CitAaXRl bSBzZXQgbGlidGhyZWFkLWRiLXNlYXJjaC1wYXRoIEBye1t9QHZhcntwYXRo fUBye119CitJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCwgQHZhcntwYXRofSBp cyBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mCitkaXJlY3RvcmllcyBAdmFs dWV7R0RCTn0gd2lsbCB1c2UgdG8gc2VhcmNoIGZvciBAY29kZXtsaWJ0aHJl YWRfZGJ9LgorSWYgeW91IG9taXQgQHZhcntwYXRofSwgQHNhbXB7bGlidGhy ZWFkLWRiLXNlYXJjaC1wYXRofSB3aWxsIGJlIHJlc2V0IHRvCithbiBlbXB0 eSBsaXN0LgorCitPbiBAc2N7Z251fS9MaW51eCBhbmQgU29sYXJpcyBzeXN0 ZW1zLCBAdmFsdWV7R0RCTn0gdXNlcyBhIGBgaGVscGVyJycKK0Bjb2Rle2xp YnRocmVhZF9kYn0gbGlicmFyeSB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJv dXQgdGhyZWFkcyBpbiB0aGUKK2luZmVyaW9yIHByb2Nlc3MuICBAdmFsdWV7 R0RCTn0gd2lsbCB1c2UgQHNhbXB7bGlidGhyZWFkLWRiLXNlYXJjaC1wYXRo fQordG8gZmluZCBAY29kZXtsaWJ0aHJlYWRfZGJ9LiAgSWYgdGhhdCBmYWls cywgQHZhbHVle0dEQk59IHdpbGwgY29udGludWUKK3dpdGggZGVmYXVsdCBz eXN0ZW0gc2hhcmVkIGxpYnJhcnkgZGlyZWN0b3JpZXMsIGFuZCBmaW5hbGx5 IHRoZSBkaXJlY3RvcnkKK2Zyb20gd2hpY2ggQGNvZGV7bGlicHRocmVhZH0g d2FzIGxvYWRlZCBpbiB0aGUgaW5mZXJpb3IgcHJvY2Vzcy4KKworRm9yIGFu eSBAY29kZXtsaWJ0aHJlYWRfZGJ9IGxpYnJhcnkgQHZhbHVle0dEQk59IGZp bmRzIGluIGFib3ZlIGRpcmVjdG9yaWVzLAorQHZhbHVle0dEQk59IGF0dGVt cHRzIHRvIGluaXRpYWxpemUgaXQgd2l0aCB0aGUgY3VycmVudCBpbmZlcmlv ciBwcm9jZXNzLgorSWYgdGhpcyBpbml0aWFsaXphdGlvbiBmYWlscyAod2hp Y2ggY291bGQgaGFwcGVuIGJlY2F1c2Ugb2YgYSB2ZXJzaW9uCittaXNtYXRj aCBiZXR3ZWVuIEBjb2Rle2xpYnRocmVhZF9kYn0gYW5kIEBjb2Rle2xpYnB0 aHJlYWR9KSwgQHZhbHVle0dEQk59Cit3aWxsIHVubG9hZCBAY29kZXtsaWJ0 aHJlYWRfZGJ9LCBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCBkaXJlY3Rv cnkuCitJZiBub25lIG9mIEBjb2Rle2xpYnRocmVhZF9kYn0gbGlicmFyaWVz IGluaXRpYWxpemUgc3VjY2Vzc2Z1bGx5LAorQHZhbHVle0dEQk59IHdpbGwg aXNzdWUgYSB3YXJuaW5nIGFuZCB0aHJlYWQgZGVidWdnaW5nIHdpbGwgYmUg ZGlzYWJsZWQuCisKK1NldHRpbmcgQGNvZGV7bGlidGhyZWFkLWRiLXNlYXJj aC1wYXRofSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQKK29ubHkgb24gc29t ZSBwbGF0Zm9ybXMuCisKK0BraW5kZXggc2hvdyBsaWJ0aHJlYWQtZGItc2Vh cmNoLXBhdGggCitAaXRlbSBzaG93IGxpYnRocmVhZC1kYi1zZWFyY2gtcGF0 aCAKK0Rpc3BsYXkgY3VycmVudCBsaWJ0aHJlYWRfZGIgc2VhcmNoIHBhdGgu CitAZW5kIHRhYmxlCisKIEBub2RlIFByb2Nlc3NlcwogQHNlY3Rpb24gRGVi dWdnaW5nIFByb2dyYW1zIHdpdGggTXVsdGlwbGUgUHJvY2Vzc2VzCiAK --00163646d8e6c990210468cde9be--