From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9976 invoked by alias); 14 May 2012 11:15:46 -0000 Received: (qmail 9955 invoked by uid 22791); 14 May 2012 11:15:41 -0000 X-SWARE-Spam-Status: No, hits=-4.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-wg0-f43.google.com (HELO mail-wg0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 14 May 2012 11:15:19 +0000 Received: by wgbdr1 with SMTP id dr1so3696206wgb.12 for ; Mon, 14 May 2012 04:15:17 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.27.200 with SMTP id e50mr4902010wea.23.1336994117714; Mon, 14 May 2012 04:15:17 -0700 (PDT) Received: by 10.180.88.229 with HTTP; Mon, 14 May 2012 04:15:17 -0700 (PDT) Date: Mon, 14 May 2012 11:15:00 -0000 Message-ID: Subject: [PATCH] Implementation of plugin command to support custom GDB extensions at runtime From: Abhijit Halder To: "gdb-patches@sourceware.org ml" Content-Type: multipart/mixed; boundary=00504502c65774054204bffd33a5 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: 2012-05/txt/msg00500.txt.bz2 --00504502c65774054204bffd33a5 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1314 Though in the last couple of discussions we agreed upon not trying to push this idea into mainstream GDB, I am still uploading this patch as I have found this useful for someone who tries to get some useful patch-work done already but not readily available in the releases. I beg pardon to people in this community. People in the community may safely ignore this patch at their own will. This patch implements a new gdb command namely, "plugin" to add and delete custom gdb extensions at runtime. Plugins are shared libraries supported by native OS. Following new commands are added: 1. plugin (Without any argument this will list down existing GDB plugins and with a plugin name as argument, will list down all new commands introduced by the plugin) 2. plugin add (Will add a plugin specified by a relative or full path name of a shared library . e.g. /usr/lib/gdb-ext.so) 3. plugin del (Will delete an already added plugin specified by a relative or full path name of a shared library ) Plugin developer has to write his/her own plugin constructor and destructor routine of a given prototype to export a set of commands s/he wants to add in gdb command list. After adding a plugin the user will be able to use the new set of commands introduced by the plugin in gdb prompt. --00504502c65774054204bffd33a5 Content-Type: text/x-patch; charset=US-ASCII; name="gdb-plugin.patch" Content-Disposition: attachment; filename="gdb-plugin.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h27fr9zf0 Content-length: 24705 ZGlmZiAtcnVwIHNyYy9nZGIvTWFrZWZpbGUuaW4gZHN0L2dkYi9NYWtlZmls ZS5pbgotLS0gc3JjL2dkYi9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE2OjM2 OjA1Ljg0OTM3NzA1MCArMDUzMAorKysgZHN0L2dkYi9NYWtlZmlsZS5pbgky MDEyLTA1LTE0IDE2OjM2OjMwLjYyOTM3MTk0MSArMDUzMApAQCAtNzE4LDYg KzcxOCw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10 eXBlcHIKIAlvYmpmaWxlcy5jIG9zYWJpLmMgb2JzZXJ2ZXIuYyBvc2RhdGEu YyBcCiAJb3BlbmNsLWxhbmcuYyBcCiAJcC1leHAueSBwLWxhbmcuYyBwLXR5 cGVwcmludC5jIHAtdmFscHJpbnQuYyBwYXJzZS5jIHByaW50Y21kLmMgXAor CXBsdWdpbi5jIFwKIAlwcm9jLXNlcnZpY2UubGlzdCBwcm9nc3BhY2UuYyBc CiAJcHJvbG9ndWUtdmFsdWUuYyBwc3ltdGFiLmMgXAogCXJlZ2NhY2hlLmMg cmVnZ3JvdXBzLmMgcmVtb3RlLmMgcmVtb3RlLWZpbGVpby5jIHJldmVyc2Uu YyBcCkBAIC04NzUsNiArODc2LDcgQEAgQ09NTU9OX09CUyA9ICQoREVQRklM RVMpICQoQ09ORklHX09CUykgJAogCWV2ZW50LWxvb3AubyBldmVudC10b3Au byBpbmYtbG9vcC5vIGNvbXBsZXRlci5vIFwKIAlnZGJhcmNoLm8gYXJjaC11 dGlscy5vIGdkYnR5cGVzLm8gb3NhYmkubyBjb3B5aW5nLm8gXAogCW1lbWF0 dHIubyBtZW0tYnJlYWsubyB0YXJnZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8g YnVpbGRzeW0ubyBcCisJcGx1Z2luLm8gXAogCWZpbmRjbWQubyBcCiAJc3Rk LXJlZ3MubyBcCiAJc2lnbmFscy5vIFwKZGlmZiAtcnVwIHNyYy9nZGIvcGx1 Z2luLmMgZHN0L2dkYi9wbHVnaW4uYwotLS0gc3JjL2dkYi9wbHVnaW4uYwky MDEyLTA1LTE0IDE2OjM1OjMyLjgyMTM3NjkyMiArMDUzMAorKysgZHN0L2dk Yi9wbHVnaW4uYwkyMDEyLTA1LTE0IDE2OjIxOjI0LjAwNTM3NzA1MSArMDUz MApAQCAtMCwwICsxLDMyNyBAQAorLyogRXZlcnl0aGluZyBhYm91dCBwbHVn aW4gY29tbWFuZCwgZm9yIEdEQi4KKworICAgQ29weXJpZ2h0IChDKSAyMDEy IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZp bGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZ2RiX3N0cmlu Zy5oIgorI2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImdkYi1kbGZj bi5oIgorI2luY2x1ZGUgInJlYWRsaW5lL3RpbGRlLmgiCisjaW5jbHVkZSAi Z2RiL3BsdWdpbi5oIgorCitzdGF0aWMgdm9pZCAoKm51bGxfZnVuYykgKGNo YXIgKiwgaW50KSA9ICh2b2lkICgqKSAoY2hhciAqLCBpbnQpKSAwOworc3Rh dGljIGNoYXIgKm51bGxfc3RyID0gKGNoYXIgKikgMDsKKwordm9pZCBfaW5p dGlhbGl6ZV9wbHVnaW4gKHZvaWQpOworCitzdGF0aWMgc3RydWN0IGNtZF9s aXN0X2VsZW1lbnQgKnBsdWdpbl9jbWRsaXN0OworCisvKiBTdHJ1Y3R1cmUg dG8gZW5jYXBzdWxhdGUgYWxsIGVudGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBw bHVnaW4uICAqLworCitzdHJ1Y3QgcGx1Z2luCit7CisgIC8qIE51bGwgdGVy bWluYXRlZCBzdHJpbmcgY29udGFpbmluZyBmaWxlbmFtZSB3aXRoIHJlbGF0 aXZlIG9yIGFic29sdXRlIHBhdGgKKyAgICAgb2YgYSBwbHVnaW4gd2hpY2gg aXMgZXNzZW50aWFsbHkgYSBkeW5hbWljIGxpYnJhcnkgZmlsZS4gICovCisg IGNoYXIgKmZpbGVuYW1lOworCisgIC8qIE9wZXF1ZSBwbHVnaW4gaGFuZGxl LiAgKi8KKyAgdm9pZCAqaGFuZGxlOworCisgIC8qIExpc3Qgb2YgY29tbWFu ZHMgaW50cm9kdWNlZCBieSBwbHVnaW4uICAqLworICBzdHJ1Y3QgcGx1Z2lu X2NtZCAqY21kbGlzdDsKKworICAvKiBGbGFnIHRvIGluZGljYXRlIHdoZXRo ZXIgdXNlciBkZWZpbmVkIHBsdWdpbiBkZXN0cnVjdG9yIHJvdXRpbmUgbmVl ZHMgdG8KKyAgICAgYmUgY2FsbGVkLiAgVGhpcyBmbGFnIGlzIHNldCB3aGVu IHVzZXIgZGVmaW5lZCBjb25zdHJ1Y3RvciByb3V0aW5lIGZvciB0aGUKKyAg ICAgcGx1Z2luIGdldHMgY2FsbGVkLiAgKi8KKyAgaW50IGluaXRfZG9uZTsK KworICAvKiBQb2ludHMgdG8gcHJldmlvdXMgcGx1Z2luIGluIHRoaXMgbGlz dC4gICovCisgIHN0cnVjdCBwbHVnaW4gKnByZXY7CisKKyAgLyogUG9pbnRz IHRvIG5leHQgcGx1Z2luIGluIHRoaXMgbGlzdC4gICovCisgIHN0cnVjdCBw bHVnaW4gKm5leHQ7Cit9OworCisvKiBMaXN0IG9mIGFjdGl2ZSBwbHVnaW5z LiAgKi8KKworc3RhdGljIHN0cnVjdCBwbHVnaW4gKnBsdWdpbmxpc3Q7CisK Ky8qIERlbGV0ZSBhIHBsdWdpbiBmcm9tIHF1ZXJ5IGxpc3QuICAqLworCitz dGF0aWMgdm9pZAorZGVsZXRlX3BsdWdpbl9mcm9tX2xpbmtlZGxpc3QgKHN0 cnVjdCBwbHVnaW4gKnBsdWdpbikKK3sKKyAgaWYgKHBsdWdpbi0+bmV4dCkK KyAgICBwbHVnaW4tPm5leHQtPnByZXYgPSBwbHVnaW4tPnByZXY7CisgIGlm IChwbHVnaW4tPnByZXYpCisgICAgcGx1Z2luLT5wcmV2LT5uZXh0ID0gcGx1 Z2luLT5uZXh0OworICBlbHNlCisgICAgcGx1Z2lubGlzdCA9IHBsdWdpbi0+ bmV4dDsKK30KKworLyogR2l2ZW4gYSBwbHVnaW4gZmlsZW5hbWUgRklMRU5B TUUsIHNlYXJjaCBmb3IgYSBwbHVnaW4gaW4gcXVlcnkgbGlzdC4gICovCisK K3N0YXRpYyBzdHJ1Y3QgcGx1Z2luICoKK2RvX2xvb2t1cF9wbHVnaW5faW50 b19saW5rZWRsaXN0IChjaGFyICpmaWxlbmFtZSkKK3sKKyAgc3RydWN0IHBs dWdpbiAqaXRlciA9IHBsdWdpbmxpc3Q7CisKKyAgd2hpbGUgKGl0ZXIpCisg ICAgeworICAgICAgaWYgKHN0cmNtcCAoaXRlci0+ZmlsZW5hbWUsIGZpbGVu YW1lKSA9PSAwKQorCWJyZWFrOworICAgICAgaXRlciA9IGl0ZXItPm5leHQ7 CisgICAgfQorICByZXR1cm4gaXRlcjsKK30KKworLyogSW5zZXJ0IGEgcGx1 Z2luIGluIHF1ZXJ5IGxpc3QuICAqLworCitzdGF0aWMgdm9pZAoraW5zZXJ0 X3BsdWdpbl9pbnRvX2xpbmtlZGxpc3QgKHN0cnVjdCBwbHVnaW4gKnBsdWdp bikKK3sKKyAgaWYgKHBsdWdpbmxpc3QpCisgICAgeworICAgICAgcGx1Z2lu bGlzdC0+cHJldiA9IHBsdWdpbjsKKyAgICAgIHBsdWdpbi0+bmV4dCA9IHBs dWdpbmxpc3Q7CisgICAgfQorICBwbHVnaW5saXN0ID0gcGx1Z2luOworfQor CisvKiBEZXN0cm95IHBsdWdpbiByZWZlcmVuY2VkIGJ5IEFSRy4gICovCisK K3N0YXRpYyB2b2lkCitkZXN0cm95X3BsdWdpbiAodm9pZCAqYXJnKQorewor ICBzdHJ1Y3QgcGx1Z2luICpwbHVnaW4gPSAoc3RydWN0IHBsdWdpbiAqKSBh cmc7CisgIHBsdWdpbl9mdW5jX3R5cGUgKmZpbmlfZnVuYzsKKworICBpZiAo IXBsdWdpbikKKyAgICBlcnJvciAoXygiUGx1Z2luIG5vdCBmb3VuZC4iKSk7 CisKKyAgaWYgKHBsdWdpbi0+ZmlsZW5hbWUpCisgICAgeGZyZWUgKHBsdWdp bi0+ZmlsZW5hbWUpOworCisgIGlmIChwbHVnaW4tPmluaXRfZG9uZSkKKyAg ICB7CisgICAgICBzdHJ1Y3QgcGx1Z2luX2NtZCAqaXRlciA9IHBsdWdpbi0+ Y21kbGlzdDsKKworICAgICAgd2hpbGUgKGl0ZXIpCisJeworCSAgLyogRGVs ZXRlIHVzZXIgc3VwcGxpZWQgY29tbWFuZHMgaW4gcGx1Z2luIHRvIEdEQiBj b21tYW5kIGxpc3QuICAqLworCSAgYWRkX2NtZCAoaXRlci0+bmFtZSwgbm9f Y2xhc3MsIG51bGxfZnVuYywgbnVsbF9zdHIsICZjbWRsaXN0KTsKKwkgIGl0 ZXIgPSBpdGVyLT5uZXh0OworCX0KKyAgICB9CisKKyAgZmluaV9mdW5jID0g Z2RiX2Rsc3ltIChwbHVnaW4tPmhhbmRsZSwgcGx1Z2luX2Rlc3RydWN0b3Jf Zm5fc3ltKTsKKworICBpZiAoIWZpbmlfZnVuYykKKyAgICBlcnJvciAoXygi UGx1Z2luIGRlc3RydWN0b3Igcm91dGluZSAlcyBub3QgZm91bmQuIiksCisJ ICAgcGx1Z2luX2Rlc3RydWN0b3JfZm5fc3ltKTsKKworICBpZiAoZmluaV9m dW5jICgmcGx1Z2luLT5jbWRsaXN0KSA8IDApCisgICAgZXJyb3IgKF8oIkZh aWxlZCB0byBkZWxldGUgcGx1Z2luLiIpKTsKKworICBpZiAocGx1Z2luLT5o YW5kbGUpCisgICAgZ2RiX2RsY2xvc2UgKHBsdWdpbi0+aGFuZGxlKTsKKwor ICB4ZnJlZSAocGx1Z2luKTsKK30KKworLyogQ3JlYXRlIHBsdWdpbiByZWZl cmVuY2VkIGJ5IEFSRy4gICovCisKK3N0YXRpYyB2b2lkICoKK2NyZWF0ZV9w bHVnaW4gKGNoYXIgKmFyZykKK3sKKyAgc3RydWN0IHBsdWdpbiAqcGx1Z2lu OworICBwbHVnaW5fZnVuY190eXBlICppbml0X2Z1bmM7CisgIHN0cnVjdCBw bHVnaW5fY21kICppdGVyOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NoYWlu OworCisgIHBsdWdpbiA9IFhDTkVXIChzdHJ1Y3QgcGx1Z2luKTsKKyAgb2xk X2NoYWluID0gbWFrZV9jbGVhbnVwIChkZXN0cm95X3BsdWdpbiwgcGx1Z2lu KTsKKworICBwbHVnaW4tPmZpbGVuYW1lID0gdGlsZGVfZXhwYW5kIChhcmcp OworICBwbHVnaW4tPmhhbmRsZSA9IGdkYl9kbG9wZW4gKHBsdWdpbi0+Zmls ZW5hbWUpOworCisgIGluaXRfZnVuYyA9IGdkYl9kbHN5bSAocGx1Z2luLT5o YW5kbGUsIHBsdWdpbl9jb25zdHJ1Y3Rvcl9mbl9zeW0pOworCisgIGlmICgh aW5pdF9mdW5jKQorICAgIGVycm9yIChfKCJQbHVnaW4gY29uc3RydWN0b3Ig cm91dGluZSAlcyBub3QgZm91bmQuIiksCisJICAgcGx1Z2luX2NvbnN0cnVj dG9yX2ZuX3N5bSk7CisKKyAgaWYgKGluaXRfZnVuYyAoJnBsdWdpbi0+Y21k bGlzdCkgPCAwKQorICAgIGVycm9yIChfKCJGYWlsZWQgdG8gYWRkIHBsdWdp bi4iKSk7CisKKyAgaXRlciA9IHBsdWdpbi0+Y21kbGlzdDsKKworICB3aGls ZSAoaXRlcikKKyAgICB7CisgICAgICAvKiBBZGQgdXNlciBzdXBwbGllZCBj b21tYW5kcyBpbiBwbHVnaW4gdG8gR0RCIGNvbW1hbmQgbGlzdC4gICovCisg ICAgICBhZGRfY21kIChpdGVyLT5uYW1lLCBub19jbGFzcywgaXRlci0+ZnVu YywgaXRlci0+ZG9jLCAmY21kbGlzdCk7CisgICAgICBpdGVyID0gaXRlci0+ bmV4dDsKKyAgICB9CisKKyAgcGx1Z2luLT5pbml0X2RvbmUgPSAxOworCisg IGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jaGFpbik7CisKKyAgcmV0dXJuIHBs dWdpbjsKK30KKworLyogVGhlICdwbHVnaW4gZGVsJyBjb21tYW5kIGRlbGV0 ZSBhIHBsdWdpbi4gICovCisKK3N0YXRpYyB2b2lkCitwbHVnaW5fZGVsX2Nv bW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQoreworICBjaGFyICpm aWxlbmFtZTsKKyAgc3RydWN0IHBsdWdpbiAqcGx1Z2luOworICBzdHJ1Y3Qg Y2xlYW51cCAqb2xkX2NoYWluOworCisgIGlmICghaXNfZGxfYXZhaWxhYmxl ICgpKQorICAgIGVycm9yIChfKCJQbHVnaW4gbm90IHN1cHBvcnRlZC4iKSk7 CisKKyAgaWYgKGFyZyA9PSBOVUxMKQorICAgIGVycm9yIChfKCJQbHVnaW4g bm90IHNwZWNpZmllZC4iKSk7CisKKyAgZmlsZW5hbWUgPSB0aWxkZV9leHBh bmQgKGFyZyk7CisgIG9sZF9jaGFpbiA9IG1ha2VfY2xlYW51cCAoeGZyZWUs IGZpbGVuYW1lKTsKKworICAvKiBTaG91bGRuJ3QgZGVsZXRlIGFscmVhZHkg ZGVsZXRlZCBwbHVnaW4uICAqLworICBpZiAoIShwbHVnaW4gPSBkb19sb29r dXBfcGx1Z2luX2ludG9fbGlua2VkbGlzdCAoZmlsZW5hbWUpKSkKKyAgICBl cnJvciAoXygiUGx1Z2luIG5vdCBmb3VuZC4iKSk7CisKKyAgZG9fY2xlYW51 cHMgKG9sZF9jaGFpbik7CisKKyAgZGVsZXRlX3BsdWdpbl9mcm9tX2xpbmtl ZGxpc3QgKHBsdWdpbik7CisKKyAgZGVzdHJveV9wbHVnaW4gKHBsdWdpbik7 Cit9CisKKy8qIFRoZSAncGx1Z2luIGFkZCcgY29tbWFuZCBhZGQgYSBwbHVn aW4uICAqLworCitzdGF0aWMgdm9pZAorcGx1Z2luX2FkZF9jb21tYW5kIChj aGFyICphcmcsIGludCBmcm9tX3R0eSkKK3sKKyAgY2hhciAqZmlsZW5hbWU7 CisgIHN0cnVjdCBwbHVnaW4gKnBsdWdpbjsKKyAgc3RydWN0IGNsZWFudXAg Km9sZF9jaGFpbjsKKworICBpZiAoIWlzX2RsX2F2YWlsYWJsZSAoKSkKKyAg ICBlcnJvciAoXygiUGx1Z2luIG5vdCBzdXBwb3J0ZWQuIikpOworCisgIGlm IChhcmcgPT0gTlVMTCkKKyAgICBlcnJvciAoXygiUGx1Z2luIG5vdCBzcGVj aWZpZWQuIikpOworCisgIGZpbGVuYW1lID0gdGlsZGVfZXhwYW5kIChhcmcp OworICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKHhmcmVlLCBmaWxlbmFt ZSk7CisKKyAgLyogU2hvdWxkbid0IGFkZCBhbHJlYWR5IGFkZGVkIHBsdWdp bi4gICovCisgIGlmIChkb19sb29rdXBfcGx1Z2luX2ludG9fbGlua2VkbGlz dCAoZmlsZW5hbWUpKQorICAgIGVycm9yIChfKCJQbHVnaW4gYWxyZWFkeSBh ZGRlZC4iKSk7CisKKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisKKyAg cGx1Z2luID0gY3JlYXRlX3BsdWdpbiAoYXJnKTsKKyAgb2xkX2NoYWluID0g bWFrZV9jbGVhbnVwIChkZXN0cm95X3BsdWdpbiwgcGx1Z2luKTsKKworICBp bnNlcnRfcGx1Z2luX2ludG9fbGlua2VkbGlzdCAocGx1Z2luKTsKKworICBk aXNjYXJkX2NsZWFudXBzIChvbGRfY2hhaW4pOworfQorCisvKiBFeGVjdXRl IHRoZSBwbHVnaW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50IEFSRyBhbmQgRlJP TV9UVFkuICAqLworCitzdGF0aWMgdm9pZAorcGx1Z2luX2NvbW1hbmQgKGNo YXIgKmFyZywgaW50IGZyb21fdHR5KQoreworICBpZiAoIWlzX2RsX2F2YWls YWJsZSAoKSkKKyAgICBlcnJvciAoXygiUGx1Z2luIG5vdCBzdXBwb3J0ZWQu IikpOworCisgIGlmICghYXJnKQorICAgIHsKKyAgICAgIHN0cnVjdCBwbHVn aW4gKml0ZXIgPSBwbHVnaW5saXN0OworCisgICAgICBpZiAoIWl0ZXIpCisJ cHJpbnRmX2ZpbHRlcmVkIChfKCJObyBHREItcGx1Z2luIGlzIGFkZGVkLlxu IikpOworICAgICAgZWxzZQorCXsKKwkgIHByaW50Zl9maWx0ZXJlZCAoXygi Rm9sbG93aW5nIEdEQi1wbHVnaW4ocykgYXJlIGFkZGVkOlxuXG4iKSk7CisK KwkgIHdoaWxlIChpdGVyKQorCSAgICB7CisJICAgICAgcHJpbnRmX2ZpbHRl cmVkIChfKCJcdCVzXG4iKSwgaXRlci0+ZmlsZW5hbWUpOworCSAgICAgIGl0 ZXIgPSBpdGVyLT5uZXh0OworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIGNoYXIgKmZpbGVuYW1lOworICAgICAgc3RydWN0IHBs dWdpbiAqcGx1Z2luOworICAgICAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFp bjsKKworICAgICAgZmlsZW5hbWUgPSB0aWxkZV9leHBhbmQgKGFyZyk7Cisg ICAgICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAgKHhmcmVlLCBmaWxlbmFt ZSk7CisKKyAgICAgIGlmICghKHBsdWdpbiA9IGRvX2xvb2t1cF9wbHVnaW5f aW50b19saW5rZWRsaXN0IChmaWxlbmFtZSkpKQorCWVycm9yIChfKCJQbHVn aW4gbm90IGZvdW5kLiIpKTsKKworICAgICAgZG9fY2xlYW51cHMgKG9sZF9j aGFpbik7CisKKyAgICAgIGlmIChwbHVnaW4pCisJeworCSAgc3RydWN0IHBs dWdpbl9jbWQgKml0ZXIgPSBwbHVnaW4tPmNtZGxpc3Q7CisKKwkgIHdoaWxl IChpdGVyKQorCSAgICB7CisJICAgICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJc dCVzXG4iKSwgaXRlci0+bmFtZSk7CisJICAgICAgaXRlciA9IGl0ZXItPm5l eHQ7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKiBNb2R1bGUgaW5pdGlh bGl6YXRpb24uICAqLworCit2b2lkCitfaW5pdGlhbGl6ZV9wbHVnaW4gKHZv aWQpCit7CisgIGFkZF9wcmVmaXhfY21kICgicGx1Z2luIiwgbm9fY2xhc3Ms IHBsdWdpbl9jb21tYW5kLCBfKCJcCitQcm92aWRlIGFuIGludGVyZmFjZSB0 byBwbHVnLWluIGEgY3VzdG9tIEdEQi1leHRlbnNpb24gb3IgcGx1Z2luLlxu XAorQSBjdXN0b20gR0RCLWV4dGVuc2lvbiBpcyBhIGR5bmFtaWMgbGlicmFy eSBmaWxlIHdpdGggbmF0aXZlIE9TIHN1cHBvcnRlZFxuXAorZmlsZS1mb3Jt YXQuXG5cblwKK0dpdmVuIGEgcGx1Z2luIGFzIGFyZ3VtZW50LCBsaXN0IGRv d24gY29tbWFuZChzKSBpbnRyb2R1Y2VkIGJ5IHRoZSBwbHVnaW4uXG5cCitX aXRoIG5vIHN1YmNvbW1hbmQsIGV4aXN0aW5nIHBsdWdpbnMgYXJlIGRpc3Bs YXllZC4iKSwKKwkJICAmcGx1Z2luX2NtZGxpc3QsICJwbHVnaW4gIiwgMSwg JmNtZGxpc3QpOworCisgIGFkZF9jbWQgKCJhZGQiLCBub19jbGFzcywgcGx1 Z2luX2FkZF9jb21tYW5kLCBfKCJcCitBZGQgYSBHREIgcGx1Z2luLlxuXAor QXJndW1lbnQgaXMgYSBkeW5hbWljIGxpYnJhcnkgZmlsZW5hbWUgd2l0aCBy ZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLiIpLAorCSAgICZwbHVnaW5fY21k bGlzdCk7CisKKyAgYWRkX2NvbV9hbGlhcyAoImFkZC1wbHVnaW4iLCAicGx1 Z2luIGFkZCIsIG5vX2NsYXNzLCAwKTsKKworICBhZGRfY21kICgiZGVsIiwg bm9fY2xhc3MsIHBsdWdpbl9kZWxfY29tbWFuZCwgXygiXAorRGVsZXRlIGEg R0RCIHBsdWdpbi5cblwKK0FyZ3VtZW50IGlzIGEgZHluYW1pYyBsaWJyYXJ5 IGZpbGVuYW1lIHdpdGggcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aC4iKSwK KwkgICAmcGx1Z2luX2NtZGxpc3QpOworCisgIGFkZF9jb21fYWxpYXMgKCJk ZWwtcGx1Z2luIiwgInBsdWdpbiBkZWwiLCBub19jbGFzcywgMCk7Cit9CmRp ZmYgLXJ1cCBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9wbHVnaW4uYyBk c3QvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9wbHVnaW4uYwotLS0gc3JjL2dk Yi90ZXN0c3VpdGUvZ2RiLmJhc2UvcGx1Z2luLmMJMjAxMi0wNS0xNCAxNjoz NzoxNC4wMzczNzY5MDkgKzA1MzAKKysrIGRzdC9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL3BsdWdpbi5jCTIwMTItMDUtMTQgMTY6MjE6NTUuOTg1Mzc2Nzcz ICswNTMwCkBAIC0wLDAgKzEsNTAgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMg cGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdo dCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjZGVmaW5lIFNVQ0NFU1MgIDAK KyNkZWZpbmUgRkFJTFVSRSAtMQorCisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lu Y2x1ZGUgInBsdWdpbi5oIgorCitzdGF0aWMgdm9pZAorZnVuYzFfY29tbWFu ZCAoY2hhciAqYXJnLCBpbnQgdHR5KQoreworICBwcmludGYgKCJJbnZva2Vk IGZ1bmMxLlxuIik7Cit9CisKK2ludAorZ2RiX3BsdWdpbl9jb25zdHJ1Y3Rv ciAoc3RydWN0IHBsdWdpbl9jbWQgKipjbWRzKQoreworICAoKmNtZHMpID0g bWFsbG9jIChzaXplb2YgKHN0cnVjdCBwbHVnaW5fY21kKSk7CisgICgqY21k cyktPm5hbWUgPSBzdHJkdXAgKCJmdW5jMSIpOworICAoKmNtZHMpLT5mdW5j ID0gZnVuYzFfY29tbWFuZDsKKyAgKCpjbWRzKS0+ZG9jICA9IHN0cmR1cCAo IkhlbHAgZm9yIGZ1bmMxLiIpOworICAoKmNtZHMpLT5uZXh0ID0gTlVMTDsK KyAgcmV0dXJuIFNVQ0NFU1M7Cit9CisKK2ludAorZ2RiX3BsdWdpbl9kZXN0 cnVjdG9yIChzdHJ1Y3QgcGx1Z2luX2NtZCAqKmNtZHMpCit7CisgIGZyZWUg KCgqY21kcyktPm5hbWUpOworICBmcmVlICgoKmNtZHMpLT5kb2MpOworICBm cmVlICgoKmNtZHMpKTsKK30KZGlmZiAtcnVwIHNyYy9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL3BsdWdpbi5leHAgZHN0L2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvcGx1Z2luLmV4cAotLS0gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv cGx1Z2luLmV4cAkyMDEyLTA1LTE0IDE2OjM3OjA1LjgzNzM3NzQ5MCArMDUz MAorKysgZHN0L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcGx1Z2luLmV4cAky MDEyLTA1LTE0IDE2OjIxOjI5LjE2NTM3Njg2NiArMDUzMApAQCAtMCwwICsx LDUxIEBACisjIENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjCisjIHRlc3QgZ2Ri IHBsdWdpbiBjb21tYW5kcworIworCitzZXQgdGVzdCAicGx1Z2luIgorc2V0 IGxpYnNyYyAke3Rlc3R9LmMKK3NldCBsaWJyYXJ5ICR7b2JqZGlyfS8ke3N1 YmRpcn0vJHt0ZXN0fS5zbworCitmaWxlIGRlbGV0ZSAkbGlicmFyeQorCitp ZiB7W2dldF9jb21waWxlcl9pbmZvIG5vdC11c2VkXX0geworICAgIHdhcm5p bmcgIkNvdWxkIG5vdCBnZXQgY29tcGlsZXIgaW5mby4iCisgICAgdW50ZXN0 ZWQgcGx1Z2luLmV4cAorICAgIHJldHVybiAxCit9CisKK2lmIHsgW2dkYl9j b21waWxlX3NobGliICR7c3JjZGlyfS8ke3N1YmRpcn0vJHtsaWJzcmN9ICR7 bGlicmFyeX0gey1mUElDfV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgIkNv dWxkIG5vdCBjb21waWxlIHNoYXJlZCBsaWJyYXJ5LiIKKyAgICByZXR1cm4g LTEKK30KKworZ2RiX2V4aXQKK2dkYl9zdGFydAorCitnZGJfdGVzdCAicGx1 Z2luIiAiTm8gR0RCLXBsdWdpbiBpcyBhZGRlZC4iCitnZGJfdGVzdCAicGx1 Z2luIGFkZCIgIlBsdWdpbiBub3Qgc3BlY2lmaWVkLiIKK2dkYl90ZXN0ICJw bHVnaW4gZGVsIiAiUGx1Z2luIG5vdCBzcGVjaWZpZWQuIgorZ2RiX3Rlc3Rf bm9fb3V0cHV0ICJwbHVnaW4gYWRkICRsaWJyYXJ5IgorZ2RiX3Rlc3QgInBs dWdpbiBhZGQgJGxpYnJhcnkiICJQbHVnaW4gYWxyZWFkeSBhZGRlZC4iCitn ZGJfdGVzdCAicGx1Z2luIiAiRm9sbG93aW5nIEdEQi1wbHVnaW4ocykgYXJl IGFkZGVkOlxuXG5cdCRsaWJyYXJ5IgorZ2RiX3Rlc3QgInBsdWdpbiAkbGli cmFyeSIgImZ1bmMxIgorZ2RiX3Rlc3QgImZ1bmMxIiAiSW52b2tlZCBmdW5j MS4iCitnZGJfdGVzdCAiaGVscCBmdW5jMSIgIkhlbHAgZm9yIGZ1bmMxLiIK K2dkYl90ZXN0X25vX291dHB1dCAicGx1Z2luIGRlbCAkbGlicmFyeSIKK2dk Yl90ZXN0ICJwbHVnaW4gZGVsICRsaWJyYXJ5IiAiUGx1Z2luIG5vdCBmb3Vu ZC4iCitnZGJfdGVzdCAicGx1Z2luIiAiTm8gR0RCLXBsdWdpbiBpcyBhZGRl ZC4iCmRpZmYgLXJ1cCBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9wbHVn aW4uaCBkc3QvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9wbHVnaW4uaAotLS0g c3JjL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcGx1Z2luLmgJMjAxMi0wNS0x NCAxNjozNzoxNi41OTMzNzY5MDggKzA1MzAKKysrIGRzdC9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL3BsdWdpbi5oCTIwMTItMDUtMTQgMTY6MjE6NTYuMjE3 Mzc2ODc4ICswNTMwCkBAIC0wLDAgKzEsNjMgQEAKKy8qIFRoaXMgZmlsZSBk ZWZpbmVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgc2ltdWxhdG9yIGFu ZCBnZGIuCisKKyAgIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWYgIWRl ZmluZWQgKFBMVUdJTl9IKQorI2RlZmluZSBQTFVHSU5fSCAxCisKKy8qIFBs dWdpbiBjb25zdHJ1Y3RvciByb3V0aW5lIGRlZmluZSBieSB0aGUgcGx1Z2lu IGRldmVsb3Blci4gIFRoaXMgbXVzdCBhZGQgYWxsCisgICBuZXdseSBpbnRy b2R1Y2VkIEdEQi1jb21tYW5kcyBkZWZpbmVkIGluIHRoZSBwbHVnaW4gdG8g YSBsaXN0IGV4cG9zZWQgYnkKKyAgIEdEQi4gIEVhY2ggZWxlbWVudCBvZiB0 aGlzIGxpc3Qgd2lsbCBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5k LCB0aGUKKyAgIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aGljaCBleGVjdXRl cyBvbiBpbnZvY2F0aW9uIG9mIHRoaXMgY29tbWFuZCwgYQorICAgZG9jdW1l bnQgc3RyaW5nIHdoaWNoIGdldCBkaXNwbGF5ZWQgd2hlbiBoZWxwIGlzIGFz a2VkIGZvciB0aGlzIGNvbW1hbmQgYW5kCisgICBhIHBvaW50ZXIgcG9pbnRp bmcgdG8gdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgbGlzdC4gICovCisKK3N0 YXRpYyBjb25zdCBjaGFyICpwbHVnaW5fY29uc3RydWN0b3JfZm5fc3ltID0g ImdkYl9wbHVnaW5fY29uc3RydWN0b3IiOworCisvKiBQbHVnaW4gZGVzdHJ1 Y3RvciByb3V0aW5lIGRlZmluZSBieSB0aGUgcGx1Z2luIGRldmVsb3Blci4g IFRoaXMgbXVzdCBjbGVhbnVwCisgICB0aGUgY29tbWFuZCBsaXN0IGNyZWF0 ZWQgYnkgdGhlIHBsdWdpbiBjb25zdHJ1Y3RvciByb3V0aW5lLiAgKi8KKwor c3RhdGljIGNvbnN0IGNoYXIgKnBsdWdpbl9kZXN0cnVjdG9yX2ZuX3N5bSA9 ICJnZGJfcGx1Z2luX2Rlc3RydWN0b3IiOworCisvKiBTdHJ1Y3R1cmUgdG8g ZW5jYXBzdWxhdGUgYWxsIGVudGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBwbHVn aW4gY29tbWFuZC4gICovCisKK3N0cnVjdCBwbHVnaW5fY21kCit7CisgIC8q IE5hbWUgb2YgdGhlIGNvbW1hbmQuICAqLworICBjaGFyICpuYW1lOworCisg IC8qIFBvaW50ZXIgcmVmZXJlbmNpbmcgdG8gdGhlIGZ1bmN0aW9uIHRoYXQg aXMgZXhlY3V0ZWQgb24gaW52b2NhdGlvbiBvZiB0aGlzCisgICAgIGNvbW1h bmQuICBUaGlzIG11c3QgYmUgcmVzZXQgdG8gTlVMTCBvbiBkZWxldGlvbiBv ZiB0aGUgcGx1Z2luLiAgKi8KKyAgdm9pZCAoKmZ1bmMpIChjaGFyICphcmdz LCBpbnQgZnJvbV90dHkpOworCisgIC8qIERvY3VtZW50YXRpb24gb2YgdGhp cyBjb21tYW5kIChvciBoZWxwIHRvcGljKS4KKyAgICAgRmlyc3QgbGluZSBp cyBicmllZiBkb2N1bWVudGF0aW9uOyByZW1haW5pbmcgbGluZXMgZm9ybSwg d2l0aCBpdCwgdGhlIGZ1bGwKKyAgICAgZG9jdW1lbnRhdGlvbi4gIEZpcnN0 IGxpbmUgc2hvdWxkIGVuZCB3aXRoIGEgcGVyaW9kLiAgRW50aXJlIHN0cmlu ZyBzaG91bGQKKyAgICAgYWxzbyBlbmQgd2l0aCBhIHBlcmlvZCwgbm90IGEg bmV3bGluZS4gICovCisgIGNoYXIgKmRvYzsKKworICAvKiBQb2ludHMgdG8g bmV4dCBjb21tYW5kIGluIHRoaXMgbGlzdC4gICovCisgIHN0cnVjdCBwbHVn aW5fY21kICpuZXh0OworfTsKKworLyogUHJvdG90eXBlIG9mIHBsdWdpbiBj b25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciByb3V0aW5lcy4KKyAgIEl0IG11 c3QgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZS4gICov CisKK3R5cGVkZWYgaW50IChwbHVnaW5fZnVuY190eXBlKSAoc3RydWN0IHBs dWdpbl9jbWQgKik7CisKKyNlbmRpZgpkaWZmIC1ydXAgc3JjL2luY2x1ZGUv Z2RiL3BsdWdpbi5oIGRzdC9pbmNsdWRlL2dkYi9wbHVnaW4uaAotLS0gc3Jj L2luY2x1ZGUvZ2RiL3BsdWdpbi5oCTIwMTItMDUtMTQgMTY6MzU6MjMuMzQ5 Mzc2OTczICswNTMwCisrKyBkc3QvaW5jbHVkZS9nZGIvcGx1Z2luLmgJMjAx Mi0wNS0xNCAxNjoyMjoyNS43MjEzNzY5ODkgKzA1MzAKQEAgLTAsMCArMSw2 MyBAQAorLyogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGludGVyZmFjZSBiZXR3 ZWVuIHRoZSBzaW11bGF0b3IgYW5kIGdkYi4KKworICAgQ29weXJpZ2h0IChD KSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisKKyNpZiAhZGVmaW5lZCAoUExVR0lOX0gpCisjZGVmaW5l IFBMVUdJTl9IIDEKKworLyogUGx1Z2luIGNvbnN0cnVjdG9yIHJvdXRpbmUg ZGVmaW5lIGJ5IHRoZSBwbHVnaW4gZGV2ZWxvcGVyLiAgVGhpcyBtdXN0IGFk ZCBhbGwKKyAgIG5ld2x5IGludHJvZHVjZWQgR0RCLWNvbW1hbmRzIGRlZmlu ZWQgaW4gdGhlIHBsdWdpbiB0byBhIGxpc3QgZXhwb3NlZCBieQorICAgR0RC LiAgRWFjaCBlbGVtZW50IG9mIHRoaXMgbGlzdCB3aWxsIGNvbnRhaW4gdGhl IG5hbWUgb2YgdGhlIGNvbW1hbmQsIHRoZQorICAgcG9pbnRlciB0byBhIGZ1 bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIG9uIGludm9jYXRpb24gb2YgdGhpcyBj b21tYW5kLCBhCisgICBkb2N1bWVudCBzdHJpbmcgd2hpY2ggZ2V0IGRpc3Bs YXllZCB3aGVuIGhlbHAgaXMgYXNrZWQgZm9yIHRoaXMgY29tbWFuZCBhbmQK KyAgIGEgcG9pbnRlciBwb2ludGluZyB0byB0aGUgbmV4dCBlbGVtZW50IGlu IHRoZSBsaXN0LiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnBsdWdpbl9j b25zdHJ1Y3Rvcl9mbl9zeW0gPSAiZ2RiX3BsdWdpbl9jb25zdHJ1Y3RvciI7 CisKKy8qIFBsdWdpbiBkZXN0cnVjdG9yIHJvdXRpbmUgZGVmaW5lIGJ5IHRo ZSBwbHVnaW4gZGV2ZWxvcGVyLiAgVGhpcyBtdXN0IGNsZWFudXAKKyAgIHRo ZSBjb21tYW5kIGxpc3QgY3JlYXRlZCBieSB0aGUgcGx1Z2luIGNvbnN0cnVj dG9yIHJvdXRpbmUuICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqcGx1Z2lu X2Rlc3RydWN0b3JfZm5fc3ltID0gImdkYl9wbHVnaW5fZGVzdHJ1Y3RvciI7 CisKKy8qIFN0cnVjdHVyZSB0byBlbmNhcHN1bGF0ZSBhbGwgZW50aXRpZXMg YXNzb2NpYXRlZCB3aXRoIHBsdWdpbiBjb21tYW5kLiAgKi8KKworc3RydWN0 IHBsdWdpbl9jbWQKK3sKKyAgLyogTmFtZSBvZiB0aGUgY29tbWFuZC4gICov CisgIGNoYXIgKm5hbWU7CisKKyAgLyogUG9pbnRlciByZWZlcmVuY2luZyB0 byB0aGUgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBvbiBpbnZvY2F0aW9u IG9mIHRoaXMKKyAgICAgY29tbWFuZC4gIFRoaXMgbXVzdCBiZSByZXNldCB0 byBOVUxMIG9uIGRlbGV0aW9uIG9mIHRoZSBwbHVnaW4uICAqLworICB2b2lk ICgqZnVuYykgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7CisKKyAgLyog RG9jdW1lbnRhdGlvbiBvZiB0aGlzIGNvbW1hbmQgKG9yIGhlbHAgdG9waWMp LgorICAgICBGaXJzdCBsaW5lIGlzIGJyaWVmIGRvY3VtZW50YXRpb247IHJl bWFpbmluZyBsaW5lcyBmb3JtLCB3aXRoIGl0LCB0aGUgZnVsbAorICAgICBk b2N1bWVudGF0aW9uLiAgRmlyc3QgbGluZSBzaG91bGQgZW5kIHdpdGggYSBw ZXJpb2QuICBFbnRpcmUgc3RyaW5nIHNob3VsZAorICAgICBhbHNvIGVuZCB3 aXRoIGEgcGVyaW9kLCBub3QgYSBuZXdsaW5lLiAgKi8KKyAgY2hhciAqZG9j OworCisgIC8qIFBvaW50cyB0byBuZXh0IGNvbW1hbmQgaW4gdGhpcyBsaXN0 LiAgKi8KKyAgc3RydWN0IHBsdWdpbl9jbWQgKm5leHQ7Cit9OworCisvKiBQ cm90b3R5cGUgb2YgcGx1Z2luIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9y IHJvdXRpbmVzLgorICAgSXQgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzIGFu ZCAtMSBvbiBmYWlsdXJlLiAgKi8KKwordHlwZWRlZiBpbnQgKHBsdWdpbl9m dW5jX3R5cGUpIChzdHJ1Y3QgcGx1Z2luX2NtZCAqKik7CisKKyNlbmRpZgo= --00504502c65774054204bffd33a5--