From patchwork Thu Jul 18 00:40:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Lance Taylor X-Patchwork-Id: 1961822 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=golang-org.20230601.gappssmtp.com header.i=@golang-org.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=i/uN7csz; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WPYrl0cZbz1xrQ for ; Thu, 18 Jul 2024 10:41:09 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 85C19385E833 for ; Thu, 18 Jul 2024 00:41:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yw1-x112a.google.com (mail-yw1-x112a.google.com [IPv6:2607:f8b0:4864:20::112a]) by sourceware.org (Postfix) with ESMTPS id 4DC213858CDA for ; Thu, 18 Jul 2024 00:40:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4DC213858CDA Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=golang.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=golang.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4DC213858CDA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::112a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1721263246; cv=none; b=ryyOIbwY8E8wXJAh46mNmXBx/aMLTpfnoYq8Lw/86rWXBrqjFjitXbbsJgrRLkVYVR4aEzFWfylRGRavtxER47/00QjCLuqjn18SPbtES5+bBrcfFBfD+ubJ8t8Vnwoms9E3CVAfstI+JMEvkPmGZPhFeh7lqbvTF3KoA6uWtAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1721263246; c=relaxed/simple; bh=FhjII27vxKl4YizDD7NLFhZVkRW7gY/03A8JOMduyJ4=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=IzYOb3u+8v7tW5LgfYxD3fehZEDBPANxQ2K8hmidLIa9UWeRkMgQ/Jd3PaML5teIrnwWaxwFjmYg1i29MykG5JVQXCBN2g9mrOvBZH98hJAdmjwC27pNsSSbxB0SkZD8+i68q6mNHfZwLOzJjgeVEjzpyvOO5zmRUBG1FMT1Fy8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-65f880c56b1so2193517b3.3 for ; Wed, 17 Jul 2024 17:40:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=golang-org.20230601.gappssmtp.com; s=20230601; t=1721263243; x=1721868043; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=3FdQZ+3Eyxbi4pbHdKv4KSGUQI6+i7r/yaoeBmRw610=; b=i/uN7cszt81lS5RAmtap9luODUuh4hQJC7tql/l6AGWs2wyAiZNkf3SJtQKD8YU+oA CJMrOHHlLKSwl0FnVX/deJvUZ3KF509kiOeQ5wwajMkczzmwGWTCJSAzaaOauQnc2WVX WtreN67ZPNwSA2oMNlGClf+8nJkxzVsWmsgCN+rddkP+cr+tMtX8cs89q9GjrJq94isT Qb41KV5YD4NXiAle8YyjCf2/GQGGnY2sHl1z29De/8WVaZSo/PVeXdpcQNxVNHUi7U8/ ptlxodiEo+YtIIW5/2qxDvqb5g2raRkKJfHDe/P4mpVnh+m50fQvR9GrREiZbEKbOckt P/sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721263243; x=1721868043; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=3FdQZ+3Eyxbi4pbHdKv4KSGUQI6+i7r/yaoeBmRw610=; b=AOs274hBqDK+BvLmnumVsKgwEdvIKwza15GZeMbb4k29twAAu+5O18qbN2DXi+5NkI ai/9QMM/L4/x7ENwI9QH3rCpYqlCXc2HQQ3xWN67UVPzQ5dCDnvmpYf207gE2bjBgmSi 9tABkKRO9dVvkAE/CgV6LhGxg6gcibANNu5LhcfBNTnXmJ6p8ZrsTeFXnO9iLVTSTQDu SwLsXbCkxATPk1NN2qvJYXb+I3ACH5/cbPChSRRlkBckMPTkc/zu9YWeGFB4xtkoTKIB t7c6XD6Zof8TD6P9maphamQlgOkaGO0EZnniWQU9j9B5S9kybiMyZgFBlCzMmC07yK0Q 2CCw== X-Gm-Message-State: AOJu0Yy/U2NfJn33YCyQZOV3eULrfc+4Th/rVyVPxr8Fx0y9bl3RbY2G NxkdwLCnNfEQxkq0jSrXBg26cZBtmlPDLJ5K7hyZX+DN2/l5Y/mU1rV5kcfT/wM4i69AroDLi7m EQdzHG5T0xKDolzmOu1LBbSjuhXScH+pWO8FVdM7QalN6xjJNlK4= X-Google-Smtp-Source: AGHT+IGnxdGfDQbYJsiJHxhshqFRc2MozfedS9v6dRGaHJ7iMLCGVBumRr/Xp8YGZKBozJdK0MgojOmyHGDepHJcDCU= X-Received: by 2002:a81:8206:0:b0:64a:4c2c:f4c2 with SMTP id 00721157ae682-664fde804b3mr38476907b3.6.1721263243150; Wed, 17 Jul 2024 17:40:43 -0700 (PDT) MIME-Version: 1.0 From: Ian Lance Taylor Date: Wed, 17 Jul 2024 17:40:31 -0700 Message-ID: Subject: libbacktrace patch committed: Better backtrace_print if no debug info To: gcc-patches X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, UNWANTED_LANGUAGE_BODY 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org This libbacktrace patch improves backtrace_print when there is no debug info. It falls back to calling backtrace_syminfo, and uses that to print an offset from a symbol if it can. This is a partial fix for https://github.com/ianlancetaylor/libbacktrace/issues/59. Bootstrapped and ran libbacktrace testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian * print.c (print_syminfo_callback): New static function. (print_callback): Call backtrace_syminfo if there is no function or file name. 4dbb53eb10767d111228224ae3113aee0d4d6213 diff --git a/libbacktrace/print.c b/libbacktrace/print.c index 3e61f02ebbc..70f5a93c49d 100644 --- a/libbacktrace/print.c +++ b/libbacktrace/print.c @@ -47,6 +47,39 @@ struct print_data FILE *f; }; +/* Print errors to stderr. */ + +static void +error_callback (void *data, const char *msg, int errnum) +{ + struct print_data *pdata = (struct print_data *) data; + + if (pdata->state->filename != NULL) + fprintf (stderr, "%s: ", pdata->state->filename); + fprintf (stderr, "libbacktrace: %s", msg); + if (errnum > 0) + fprintf (stderr, ": %s", strerror (errnum)); + fputc ('\n', stderr); +} + +/* Print one level of a backtrace if we couldn't get a file or function name. + Use syminfo to try to get a symbol name. */ + +static void print_syminfo_callback (void *data, uintptr_t pc, + const char *symname, uintptr_t symval, + uintptr_t symsize ATTRIBUTE_UNUSED) +{ + struct print_data *pdata = (struct print_data *) data; + + if (symname == NULL) + fprintf (pdata->f, "0x%lx ???\n\t???:0\n", (unsigned long) pc); + else + fprintf (pdata->f, "0x%lx ???\n\t%s+0x%lx:0\n", + (unsigned long) pc, + symname, + pc - symval); +} + /* Print one level of a backtrace. */ static int @@ -55,6 +88,13 @@ print_callback (void *data, uintptr_t pc, const char *filename, int lineno, { struct print_data *pdata = (struct print_data *) data; + if (function == NULL && filename == NULL) + { + backtrace_syminfo (pdata->state, pc, print_syminfo_callback, + error_callback, data); + return 0; + } + fprintf (pdata->f, "0x%lx %s\n\t%s:%d\n", (unsigned long) pc, function == NULL ? "???" : function, @@ -63,21 +103,6 @@ print_callback (void *data, uintptr_t pc, const char *filename, int lineno, return 0; } -/* Print errors to stderr. */ - -static void -error_callback (void *data, const char *msg, int errnum) -{ - struct print_data *pdata = (struct print_data *) data; - - if (pdata->state->filename != NULL) - fprintf (stderr, "%s: ", pdata->state->filename); - fprintf (stderr, "libbacktrace: %s", msg); - if (errnum > 0) - fprintf (stderr, ": %s", strerror (errnum)); - fputc ('\n', stderr); -} - /* Print a backtrace. */ void __attribute__((noinline))