From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10193 invoked by alias); 15 May 2011 09:35:32 -0000 Received: (qmail 9914 invoked by uid 22791); 15 May 2011 09:35:27 -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-pw0-f47.google.com (HELO mail-pw0-f47.google.com) (209.85.160.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 15 May 2011 09:35:11 +0000 Received: by pwj9 with SMTP id 9so1981313pwj.20 for ; Sun, 15 May 2011 02:35:10 -0700 (PDT) MIME-Version: 1.0 Received: by 10.68.40.170 with SMTP id y10mr5461581pbk.29.1305452110517; Sun, 15 May 2011 02:35:10 -0700 (PDT) Received: by 10.68.54.105 with HTTP; Sun, 15 May 2011 02:35:10 -0700 (PDT) In-Reply-To: References: Date: Sun, 15 May 2011 17:43: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=bcaec544f05251955004a34d417e 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/msg01068.txt.bz2 --bcaec544f05251955004a34d417e Content-Type: text/plain; charset=UTF-8 Content-length: 2952 On Sat, May 14, 2011 at 22:40, Janne Blomqvist wrote: > Hi > > the current version of showing the backtrace is not async-signal-safe > as it uses backtrace_symbols() which, in turn, uses malloc(). The > attached patch changes the backtrace printing functionality to instead > use backtrace_symbols_fd() and pipes. > > Also, it does some other work on backtrace printing: > > - Nowadays the main program has the same debug symbol name as whatever > the name of the main program is, rather than MAIN__. Therefore remove > special case logic related to that. FWIW, I noticed that if debug symbols are not included, the MAIN__ is printed. So should I add back the special casing of MAIN__? > - Don't filter out stack frames from inside libgfortran, as this might > lose information in case the reason for the crash is in the library. > > - Reformat the output slightly, so the each stack frame fits on one > line, and begins with #NUM, similar to GDB. I reformatted it some more, now it includes the file name, so the output is like Backtrace for this error: #0 /home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3(+0x18357)[0x7fd385e51357] #1 /home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3(+0x19de7)[0x7fd385e52de7] #2 /home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3(+0xe1f69)[0x7fd385f1af69] #3 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400612] in b_ at bt.f90:5 #4 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400620] in b_ at bt.f90:7 #5 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400630] in a_ at bt.f90:11 #6 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400640] in bt at bt.f90:15 Aborted Similar to GDB, the address is now printed before function and file:line number info. And similar to backtrace_symbols_fd() output (3 first stack frames above), the file name is printed before the address. I also improved the logic for figuring out the executable path, as the old way doesn't work if the executable is not in the current working directory. The improved logic is, I believe, Linux-specific, but since the only user of full_exe_path() is the glibc-specific backtracing stuff I don't think that is a big loss. 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. (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. (full_exe_path): If the path is NULL, try to figure it out before returning. -- Janne Blomqvist --bcaec544f05251955004a34d417e Content-Type: text/x-patch; charset=US-ASCII; name="bt2.diff" Content-Disposition: attachment; filename="bt2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gnps56te1 Content-length: 15942 ZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdm b3J0cmFuL2NvbmZpZ3VyZS5hYwppbmRleCBjZjM4ZmIwLi43NGNmZTQ0IDEw MDY0NAotLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrIGIvbGli Z2ZvcnRyYW4vY29uZmlndXJlLmFjCkBAIC0yNjQsMTAgKzI2NCwxMCBAQCBB Q19DSEVDS19GVU5DUyhzbGVlcCB0aW1lIHR0eW5hbWUgc2lnbmFsIGFsYXJt IGNsb2NrIGFjY2VzcyBmb3JrIGV4ZWNsKQogQUNfQ0hFQ0tfRlVOQ1Mod2Fp dCBzZXRtb2RlIGV4ZWN2cCBwaXBlIGR1cDIgY2xvc2UgZmRvcGVuIHN0cmNh c2VzdHIgZ2V0cmxpbWl0KQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0dGltZW9mZGF5 IHN0YXQgZnN0YXQgbHN0YXQgZ2V0cHd1aWQgdnNucHJpbnRmIGR1cCBnZXRj d2QpCiBBQ19DSEVDS19GVU5DUyhsb2NhbHRpbWVfciBnbXRpbWVfciBzdHJl cnJvcl9yIGdldHB3dWlkX3IgdHR5bmFtZV9yKQotQUNfQ0hFQ0tfRlVOQ1Mo Y2xvY2tfZ2V0dGltZSBzdHJmdGltZSkKK0FDX0NIRUNLX0ZVTkNTKGNsb2Nr X2dldHRpbWUgc3RyZnRpbWUgcmVhZGxpbmspCiAKICMgQ2hlY2sgZm9yIGds aWJjIGJhY2t0cmFjZSBmdW5jdGlvbnMKLUFDX0NIRUNLX0ZVTkNTKGJhY2t0 cmFjZSBiYWNrdHJhY2Vfc3ltYm9scykKK0FDX0NIRUNLX0ZVTkNTKGJhY2t0 cmFjZSBiYWNrdHJhY2Vfc3ltYm9sc19mZCkKIAogIyBDaGVjayBsaWJjIGZv ciBnZXRnaWQsIGdldHBpZCwgZ2V0dWlkCiBBQ19DSEVDS19MSUIoW2NdLFtn ZXRnaWRdLFtBQ19ERUZJTkUoW0hBVkVfR0VUR0lEXSxbMV0sW2xpYmMgaW5j bHVkZXMgZ2V0Z2lkXSldKQpkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vcnVu dGltZS9iYWNrdHJhY2UuYyBiL2xpYmdmb3J0cmFuL3J1bnRpbWUvYmFja3Ry YWNlLmMKaW5kZXggMTA5MTdkMy4uYzU5MWIwMSAxMDA2NDQKLS0tIGEvbGli Z2ZvcnRyYW4vcnVudGltZS9iYWNrdHJhY2UuYworKysgYi9saWJnZm9ydHJh bi9ydW50aW1lL2JhY2t0cmFjZS5jCkBAIC01NCw1NyArNTQsMjAgQEAgc2Vl IHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3Bl Y3RpdmVseS4gIElmIG5vdCwgc2VlCiAjZGVmaW5lIENBTl9GT1JLIChkZWZp bmVkKEhBVkVfRk9SSykgJiYgZGVmaW5lZChIQVZFX0VYRUNWUCkgXAogCQkg ICYmIGRlZmluZWQoSEFWRV9XQUlUKSkKICNkZWZpbmUgR0xJQkNfQkFDS1RS QUNFIChkZWZpbmVkKEhBVkVfQkFDS1RSQUNFKSBcCi0JCQkgJiYgZGVmaW5l ZChIQVZFX0JBQ0tUUkFDRV9TWU1CT0xTKSkKKwkJCSAmJiBkZWZpbmVkKEhB VkVfQkFDS1RSQUNFX1NZTUJPTFNfRkQpKQogI2RlZmluZSBDQU5fUElQRSAo Q0FOX0ZPUksgJiYgZGVmaW5lZChIQVZFX1BJUEUpIFwKIAkJICAmJiBkZWZp bmVkKEhBVkVfRFVQMikgJiYgZGVmaW5lZChIQVZFX0ZET1BFTikgXAogCQkg ICYmIGRlZmluZWQoSEFWRV9DTE9TRSkpCiAKIAotI2lmIEdMSUJDX0JBQ0tU UkFDRSAmJiBDQU5fUElQRQotc3RhdGljIGNoYXIgKgotbG9jYWxfc3RyY2Fz ZXN0ciAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQorLyogR0RC IHN0eWxlICNOVU0gaW5kZXggZm9yIGVhY2ggc3RhY2sgZnJhbWUuICAqLwor c3RhdGljIHZvaWQgCitidF9oZWFkZXIgKGludCBudW0pCiB7Ci0jaWZkZWYg SEFWRV9TVFJDQVNFU1RSCi0gIHJldHVybiBzdHJjYXNlc3RyIChzMSwgczIp OwotI2Vsc2UKLQotICBjb25zdCBjaGFyICpwID0gczE7Ci0gIGNvbnN0IHNp emVfdCBsZW4gPSBzdHJsZW4gKHMyKTsKLSAgY29uc3QgY2hhciB1ID0gKnMy LCB2ID0gaXN1cHBlcigoaW50KSAqczIpID8gdG9sb3dlcigoaW50KSAqczIp Ci0JCQkJICA6IChpc2xvd2VyKChpbnQpICpzMikgPyB0b3VwcGVyKChpbnQp ICpzMikKLQkJCQkJCQk6ICpzMik7Ci0KLSAgd2hpbGUgKDEpCi0gICAgewot ICAgICAgd2hpbGUgKCpwICE9IHUgJiYgKnAgIT0gdiAmJiAqcCkKLQlwKys7 Ci0gICAgICBpZiAoKnAgPT0gMCkKLQlyZXR1cm4gTlVMTDsKLSAgICAgIGlm IChzdHJuY2FzZWNtcCAocCwgczIsIGxlbikgPT0gMCkKLQlyZXR1cm4gKGNo YXIgKilwOwotICAgIH0KLSNlbmRpZgorICBzdF9wcmludGYgKCIgICMlZCAg IiwgbnVtKTsKIH0KLSNlbmRpZgogCiAKLSNpZiBHTElCQ19CQUNLVFJBQ0UK LXN0YXRpYyB2b2lkCi1kdW1wX2dsaWJjX2JhY2t0cmFjZSAoaW50IGRlcHRo LCBjaGFyICpzdHJbXSkKLXsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsg aSA8IGRlcHRoOyBpKyspCi0gICAgewotICAgICAgZXN0cl93cml0ZSAoIiAg KyAiKTsKLSAgICAgIGVzdHJfd3JpdGUgKHN0cltpXSk7Ci0gICAgICBlc3Ry X3dyaXRlICgiXG4iKTsKLSAgICB9Ci0KLSAgZnJlZSAoc3RyKTsKLX0KLSNl bmRpZgotCiAvKiBzaG93X2JhY2t0cmFjZSBkaXNwbGF5cyB0aGUgYmFja3Ry YWNlLCBjdXJyZW50bHkgb2J0YWluZWQgYnkgbWVhbnMgb2YKICAgIHRoZSBn bGliYyBiYWNrdHJhY2UqIGZ1bmN0aW9ucy4gICovCiB2b2lkCkBAIC0xMTYs MTc2ICs3OSwxODYgQEAgc2hvd19iYWNrdHJhY2UgKHZvaWQpCiAjZGVmaW5l IEJVRlNJWkUgMTAyNAogCiAgIHZvaWQgKnRyYWNlW0RFUFRIXTsKLSAgY2hh ciAqKnN0cjsKICAgaW50IGRlcHRoOwogCiAgIGRlcHRoID0gYmFja3RyYWNl ICh0cmFjZSwgREVQVEgpOwogICBpZiAoZGVwdGggPD0gMCkKICAgICByZXR1 cm47CiAKLSAgc3RyID0gYmFja3RyYWNlX3N5bWJvbHMgKHRyYWNlLCBkZXB0 aCk7Ci0KICNpZiBDQU5fUElQRQogCi0jaWZuZGVmIFNURElOX0ZJTEVOTwot I2RlZmluZSBTVERJTl9GSUxFTk8gMAotI2VuZGlmCi0KLSNpZm5kZWYgU1RE T1VUX0ZJTEVOTwotI2RlZmluZSBTVERPVVRfRklMRU5PIDEKLSNlbmRpZgot Ci0jaWZuZGVmIFNUREVSUl9GSUxFTk8KLSNkZWZpbmUgU1RERVJSX0ZJTEVO TyAyCi0jZW5kaWYKLQogICAvKiBXZSBhdHRlbXB0IHRvIGV4dHJhY3QgZmls ZSBhbmQgbGluZSBpbmZvcm1hdGlvbiBmcm9tIGFkZHIybGluZS4gICovCiAg IGRvCiAgIHsKICAgICAvKiBMb2NhbCB2YXJpYWJsZXMuICAqLwotICAgIGlu dCBmWzJdLCBwaWQsIGxpbmUsIGk7CisgICAgaW50IGZbMl0sIHBpZCwgbGlu ZSwgYnRbMl0sIGlucFsyXTsKICAgICBGSUxFICpvdXRwdXQ7Ci0gICAgY2hh ciBhZGRyX2J1ZltERVBUSF1bR0ZDX1hUT0FfQlVGX1NJWkVdLCBmdW5jW0JV RlNJWkVdLCBmaWxlW0JVRlNJWkVdOworICAgIGNoYXIgYWRkcl9idWZbR0ZD X1hUT0FfQlVGX1NJWkVdLCBmdW5jW0JVRlNJWkVdLCBmaWxlW0JVRlNJWkVd OwogICAgIGNoYXIgKnAsICplbmQ7Ci0gICAgY29uc3QgY2hhciAqYWRkcltE RVBUSF07CiAKLSAgICAvKiBXcml0ZSB0aGUgbGlzdCBvZiBhZGRyZXNzZXMg aW4gaGV4YWRlY2ltYWwgZm9ybWF0LiAgKi8KLSAgICBmb3IgKGkgPSAwOyBp IDwgZGVwdGg7IGkrKykKLSAgICAgIGFkZHJbaV0gPSBnZmNfeHRvYSAoKEdG Q19VSU5URUdFUl9MQVJHRVNUKSAoaW50cHRyX3QpIHRyYWNlW2ldLCBhZGRy X2J1ZltpXSwKLQkJICAgICAgc2l6ZW9mIChhZGRyX2J1ZltpXSkpOworICAg IGNoYXIgKmV4ZV9wYXRoID0gZnVsbF9leGVfcGF0aCAoKTsKKyAgICBpZiAo ZXhlX3BhdGggPT0gTlVMTCkKKyAgICAgIGV4ZV9wYXRoID0gKGNoYXIgKikg ImEub3V0IjsKIAogICAgIC8qIERvbid0IG91dHB1dCBhbiBlcnJvciBtZXNz YWdlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCB3ZSdsbCBzaW1wbHkKICAg ICAgICBmYWxsIGJhY2sgdG8gdGhlIHBzdGFjayBhbmQgZ2xpYmMgYmFja3Ry YWNlcy4gICovCiAgICAgaWYgKHBpcGUgKGYpICE9IDApCiAgICAgICBicmVh azsKKyAgICBpZiAocGlwZSAoaW5wKSAhPSAwKQorICAgICAgYnJlYWs7CiAg ICAgaWYgKChwaWQgPSBmb3JrICgpKSA9PSAtMSkKICAgICAgIGJyZWFrOwog CiAgICAgaWYgKHBpZCA9PSAwKQogICAgICAgewogCS8qIENoaWxkIHByb2Nl c3MuICAqLwotI2RlZmluZSBOVU1fRklYRURBUkdTIDUKLQljaGFyICphcmdb REVQVEgrTlVNX0ZJWEVEQVJHUysxXTsKKyNkZWZpbmUgTlVNX0ZJWEVEQVJH UyA3CisJY2hhciAqYXJnW05VTV9GSVhFREFSR1NdOwogCiAJY2xvc2UgKGZb MF0pOwotCWNsb3NlIChTVERJTl9GSUxFTk8pOworCisJY2xvc2UgKGlucFsx XSk7CisJaWYgKGR1cDIgKGlucFswXSwgU1RESU5fRklMRU5PKSA9PSAtMSkK KwkgIF9leGl0ICgxKTsKKwljbG9zZSAoaW5wWzBdKTsKKwogCWNsb3NlIChT VERFUlJfRklMRU5PKTsKIAogCWlmIChkdXAyIChmWzFdLCBTVERPVVRfRklM RU5PKSA9PSAtMSkKLQkgIF9leGl0ICgwKTsKKwkgIF9leGl0ICgxKTsKIAlj bG9zZSAoZlsxXSk7CiAKIAlhcmdbMF0gPSAoY2hhciAqKSAiYWRkcjJsaW5l IjsKIAlhcmdbMV0gPSAoY2hhciAqKSAiLWUiOwotCWFyZ1syXSA9IGZ1bGxf ZXhlX3BhdGggKCk7CisJYXJnWzJdID0gZXhlX3BhdGg7CiAJYXJnWzNdID0g KGNoYXIgKikgIi1mIjsKIAlhcmdbNF0gPSAoY2hhciAqKSAiLXMiOwotCWZv ciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQotCSAgYXJnW05VTV9GSVhFREFS R1MraV0gPSAoY2hhciAqKSBhZGRyW2ldOwotCWFyZ1tOVU1fRklYRURBUkdT K2RlcHRoXSA9IE5VTEw7CisJYXJnWzVdID0gKGNoYXIgKikgIi1DIjsKKwlh cmdbNl0gPSBOVUxMOwogCWV4ZWN2cCAoYXJnWzBdLCBhcmcpOwotCV9leGl0 ICgwKTsKKwlfZXhpdCAoMSk7CiAjdW5kZWYgTlVNX0ZJWEVEQVJHUwogICAg ICAgfQogCiAgICAgLyogRmF0aGVyIHByb2Nlc3MuICAqLwogICAgIGNsb3Nl IChmWzFdKTsKLSAgICB3YWl0IChOVUxMKTsKKyAgICBjbG9zZSAoaW5wWzBd KTsKKyAgICBpZiAocGlwZSAoYnQpICE9IDApCisgICAgICBicmVhazsKKyAg ICBiYWNrdHJhY2Vfc3ltYm9sc19mZCAodHJhY2UsIGRlcHRoLCBidFsxXSk7 CisgICAgY2xvc2UgKGJ0WzFdKTsKICAgICBvdXRwdXQgPSBmZG9wZW4gKGZb MF0sICJyIik7Ci0gICAgaSA9IC0xOwogCi0gICAgaWYgKGZnZXRzIChmdW5j LCBzaXplb2YoZnVuYyksIG91dHB1dCkpCisgICAgZXN0cl93cml0ZSAoIlxu QmFja3RyYWNlIGZvciB0aGlzIGVycm9yOlxuIik7CisgICAgZm9yIChpbnQg aiA9IDA7IGogPCBkZXB0aDsgaisrKQogICAgICAgewotCWVzdHJfd3JpdGUg KCJcbkJhY2t0cmFjZSBmb3IgdGhpcyBlcnJvcjpcbiIpOwotCi0JZG8KKwlj b25zdCBjaGFyICphZGRyID0gZ2ZjX3h0b2EgCisJICAoKEdGQ19VSU5URUdF Ul9MQVJHRVNUKSAoaW50cHRyX3QpIHRyYWNlW2pdLCAKKwkgICBhZGRyX2J1 Ziwgc2l6ZW9mIChhZGRyX2J1ZikpOworCisJd3JpdGUgKGlucFsxXSwgYWRk ciwgc3RybGVuIChhZGRyKSk7CisJd3JpdGUgKGlucFsxXSwgIlxuIiwgMSk7 CisJCisJaWYgKCEgZmdldHMgKGZ1bmMsIHNpemVvZihmdW5jKSwgb3V0cHV0 KSkKKwkgIGdvdG8gZmFsbGJhY2s7CisJaWYgKCEgZmdldHMgKGZpbGUsIHNp emVvZihmaWxlKSwgb3V0cHV0KSkKKwkgIGdvdG8gZmFsbGJhY2s7CisJICAg IAorCWZvciAocCA9IGZ1bmM7ICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJzsg cCsrKQorCSAgOworCSpwID0gJ1wwJzsKKwkKKwkvKiBJZiB3ZSBvbmx5IGhh dmUgdGhlIGFkZHJlc3MsIHVzZSB0aGUgZ2xpYmMgYmFja3RyYWNlLiAgKi8K KwlpZiAoZnVuY1swXSA9PSAnPycgJiYgZnVuY1sxXSA9PSAnPycgJiYgZmls ZVswXSA9PSAnPycKKwkgICAgJiYgZmlsZVsxXSA9PSAnPycpCiAJICB7Ci0J ICAgIGlmICghIGZnZXRzIChmaWxlLCBzaXplb2YoZmlsZSksIG91dHB1dCkp Ci0JICAgICAgZ290byBmYWxsYmFjazsKLQotCSAgICBpKys7Ci0KLQkgICAg Zm9yIChwID0gZnVuYzsgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInOyBwKysp Ci0JICAgICAgOwotCi0JICAgICpwID0gJ1wwJzsKLQotCSAgICAvKiBUcnkg dG8gcmVjb2duaXplIHRoZSBpbnRlcm5hbCBsaWJnZm9ydHJhbiBmdW5jdGlv bnMuICAqLwotCSAgICBpZiAoc3RybmNhc2VjbXAgKGZ1bmMsICIqX2dmb3J0 cmFuIiwgMTApID09IDAKLQkJfHwgc3RybmNhc2VjbXAgKGZ1bmMsICJfZ2Zv cnRyYW4iLCA5KSA9PSAwCi0JCXx8IHN0cmNtcCAoZnVuYywgIm1haW4iKSA9 PSAwIHx8IHN0cmNtcCAoZnVuYywgIl9zdGFydCIpID09IDAKLQkJfHwgc3Ry Y21wIChmdW5jLCAiX2dmb3J0cmFuaV9iYWNrdHJhY2VfaGFuZGxlciIpID09 IDApCi0JICAgICAgY29udGludWU7Ci0KLQkgICAgaWYgKGxvY2FsX3N0cmNh c2VzdHIgKHN0cltpXSwgImxpYmdmb3J0cmFuLnNvIikgIT0gTlVMTAotCQl8 fCBsb2NhbF9zdHJjYXNlc3RyIChzdHJbaV0sICJsaWJnZm9ydHJhbi5keWxp YiIpICE9IE5VTEwKLQkJfHwgbG9jYWxfc3RyY2FzZXN0ciAoc3RyW2ldLCAi bGliZ2ZvcnRyYW4uYSIpICE9IE5VTEwpCi0JICAgICAgY29udGludWU7Ci0K LQkgICAgLyogSWYgd2Ugb25seSBoYXZlIHRoZSBhZGRyZXNzLCB1c2UgdGhl IGdsaWJjIGJhY2t0cmFjZS4gICovCi0JICAgIGlmIChmdW5jWzBdID09ICc/ JyAmJiBmdW5jWzFdID09ICc/JyAmJiBmaWxlWzBdID09ICc/JwotCQkmJiBm aWxlWzFdID09ICc/JykKLQkgICAgICB7Ci0JCWVzdHJfd3JpdGUgKCIgICsg Iik7Ci0JCWVzdHJfd3JpdGUgKHN0cltpXSk7Ci0JCWVzdHJfd3JpdGUgKCJc biIpOwotCSAgICAgICAgY29udGludWU7Ci0JICAgICAgfQotCi0JICAgIC8q IEV4dHJhY3QgdGhlIGxpbmUgbnVtYmVyLiAgKi8KLQkgICAgZm9yIChlbmQg PSBOVUxMLCBwID0gZmlsZTsgKnA7IHArKykKLQkgICAgICBpZiAoKnAgPT0g JzonKQotCQllbmQgPSBwOwotCSAgICBpZiAoZW5kICE9IE5VTEwpCisJICAg IGJ0X2hlYWRlciAoaik7CisJICAgIHdoaWxlICgxKQogCSAgICAgIHsKLQkJ KmVuZCA9ICdcMCc7Ci0JCWxpbmUgPSBhdG9pICgrK2VuZCk7CisJCWNoYXIg YmM7CisJCXNzaXplX3QgbnJlYWQgPSByZWFkIChidFswXSwgJmJjLCAxKTsK KwkJaWYgKG5yZWFkICE9IDEgfHwgYmMgPT0gJ1xuJykKKwkJICBicmVhazsK KwkJd3JpdGUgKFNUREVSUl9GSUxFTk8sICZiYywgMSk7CiAJICAgICAgfQot CSAgICBlbHNlCi0JICAgICAgbGluZSA9IC0xOwotCi0JICAgIGlmIChzdHJj bXAgKGZ1bmMsICJNQUlOX18iKSA9PSAwKQotCSAgICAgIGVzdHJfd3JpdGUg KCIgICsgaW4gdGhlIG1haW4gcHJvZ3JhbVxuIik7Ci0JICAgIGVsc2UKKwkg ICAgZXN0cl93cml0ZSAoIlxuIik7CisJICAgIGNvbnRpbnVlOworCSAgfQor CWVsc2UKKwkgIHsKKwkgICAgLyogRm9yd2FyZCB0byB0aGUgbmV4dCBlbnRy eSBpbiB0aGUgYmFja3RyYWNlLiAqLworCSAgICB3aGlsZSAoMSkKIAkgICAg ICB7Ci0JCWVzdHJfd3JpdGUgKCIgICsgZnVuY3Rpb24gIik7Ci0JCWVzdHJf d3JpdGUgKGZ1bmMpOwotCQllc3RyX3dyaXRlICgiICgweCIpOwotCQllc3Ry X3dyaXRlIChhZGRyW2ldKTsKLQkJZXN0cl93cml0ZSAoIilcbiIpOworCQlj aGFyIGJjOworCQlzc2l6ZV90IG5yZWFkID0gcmVhZCAoYnRbMF0sICZiYywg MSk7CisJCWlmIChucmVhZCAhPSAxIHx8IGJjID09ICdcbicpCisJCSAgYnJl YWs7CiAJICAgICAgfQorCSAgfQogCi0JICAgIGlmIChsaW5lIDw9IDAgJiYg c3RyY21wIChmaWxlLCAiPz8iKSA9PSAwKQotCSAgICAgIGNvbnRpbnVlOwor CS8qIF9zdGFydCBpcyBhIHNldHVwIHJvdXRpbmUgdGhhdCBjYWxscyBtYWlu KCksIGFuZCBtYWluKCkgaXMKKwkgICB0aGUgZnJvbnRlbmQgcm91dGluZSB0 aGF0IGNhbGxzIHNvbWUgc2V0dXAgc3R1ZmYgYW5kIHRoZW4KKwkgICBjYWxs cyBNQUlOX18sIHNvIGF0IHRoaXMgcG9pbnQgd2Ugc2hvdWxkIHN0b3AuICAq LworCWlmIChzdHJjbXAgKGZ1bmMsICJfc3RhcnQiKSA9PSAwIHx8IHN0cmNt cCAoZnVuYywgIm1haW4iKSA9PSAwKQorCSAgYnJlYWs7CisJCisJLyogRXh0 cmFjdCB0aGUgbGluZSBudW1iZXIuICAqLworCWZvciAoZW5kID0gTlVMTCwg cCA9IGZpbGU7ICpwOyBwKyspCisJICBpZiAoKnAgPT0gJzonKQorCSAgICBl bmQgPSBwOworCWlmIChlbmQgIT0gTlVMTCkKKwkgIHsKKwkgICAgKmVuZCA9 ICdcMCc7CisJICAgIGxpbmUgPSBhdG9pICgrK2VuZCk7CisJICB9CisJZWxz ZQorCSAgbGluZSA9IC0xOworCQorCWJ0X2hlYWRlciAoaik7CisJZXN0cl93 cml0ZSAoZXhlX3BhdGgpOworCWVzdHJfd3JpdGUgKCJbMHgiKTsKKwllc3Ry X3dyaXRlIChhZGRyKTsKKwllc3RyX3dyaXRlICgiXSBpbiAiKTsKKwllc3Ry X3dyaXRlIChmdW5jKTsKKwkKKwlpZiAobGluZSA8PSAwICYmIHN0cmNtcCAo ZmlsZSwgIj8/IikgPT0gMCkKKwkgIHsKKwkgICAgZXN0cl93cml0ZSAoIlxu Iik7CisJICAgIGNvbnRpbnVlOworCSAgfQogCi0JICAgIGlmIChsaW5lIDw9 IDApCi0JICAgICAgewotCQllc3RyX3dyaXRlICgiICAgIGZyb20gZmlsZSAi KTsKLQkJZXN0cl93cml0ZSAoZmlsZSk7Ci0JCWVzdHJfd3JpdGUgKCJcbiIp OwotCSAgICAgIH0KLQkgICAgZWxzZQotCSAgICAgIHN0X3ByaW50ZiAoIiAg ICBhdCBsaW5lICVkIG9mIGZpbGUgJXNcbiIsIGxpbmUsIGZpbGUpOworCWlm IChsaW5lIDw9IDApCisJICB7CisJICAgIGVzdHJfd3JpdGUgKCIgYXQgIik7 CisJICAgIGVzdHJfd3JpdGUgKGZpbGUpOworCSAgICBlc3RyX3dyaXRlICgi XG4iKTsKIAkgIH0KLQl3aGlsZSAoZmdldHMgKGZ1bmMsIHNpemVvZihmdW5j KSwgb3V0cHV0KSk7CisJZWxzZQorCSAgc3RfcHJpbnRmICgiIGF0ICVzOiVk XG4iLCBmaWxlLCBsaW5lKTsKIAotCWZyZWUgKHN0cik7Ci0JcmV0dXJuOwor ICAgICAgfSAvKiBMb29wIG92ZXIgZWFjaCBoZXggYWRkcmVzcy4gICovCisg ICAgY2xvc2UgKGlucFsxXSk7CisgICAgY2xvc2UgKGJ0WzBdKTsKKyAgICB3 YWl0IChOVUxMKTsKKyAgICByZXR1cm47CiAKIGZhbGxiYWNrOgotCWVzdHJf d3JpdGUgKCIqKiBTb21ldGhpbmcgd2VudCB3cm9uZyB3aGlsZSBydW5uaW5n IGFkZHIybGluZS4gKipcbiIKLQkJICAgICIqKiBGYWxsaW5nIGJhY2sgIHRv IGEgc2ltcGxlciAgYmFja3RyYWNlIHNjaGVtZS4gKipcbiIpOwotICAgICAg fQotICAgIH0KKyAgICBlc3RyX3dyaXRlICgiKiogU29tZXRoaW5nIHdlbnQg d3Jvbmcgd2hpbGUgcnVubmluZyBhZGRyMmxpbmUuICoqXG4iCisJCSIqKiBG YWxsaW5nIGJhY2sgIHRvIGEgc2ltcGxlciAgYmFja3RyYWNlIHNjaGVtZS4g KipcbiIpOworICB9CiAgIHdoaWxlICgwKTsKIAogI3VuZGVmIERFUFRICiAj dW5kZWYgQlVGU0laRQogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIENB Tl9QSVBFICovCiAKLSNpZiBDQU5fRk9SSyAmJiBkZWZpbmVkKEhBVkVfR0VU UFBJRCkKKyAgLyogRmFsbGJhY2sgdG8gdGhlIGdsaWJjIGJhY2t0cmFjZS4g ICovCisgIGVzdHJfd3JpdGUgKCJcbkJhY2t0cmFjZSBmb3IgdGhpcyBlcnJv cjpcbiIpOworICBiYWNrdHJhY2Vfc3ltYm9sc19mZCAodHJhY2UsIGRlcHRo LCBTVERFUlJfRklMRU5PKTsKKyAgcmV0dXJuOworCisjZWxpZiBkZWZpbmVk KENBTl9GT1JLKSAmJiBkZWZpbmVkKEhBVkVfR0VUUFBJRCkKICAgLyogVHJ5 IHRvIGNhbGwgcHN0YWNrLiAgKi8KICAgZG8KICAgewpAQCAtMzEyLDE1ICsy ODUsOSBAQCBmYWxsYmFjazoKIAlleGVjdnAgKGFyZ1swXSwgYXJnKTsKICN1 bmRlZiBOVU1fQVJHUwogCi0JLyogcHN0YWNrIGRpZG4ndCB3b3JrLCBzbyB3 ZSBmYWxsIGJhY2sgdG8gZHVtcGluZyB0aGUgZ2xpYmMKLQkgICBiYWNrdHJh Y2UgaWYgd2UgY2FuLiAgKi8KLSNpZiBHTElCQ19CQUNLVFJBQ0UKLQlkdW1w X2dsaWJjX2JhY2t0cmFjZSAoZGVwdGgsIHN0cik7Ci0jZWxzZQorCS8qIHBz dGFjayBkaWRuJ3Qgd29yay4gICovCiAJZXN0cl93cml0ZSAoIiAgdW5hYmxl IHRvIHByb2R1Y2UgYSBiYWNrdHJhY2UsIHNvcnJ5IVxuIik7Ci0jZW5kaWYK LQotCV9leGl0ICgwKTsKKwlfZXhpdCAoMSk7CiAgICAgICB9CiAKICAgICAv KiBGYXRoZXIgcHJvY2Vzcy4gICovCkBAIC0zMjgsMTMgKzI5NSw3IEBAIGZh bGxiYWNrOgogICAgIHJldHVybjsKICAgfQogICB3aGlsZSgwKTsKLSNlbmRp ZgotCi0jaWYgR0xJQkNfQkFDS1RSQUNFCi0gIC8qIEZhbGxiYWNrIHRvIHRo ZSBnbGliYyBiYWNrdHJhY2UuICAqLwotICBlc3RyX3dyaXRlICgiXG5CYWNr dHJhY2UgZm9yIHRoaXMgZXJyb3I6XG4iKTsKLSAgZHVtcF9nbGliY19iYWNr dHJhY2UgKGRlcHRoLCBzdHIpOwotICByZXR1cm47Ci0jZW5kaWYKKyNlbHNl CiAgIGVzdHJfd3JpdGUgKCJcbkJhY2t0cmFjZSBub3QgeWV0IGF2YWlsYWJs ZSBvbiB0aGlzIHBsYXRmb3JtLCBzb3JyeSFcbiIpOworI2VuZGlmCiB9CmRp ZmYgLS1naXQgYS9saWJnZm9ydHJhbi9ydW50aW1lL21haW4uYyBiL2xpYmdm b3J0cmFuL3J1bnRpbWUvbWFpbi5jCmluZGV4IGY1ZDQ3MjEuLjQwMmRjYTcg MTAwNjQ0Ci0tLSBhL2xpYmdmb3J0cmFuL3J1bnRpbWUvbWFpbi5jCisrKyBi L2xpYmdmb3J0cmFuL3J1bnRpbWUvbWFpbi5jCkBAIC05Miw2ICs5MiwxOSBA QCBzdG9yZV9leGVfcGF0aCAoY29uc3QgY2hhciAqIGFyZ3YwKQogICBpZiAo cGxlYXNlX2ZyZWVfZXhlX3BhdGhfd2hlbl9kb25lKQogICAgIGZyZWUgKChj aGFyICopIGV4ZV9wYXRoKTsKIAorICAvKiBSZWFkaW5nIHRoZSAvcHJvYy9z ZWxmL2V4ZSBzeW1saW5rIGlzIExpbnV4LXNwZWNpZmljKD8pLCBidXQgaWYK KyAgICAgaXQgd29ya3MgaXQgZ2l2ZXMgdGhlIGNvcnJlY3QgYW5zd2VyLiAg Ki8KKyNpZmRlZiBIQVZFX1JFQURMSU5LCisgIGludCBsZW47CisgIGlmICgo bGVuID0gcmVhZGxpbmsgKCIvcHJvYy9zZWxmL2V4ZSIsIGJ1Ziwgc2l6ZW9m IChidWYpIC0gMSkpICE9IC0xKQorICAgIHsKKyAgICAgIGJ1ZltsZW5dID0g J1wwJzsKKyAgICAgIGV4ZV9wYXRoID0gc3RyZHVwIChidWYpOworICAgICAg cGxlYXNlX2ZyZWVfZXhlX3BhdGhfd2hlbl9kb25lID0gMTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisjZW5kaWYKKwogICAvKiBPbiB0aGUgc2ltdWxhdG9y IGFyZ3YgaXMgbm90IHNldC4gICovCiAgIGlmIChhcmd2MCA9PSBOVUxMIHx8 IGFyZ3YwWzBdID09ICcvJykKICAgICB7CkBAIC0xMDcsNyArMTIwLDkgQEAg c3RvcmVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKiBhcmd2MCkKICAgY3dkID0g IiI7CiAjZW5kaWYKIAotICAvKiBleGVfcGF0aCB3aWxsIGJlIGN3ZCArICIv IiArIGFyZ3ZbMF0gKyAiXDAiICovCisgIC8qIGV4ZV9wYXRoIHdpbGwgYmUg Y3dkICsgIi8iICsgYXJndlswXSArICJcMCIuICBUaGlzIHdpbGwgbm90IHdv cmsKKyAgICAgaWYgdGhlIGV4ZWN1dGFibGUgaXMgbm90IGluIHRoZSBjd2Qs IGJ1dCBhdCB0aGlzIHBvaW50IHdlJ3JlIG91dAorICAgICBvZiBiZXR0ZXIg aWRlYXMuICAqLwogICBzaXplX3QgcGF0aGxlbiA9IHN0cmxlbiAoY3dkKSAr IDEgKyBzdHJsZW4gKGFyZ3YwKSArIDE7CiAgIHBhdGggPSBtYWxsb2MgKHBh dGhsZW4pOwogICBzbnByaW50ZiAocGF0aCwgcGF0aGxlbiwgIiVzJWMlcyIs IGN3ZCwgRElSX1NFUEFSQVRPUiwgYXJndjApOwpAQCAtMTIwLDYgKzEzNSwx MCBAQCBzdG9yZV9leGVfcGF0aCAoY29uc3QgY2hhciAqIGFyZ3YwKQogY2hh ciAqCiBmdWxsX2V4ZV9wYXRoICh2b2lkKQogeworICAvKiBJZiBhIG5vbi1G b3J0cmFuIG1haW4gcHJvZ3JhbSBoYXMgbm90IGNhbGxlZCBzZXRfYXJncygp LCB0cnkgdG8KKyAgICAgZmlndXJlIG91dCB0aGUgZXhlY3V0YWJsZSBwYXRo IG5vbmV0aGVsZXNzLiAgKi8KKyAgaWYgKGV4ZV9wYXRoID09IE5VTEwpCisg ICAgc3RvcmVfZXhlX3BhdGggKE5VTEwpOwogICByZXR1cm4gKGNoYXIgKikg ZXhlX3BhdGg7CiB9CiAK --bcaec544f05251955004a34d417e--