From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24539 invoked by alias); 15 May 2011 11:13:18 -0000 Received: (qmail 24522 invoked by uid 22791); 15 May 2011 11:13:15 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_BG,TW_PW,TW_RG,TW_TP,TW_WU X-Spam-Check-By: sourceware.org Received: from mail-pz0-f47.google.com (HELO mail-pz0-f47.google.com) (209.85.210.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 15 May 2011 11:12:59 +0000 Received: by pzk36 with SMTP id 36so1984334pzk.20 for ; Sun, 15 May 2011 04:12:58 -0700 (PDT) MIME-Version: 1.0 Received: by 10.68.15.170 with SMTP id y10mr5442134pbc.364.1305457978485; Sun, 15 May 2011 04:12:58 -0700 (PDT) Received: by 10.68.54.105 with HTTP; Sun, 15 May 2011 04:12:58 -0700 (PDT) In-Reply-To: References: Date: Sun, 15 May 2011 20:46:00 -0000 Message-ID: Subject: Re: [Patch, libfortran] PR 48931 Async-signal-safety of backtrace signal handler From: Janne Blomqvist To: GCC Patches , Fortran List Content-Type: multipart/mixed; boundary=bcaec51f995913aaee04a34e9f22 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-05/txt/msg01072.txt.bz2 --bcaec51f995913aaee04a34e9f22 Content-Type: text/plain; charset=UTF-8 Content-length: 767 Hi, so, here is take 3 (sigh). Compared to take 2, it no longer uses stdio, since opening a stdio FILE stream probably malloc()'s a buffer, which is not async-signal-safe. Regtested on x86_64-unknown-linux-gnu, Ok for trunk? 2011-05-15 Janne Blomqvist PR libfortran/48931 * configure.ac: Check for backtrace_symbols_fd instead of backtrace_symbols, check for readlink. * config.h.in: Regenerated. * configure: Regenerated. * runtime/backtrace.c (local_strcasestr): Remove. (bt_header): New function. (dump_glibc_backtrace): Remove. (fd_gets): New function. (show_backtrace): Rework to use backtrace_symbols_fd and pipes, reformat output. * runtime/main.c (store_exe_path): Try to check /proc/self/exe first. -- Janne Blomqvist --bcaec51f995913aaee04a34e9f22 Content-Type: text/x-patch; charset=US-ASCII; name="bt3.diff" Content-Disposition: attachment; filename="bt3.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnpvmfye1 Content-length: 16312 ZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdm b3J0cmFuL2NvbmZpZ3VyZS5hYwppbmRleCBjZjM4ZmIwLi43NGNmZTQ0IDEw MDY0NAotLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrIGIvbGli Z2ZvcnRyYW4vY29uZmlndXJlLmFjCkBAIC0yNjQsMTAgKzI2NCwxMCBAQCBB Q19DSEVDS19GVU5DUyhzbGVlcCB0aW1lIHR0eW5hbWUgc2lnbmFsIGFsYXJt IGNsb2NrIGFjY2VzcyBmb3JrIGV4ZWNsKQogQUNfQ0hFQ0tfRlVOQ1Mod2Fp dCBzZXRtb2RlIGV4ZWN2cCBwaXBlIGR1cDIgY2xvc2UgZmRvcGVuIHN0cmNh c2VzdHIgZ2V0cmxpbWl0KQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0dGltZW9mZGF5 IHN0YXQgZnN0YXQgbHN0YXQgZ2V0cHd1aWQgdnNucHJpbnRmIGR1cCBnZXRj d2QpCiBBQ19DSEVDS19GVU5DUyhsb2NhbHRpbWVfciBnbXRpbWVfciBzdHJl cnJvcl9yIGdldHB3dWlkX3IgdHR5bmFtZV9yKQotQUNfQ0hFQ0tfRlVOQ1Mo Y2xvY2tfZ2V0dGltZSBzdHJmdGltZSkKK0FDX0NIRUNLX0ZVTkNTKGNsb2Nr X2dldHRpbWUgc3RyZnRpbWUgcmVhZGxpbmspCiAKICMgQ2hlY2sgZm9yIGds aWJjIGJhY2t0cmFjZSBmdW5jdGlvbnMKLUFDX0NIRUNLX0ZVTkNTKGJhY2t0 cmFjZSBiYWNrdHJhY2Vfc3ltYm9scykKK0FDX0NIRUNLX0ZVTkNTKGJhY2t0 cmFjZSBiYWNrdHJhY2Vfc3ltYm9sc19mZCkKIAogIyBDaGVjayBsaWJjIGZv ciBnZXRnaWQsIGdldHBpZCwgZ2V0dWlkCiBBQ19DSEVDS19MSUIoW2NdLFtn ZXRnaWRdLFtBQ19ERUZJTkUoW0hBVkVfR0VUR0lEXSxbMV0sW2xpYmMgaW5j bHVkZXMgZ2V0Z2lkXSldKQpkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vcnVu dGltZS9iYWNrdHJhY2UuYyBiL2xpYmdmb3J0cmFuL3J1bnRpbWUvYmFja3Ry YWNlLmMKaW5kZXggMTA5MTdkMy4uMDQyNDZhOSAxMDA2NDQKLS0tIGEvbGli Z2ZvcnRyYW4vcnVudGltZS9iYWNrdHJhY2UuYworKysgYi9saWJnZm9ydHJh bi9ydW50aW1lL2JhY2t0cmFjZS5jCkBAIC01NCw1OSArNTQsNTcgQEAgc2Vl IHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3Bl Y3RpdmVseS4gIElmIG5vdCwgc2VlCiAjZGVmaW5lIENBTl9GT1JLIChkZWZp bmVkKEhBVkVfRk9SSykgJiYgZGVmaW5lZChIQVZFX0VYRUNWUCkgXAogCQkg ICYmIGRlZmluZWQoSEFWRV9XQUlUKSkKICNkZWZpbmUgR0xJQkNfQkFDS1RS QUNFIChkZWZpbmVkKEhBVkVfQkFDS1RSQUNFKSBcCi0JCQkgJiYgZGVmaW5l ZChIQVZFX0JBQ0tUUkFDRV9TWU1CT0xTKSkKKwkJCSAmJiBkZWZpbmVkKEhB VkVfQkFDS1RSQUNFX1NZTUJPTFNfRkQpKQogI2RlZmluZSBDQU5fUElQRSAo Q0FOX0ZPUksgJiYgZGVmaW5lZChIQVZFX1BJUEUpIFwKIAkJICAmJiBkZWZp bmVkKEhBVkVfRFVQMikgJiYgZGVmaW5lZChIQVZFX0ZET1BFTikgXAogCQkg ICYmIGRlZmluZWQoSEFWRV9DTE9TRSkpCiAKIAotI2lmIEdMSUJDX0JBQ0tU UkFDRSAmJiBDQU5fUElQRQotc3RhdGljIGNoYXIgKgotbG9jYWxfc3RyY2Fz ZXN0ciAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQotewotI2lm ZGVmIEhBVkVfU1RSQ0FTRVNUUgotICByZXR1cm4gc3RyY2FzZXN0ciAoczEs IHMyKTsKLSNlbHNlCisvKiBHREIgc3R5bGUgI05VTSBpbmRleCBmb3IgZWFj aCBzdGFjayBmcmFtZS4gICovCiAKLSAgY29uc3QgY2hhciAqcCA9IHMxOwot ICBjb25zdCBzaXplX3QgbGVuID0gc3RybGVuIChzMik7Ci0gIGNvbnN0IGNo YXIgdSA9ICpzMiwgdiA9IGlzdXBwZXIoKGludCkgKnMyKSA/IHRvbG93ZXIo KGludCkgKnMyKQotCQkJCSAgOiAoaXNsb3dlcigoaW50KSAqczIpID8gdG91 cHBlcigoaW50KSAqczIpCi0JCQkJCQkJOiAqczIpOwotCi0gIHdoaWxlICgx KQotICAgIHsKLSAgICAgIHdoaWxlICgqcCAhPSB1ICYmICpwICE9IHYgJiYg KnApCi0JcCsrOwotICAgICAgaWYgKCpwID09IDApCi0JcmV0dXJuIE5VTEw7 Ci0gICAgICBpZiAoc3RybmNhc2VjbXAgKHAsIHMyLCBsZW4pID09IDApCi0J cmV0dXJuIChjaGFyICopcDsKLSAgICB9Ci0jZW5kaWYKK3N0YXRpYyB2b2lk IAorYnRfaGVhZGVyIChpbnQgbnVtKQoreworICBzdF9wcmludGYgKCIgICMl ZCAgIiwgbnVtKTsKIH0KLSNlbmRpZgogCiAKLSNpZiBHTElCQ19CQUNLVFJB Q0UKLXN0YXRpYyB2b2lkCi1kdW1wX2dsaWJjX2JhY2t0cmFjZSAoaW50IGRl cHRoLCBjaGFyICpzdHJbXSkKLXsKLSAgaW50IGk7CisvKiBmZ2V0cygpLWxp a2UgZnVuY3Rpb24gdGhhdCByZWFkcyBhIGxpbmUgZnJvbSBhIGZkLCB3aXRo b3V0CisgICBuZWVkaW5nIHRvIG1hbGxvYygpIGEgYnVmZmVyLCBhbmQgZG9l cyBub3QgdXNlIGxvY2tzLCBoZW5jZSBzaG91bGQKKyAgIGJlIGFzeW5jLXNp Z25hbC1zYWZlLiAgKi8KIAotICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkr KykKK3N0YXRpYyBjaGFyICoKK2ZkX2dldHMgKGNoYXIgKnMsIGludCBzaXpl LCBpbnQgZmQpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr KQogICAgIHsKLSAgICAgIGVzdHJfd3JpdGUgKCIgICsgIik7Ci0gICAgICBl c3RyX3dyaXRlIChzdHJbaV0pOwotICAgICAgZXN0cl93cml0ZSAoIlxuIik7 CisgICAgICBjaGFyIGM7CisgICAgICBzc2l6ZV90IG5yZWFkID0gcmVhZCAo ZmQsICZjLCAxKTsKKyAgICAgIGlmIChucmVhZCA9PSAxKQorCXsKKwkgIHNb aV0gPSBjOworCSAgaWYgKGMgPT0gJ1xuJykKKwkgICAgeworCSAgICAgIGlm IChpICsgMSA8IHNpemUpCisJCXNbaSsxXSA9ICdcMCc7CisJICAgICAgZWxz ZQorCQlzW2ldID0gJ1wwJzsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0K KyAgICAgIGVsc2UKKwl7CisJICBzW2ldID0gJ1wwJzsKKwkgIGJyZWFrOwor CX0KICAgICB9Ci0KLSAgZnJlZSAoc3RyKTsKKyAgcmV0dXJuIHM7CiB9Ci0j ZW5kaWYKKwogCiAvKiBzaG93X2JhY2t0cmFjZSBkaXNwbGF5cyB0aGUgYmFj a3RyYWNlLCBjdXJyZW50bHkgb2J0YWluZWQgYnkgbWVhbnMgb2YKICAgIHRo ZSBnbGliYyBiYWNrdHJhY2UqIGZ1bmN0aW9ucy4gICovCisKIHZvaWQKIHNo b3dfYmFja3RyYWNlICh2b2lkKQogewpAQCAtMTE2LDE3NiArMTE0LDE4NCBA QCBzaG93X2JhY2t0cmFjZSAodm9pZCkKICNkZWZpbmUgQlVGU0laRSAxMDI0 CiAKICAgdm9pZCAqdHJhY2VbREVQVEhdOwotICBjaGFyICoqc3RyOwogICBp bnQgZGVwdGg7CiAKICAgZGVwdGggPSBiYWNrdHJhY2UgKHRyYWNlLCBERVBU SCk7CiAgIGlmIChkZXB0aCA8PSAwKQogICAgIHJldHVybjsKIAotICBzdHIg PSBiYWNrdHJhY2Vfc3ltYm9scyAodHJhY2UsIGRlcHRoKTsKLQogI2lmIENB Tl9QSVBFCiAKLSNpZm5kZWYgU1RESU5fRklMRU5PCi0jZGVmaW5lIFNURElO X0ZJTEVOTyAwCi0jZW5kaWYKLQotI2lmbmRlZiBTVERPVVRfRklMRU5PCi0j ZGVmaW5lIFNURE9VVF9GSUxFTk8gMQotI2VuZGlmCi0KLSNpZm5kZWYgU1RE RVJSX0ZJTEVOTwotI2RlZmluZSBTVERFUlJfRklMRU5PIDIKLSNlbmRpZgot CiAgIC8qIFdlIGF0dGVtcHQgdG8gZXh0cmFjdCBmaWxlIGFuZCBsaW5lIGlu Zm9ybWF0aW9uIGZyb20gYWRkcjJsaW5lLiAgKi8KICAgZG8KICAgewogICAg IC8qIExvY2FsIHZhcmlhYmxlcy4gICovCi0gICAgaW50IGZbMl0sIHBpZCwg bGluZSwgaTsKLSAgICBGSUxFICpvdXRwdXQ7Ci0gICAgY2hhciBhZGRyX2J1 ZltERVBUSF1bR0ZDX1hUT0FfQlVGX1NJWkVdLCBmdW5jW0JVRlNJWkVdLCBm aWxlW0JVRlNJWkVdOworICAgIGludCBmWzJdLCBwaWQsIGxpbmUsIGJ0WzJd LCBpbnBbMl07CisgICAgY2hhciBhZGRyX2J1ZltHRkNfWFRPQV9CVUZfU0la RV0sIGZ1bmNbQlVGU0laRV0sIGZpbGVbQlVGU0laRV07CiAgICAgY2hhciAq cCwgKmVuZDsKLSAgICBjb25zdCBjaGFyICphZGRyW0RFUFRIXTsKIAotICAg IC8qIFdyaXRlIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyBpbiBoZXhhZGVjaW1h bCBmb3JtYXQuICAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsr KQotICAgICAgYWRkcltpXSA9IGdmY194dG9hICgoR0ZDX1VJTlRFR0VSX0xB UkdFU1QpIChpbnRwdHJfdCkgdHJhY2VbaV0sIGFkZHJfYnVmW2ldLAotCQkg ICAgICBzaXplb2YgKGFkZHJfYnVmW2ldKSk7CisgICAgY2hhciAqZXhlX3Bh dGggPSBmdWxsX2V4ZV9wYXRoICgpOworICAgIGlmIChleGVfcGF0aCA9PSBO VUxMKQorICAgICAgZXhlX3BhdGggPSAoY2hhciAqKSAiYS5vdXQiOwogCiAg ICAgLyogRG9uJ3Qgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaWYgc29tZXRo aW5nIGdvZXMgd3JvbmcsIHdlJ2xsIHNpbXBseQogICAgICAgIGZhbGwgYmFj ayB0byB0aGUgcHN0YWNrIGFuZCBnbGliYyBiYWNrdHJhY2VzLiAgKi8KICAg ICBpZiAocGlwZSAoZikgIT0gMCkKICAgICAgIGJyZWFrOworICAgIGlmIChw aXBlIChpbnApICE9IDApCisgICAgICBicmVhazsKICAgICBpZiAoKHBpZCA9 IGZvcmsgKCkpID09IC0xKQogICAgICAgYnJlYWs7CiAKICAgICBpZiAocGlk ID09IDApCiAgICAgICB7CiAJLyogQ2hpbGQgcHJvY2Vzcy4gICovCi0jZGVm aW5lIE5VTV9GSVhFREFSR1MgNQotCWNoYXIgKmFyZ1tERVBUSCtOVU1fRklY RURBUkdTKzFdOworI2RlZmluZSBOVU1fRklYRURBUkdTIDcKKwljaGFyICph cmdbTlVNX0ZJWEVEQVJHU107CiAKIAljbG9zZSAoZlswXSk7Ci0JY2xvc2Ug KFNURElOX0ZJTEVOTyk7CisKKwljbG9zZSAoaW5wWzFdKTsKKwlpZiAoZHVw MiAoaW5wWzBdLCBTVERJTl9GSUxFTk8pID09IC0xKQorCSAgX2V4aXQgKDEp OworCWNsb3NlIChpbnBbMF0pOworCiAJY2xvc2UgKFNUREVSUl9GSUxFTk8p OwogCiAJaWYgKGR1cDIgKGZbMV0sIFNURE9VVF9GSUxFTk8pID09IC0xKQot CSAgX2V4aXQgKDApOworCSAgX2V4aXQgKDEpOwogCWNsb3NlIChmWzFdKTsK IAogCWFyZ1swXSA9IChjaGFyICopICJhZGRyMmxpbmUiOwogCWFyZ1sxXSA9 IChjaGFyICopICItZSI7Ci0JYXJnWzJdID0gZnVsbF9leGVfcGF0aCAoKTsK KwlhcmdbMl0gPSBleGVfcGF0aDsKIAlhcmdbM10gPSAoY2hhciAqKSAiLWYi OwogCWFyZ1s0XSA9IChjaGFyICopICItcyI7Ci0JZm9yIChpID0gMDsgaSA8 IGRlcHRoOyBpKyspCi0JICBhcmdbTlVNX0ZJWEVEQVJHUytpXSA9IChjaGFy ICopIGFkZHJbaV07Ci0JYXJnW05VTV9GSVhFREFSR1MrZGVwdGhdID0gTlVM TDsKKwlhcmdbNV0gPSAoY2hhciAqKSAiLUMiOworCWFyZ1s2XSA9IE5VTEw7 CiAJZXhlY3ZwIChhcmdbMF0sIGFyZyk7Ci0JX2V4aXQgKDApOworCV9leGl0 ICgxKTsKICN1bmRlZiBOVU1fRklYRURBUkdTCiAgICAgICB9CiAKICAgICAv KiBGYXRoZXIgcHJvY2Vzcy4gICovCiAgICAgY2xvc2UgKGZbMV0pOwotICAg IHdhaXQgKE5VTEwpOwotICAgIG91dHB1dCA9IGZkb3BlbiAoZlswXSwgInIi KTsKLSAgICBpID0gLTE7CisgICAgY2xvc2UgKGlucFswXSk7CisgICAgaWYg KHBpcGUgKGJ0KSAhPSAwKQorICAgICAgYnJlYWs7CisgICAgYmFja3RyYWNl X3N5bWJvbHNfZmQgKHRyYWNlLCBkZXB0aCwgYnRbMV0pOworICAgIGNsb3Nl IChidFsxXSk7CiAKLSAgICBpZiAoZmdldHMgKGZ1bmMsIHNpemVvZihmdW5j KSwgb3V0cHV0KSkKKyAgICBlc3RyX3dyaXRlICgiXG5CYWNrdHJhY2UgZm9y IHRoaXMgZXJyb3I6XG4iKTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGRl cHRoOyBqKyspCiAgICAgICB7Ci0JZXN0cl93cml0ZSAoIlxuQmFja3RyYWNl IGZvciB0aGlzIGVycm9yOlxuIik7Ci0KLQlkbworCWNvbnN0IGNoYXIgKmFk ZHIgPSBnZmNfeHRvYSAKKwkgICgoR0ZDX1VJTlRFR0VSX0xBUkdFU1QpIChp bnRwdHJfdCkgdHJhY2Vbal0sIAorCSAgIGFkZHJfYnVmLCBzaXplb2YgKGFk ZHJfYnVmKSk7CisKKwl3cml0ZSAoaW5wWzFdLCBhZGRyLCBzdHJsZW4gKGFk ZHIpKTsKKwl3cml0ZSAoaW5wWzFdLCAiXG4iLCAxKTsKKwkKKwlpZiAoISBm ZF9nZXRzIChmdW5jLCBzaXplb2YoZnVuYyksIGZbMF0pKQorCSAgZ290byBm YWxsYmFjazsKKwlpZiAoISBmZF9nZXRzIChmaWxlLCBzaXplb2YoZmlsZSks IGZbMF0pKQorCSAgZ290byBmYWxsYmFjazsKKwkgICAgCisJZm9yIChwID0g ZnVuYzsgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInOyBwKyspCisJICA7CisJ KnAgPSAnXDAnOworCQorCS8qIElmIHdlIG9ubHkgaGF2ZSB0aGUgYWRkcmVz cywgdXNlIHRoZSBnbGliYyBiYWNrdHJhY2UuICAqLworCWlmIChmdW5jWzBd ID09ICc/JyAmJiBmdW5jWzFdID09ICc/JyAmJiBmaWxlWzBdID09ICc/Jwor CSAgICAmJiBmaWxlWzFdID09ICc/JykKIAkgIHsKLQkgICAgaWYgKCEgZmdl dHMgKGZpbGUsIHNpemVvZihmaWxlKSwgb3V0cHV0KSkKLQkgICAgICBnb3Rv IGZhbGxiYWNrOwotCi0JICAgIGkrKzsKLQotCSAgICBmb3IgKHAgPSBmdW5j OyAqcCAhPSAnXG4nICYmICpwICE9ICdccic7IHArKykKLQkgICAgICA7Ci0K LQkgICAgKnAgPSAnXDAnOwotCi0JICAgIC8qIFRyeSB0byByZWNvZ25pemUg dGhlIGludGVybmFsIGxpYmdmb3J0cmFuIGZ1bmN0aW9ucy4gICovCi0JICAg IGlmIChzdHJuY2FzZWNtcCAoZnVuYywgIipfZ2ZvcnRyYW4iLCAxMCkgPT0g MAotCQl8fCBzdHJuY2FzZWNtcCAoZnVuYywgIl9nZm9ydHJhbiIsIDkpID09 IDAKLQkJfHwgc3RyY21wIChmdW5jLCAibWFpbiIpID09IDAgfHwgc3RyY21w IChmdW5jLCAiX3N0YXJ0IikgPT0gMAotCQl8fCBzdHJjbXAgKGZ1bmMsICJf Z2ZvcnRyYW5pX2JhY2t0cmFjZV9oYW5kbGVyIikgPT0gMCkKLQkgICAgICBj b250aW51ZTsKLQotCSAgICBpZiAobG9jYWxfc3RyY2FzZXN0ciAoc3RyW2ld LCAibGliZ2ZvcnRyYW4uc28iKSAhPSBOVUxMCi0JCXx8IGxvY2FsX3N0cmNh c2VzdHIgKHN0cltpXSwgImxpYmdmb3J0cmFuLmR5bGliIikgIT0gTlVMTAot CQl8fCBsb2NhbF9zdHJjYXNlc3RyIChzdHJbaV0sICJsaWJnZm9ydHJhbi5h IikgIT0gTlVMTCkKLQkgICAgICBjb250aW51ZTsKLQotCSAgICAvKiBJZiB3 ZSBvbmx5IGhhdmUgdGhlIGFkZHJlc3MsIHVzZSB0aGUgZ2xpYmMgYmFja3Ry YWNlLiAgKi8KLQkgICAgaWYgKGZ1bmNbMF0gPT0gJz8nICYmIGZ1bmNbMV0g PT0gJz8nICYmIGZpbGVbMF0gPT0gJz8nCi0JCSYmIGZpbGVbMV0gPT0gJz8n KQorCSAgICBidF9oZWFkZXIgKGopOworCSAgICB3aGlsZSAoMSkKIAkgICAg ICB7Ci0JCWVzdHJfd3JpdGUgKCIgICsgIik7Ci0JCWVzdHJfd3JpdGUgKHN0 cltpXSk7Ci0JCWVzdHJfd3JpdGUgKCJcbiIpOwotCSAgICAgICAgY29udGlu dWU7CisJCWNoYXIgYmM7CisJCXNzaXplX3QgbnJlYWQgPSByZWFkIChidFsw XSwgJmJjLCAxKTsKKwkJaWYgKG5yZWFkICE9IDEgfHwgYmMgPT0gJ1xuJykK KwkJICBicmVhazsKKwkJd3JpdGUgKFNUREVSUl9GSUxFTk8sICZiYywgMSk7 CiAJICAgICAgfQotCi0JICAgIC8qIEV4dHJhY3QgdGhlIGxpbmUgbnVtYmVy LiAgKi8KLQkgICAgZm9yIChlbmQgPSBOVUxMLCBwID0gZmlsZTsgKnA7IHAr KykKLQkgICAgICBpZiAoKnAgPT0gJzonKQotCQllbmQgPSBwOwotCSAgICBp ZiAoZW5kICE9IE5VTEwpCi0JICAgICAgewotCQkqZW5kID0gJ1wwJzsKLQkJ bGluZSA9IGF0b2kgKCsrZW5kKTsKLQkgICAgICB9Ci0JICAgIGVsc2UKLQkg ICAgICBsaW5lID0gLTE7Ci0KLQkgICAgaWYgKHN0cmNtcCAoZnVuYywgIk1B SU5fXyIpID09IDApCi0JICAgICAgZXN0cl93cml0ZSAoIiAgKyBpbiB0aGUg bWFpbiBwcm9ncmFtXG4iKTsKLQkgICAgZWxzZQorCSAgICBlc3RyX3dyaXRl ICgiXG4iKTsKKwkgICAgY29udGludWU7CisJICB9CisJZWxzZQorCSAgewor CSAgICAvKiBGb3J3YXJkIHRvIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBiYWNr dHJhY2UuICovCisJICAgIHdoaWxlICgxKQogCSAgICAgIHsKLQkJZXN0cl93 cml0ZSAoIiAgKyBmdW5jdGlvbiAiKTsKLQkJZXN0cl93cml0ZSAoZnVuYyk7 Ci0JCWVzdHJfd3JpdGUgKCIgKDB4Iik7Ci0JCWVzdHJfd3JpdGUgKGFkZHJb aV0pOwotCQllc3RyX3dyaXRlICgiKVxuIik7CisJCWNoYXIgYmM7CisJCXNz aXplX3QgbnJlYWQgPSByZWFkIChidFswXSwgJmJjLCAxKTsKKwkJaWYgKG5y ZWFkICE9IDEgfHwgYmMgPT0gJ1xuJykKKwkJICBicmVhazsKIAkgICAgICB9 CisJICB9CiAKLQkgICAgaWYgKGxpbmUgPD0gMCAmJiBzdHJjbXAgKGZpbGUs ICI/PyIpID09IDApCi0JICAgICAgY29udGludWU7CisJLyogX3N0YXJ0IGlz IGEgc2V0dXAgcm91dGluZSB0aGF0IGNhbGxzIG1haW4oKSwgYW5kIG1haW4o KSBpcworCSAgIHRoZSBmcm9udGVuZCByb3V0aW5lIHRoYXQgY2FsbHMgc29t ZSBzZXR1cCBzdHVmZiBhbmQgdGhlbgorCSAgIGNhbGxzIE1BSU5fXywgc28g YXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgc3RvcC4gICovCisJaWYgKHN0cmNt cCAoZnVuYywgIl9zdGFydCIpID09IDAgfHwgc3RyY21wIChmdW5jLCAibWFp biIpID09IDApCisJICBicmVhazsKKwkKKwkvKiBFeHRyYWN0IHRoZSBsaW5l IG51bWJlci4gICovCisJZm9yIChlbmQgPSBOVUxMLCBwID0gZmlsZTsgKnA7 IHArKykKKwkgIGlmICgqcCA9PSAnOicpCisJICAgIGVuZCA9IHA7CisJaWYg KGVuZCAhPSBOVUxMKQorCSAgeworCSAgICAqZW5kID0gJ1wwJzsKKwkgICAg bGluZSA9IGF0b2kgKCsrZW5kKTsKKwkgIH0KKwllbHNlCisJICBsaW5lID0g LTE7CisJCisJYnRfaGVhZGVyIChqKTsKKwllc3RyX3dyaXRlIChleGVfcGF0 aCk7CisJZXN0cl93cml0ZSAoIlsweCIpOworCWVzdHJfd3JpdGUgKGFkZHIp OworCWVzdHJfd3JpdGUgKCJdIGluICIpOworCWVzdHJfd3JpdGUgKGZ1bmMp OworCQorCWlmIChsaW5lIDw9IDAgJiYgc3RyY21wIChmaWxlLCAiPz8iKSA9 PSAwKQorCSAgeworCSAgICBlc3RyX3dyaXRlICgiXG4iKTsKKwkgICAgY29u dGludWU7CisJICB9CiAKLQkgICAgaWYgKGxpbmUgPD0gMCkKLQkgICAgICB7 Ci0JCWVzdHJfd3JpdGUgKCIgICAgZnJvbSBmaWxlICIpOwotCQllc3RyX3dy aXRlIChmaWxlKTsKLQkJZXN0cl93cml0ZSAoIlxuIik7Ci0JICAgICAgfQot CSAgICBlbHNlCi0JICAgICAgc3RfcHJpbnRmICgiICAgIGF0IGxpbmUgJWQg b2YgZmlsZSAlc1xuIiwgbGluZSwgZmlsZSk7CisJaWYgKGxpbmUgPD0gMCkK KwkgIHsKKwkgICAgZXN0cl93cml0ZSAoIiBhdCAiKTsKKwkgICAgZXN0cl93 cml0ZSAoZmlsZSk7CisJICAgIGVzdHJfd3JpdGUgKCJcbiIpOwogCSAgfQot CXdoaWxlIChmZ2V0cyAoZnVuYywgc2l6ZW9mKGZ1bmMpLCBvdXRwdXQpKTsK KwllbHNlCisJICBzdF9wcmludGYgKCIgYXQgJXM6JWRcbiIsIGZpbGUsIGxp bmUpOwogCi0JZnJlZSAoc3RyKTsKLQlyZXR1cm47CisgICAgICB9IC8qIExv b3Agb3ZlciBlYWNoIGhleCBhZGRyZXNzLiAgKi8KKyAgICBjbG9zZSAoaW5w WzFdKTsKKyAgICBjbG9zZSAoYnRbMF0pOworICAgIHdhaXQgKE5VTEwpOwor ICAgIHJldHVybjsKIAogZmFsbGJhY2s6Ci0JZXN0cl93cml0ZSAoIioqIFNv bWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIHJ1bm5pbmcgYWRkcjJsaW5lLiAq KlxuIgotCQkgICAgIioqIEZhbGxpbmcgYmFjayAgdG8gYSBzaW1wbGVyICBi YWNrdHJhY2Ugc2NoZW1lLiAqKlxuIik7Ci0gICAgICB9Ci0gICAgfQorICAg IGVzdHJfd3JpdGUgKCIqKiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBy dW5uaW5nIGFkZHIybGluZS4gKipcbiIKKwkJIioqIEZhbGxpbmcgYmFjayAg dG8gYSBzaW1wbGVyICBiYWNrdHJhY2Ugc2NoZW1lLiAqKlxuIik7CisgIH0K ICAgd2hpbGUgKDApOwogCiAjdW5kZWYgREVQVEgKICN1bmRlZiBCVUZTSVpF CiAKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLyogQ0FOX1BJUEUgKi8KKwor ICAvKiBGYWxsYmFjayB0byB0aGUgZ2xpYmMgYmFja3RyYWNlLiAgKi8KKyAg ZXN0cl93cml0ZSAoIlxuQmFja3RyYWNlIGZvciB0aGlzIGVycm9yOlxuIik7 CisgIGJhY2t0cmFjZV9zeW1ib2xzX2ZkICh0cmFjZSwgZGVwdGgsIFNUREVS Ul9GSUxFTk8pOworICByZXR1cm47CiAKLSNpZiBDQU5fRk9SSyAmJiBkZWZp bmVkKEhBVkVfR0VUUFBJRCkKKyNlbGlmIGRlZmluZWQoQ0FOX0ZPUkspICYm IGRlZmluZWQoSEFWRV9HRVRQUElEKQogICAvKiBUcnkgdG8gY2FsbCBwc3Rh Y2suICAqLwogICBkbwogICB7CkBAIC0zMTIsMTUgKzMxOCw5IEBAIGZhbGxi YWNrOgogCWV4ZWN2cCAoYXJnWzBdLCBhcmcpOwogI3VuZGVmIE5VTV9BUkdT CiAKLQkvKiBwc3RhY2sgZGlkbid0IHdvcmssIHNvIHdlIGZhbGwgYmFjayB0 byBkdW1waW5nIHRoZSBnbGliYwotCSAgIGJhY2t0cmFjZSBpZiB3ZSBjYW4u ICAqLwotI2lmIEdMSUJDX0JBQ0tUUkFDRQotCWR1bXBfZ2xpYmNfYmFja3Ry YWNlIChkZXB0aCwgc3RyKTsKLSNlbHNlCisJLyogcHN0YWNrIGRpZG4ndCB3 b3JrLiAgKi8KIAllc3RyX3dyaXRlICgiICB1bmFibGUgdG8gcHJvZHVjZSBh IGJhY2t0cmFjZSwgc29ycnkhXG4iKTsKLSNlbmRpZgotCi0JX2V4aXQgKDAp OworCV9leGl0ICgxKTsKICAgICAgIH0KIAogICAgIC8qIEZhdGhlciBwcm9j ZXNzLiAgKi8KQEAgLTMyOCwxMyArMzI4LDcgQEAgZmFsbGJhY2s6CiAgICAg cmV0dXJuOwogICB9CiAgIHdoaWxlKDApOwotI2VuZGlmCi0KLSNpZiBHTElC Q19CQUNLVFJBQ0UKLSAgLyogRmFsbGJhY2sgdG8gdGhlIGdsaWJjIGJhY2t0 cmFjZS4gICovCi0gIGVzdHJfd3JpdGUgKCJcbkJhY2t0cmFjZSBmb3IgdGhp cyBlcnJvcjpcbiIpOwotICBkdW1wX2dsaWJjX2JhY2t0cmFjZSAoZGVwdGgs IHN0cik7Ci0gIHJldHVybjsKLSNlbmRpZgorI2Vsc2UKICAgZXN0cl93cml0 ZSAoIlxuQmFja3RyYWNlIG5vdCB5ZXQgYXZhaWxhYmxlIG9uIHRoaXMgcGxh dGZvcm0sIHNvcnJ5IVxuIik7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2xp Ymdmb3J0cmFuL3J1bnRpbWUvbWFpbi5jIGIvbGliZ2ZvcnRyYW4vcnVudGlt ZS9tYWluLmMKaW5kZXggZjVkNDcyMS4uNTRkOWUwOSAxMDA2NDQKLS0tIGEv bGliZ2ZvcnRyYW4vcnVudGltZS9tYWluLmMKKysrIGIvbGliZ2ZvcnRyYW4v cnVudGltZS9tYWluLmMKQEAgLTkyLDYgKzkyLDE5IEBAIHN0b3JlX2V4ZV9w YXRoIChjb25zdCBjaGFyICogYXJndjApCiAgIGlmIChwbGVhc2VfZnJlZV9l eGVfcGF0aF93aGVuX2RvbmUpCiAgICAgZnJlZSAoKGNoYXIgKikgZXhlX3Bh dGgpOwogCisgIC8qIFJlYWRpbmcgdGhlIC9wcm9jL3NlbGYvZXhlIHN5bWxp bmsgaXMgTGludXgtc3BlY2lmaWMoPyksIGJ1dCBpZgorICAgICBpdCB3b3Jr cyBpdCBnaXZlcyB0aGUgY29ycmVjdCBhbnN3ZXIuICAqLworI2lmZGVmIEhB VkVfUkVBRExJTksKKyAgaW50IGxlbjsKKyAgaWYgKChsZW4gPSByZWFkbGlu ayAoIi9wcm9jL3NlbGYvZXhlIiwgYnVmLCBzaXplb2YgKGJ1ZikgLSAxKSkg IT0gLTEpCisgICAgeworICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAg ZXhlX3BhdGggPSBzdHJkdXAgKGJ1Zik7CisgICAgICBwbGVhc2VfZnJlZV9l eGVfcGF0aF93aGVuX2RvbmUgPSAxOworICAgICAgcmV0dXJuOworICAgIH0K KyNlbmRpZgorCiAgIC8qIE9uIHRoZSBzaW11bGF0b3IgYXJndiBpcyBub3Qg c2V0LiAgKi8KICAgaWYgKGFyZ3YwID09IE5VTEwgfHwgYXJndjBbMF0gPT0g Jy8nKQogICAgIHsKQEAgLTEwNyw3ICsxMjAsOSBAQCBzdG9yZV9leGVfcGF0 aCAoY29uc3QgY2hhciAqIGFyZ3YwKQogICBjd2QgPSAiIjsKICNlbmRpZgog Ci0gIC8qIGV4ZV9wYXRoIHdpbGwgYmUgY3dkICsgIi8iICsgYXJndlswXSAr ICJcMCIgKi8KKyAgLyogZXhlX3BhdGggd2lsbCBiZSBjd2QgKyAiLyIgKyBh cmd2WzBdICsgIlwwIi4gIFRoaXMgd2lsbCBub3Qgd29yaworICAgICBpZiB0 aGUgZXhlY3V0YWJsZSBpcyBub3QgaW4gdGhlIGN3ZCwgYnV0IGF0IHRoaXMg cG9pbnQgd2UncmUgb3V0CisgICAgIG9mIGJldHRlciBpZGVhcy4gICovCiAg IHNpemVfdCBwYXRobGVuID0gc3RybGVuIChjd2QpICsgMSArIHN0cmxlbiAo YXJndjApICsgMTsKICAgcGF0aCA9IG1hbGxvYyAocGF0aGxlbik7CiAgIHNu cHJpbnRmIChwYXRoLCBwYXRobGVuLCAiJXMlYyVzIiwgY3dkLCBESVJfU0VQ QVJBVE9SLCBhcmd2MCk7Cg== --bcaec51f995913aaee04a34e9f22--