From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23193 invoked by alias); 2 Oct 2009 23:51:38 -0000 Received: (qmail 23171 invoked by uid 22791); 2 Oct 2009 23:51:35 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 02 Oct 2009 23:51:30 +0000 Received: from zps76.corp.google.com (zps76.corp.google.com [172.25.146.76]) by smtp-out.google.com with ESMTP id n92NpPuV019296 for ; Sat, 3 Oct 2009 00:51:26 +0100 Received: from ywh41 (ywh41.prod.google.com [10.192.8.41]) by zps76.corp.google.com with ESMTP id n92NpMAf018250 for ; Fri, 2 Oct 2009 16:51:23 -0700 Received: by ywh41 with SMTP id 41so1231690ywh.0 for ; Fri, 02 Oct 2009 16:51:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.101.53.11 with SMTP id f11mr3563984ank.158.1254527482676; Fri, 02 Oct 2009 16:51:22 -0700 (PDT) In-Reply-To: <8ac60eac0909021015u37d1a6e2u1ae88dd35d00d2b9@mail.gmail.com> References: <20090902163344.833F476568@localhost> <200909021747.27651.pedro@codesourcery.com> <8ac60eac0909021015u37d1a6e2u1ae88dd35d00d2b9@mail.gmail.com> Date: Fri, 02 Oct 2009 23:51:00 -0000 Message-ID: <8ac60eac0910021651o38990564ue7a65a870c14d00b@mail.gmail.com> Subject: Re: [patch] Allow gdbserver to dynamically lookup libthread_db.so.1 From: Paul Pluzhnikov To: Pedro Alves Cc: gdb-patches@sourceware.org, dje@google.com Content-Type: multipart/mixed; boundary=001636e1f3b1f746b20474fc700f 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-10/txt/msg00083.txt.bz2 --001636e1f3b1f746b20474fc700f Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1450 On Wed, Sep 2, 2009 at 10:15 AM, Paul Pluzhnikov wrote: > On Wed, Sep 2, 2009 at 9:47 AM, Pedro Alves wrote: > >> Since you're touching this, how about loading a thread_db per-process >> like gdb/linux-thread-db.c already does? > > Oh, I've had this patch locally for so long, I didn't realize gdbserver > is now multi-process as well. Will fix. Here is the fix. Since we can have several inferiors and several different libthread_db's, it no longer makes sense to check for td_thr_tls_get_addr at configure time. Also, previous patch was failing try_thread_db_load_1 on non-essential functions. Thanks, -- Paul Pluzhnikov doc/ 2009-10-02 Paul Pluzhnikov * gdb.texinfo (Server): Document libthread-db-search-path. gdbserver/ 2009-10-02 Paul Pluzhnikov * acinclude.m4: Link with libdl. * server.c (libthread_db_search_path): New variable. (handle_query): Set it. * linux-low.h (struct process_info_private): New members. * linux-low.c (linux_remove_process): Adjust. * thread-db.c (thread_db_create_event, thread_db_enable_reporting) (find_one_thread, maybe_attach_thread, find_new_threads_callback) (thread_db_find_new_threads, (thread_db_get_tls_address): Adjust. (try_thread_db_load_1, dladdr_to_soname): New functions. (try_thread_db_load, thread_db_load_search): New functions. (thread_db_init): Search for libthread_db. --001636e1f3b1f746b20474fc700f Content-Type: text/plain; charset=US-ASCII; name="gdb-gdbserver-threaddb-search-20091002.txt" Content-Disposition: attachment; filename="gdb-gdbserver-threaddb-search-20091002.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0bl993z0 Content-length: 27068 SW5kZXg6IGRvYy9nZGIudGV4aW5mbwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MjkKZGlmZiAtdSAtcCAtdSAtcjEu NjI5IGdkYi50ZXhpbmZvCi0tLSBkb2MvZ2RiLnRleGluZm8JMjYgU2VwIDIw MDkgMTY6NDc6MTMgLTAwMDAJMS42MjkKKysrIGRvYy9nZGIudGV4aW5mbwky IE9jdCAyMDA5IDIzOjQ5OjMxIC0wMDAwCkBAIC0xNDkwMCw2ICsxNDkwMCwx MyBAQCBEaXNhYmxlIG9yIGVuYWJsZSBnZW5lcmFsIGRlYnVnZ2luZyBtZXNz CiBEaXNhYmxlIG9yIGVuYWJsZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2Fn ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZW1vdGUKIHByb3RvY29sIChAcHhy ZWZ7UmVtb3RlIFByb3RvY29sfSkuCiAKK0BpdGVtIG1vbml0b3Igc2V0IGxp YnRocmVhZC1kYi1zZWFyY2gtcGF0aCBbUEFUSF0KK0BjaW5kZXggZ2Ric2Vy dmVyLCBzZWFyY2ggcGF0aCBmb3IgQGNvZGV7bGlidGhyZWFkX2RifQorV2hl biB0aGlzIGNvbW1hbmQgaXMgaXNzdWVkLCBAdmFye3BhdGh9IGlzIGEgY29s b24tc2VwYXJhdGVkIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBm b3IgQGNvZGV7bGlidGhyZWFkX2RifSAoQHB4cmVme1RocmVhZHMsLHNldAor bGlidGhyZWFkLWRiLXNlYXJjaC1wYXRofSkuICBJZiB5b3Ugb21pdCBAdmFy e3BhdGh9LAorQHNhbXB7bGlidGhyZWFkLWRiLXNlYXJjaC1wYXRofSB3aWxs IGJlIHJlc2V0IHRvIGFuIGVtcHR5IGxpc3QuCisKIEBpdGVtIG1vbml0b3Ig ZXhpdAogVGVsbCBnZGJzZXJ2ZXIgdG8gZXhpdCBpbW1lZGlhdGVseS4gIFRo aXMgY29tbWFuZCBzaG91bGQgYmUgZm9sbG93ZWQgYnkKIEBjb2Rle2Rpc2Nv bm5lY3R9IHRvIGNsb3NlIHRoZSBkZWJ1Z2dpbmcgc2Vzc2lvbi4gIEBjb2Rl e2dkYnNlcnZlcn0gd2lsbApJbmRleDogZ2Ric2VydmVyL2FjaW5jbHVkZS5t NAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL2dkYnNlcnZlci9hY2luY2x1ZGUubTQsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuNwpkaWZmIC11IC1wIC11IC1yMS43IGFjaW5jbHVkZS5tNAot LS0gZ2Ric2VydmVyL2FjaW5jbHVkZS5tNAk1IEp1biAyMDA4IDIyOjM2OjU3 IC0wMDAwCTEuNworKysgZ2Ric2VydmVyL2FjaW5jbHVkZS5tNAkyIE9jdCAy MDA5IDIzOjQ5OjMxIC0wMDAwCkBAIC0yMiw3ICsyMiw3IEBAIEFDX0RFRlVO KFtTUlZfQ0hFQ0tfVEhSRUFEX0RCXSwKICAgIHZvaWQgcHNfZ2V0X3RocmVh ZF9hcmVhKCkge30KICAgIHZvaWQgcHNfZ2V0cGlkKCkge31dLAogICBbdGRf dGFfbmV3KCk7XSwKLSAgW3Nydl9jdl90aHJlYWRfZGI9Ii1sdGhyZWFkX2Ri Il0sCisgIFtzcnZfY3ZfdGhyZWFkX2RiPSItbGRsIl0sCiAgIFtzcnZfY3Zf dGhyZWFkX2RiPW5vCiAKICBpZiB0ZXN0ICIkcHJlZml4IiA9ICIvdXNyIiB8 fCB0ZXN0ICIkcHJlZml4IiA9ICJOT05FIjsgdGhlbgpAQCAtNDIsMjggKzQy LDkgQEAgQUNfREVGVU4oW1NSVl9DSEVDS19USFJFQURfREJdLAogICAgdm9p ZCBwc19nZXRfdGhyZWFkX2FyZWEoKSB7fQogICAgdm9pZCBwc19nZXRwaWQo KSB7fV0sCiAgIFt0ZF90YV9uZXcoKTtdLAotICBbc3J2X2N2X3RocmVhZF9k Yj0iJHRocmVhZF9kYiJdLAorICBbc3J2X2N2X3RocmVhZF9kYj0iLWxkbCJd LAogICBbc3J2X2N2X3RocmVhZF9kYj1ub10pCiAgIF0pCiAgTElCUz0iJG9s ZF9MSUJTIgogXSldKQogCi1BQ19ERUZVTihbU1JWX0NIRUNLX1RMU19HRVRf QUREUl0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciB0aHJlYWRfZGJfdGxzX2dl dF9hZGRyXSxbc3J2X2N2X3Rsc19nZXRfYWRkcl0sCi0gW29sZF9MSUJTPSIk TElCUyIKLSAgTElCUz0iJExJQlMgJHNydl9jdl90aHJlYWRfZGIiCi0gIEFD X1RSWV9MSU5LKAotICAgW3ZvaWQgcHNfcGdsb2JhbF9sb29rdXAoKSB7fQot ICAgIHZvaWQgcHNfcGRyZWFkKCkge30KLSAgICB2b2lkIHBzX3Bkd3JpdGUo KSB7fQotICAgIHZvaWQgcHNfbGdldHJlZ3MoKSB7fQotICAgIHZvaWQgcHNf bHNldHJlZ3MoKSB7fQotICAgIHZvaWQgcHNfbGdldGZwcmVncygpIHt9Ci0g ICAgdm9pZCBwc19sc2V0ZnByZWdzKCkge30KLSAgICB2b2lkIHBzX2dldF90 aHJlYWRfYXJlYSgpIHt9Ci0gICAgdm9pZCBwc19nZXRwaWQoKSB7fV0sCi0g ICBbdGRfdGhyX3Rsc19nZXRfYWRkcigpO10sCi0gICBbc3J2X2N2X3Rsc19n ZXRfYWRkcj15ZXNdLAotICAgW3Nydl9jdl90bHNfZ2V0X2FkZHI9bm9dKQot ICBMSUJTPSIkb2xkX0xJQlMiCi1dKV0pCkluZGV4OiBnZGJzZXJ2ZXIvbGlu dXgtbG93LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93LmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMTEyCmRpZmYgLXUgLXAgLXUgLXIxLjExMiBsaW51 eC1sb3cuYwotLS0gZ2Ric2VydmVyL2xpbnV4LWxvdy5jCTMxIEp1bCAyMDA5 IDE1OjI1OjIyIC0wMDAwCTEuMTEyCisrKyBnZGJzZXJ2ZXIvbGludXgtbG93 LmMJMiBPY3QgMjAwOSAyMzo0OTozMSAtMDAwMApAQCAtNDIsNiArNDIsNyBA QAogI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ CiAjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CiAK ICNpZm5kZWYgU1BVRlNfTUFHSUMKICNkZWZpbmUgU1BVRlNfTUFHSUMgMHgy M2M5YjY0ZQpAQCAtMjYxLDggKzI2MiwxMiBAQCBsaW51eF9hZGRfcHJvY2Vz cyAoaW50IHBpZCwgaW50IGF0dGFjaGVkCiBzdGF0aWMgdm9pZAogbGludXhf cmVtb3ZlX3Byb2Nlc3MgKHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2Nlc3Mp CiB7Ci0gIGZyZWUgKHByb2Nlc3MtPnByaXZhdGUtPmFyY2hfcHJpdmF0ZSk7 Ci0gIGZyZWUgKHByb2Nlc3MtPnByaXZhdGUpOworICBzdHJ1Y3QgcHJvY2Vz c19pbmZvX3ByaXZhdGUgKnByaXYgPSBwcm9jZXNzLT5wcml2YXRlOworCisg IGlmIChwcml2LT5oYW5kbGUgIT0gTlVMTCkKKyAgICBkbGNsb3NlIChwcml2 LT5oYW5kbGUpOworICBmcmVlIChwcml2LT5hcmNoX3ByaXZhdGUpOworICBm cmVlIChwcml2KTsKICAgcmVtb3ZlX3Byb2Nlc3MgKHByb2Nlc3MpOwogfQog CkluZGV4OiBnZGJzZXJ2ZXIvbGludXgtbG93LmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIv bGludXgtbG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlmZiAt dSAtcCAtdSAtcjEuMzIgbGludXgtbG93LmgKLS0tIGdkYnNlcnZlci9saW51 eC1sb3cuaAkzMCBKdW4gMjAwOSAxNjozNToyNSAtMDAwMAkxLjMyCisrKyBn ZGJzZXJ2ZXIvbGludXgtbG93LmgJMiBPY3QgMjAwOSAyMzo0OTozMSAtMDAw MApAQCAtNTcsNiArNTcsMzIgQEAgc3RydWN0IHByb2Nlc3NfaW5mb19wcml2 YXRlCiAgIC8qIENvbm5lY3Rpb24gdG8gdGhlIGxpYnRocmVhZF9kYiBsaWJy YXJ5LiAgKi8KICAgdGRfdGhyYWdlbnRfdCAqdGhyZWFkX2FnZW50OwogCisg IC8qIEhhbmRsZSBvZiB0aGUgbGlidGhyZWFkX2RiIGZyb20gZGxvcGVuLiAg Ki8KKyAgdm9pZCAqaGFuZGxlOworCisgIC8qIEFkZHJlc3NlcyBvZiBsaWJ0 aHJlYWRfZGIgZnVuY3Rpb25zLiAgKi8KKyAgdGRfZXJyX2UgKCp0ZF90YV9u ZXdfcCkgKHN0cnVjdCBwc19wcm9jaGFuZGxlICogcHMsIHRkX3RocmFnZW50 X3QgKip0YSk7CisgIHRkX2Vycl9lICgqdGRfdGFfZXZlbnRfZ2V0bXNnX3Ap IChjb25zdCB0ZF90aHJhZ2VudF90ICp0YSwKKwkJCQkgICAgdGRfZXZlbnRf bXNnX3QgKm1zZyk7CisgIHRkX2Vycl9lICgqdGRfdGFfc2V0X2V2ZW50X3Ap IChjb25zdCB0ZF90aHJhZ2VudF90ICp0YSwKKwkJCQkgdGRfdGhyX2V2ZW50 c190ICpldmVudCk7CisgIHRkX2Vycl9lICgqdGRfdGFfZXZlbnRfYWRkcl9w KSAoY29uc3QgdGRfdGhyYWdlbnRfdCAqdGEsCisJCQkJICB0ZF9ldmVudF9l IGV2ZW50LCB0ZF9ub3RpZnlfdCAqcHRyKTsKKyAgdGRfZXJyX2UgKCp0ZF90 YV9tYXBfbHdwMnRocl9wKSAoY29uc3QgdGRfdGhyYWdlbnRfdCAqdGEsIGx3 cGlkX3QgbHdwaWQsCisJCQkJICAgdGRfdGhyaGFuZGxlX3QgKnRoKTsKKyAg dGRfZXJyX2UgKCp0ZF90aHJfZ2V0X2luZm9fcCkgKGNvbnN0IHRkX3Rocmhh bmRsZV90ICp0aCwKKwkJCQkgdGRfdGhyaW5mb190ICppbmZvcCk7CisgIHRk X2Vycl9lICgqdGRfdGhyX2V2ZW50X2VuYWJsZV9wKSAoY29uc3QgdGRfdGhy aGFuZGxlX3QgKnRoLCBpbnQgZXZlbnQpOworICB0ZF9lcnJfZSAoKnRkX3Rh X3Rocl9pdGVyX3ApIChjb25zdCB0ZF90aHJhZ2VudF90ICp0YSwKKwkJCQl0 ZF90aHJfaXRlcl9mICpjYWxsYmFjaywgdm9pZCAqY2JkYXRhX3AsCisJCQkJ dGRfdGhyX3N0YXRlX2Ugc3RhdGUsIGludCB0aV9wcmksCisJCQkJc2lnc2V0 X3QgKnRpX3NpZ21hc2tfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdGlfdXNlcl9m bGFncyk7CisgIHRkX2Vycl9lICgqdGRfdGhyX3Rsc19nZXRfYWRkcl9wKSAo Y29uc3QgdGRfdGhyaGFuZGxlX3QgKnRoLAorCQkJCSAgICAgdm9pZCAqbWFw X2FkZHJlc3MsCisJCQkJICAgICBzaXplX3Qgb2Zmc2V0LCB2b2lkICoqYWRk cmVzcyk7CisgIGNvbnN0IGNoYXIgKiogKCp0ZF9zeW1ib2xfbGlzdF9wKSAo dm9pZCk7CisKICAgLyogQXJjaC1zcGVjaWZpYyBhZGRpdGlvbnMuICAqLwog ICBzdHJ1Y3QgYXJjaF9wcm9jZXNzX2luZm8gKmFyY2hfcHJpdmF0ZTsKIH07 CkluZGV4OiBnZGJzZXJ2ZXIvc2VydmVyLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvc2Vy dmVyLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAyCmRpZmYgLXUgLXAg LXUgLXIxLjEwMiBzZXJ2ZXIuYwotLS0gZ2Ric2VydmVyL3NlcnZlci5jCTMw IEp1biAyMDA5IDE2OjM1OjI1IC0wMDAwCTEuMTAyCisrKyBnZGJzZXJ2ZXIv c2VydmVyLmMJMiBPY3QgMjAwOSAyMzo0OTozMSAtMDAwMApAQCAtMzIsNiAr MzIsOCBAQAogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2VuZGlmCiAKKyNpbmNs dWRlIDxjdHlwZS5oPgorCiBwdGlkX3QgY29udF90aHJlYWQ7CiBwdGlkX3Qg Z2VuZXJhbF90aHJlYWQ7CiBwdGlkX3Qgc3RlcF90aHJlYWQ7CkBAIC01MSw2 ICs1MywxMCBAQCBzdGF0aWMgY2hhciAqKnByb2dyYW1fYXJndiwgKip3cmFw cGVyX2FyCiAgICB3YXMgb3JpZ2luYWxseSB1c2VkIHRvIGRlYnVnIExpbnV4 VGhyZWFkcyBzdXBwb3J0LiAgKi8KIGludCBkZWJ1Z190aHJlYWRzOwogCisv KiBJZiBub3QgTlVMTCwgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRo cyB0byB1c2Ugd2hpbGUgbG9va2luZyBmb3IKKyAgIGxpYnRocmVhZF9kYi4g ICovCitjaGFyICpsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGg7CisKIC8qIEVu YWJsZSBkZWJ1Z2dpbmcgb2YgaC93IGJyZWFrcG9pbnQvd2F0Y2hwb2ludCBz dXBwb3J0LiAgKi8KIGludCBkZWJ1Z19od19wb2ludHM7CiAKQEAgLTEyNDUs NiArMTI1MSwyMyBAQCBoYW5kbGVfcXVlcnkgKGNoYXIgKm93bl9idWYsIGlu dCBwYWNrZXRfCiAJbW9uaXRvcl9zaG93X2hlbHAgKCk7CiAgICAgICBlbHNl IGlmIChzdHJjbXAgKG1vbiwgImV4aXQiKSA9PSAwKQogCWV4aXRfcmVxdWVz dGVkID0gMTsKKyAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1vbiwgInNldCBs aWJ0aHJlYWQtZGItc2VhcmNoLXBhdGgiLCAyOCkgPT0gMCkKKwl7CisJICBj b25zdCBjaGFyICpjcCA9IG1vbiArIDI4OworCisJICBpZiAobGlidGhyZWFk X2RiX3NlYXJjaF9wYXRoICE9IE5VTEwpCisJICAgIGZyZWUgKGxpYnRocmVh ZF9kYl9zZWFyY2hfcGF0aCk7CisKKwkgIC8qIFNraXAgbGVhZGluZyBzcGFj ZSAoaWYgYW55KS4gICovCisJICB3aGlsZSAoaXNzcGFjZSAoKmNwKSkKKwkg ICAgKytjcDsKKworCSAgbGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoID0geHN0 cmR1cCAoY3ApOworCisJICBtb25pdG9yX291dHB1dCAoImxpYnRocmVhZC1k Yi1zZWFyY2gtcGF0aCBzZXQgdG8gYCIpOworCSAgbW9uaXRvcl9vdXRwdXQg KGxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCk7CisJICBtb25pdG9yX291dHB1 dCAoIidcbiIpOworCX0KICAgICAgIGVsc2UKIAl7CiAJICBtb25pdG9yX291 dHB1dCAoIlVua25vd24gbW9uaXRvciBjb21tYW5kLlxuXG4iKTsKSW5kZXg6 IGdkYnNlcnZlci90aHJlYWQtZGIuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci90aHJlYWQt ZGIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC11 IC1yMS4yMyB0aHJlYWQtZGIuYwotLS0gZ2Ric2VydmVyL3RocmVhZC1kYi5j CTMgQXByIDIwMDkgMjA6MTU6NTEgLTAwMDAJMS4yMworKysgZ2Ric2VydmVy L3RocmVhZC1kYi5jCTIgT2N0IDIwMDkgMjM6NDk6MzEgLTAwMDAKQEAgLTI3 LDEzICsyNywxNCBAQCBleHRlcm4gaW50IGRlYnVnX3RocmVhZHM7CiAKIHN0 YXRpYyBpbnQgdGhyZWFkX2RiX3VzZV9ldmVudHM7CiAKLSNpZmRlZiBIQVZF X1RIUkVBRF9EQl9ICi0jaW5jbHVkZSA8dGhyZWFkX2RiLmg+Ci0jZW5kaWYK LQogI2luY2x1ZGUgImdkYl9wcm9jX3NlcnZpY2UuaCIKKyNpbmNsdWRlICIu Li9nZGJfdGhyZWFkX2RiLmgiCiAKKyNpbmNsdWRlIDxkbGZjbi5oPgogI2lu Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCitleHRl cm4gY2hhciAqbGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoOwogCiBzdGF0aWMg aW50IGZpbmRfb25lX3RocmVhZCAocHRpZF90KTsKIHN0YXRpYyBpbnQgZmlu ZF9uZXdfdGhyZWFkc19jYWxsYmFjayAoY29uc3QgdGRfdGhyaGFuZGxlX3Qg KnRoX3AsIHZvaWQgKmRhdGEpOwpAQCAtMTMyLDYgKzEzMywxMCBAQCB0aHJl YWRfZGJfY3JlYXRlX2V2ZW50IChDT1JFX0FERFIgd2hlcmUpCiAgIHN0cnVj dCBsd3BfaW5mbyAqbHdwOwogICBzdHJ1Y3QgcHJvY2Vzc19pbmZvX3ByaXZh dGUgKnByb2MgPSBjdXJyZW50X3Byb2Nlc3MoKS0+cHJpdmF0ZTsKIAorICBp ZiAocHJvYy0+dGRfdGFfZXZlbnRfZ2V0bXNnX3AgPT0gTlVMTCkKKyAgICAv KiBXZSBzaG91bGRuJ3QgaGF2ZSBldmVyIGJlIGhlcmUgaW4gdGhlIGZpcnN0 IHBsYWNlLiAgKi8KKyAgICByZXR1cm4gVERfRVJSOworCiAgIGlmIChkZWJ1 Z190aHJlYWRzKQogICAgIGZwcmludGYgKHN0ZGVyciwgIlRocmVhZCBjcmVh dGlvbiBldmVudC5cbiIpOwogCkBAIC0xMzksNyArMTQ0LDcgQEAgdGhyZWFk X2RiX2NyZWF0ZV9ldmVudCAoQ09SRV9BRERSIHdoZXJlKQogICAgICBJbiB0 aGUgTGludXhUaHJlYWRzIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIHNhZmUs CiAgICAgIGJlY2F1c2UgYWxsIGV2ZW50cyBjb21lIGZyb20gdGhlIG1hbmFn ZXIgdGhyZWFkCiAgICAgIChleGNlcHQgZm9yIGl0cyBvd24gY3JlYXRpb24s IG9mIGNvdXJzZSkuICAqLwotICBlcnIgPSB0ZF90YV9ldmVudF9nZXRtc2cg KHByb2MtPnRocmVhZF9hZ2VudCwgJm1zZyk7CisgIGVyciA9IHByb2MtPnRk X3RhX2V2ZW50X2dldG1zZ19wIChwcm9jLT50aHJlYWRfYWdlbnQsICZtc2cp OwogICBpZiAoZXJyICE9IFREX09LKQogICAgIGZwcmludGYgKHN0ZGVyciwg InRocmVhZCBnZXRtc2cgZXJyOiAlc1xuIiwKIAkgICAgIHRocmVhZF9kYl9l cnJfc3RyIChlcnIpKTsKQEAgLTE3NywxNyArMTgyLDE3IEBAIHRocmVhZF9k Yl9lbmFibGVfcmVwb3J0aW5nICgpCiAgIHRkX2Vycl9lIGVycjsKICAgc3Ry dWN0IHByb2Nlc3NfaW5mb19wcml2YXRlICpwcm9jID0gY3VycmVudF9wcm9j ZXNzKCktPnByaXZhdGU7CiAKKyAgaWYgKHByb2MtPnRkX3RhX3NldF9ldmVu dF9wID09IE5VTEwKKyAgICAgIHx8IHByb2MtPnRkX3RhX2V2ZW50X2FkZHJf cCA9PSBOVUxMCisgICAgICB8fCBwcm9jLT50ZF90YV9ldmVudF9nZXRtc2df cCA9PSBOVUxMKQorICAgIC8qIFRoaXMgbGlidGhyZWFkX2RiIGlzIG1pc3Np bmcgcmVxdWlyZWQgc3VwcG9ydC4gICovCisgICAgcmV0dXJuIFREX0VSUjsK KwogICAvKiBTZXQgdGhlIHByb2Nlc3Mgd2lkZSBtYXNrIHNheWluZyB3aGlj aCBldmVudHMgd2UncmUgaW50ZXJlc3RlZCBpbi4gICovCiAgIHRkX2V2ZW50 X2VtcHR5c2V0ICgmZXZlbnRzKTsKICAgdGRfZXZlbnRfYWRkc2V0ICgmZXZl bnRzLCBURF9DUkVBVEUpOwogCi0jaWYgMAotICAvKiBUaGlzIGlzIHJlcG9y dGVkIHRvIGJlIGJyb2tlbiBpbiBnbGliYyAyLjEuMy4gIEEgZGlmZmVyZW50 IGFwcHJvYWNoCi0gICAgIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHN1cHBvcnQg dGhhdC4gICovCi0gIHRkX2V2ZW50X2FkZHNldCAoJmV2ZW50cywgVERfREVB VEgpOwotI2VuZGlmCi0KLSAgZXJyID0gdGRfdGFfc2V0X2V2ZW50IChwcm9j LT50aHJlYWRfYWdlbnQsICZldmVudHMpOworICBlcnIgPSBwcm9jLT50ZF90 YV9zZXRfZXZlbnRfcCAocHJvYy0+dGhyZWFkX2FnZW50LCAmZXZlbnRzKTsK ICAgaWYgKGVyciAhPSBURF9PSykKICAgICB7CiAgICAgICB3YXJuaW5nICgi VW5hYmxlIHRvIHNldCBnbG9iYWwgdGhyZWFkIGV2ZW50IG1hc2s6ICVzIiwK QEAgLTE5Niw3ICsyMDEsNyBAQCB0aHJlYWRfZGJfZW5hYmxlX3JlcG9ydGlu ZyAoKQogICAgIH0KIAogICAvKiBHZXQgYWRkcmVzcyBmb3IgdGhyZWFkIGNy ZWF0aW9uIGJyZWFrcG9pbnQuICAqLwotICBlcnIgPSB0ZF90YV9ldmVudF9h ZGRyIChwcm9jLT50aHJlYWRfYWdlbnQsIFREX0NSRUFURSwgJm5vdGlmeSk7 CisgIGVyciA9IHByb2MtPnRkX3RhX2V2ZW50X2FkZHJfcCAocHJvYy0+dGhy ZWFkX2FnZW50LCBURF9DUkVBVEUsICZub3RpZnkpOwogICBpZiAoZXJyICE9 IFREX09LKQogICAgIHsKICAgICAgIHdhcm5pbmcgKCJVbmFibGUgdG8gZ2V0 IGxvY2F0aW9uIGZvciB0aHJlYWQgY3JlYXRpb24gYnJlYWtwb2ludDogJXMi LApAQCAtMjA2LDIyICsyMTEsNiBAQCB0aHJlYWRfZGJfZW5hYmxlX3JlcG9y dGluZyAoKQogICBzZXRfYnJlYWtwb2ludF9hdCAoKENPUkVfQUREUikgKHVu c2lnbmVkIGxvbmcpIG5vdGlmeS51LmJwdGFkZHIsCiAJCSAgICAgdGhyZWFk X2RiX2NyZWF0ZV9ldmVudCk7CiAKLSNpZiAwCi0gIC8qIERvbid0IGNvbmNl cm4gb3Vyc2VsdmVzIHdpdGggcmVwb3J0ZWQgdGhyZWFkIGRlYXRocywgb25s eQotICAgICB3aXRoIGFjdHVhbCB0aHJlYWQgZGVhdGhzICh2aWEgd2FpdCku ICAqLwotCi0gIC8qIEdldCBhZGRyZXNzIGZvciB0aHJlYWQgZGVhdGggYnJl YWtwb2ludC4gICovCi0gIGVyciA9IHRkX3RhX2V2ZW50X2FkZHIgKHByb2Mt PnRocmVhZF9hZ2VudCwgVERfREVBVEgsICZub3RpZnkpOwotICBpZiAoZXJy ICE9IFREX09LKQotICAgIHsKLSAgICAgIHdhcm5pbmcgKCJVbmFibGUgdG8g Z2V0IGxvY2F0aW9uIGZvciB0aHJlYWQgZGVhdGggYnJlYWtwb2ludDogJXMi LAotCSAgICAgICB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7Ci0gICAgICBy ZXR1cm47Ci0gICAgfQotICBzZXRfYnJlYWtwb2ludF9hdCAoKENPUkVfQURE UikgKHVuc2lnbmVkIGxvbmcpIG5vdGlmeS51LmJwdGFkZHIsCi0JCSAgICAg dGhyZWFkX2RiX2RlYXRoX2V2ZW50KTsKLSNlbmRpZgotCiAgIHJldHVybiAx OwogfQogCkBAIC0yMzMsNyArMjIyLDcgQEAgZmluZF9vbmVfdGhyZWFkIChw dGlkX3QgcHRpZCkKICAgdGRfZXJyX2UgZXJyOwogICBzdHJ1Y3QgdGhyZWFk X2luZm8gKmluZmVyaW9yOwogICBzdHJ1Y3QgbHdwX2luZm8gKmx3cDsKLSAg c3RydWN0IHByb2Nlc3NfaW5mb19wcml2YXRlICpwcm9jOworICBzdHJ1Y3Qg cHJvY2Vzc19pbmZvX3ByaXZhdGUgKnByb2MgPSBjdXJyZW50X3Byb2Nlc3Mo KS0+cHJpdmF0ZTsKICAgaW50IGx3cGlkID0gcHRpZF9nZXRfbHdwIChwdGlk KTsKIAogICBpbmZlcmlvciA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgZmlu ZF9pbmZlcmlvcl9pZCAoJmFsbF90aHJlYWRzLCBwdGlkKTsKQEAgLTI0Miwx MyArMjMxLDEyIEBAIGZpbmRfb25lX3RocmVhZCAocHRpZF90IHB0aWQpCiAg ICAgcmV0dXJuIDE7CiAKICAgLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRo aXMgdGhyZWFkLiAgKi8KLSAgcHJvYyA9IGdldF90aHJlYWRfcHJvY2VzcyAo aW5mZXJpb3IpLT5wcml2YXRlOwotICBlcnIgPSB0ZF90YV9tYXBfbHdwMnRo ciAocHJvYy0+dGhyZWFkX2FnZW50LCBsd3BpZCwgJnRoKTsKKyAgZXJyID0g cHJvYy0+dGRfdGFfbWFwX2x3cDJ0aHJfcCAocHJvYy0+dGhyZWFkX2FnZW50 LCBsd3BpZCwgJnRoKTsKICAgaWYgKGVyciAhPSBURF9PSykKICAgICBlcnJv ciAoIkNhbm5vdCBnZXQgdGhyZWFkIGhhbmRsZSBmb3IgTFdQICVkOiAlcyIs CiAJICAgbHdwaWQsIHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsKIAotICBl cnIgPSB0ZF90aHJfZ2V0X2luZm8gKCZ0aCwgJnRpKTsKKyAgZXJyID0gcHJv Yy0+dGRfdGhyX2dldF9pbmZvX3AgKCZ0aCwgJnRpKTsKICAgaWYgKGVyciAh PSBURF9PSykKICAgICBlcnJvciAoIkNhbm5vdCBnZXQgdGhyZWFkIGluZm8g Zm9yIExXUCAlZDogJXMiLAogCSAgIGx3cGlkLCB0aHJlYWRfZGJfZXJyX3N0 ciAoZXJyKSk7CkBAIC0yNjYsNyArMjU0LDcgQEAgZmluZF9vbmVfdGhyZWFk IChwdGlkX3QgcHRpZCkKIAogICBpZiAodGhyZWFkX2RiX3VzZV9ldmVudHMp CiAgICAgewotICAgICAgZXJyID0gdGRfdGhyX2V2ZW50X2VuYWJsZSAoJnRo LCAxKTsKKyAgICAgIGVyciA9IHByb2MtPnRkX3Rocl9ldmVudF9lbmFibGVf cCAoJnRoLCAxKTsKICAgICAgIGlmIChlcnIgIT0gVERfT0spCiAJZXJyb3Ig KCJDYW5ub3QgZW5hYmxlIHRocmVhZCBldmVudCByZXBvcnRpbmcgZm9yICVk OiAlcyIsCiAJICAgICAgIHRpLnRpX2xpZCwgdGhyZWFkX2RiX2Vycl9zdHIg KGVycikpOwpAQCAtMzEwLDcgKzI5OCw4IEBAIG1heWJlX2F0dGFjaF90aHJl YWQgKGNvbnN0IHRkX3RocmhhbmRsZV8KIAogICBpZiAodGhyZWFkX2RiX3Vz ZV9ldmVudHMpCiAgICAgewotICAgICAgZXJyID0gdGRfdGhyX2V2ZW50X2Vu YWJsZSAodGhfcCwgMSk7CisgICAgICBzdHJ1Y3QgcHJvY2Vzc19pbmZvX3By aXZhdGUgKnByb2MgPSBjdXJyZW50X3Byb2Nlc3MoKS0+cHJpdmF0ZTsKKyAg ICAgIGVyciA9IHByb2MtPnRkX3Rocl9ldmVudF9lbmFibGVfcCAodGhfcCwg MSk7CiAgICAgICBpZiAoZXJyICE9IFREX09LKQogCWVycm9yICgiQ2Fubm90 IGVuYWJsZSB0aHJlYWQgZXZlbnQgcmVwb3J0aW5nIGZvciAlZDogJXMiLAog CSAgICAgICB0aV9wLT50aV9saWQsIHRocmVhZF9kYl9lcnJfc3RyIChlcnIp KTsKQEAgLTMyMiw4ICszMTEsOSBAQCBmaW5kX25ld190aHJlYWRzX2NhbGxi YWNrIChjb25zdCB0ZF90aHJoCiB7CiAgIHRkX3RocmluZm9fdCB0aTsKICAg dGRfZXJyX2UgZXJyOworICBzdHJ1Y3QgcHJvY2Vzc19pbmZvX3ByaXZhdGUg KnByb2MgPSBjdXJyZW50X3Byb2Nlc3MoKS0+cHJpdmF0ZTsKIAotICBlcnIg PSB0ZF90aHJfZ2V0X2luZm8gKHRoX3AsICZ0aSk7CisgIGVyciA9IHByb2Mt PnRkX3Rocl9nZXRfaW5mb19wICh0aF9wLCAmdGkpOwogICBpZiAoZXJyICE9 IFREX09LKQogICAgIGVycm9yICgiQ2Fubm90IGdldCB0aHJlYWQgaW5mbzog JXMiLCB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CiAKQEAgLTM1MCwxMCAr MzQwLDEwIEBAIHRocmVhZF9kYl9maW5kX25ld190aHJlYWRzICh2b2lkKQog ICAgIHJldHVybjsKIAogICAvKiBJdGVyYXRlIG92ZXIgYWxsIHVzZXItc3Bh Y2UgdGhyZWFkcyB0byBkaXNjb3ZlciBuZXcgdGhyZWFkcy4gICovCi0gIGVy ciA9IHRkX3RhX3Rocl9pdGVyIChwcm9jLT50aHJlYWRfYWdlbnQsCi0JCQlm aW5kX25ld190aHJlYWRzX2NhbGxiYWNrLCBOVUxMLAotCQkJVERfVEhSX0FO WV9TVEFURSwgVERfVEhSX0xPV0VTVF9QUklPUklUWSwKLQkJCVREX1NJR05P X01BU0ssIFREX1RIUl9BTllfVVNFUl9GTEFHUyk7CisgIGVyciA9IHByb2Mt PnRkX3RhX3Rocl9pdGVyX3AgKHByb2MtPnRocmVhZF9hZ2VudCwKKwkJCQlm aW5kX25ld190aHJlYWRzX2NhbGxiYWNrLCBOVUxMLAorCQkJCVREX1RIUl9B TllfU1RBVEUsIFREX1RIUl9MT1dFU1RfUFJJT1JJVFksCisJCQkJVERfU0lH Tk9fTUFTSywgVERfVEhSX0FOWV9VU0VSX0ZMQUdTKTsKICAgaWYgKGVyciAh PSBURF9PSykKICAgICBlcnJvciAoIkNhbm5vdCBmaW5kIG5ldyB0aHJlYWRz OiAlcyIsIHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsKIH0KQEAgLTM2Niwx MCArMzU2LDExIEBAIHRocmVhZF9kYl9maW5kX25ld190aHJlYWRzICh2b2lk KQogc3RhdGljIHZvaWQKIHRocmVhZF9kYl9sb29rX3VwX3N5bWJvbHMgKHZv aWQpCiB7Ci0gIGNvbnN0IGNoYXIgKipzeW1fbGlzdCA9IHRkX3N5bWJvbF9s aXN0ICgpOworICBzdHJ1Y3QgcHJvY2Vzc19pbmZvX3ByaXZhdGUgKnByb2Mg PSBjdXJyZW50X3Byb2Nlc3MoKS0+cHJpdmF0ZTsKKyAgY29uc3QgY2hhciAq KnN5bV9saXN0OwogICBDT1JFX0FERFIgdW51c2VkOwogCi0gIGZvciAoc3lt X2xpc3QgPSB0ZF9zeW1ib2xfbGlzdCAoKTsgKnN5bV9saXN0OyBzeW1fbGlz dCsrKQorICBmb3IgKHN5bV9saXN0ID0gcHJvYy0+dGRfc3ltYm9sX2xpc3Rf cCAoKTsgKnN5bV9saXN0OyBzeW1fbGlzdCsrKQogICAgIGxvb2tfdXBfb25l X3N5bWJvbCAoKnN5bV9saXN0LCAmdW51c2VkKTsKIH0KIApAQCAtMzc3LDE0 ICszNjgsMjEgQEAgaW50CiB0aHJlYWRfZGJfZ2V0X3Rsc19hZGRyZXNzIChz dHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgQ09SRV9BRERSIG9mZnNldCwK IAkJCSAgIENPUkVfQUREUiBsb2FkX21vZHVsZSwgQ09SRV9BRERSICphZGRy ZXNzKQogewotI2lmIEhBVkVfVERfVEhSX1RMU19HRVRfQUREUgogICBwc2Fk ZHJfdCBhZGRyOwogICB0ZF9lcnJfZSBlcnI7CiAgIHN0cnVjdCBsd3BfaW5m byAqbHdwOwogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnNhdmVkX2luZmVyaW9y OworICBzdHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9jOworICBzdHJ1Y3QgcHJv Y2Vzc19pbmZvX3ByaXZhdGUgKnByaXY7CisKKyAgcHJvYyA9IGdldF90aHJl YWRfcHJvY2VzcyAodGhyZWFkKTsKKyAgcHJpdiA9IHByb2MtPnByaXZhdGU7 CiAKICAgLyogSWYgdGhlIHRocmVhZCBsYXllciBpcyBub3QgKHlldCkgaW5p dGlhbGl6ZWQsIGZhaWwuICAqLwotICBpZiAoIWdldF90aHJlYWRfcHJvY2Vz cyAodGhyZWFkKS0+YWxsX3N5bWJvbHNfbG9va2VkX3VwKQorICBpZiAocHJv Yy0+YWxsX3N5bWJvbHNfbG9va2VkX3VwID09IDApCisgICAgcmV0dXJuIFRE X0VSUjsKKworICBpZiAocHJpdi0+dGRfdGhyX3Rsc19nZXRfYWRkcl9wID09 IE5VTEwpCiAgICAgcmV0dXJuIFREX0VSUjsKIAogICBsd3AgPSBnZXRfdGhy ZWFkX2x3cCAodGhyZWFkKTsKQEAgLTM5OCw4ICszOTYsOSBAQCB0aHJlYWRf ZGJfZ2V0X3Rsc19hZGRyZXNzIChzdHJ1Y3QgdGhyZWFkCiAgIC8qIE5vdGUg dGhlIGNhc3QgdGhyb3VnaCB1aW50cHRyX3Q6IHRoaXMgaW50ZXJmYWNlIG9u bHkgd29ya3MgaWYKICAgICAgYSB0YXJnZXQgYWRkcmVzcyBmaXRzIGluIGEg cHNhZGRyX3QsIHdoaWNoIGlzIGEgaG9zdCBwb2ludGVyLgogICAgICBTbyBh IDMyLWJpdCBkZWJ1Z2dlciBjYW4gbm90IGFjY2VzcyA2NC1iaXQgVExTIHRo cm91Z2ggdGhpcy4gICovCi0gIGVyciA9IHRkX3Rocl90bHNfZ2V0X2FkZHIg KCZsd3AtPnRoLCAocHNhZGRyX3QpICh1aW50cHRyX3QpIGxvYWRfbW9kdWxl LAotCQkJICAgICBvZmZzZXQsICZhZGRyKTsKKyAgZXJyID0gcHJpdi0+dGRf dGhyX3Rsc19nZXRfYWRkcl9wICgmbHdwLT50aCwKKwkJCQkgICAgIChwc2Fk ZHJfdCkgKHVpbnRwdHJfdCkgbG9hZF9tb2R1bGUsCisJCQkJICAgICBvZmZz ZXQsICZhZGRyKTsKICAgY3VycmVudF9pbmZlcmlvciA9IHNhdmVkX2luZmVy aW9yOwogICBpZiAoZXJyID09IFREX09LKQogICAgIHsKQEAgLTQwOCwxNyAr NDA3LDE4MCBAQCB0aHJlYWRfZGJfZ2V0X3Rsc19hZGRyZXNzIChzdHJ1Y3Qg dGhyZWFkCiAgICAgfQogICBlbHNlCiAgICAgcmV0dXJuIGVycjsKLSNlbHNl Ci0gIHJldHVybiAtMTsKLSNlbmRpZgorfQorCitzdGF0aWMgaW50Cit0cnlf dGhyZWFkX2RiX2xvYWRfMSAodm9pZCAqaGFuZGxlKQoreworICB0ZF9lcnJf ZSBlcnI7CisgIHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2MgPSBjdXJyZW50 X3Byb2Nlc3MgKCk7CisgIHN0cnVjdCBwcm9jZXNzX2luZm9fcHJpdmF0ZSAq cHJpdiA9IHByb2MtPnByaXZhdGU7CisKKyAgLyogSW5pdGlhbGl6ZSBwb2lu dGVycyB0byB0aGUgZHluYW1pYyBsaWJyYXJ5IGZ1bmN0aW9ucyB3ZSB3aWxs IHVzZS4KKyAgICAgRXNzZW50aWFsIGZ1bmN0aW9ucyBmaXJzdC4gICovCisK KyNkZWZpbmUgQ0hLKHJlcXVpcmVkLCBhKQkJCQlcCisgIGlmICgoYSkgPT0g TlVMTCkgewkJCQkJXAorICAgIGlmIChkZWJ1Z190aHJlYWRzKSB7CQkJCVwK KyAgICAgIGZwcmludGYgKHN0ZGVyciwgImRsc3ltOiAlc1xuIiwgZGxlcnJv ciAoKSk7CVwKKyAgICB9CQkJCQkJCVwKKyAgICBpZiAocmVxdWlyZWQpCQkJ CQlcCisgICAgICByZXR1cm4gMDsJCQkJCQlcCisgIH0KKworICBDSEsgKDEs IHByaXYtPnRkX3RhX25ld19wID0gZGxzeW0gKGhhbmRsZSwgInRkX3RhX25l dyIpKTsKKworICAvKiBBdHRlbXB0IHRvIG9wZW4gYSBjb25uZWN0aW9uIHRv IHRoZSB0aHJlYWQgbGlicmFyeS4gICovCisgIGVyciA9IHByaXYtPnRkX3Rh X25ld19wICgmcHJpdi0+cHJvY19oYW5kbGUsICZwcml2LT50aHJlYWRfYWdl bnQpOworICBpZiAoZXJyICE9IFREX09LKQorICAgIHsKKyAgICAgIHByaXYt PnRkX3RhX25ld19wID0gTlVMTDsKKyAgICAgIGlmIChkZWJ1Z190aHJlYWRz KQorCWZwcmludGYgKHN0ZGVyciwgInRkX3RhX25ldygpOiAlc1xuIiwgdGhy ZWFkX2RiX2Vycl9zdHIgKGVycikpOworICAgICAgcmV0dXJuIDA7CisgICAg fQorCisgIENISyAoMSwgcHJpdi0+dGRfdGFfbWFwX2x3cDJ0aHJfcCA9IGRs c3ltIChoYW5kbGUsICJ0ZF90YV9tYXBfbHdwMnRociIpKTsKKyAgQ0hLICgx LCBwcml2LT50ZF90aHJfZ2V0X2luZm9fcCA9IGRsc3ltIChoYW5kbGUsICJ0 ZF90aHJfZ2V0X2luZm8iKSk7CisgIENISyAoMSwgcHJpdi0+dGRfdGFfdGhy X2l0ZXJfcCA9IGRsc3ltIChoYW5kbGUsICJ0ZF90YV90aHJfaXRlciIpKTsK KyAgQ0hLICgxLCBwcml2LT50ZF9zeW1ib2xfbGlzdF9wID0gZGxzeW0gKGhh bmRsZSwgInRkX3N5bWJvbF9saXN0IikpOworCisgIC8qIFRoaXMgaXMgcmVx dWlyZWQgb25seSB3aGVuIHRocmVhZF9kYl91c2VfZXZlbnRzIGlzIG9uLiAg Ki8KKyAgQ0hLICh0aHJlYWRfZGJfdXNlX2V2ZW50cywKKyAgICAgICBwcml2 LT50ZF90aHJfZXZlbnRfZW5hYmxlX3AgPSBkbHN5bSAoaGFuZGxlLCAidGRf dGhyX2V2ZW50X2VuYWJsZSIpKTsKKworICAvKiBUaGVzZSBhcmUgbm90IGVz c2VudGlhbC4gICovCisgIENISyAoMCwgcHJpdi0+dGRfdGFfZXZlbnRfYWRk cl9wID0gZGxzeW0gKGhhbmRsZSwgInRkX3RhX2V2ZW50X2FkZHIiKSk7Cisg IENISyAoMCwgcHJpdi0+dGRfdGFfc2V0X2V2ZW50X3AgPSBkbHN5bSAoaGFu ZGxlLCAidGRfdGFfc2V0X2V2ZW50IikpOworICBDSEsgKDAsIHByaXYtPnRk X3RhX2V2ZW50X2dldG1zZ19wID0gZGxzeW0gKGhhbmRsZSwgInRkX3RhX2V2 ZW50X2dldG1zZyIpKTsKKyAgQ0hLICgwLCBwcml2LT50ZF90aHJfdGxzX2dl dF9hZGRyX3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGhyX3Rsc19nZXRfYWRk ciIpKTsKKworI3VuZGVmIENISworCisgIHJldHVybiAxOworfQorCisvKiBM b29rdXAgYSBsaWJyYXJ5IGluIHdoaWNoIGdpdmVuIHN5bWJvbCByZXNpZGVz LgorICAgTm90ZTogdGhpcyBpcyBsb29raW5nIGluIHRoZSBHREJTRVJWRVIg cHJvY2Vzcywgbm90IGluIHRoZSBpbmZlcmlvci4KKyAgIFJldHVybnMgbGli cmFyeSBuYW1lLCBvciBOVUxMLiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIg KgorZGxhZGRyX3RvX3NvbmFtZSAoY29uc3Qgdm9pZCAqYWRkcikKK3sKKyAg RGxfaW5mbyBpbmZvOworCisgIGlmIChkbGFkZHIgKGFkZHIsICZpbmZvKSAh PSAwKQorICAgIHJldHVybiBpbmZvLmRsaV9mbmFtZTsKKyAgcmV0dXJuIE5V TEw7Cit9CisKK3N0YXRpYyBpbnQKK3RyeV90aHJlYWRfZGJfbG9hZCAoY29u c3QgY2hhciAqbGlicmFyeSkKK3sKKyAgdm9pZCAqaGFuZGxlOworCisgIGlm IChkZWJ1Z190aHJlYWRzKQorICAgIGZwcmludGYgKHN0ZGVyciwgIlRyeWlu ZyBob3N0IGxpYnRocmVhZF9kYiBsaWJyYXJ5OiAlcy5cbiIsCisJICAgICBs aWJyYXJ5KTsKKyAgaGFuZGxlID0gZGxvcGVuIChsaWJyYXJ5LCBSVExEX05P Vyk7CisgIGlmIChoYW5kbGUgPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAo ZGVidWdfdGhyZWFkcykKKwlmcHJpbnRmIChzdGRlcnIsICJkbG9wZW4gZmFp bGVkOiAlcy5cbiIsIGRsZXJyb3IgKCkpOworICAgICAgcmV0dXJuIDA7Cisg ICAgfQorCisgIGlmIChkZWJ1Z190aHJlYWRzICYmIHN0cmNociAobGlicmFy eSwgJy8nKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIHZvaWQgKnRkX2luaXQ7 CisKKyAgICAgIHRkX2luaXQgPSBkbHN5bSAoaGFuZGxlLCAidGRfaW5pdCIp OworICAgICAgaWYgKHRkX2luaXQgIT0gTlVMTCkKKyAgICAgICAgeworICAg ICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0IGxpYnBhdGggPSBkbGFkZHJfdG9f c29uYW1lICh0ZF9pbml0KTsKKworICAgICAgICAgIGlmIChsaWJwYXRoICE9 IE5VTEwpCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJIb3N0ICVz IHJlc29sdmVkIHRvOiAlcy5cbiIsCisJCSAgICAgbGlicmFyeSwgbGlicGF0 aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKHRyeV90aHJlYWRfZGJf bG9hZF8xIChoYW5kbGUpKQorICAgIHJldHVybiAxOworCisgIC8qIFRoaXMg bGlicmFyeSAicmVmdXNlZCIgdG8gd29yayBvbiBjdXJyZW50IGluZmVyaW9y LiAgKi8KKyAgZGxjbG9zZSAoaGFuZGxlKTsKKyAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQKK3RocmVhZF9kYl9sb2FkX3NlYXJjaCAoKQoreworICBj aGFyIHBhdGhbUEFUSF9NQVhdOworICBjb25zdCBjaGFyICpzZWFyY2hfcGF0 aDsKKyAgaW50IHJjID0gMDsKKworCisgIGlmIChsaWJ0aHJlYWRfZGJfc2Vh cmNoX3BhdGggPT0gTlVMTCkKKyAgICBsaWJ0aHJlYWRfZGJfc2VhcmNoX3Bh dGggPSB4c3RyZHVwIChMSUJUSFJFQURfREJfU0VBUkNIX1BBVEgpOworCisg IHNlYXJjaF9wYXRoID0gbGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoOworICB3 aGlsZSAoKnNlYXJjaF9wYXRoKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIg KmVuZCA9IHN0cmNociAoc2VhcmNoX3BhdGgsICc6Jyk7CisgICAgICBpZiAo ZW5kKQorCXsKKwkgIHNpemVfdCBsZW4gPSBlbmQgLSBzZWFyY2hfcGF0aDsK KyAgICAgICAgICBpZiAobGVuICsgMSArIHN0cmxlbiAoTElCVEhSRUFEX0RC X1NPKSArIDEgPiBzaXplb2YgKHBhdGgpKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBjaGFyICpjcCA9IHhtYWxsb2MgKGxlbiArIDEpOworICAg ICAgICAgICAgICBtZW1jcHkgKGNwLCBzZWFyY2hfcGF0aCwgbGVuKTsKKyAg ICAgICAgICAgICAgY3BbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgIHdh cm5pbmcgKCJsaWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGggY29tcG9uZW50IHRv byBsb25nLCAiCisJCSAgICAgICAiaWdub3JlZDogJXMuIiwgY3ApOworICAg ICAgICAgICAgICBmcmVlIChjcCk7CisgICAgICAgICAgICAgIHNlYXJjaF9w YXRoICs9IGxlbiArIDE7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICAgICAgfQorCSAgbWVtY3B5IChwYXRoLCBzZWFyY2hfcGF0aCwgbGVu KTsKKwkgIHBhdGhbbGVuXSA9ICdcMCc7CisJICBzZWFyY2hfcGF0aCArPSBs ZW4gKyAxOworCX0KKyAgICAgIGVsc2UKKwl7CisgICAgICAgICAgc2l6ZV90 IGxlbiA9IHN0cmxlbiAoc2VhcmNoX3BhdGgpOworCisgICAgICAgICAgaWYg KGxlbiArIDEgKyBzdHJsZW4gKExJQlRIUkVBRF9EQl9TTykgKyAxID4gc2l6 ZW9mIChwYXRoKSkKKyAgICAgICAgICAgIHsKKwkgICAgICB3YXJuaW5nICgi bGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoIGNvbXBvbmVudCB0b28gbG9uZywi CisJCSAgICAgICAiIGlnbm9yZWQ6ICVzLiIsIHNlYXJjaF9wYXRoKTsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJICBtZW1jcHkg KHBhdGgsIHNlYXJjaF9wYXRoLCBsZW4gKyAxKTsKKwkgIHNlYXJjaF9wYXRo ICs9IGxlbjsKKwl9CisgICAgICBzdHJjYXQgKHBhdGgsICIvIik7CisgICAg ICBzdHJjYXQgKHBhdGgsIExJQlRIUkVBRF9EQl9TTyk7CisgICAgICBpZiAo ZGVidWdfdGhyZWFkcykKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAidGhy ZWFkX2RiX2xvYWRfc2VhcmNoIHRyeWluZyAlc1xuIiwgcGF0aCk7CisgICAg ICBpZiAodHJ5X3RocmVhZF9kYl9sb2FkIChwYXRoKSkKKwl7CisJICByYyA9 IDE7CisJICBicmVhazsKKwl9CisgICAgfQorICBpZiAocmMgPT0gMCkKKyAg ICByYyA9IHRyeV90aHJlYWRfZGJfbG9hZCAoTElCVEhSRUFEX0RCX1NPKTsK KworICBpZiAoZGVidWdfdGhyZWFkcykKKyAgICBmcHJpbnRmIChzdGRlcnIs ICJ0aHJlYWRfZGJfbG9hZF9zZWFyY2ggcmV0dXJuaW5nICVkXG4iLCByYyk7 CisgIHJldHVybiByYzsKIH0KIAogaW50CiB0aHJlYWRfZGJfaW5pdCAoaW50 IHVzZV9ldmVudHMpCiB7Ci0gIGludCBlcnI7CiAgIHN0cnVjdCBwcm9jZXNz X2luZm8gKnByb2MgPSBjdXJyZW50X3Byb2Nlc3MgKCk7Ci0gIHN0cnVjdCBw cm9jZXNzX2luZm9fcHJpdmF0ZSAqcHJpdiA9IHByb2MtPnByaXZhdGU7CiAK ICAgLyogRklYTUUgZHJvdy8yMDA0LTEwLTE2OiBUaGlzIGlzIHRoZSAib3Zl cmFsbCBwcm9jZXNzIElEIiwgd2hpY2gKICAgICAgR05VL0xpbnV4IGNhbGxz IHRnaWQsICJ0aHJlYWQgZ3JvdXAgSUQiLiAgV2hlbiB3ZSBzdXBwb3J0CkBA IC00MzMsMjYgKzU5NSwxNCBAQCB0aHJlYWRfZGJfaW5pdCAoaW50IHVzZV9l dmVudHMpCiAKICAgdGhyZWFkX2RiX3VzZV9ldmVudHMgPSB1c2VfZXZlbnRz OwogCi0gIGVyciA9IHRkX3RhX25ldyAoJnByaXYtPnByb2NfaGFuZGxlLCAm cHJpdi0+dGhyZWFkX2FnZW50KTsKLSAgc3dpdGNoIChlcnIpCisgIGlmICh0 aHJlYWRfZGJfbG9hZF9zZWFyY2ggKCkpCiAgICAgewotICAgIGNhc2UgVERf Tk9MSUJUSFJFQUQ6Ci0gICAgICAvKiBObyB0aHJlYWQgbGlicmFyeSB3YXMg ZGV0ZWN0ZWQuICAqLwotICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIFRE X09LOgotICAgICAgLyogVGhlIHRocmVhZCBsaWJyYXJ5IHdhcyBkZXRlY3Rl ZC4gICovCi0KICAgICAgIGlmICh1c2VfZXZlbnRzICYmIHRocmVhZF9kYl9l bmFibGVfcmVwb3J0aW5nICgpID09IDApCiAJcmV0dXJuIDA7CiAgICAgICB0 aHJlYWRfZGJfZmluZF9uZXdfdGhyZWFkcyAoKTsKICAgICAgIHRocmVhZF9k Yl9sb29rX3VwX3N5bWJvbHMgKCk7CiAgICAgICBwcm9jLT5hbGxfc3ltYm9s c19sb29rZWRfdXAgPSAxOwogICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkZWZh dWx0OgotICAgICAgd2FybmluZyAoImVycm9yIGluaXRpYWxpemluZyB0aHJl YWRfZGIgbGlicmFyeTogJXMiLAotCSAgICAgICB0aHJlYWRfZGJfZXJyX3N0 ciAoZXJyKSk7CiAgICAgfQogCiAgIHJldHVybiAwOwo= --001636e1f3b1f746b20474fc700f--