From patchwork Tue Aug 1 00:01:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Lance Taylor X-Patchwork-Id: 128924 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp2339102vqg; Mon, 31 Jul 2023 17:03:01 -0700 (PDT) X-Google-Smtp-Source: APBJJlHwEq0861g1Ox572YgbCACE29bI/pFGpSCkjAx/wgmCWNcFFyDMPfLZ2GuKAbg+nzSD65p3 X-Received: by 2002:a2e:964e:0:b0:2b9:ea6b:64f with SMTP id z14-20020a2e964e000000b002b9ea6b064fmr983991ljh.37.1690848181055; Mon, 31 Jul 2023 17:03:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690848181; cv=none; d=google.com; s=arc-20160816; b=bEpn5xiyG4MPn1Max0rGX7lg2YVB3g0Rcl64B3y8ueXtk/XPVl84/b1/jwT+CkFJaZ yCKcG1+KW6ZMbxVVkmw/pwWkV7H3ulzwDEYdq8kPXioOqh9wOxwhqf3cjg7aQ7E7+vDr nZ2jOhfpq/YvurdFrRuRWGznIb2Y/MBOepdNf5QegBrIYPqQX1D9cQdsuIlCu0AUN4/J cM/y02SigTqDdg1x0D6/1WaDh6xo9oigOrRaBQXE9nYhaBKYhNsgaWSFrhzS8kP+JqP8 s2Ji8AoIJrV5f0GWigg4n9HK8WrZAjnBBWJ2RbWuuSmFcbKOJgO/BDEefJX+xWwh9D97 FAfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:to:subject :message-id:date:mime-version:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=A69BPEiKM5fnn46YVwLEqL7drbZVVZjqf/SjSYc8aRw=; fh=NgXZ47NaXGZiy/PFsP3wvAX/1QWBskViEbE1ugmwSnc=; b=G8bKDCTr2HWzSiJWEtPXdNPowIz2zQfKBn3EtoA3NZxf7jiCXlNLsvlsDse+JXUaK3 H6qzsR/FHqzD4DJbiIHO02nHwLsry6V1PYn9WER6/KiADanVfpc2vpAsPqrr/xXlFO1E bNLJRaa4btjpfAShMH8s2aEZfnH4wmqIyWJrq+gakcbi4Est7hdyYDwFlDuBKsH2g1x4 KLf4aGUp/5dkQ5y9k4rvJ2jfPUP7203sSZasGnB/QYDkt+NMpKvOsCHOPDxokR2tZmN/ Fk/4z3y8T6UsVSC5V2yd5sT8ygU0OcCf8YtD8R79MwzMi4YcVkH3FaH2SPFfO/Cn/YMR iy0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=DzgFQHig; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id i5-20020a170906850500b0099bc0f17468si1095543ejx.866.2023.07.31.17.03.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Jul 2023 17:03:01 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=DzgFQHig; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B6B4D3858426 for ; Tue, 1 Aug 2023 00:02:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B6B4D3858426 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1690848177; bh=A69BPEiKM5fnn46YVwLEqL7drbZVVZjqf/SjSYc8aRw=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=DzgFQHiggnQEWo8DDurPrD6VquPu/TFT0GbLqaqNh8IJHXk3MNHWpZngmjmURD7sN UWGhD1jq30NaiPTDfeFK6z/TaDqHsBnsjD+O/wLnJ/OPqwyd92aQDwKJ2RebO3FGGe i1CZv6ZAcr6NPCihzhFZAl4xDndvcqrEnNG1RZmY= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) by sourceware.org (Postfix) with ESMTPS id 8AE4F3858D28 for ; Tue, 1 Aug 2023 00:02:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8AE4F3858D28 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-1bb7b8390e8so31052125ad.2 for ; Mon, 31 Jul 2023 17:02:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690848126; x=1691452926; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=A69BPEiKM5fnn46YVwLEqL7drbZVVZjqf/SjSYc8aRw=; b=EXr8/PSb3Ip2rcOI4wuwjy/g5eDh68bfkAerUWEy3pT1/5wvjnLQJfG57xYkCH7r7N Z2uqsUFJMjASDP2aAQ0R1KR+RciI+vxlaMsnI3TF0DdNyx60uOArTIKvFGNUcickbv/J XTrdQy1pRc0VQO866wMwc/lBvQa8qVj+SDtQA5sdkGIgEX8eYIORSVam2wq6lLOYIRZp SLA0DxPRYlyAAUqPAadXaRUc0NpP+Vn2wuPE16uypyaVICKm92lECNCT8bYMhkAa4m5K xTybzXzqzHmaI2PQTVCeq/Rxq7BucKM3xddP+cgmPDOXI6Bbpn76BdkvTBJm7htX6c/a 4A9Q== X-Gm-Message-State: ABy/qLbiNCeOUZvai5ONH/9lYp5LTa32q1Ide/iQnRXE5vQwDFQ7LwmU 0kLqm3CzfFXjJOmoUJYlzm/eZNHmdNJifCQPYcKC7nsOD32j/gPo2RM= X-Received: by 2002:a17:90a:bd11:b0:268:c48b:705c with SMTP id y17-20020a17090abd1100b00268c48b705cmr3968036pjr.28.1690848125765; Mon, 31 Jul 2023 17:02:05 -0700 (PDT) MIME-Version: 1.0 Date: Mon, 31 Jul 2023 17:01:53 -0700 Message-ID: Subject: libbacktrace patch committed To: gcc-patches X-Spam-Status: No, score=-8.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ian Lance Taylor via Gcc-patches From: Ian Lance Taylor Reply-To: Ian Lance Taylor Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772982822348045317 X-GMAIL-MSGID: 1772982822348045317 This libbacktrace patch, based on one by Andres Freund, uses the _pgmptr variable declared on Windows to find the executable file name if none is specified. Bootstrapped and ran libbacktrace testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian Patch from Andres Freund: * configure.ac: Check for _pgmptr declaration. * fileline.c (fileline_initialize): Check for _pgmfptr before /proc/self/exec. * configure, config.h.in: Regenerate. a349ba16f18b66b70c7a1bdb1ab5c5b6247676da diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac index 39e6bf41e35..72ff2b30053 100644 --- a/libbacktrace/configure.ac +++ b/libbacktrace/configure.ac @@ -407,6 +407,9 @@ if test "$have_getexecname" = "yes"; then AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.]) fi +# Check for _pgmptr variable, contains the executable filename on windows +AC_CHECK_DECLS([_pgmptr]) + # Check for sysctl definitions. AC_CACHE_CHECK([for KERN_PROC], diff --git a/libbacktrace/fileline.c b/libbacktrace/fileline.c index 674bf33cdcf..0e560b44e7a 100644 --- a/libbacktrace/fileline.c +++ b/libbacktrace/fileline.c @@ -155,6 +155,16 @@ macho_get_executable_path (struct backtrace_state *state, #endif /* !defined (HAVE_MACH_O_DYLD_H) */ +#if HAVE_DECL__PGMPTR + +#define windows_executable_filename() _pgmptr + +#else /* !HAVE_DECL__PGMPTR */ + +#define windows_executable_filename() NULL + +#endif /* !HAVE_DECL__PGMPTR */ + /* Initialize the fileline information from the executable. Returns 1 on success, 0 on failure. */ @@ -192,7 +202,7 @@ fileline_initialize (struct backtrace_state *state, descriptor = -1; called_error_callback = 0; - for (pass = 0; pass < 8; ++pass) + for (pass = 0; pass < 9; ++pass) { int does_not_exist; @@ -205,23 +215,28 @@ fileline_initialize (struct backtrace_state *state, filename = getexecname (); break; case 2: - filename = "/proc/self/exe"; + /* Test this before /proc/self/exe, as the latter exists but points + to the wine binary (and thus doesn't work). */ + filename = windows_executable_filename (); break; case 3: - filename = "/proc/curproc/file"; + filename = "/proc/self/exe"; break; case 4: + filename = "/proc/curproc/file"; + break; + case 5: snprintf (buf, sizeof (buf), "/proc/%ld/object/a.out", (long) getpid ()); filename = buf; break; - case 5: + case 6: filename = sysctl_exec_name1 (state, error_callback, data); break; - case 6: + case 7: filename = sysctl_exec_name2 (state, error_callback, data); break; - case 7: + case 8: filename = macho_get_executable_path (state, error_callback, data); break; default: