From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id ybKvAm5q6mk+LzcAWB0awg (envelope-from ) for ; Thu, 23 Apr 2026 14:52:30 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; secure) header.d=adacore.com header.i=@adacore.com header.a=rsa-sha256 header.s=google header.b=cqYlqpyx; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 06FC51E0BA; Thu, 23 Apr 2026 14:52:30 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 552471E093 for ; Thu, 23 Apr 2026 14:52:28 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id BB0624BAE7D6 for ; Thu, 23 Apr 2026 18:52:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BB0624BAE7D6 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=adacore.com header.i=@adacore.com header.a=rsa-sha256 header.s=google header.b=cqYlqpyx Received: from mail-oa1-x2c.google.com (mail-oa1-x2c.google.com [IPv6:2001:4860:4864:20::2c]) by sourceware.org (Postfix) with ESMTPS id 611ED4BAE7D1 for ; Thu, 23 Apr 2026 18:52:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 611ED4BAE7D1 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 611ED4BAE7D1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:4860:4864:20::2c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776970323; cv=none; b=w3isv//DvRnt7jPu3YSJu6poQlFQD6ux9a8o5elWDd5JRNL4WaOZ5HgFUXAIyB9aPaSrTDuDdNfqDJ307mNoYzA7WQo7sl2zqMMjR8R+3OiSUnS4nfD4Bj3h8E5SH/h8J31MxTJAXzRKG5jGZd6yctyH6yhMaSrLfHJWQk1sxqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776970323; c=relaxed/simple; bh=JGZAb2jYY3tEslHpK0kDD7w+onFllBiQ5+vJpupfsJs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=NbseANCB/6Ndo1U/LXnLV+7xRCYm3pqluJIw3B04w3zc+DQw8nhwU/MftAeTvdEPqyn8HJVSgG+NNegMgnCSYXTrekrxmEQv0tjICCgkGyIzP2fIc8CpYOIcYvcAABLkEJcv1uXIW5J1Z8A/chtiEYeiRA/20TxsCTjFA66AGZg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 611ED4BAE7D1 Received: by mail-oa1-x2c.google.com with SMTP id 586e51a60fabf-41576c5c01cso4787208fac.3 for ; Thu, 23 Apr 2026 11:52:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1776970322; x=1777575122; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=0rFYHiStXFhoEbSI1pmIHAtgcaK+PngToWZpZYfCVng=; b=cqYlqpyxV6e8GgdWJtLMeDjMKmGIjMCvEeMzHgpDIb3zAoGG3J3NEcdpy+3XKFeOHr jvtfM8driwKwFwvmEk+03Te0je4ndi715V2vLXYv1SQIK5grM57vi1hafnVtn/Y39GSA NeLA1cOgXYlzeQkszbK/JsKL3/Sr53MmDZYOmBkow6/ISjEPYfXRc2hQQrjjSP/QdHBL JysJLyxz+4NyLNacXV1595j83e4FK9XadPHU2DViof2iao9t9rdLQqPoB1Arwg0jHGxA 4xNwmwXV7gN3kUPP/dBt/hBRoBtsmst6VkvzdcgoQ6dMaLpq5SurTzlLyO8m+epFKCEa i+dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776970322; x=1777575122; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0rFYHiStXFhoEbSI1pmIHAtgcaK+PngToWZpZYfCVng=; b=VrKZyS75mO5ioh9vNHFDgdc+dW+5WlCrChAM9VWZ8dxJP/oo+7ZJOPV3xDiZnp/olB kJf+pndvz6ZIV8QAV3ntH/tdd5IpINWotNNW+x/K9q72YF4hU4HuOqfLbunk9T9h/1Np hJLbDQ+WwmjKqje4mYcHYOuM+e2MhPZPRUhOPXfpA9mtNRPhNHVLdOwzWg0QaVk15IpV rIbK4TPuIyd9vpTADEHjVG/gWwEb0HCNaDboRltlGxh/jIm5N5UYGgAOERbK20pX5+do HtUAMIh9cs1zAGSOWAnH+bzn3Y0JJiny4gM5B1g9t7bnQg34iusFqm8Cr6wBxTV/saqB a9ng== X-Gm-Message-State: AOJu0YzT4kARbfC0+JVZ93C5tNvEtjpFck/02oDl7gxLEssMvpNHNr9C P+fLZgiCTnsHE+39AGCMjIfqmfG22zRW5wCzuKhdkSMrtHA5F1tsDCQnR4YvdGxA1Oxe+YtO0Gn Zlmk= X-Gm-Gg: AeBDieu8EmgFjGyogUy4JyKm/0tYBganNqScL5KwNGmE2XnMQbCmy6lAse/dgleYadk 2i+2uSypfNDlO07RnW4Vh74wTuIoe/GI4dSmxr+TuoRDTr9ybdeJe+kZj/gd0NR3dwYXSr/Bv2L zdofL0U+h8cZDGLN/wFplrJXaUn2Cgm2/in0OyBsxRlhX2aOcRQNh6zGkPPm85+svIlmiiZ//2S SfvTxNRheFzUHQ+E4RPm8JBuEC8hOb3euZ+E5rS1esHjahdhHc1Ro+yr1blHINAld8/gi4XsUDq 7ZJ7j59xjCCB/h/fQzFUuyYhhXvTKleEl7s0WFHOxR29AiQiDD1yXH/asjAr03NT3OAM4mjJmmh jzrVK5FY9YvbfoKcFgVev7ARLaSeAX94wOHqUyMiDtbQA3JxCRpX0ZU5F7iLHaqecQQ/D7Kwarf fZo801AxsdkHI34QzRWrWoIdkSQEEjPUUf6Jjf8eXwRakB3FZbq/uXpFbVyDGpiq+v X-Received: by 2002:a05:6870:213:b0:42c:8e5:c777 with SMTP id 586e51a60fabf-42c08e5d7eemr11265541fac.36.1776970322415; Thu, 23 Apr 2026 11:52:02 -0700 (PDT) Received: from bapiya (75-166-225-82.hlrn.qwest.net. [75.166.225.82]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-42b930bd9f2sm16748191fac.8.2026.04.23.11.52.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Apr 2026 11:52:01 -0700 (PDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Avoid crash in dwarf2/read.c:determine_prefix Date: Thu, 23 Apr 2026 12:52:00 -0600 Message-ID: <20260423185200.61358-1-tromey@adacore.com> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org I found a gdb crash when using some changes to gnat-llvm to have it emit unqualified names in the DWARF. The crash happens because determine_prefix does this: return dwarf2_full_name (nullptr, parent, cu); However, dwarf2_full_name can return NULL, causing a crash in the caller. The particular DWARF causing this is pretty strange -- it is a function nested inside another nameless function. This may be a bug in gnat-llvm, something I plan to investigate. Meanwhile, gdb shouldn't crash. This patch changes determine_prefix to avoid possible crashes here, by following its contract and not returning NULL. I'm not sure if it's worthwhile to write a test case for this. --- gdb/dwarf2/read.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index bc7b8b46d87..40271cea592 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -16628,23 +16628,28 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu) } return ""; case DW_TAG_subprogram: - /* Nested subroutines in Fortran get a prefix with the name - of the parent's subroutine. Entry points are prefixed by the - parent's namespace. */ - if (cu->lang () == language_fortran) - { - if ((die->tag == DW_TAG_subprogram) - && (dwarf2_name (parent, cu) != NULL)) - return dwarf2_name (parent, cu); - else if (die->tag == DW_TAG_entry_point) - return determine_prefix (parent, cu); - } - else if (cu->lang () == language_ada - && (die->tag == DW_TAG_subprogram - || die->tag == DW_TAG_inlined_subroutine - || die->tag == DW_TAG_lexical_block)) - return dwarf2_full_name (nullptr, parent, cu); - return ""; + { + const char *name = nullptr; + /* Nested subroutines in Fortran get a prefix with the name + of the parent's subroutine. Entry points are prefixed by the + parent's namespace. */ + if (cu->lang () == language_fortran) + { + if ((die->tag == DW_TAG_subprogram) + && (dwarf2_name (parent, cu) != NULL)) + name = dwarf2_name (parent, cu); + else if (die->tag == DW_TAG_entry_point) + name = determine_prefix (parent, cu); + } + else if (cu->lang () == language_ada + && (die->tag == DW_TAG_subprogram + || die->tag == DW_TAG_inlined_subroutine + || die->tag == DW_TAG_lexical_block)) + name = dwarf2_full_name (nullptr, parent, cu); + if (name == nullptr) + name = ""; + return name; + } case DW_TAG_enumeration_type: parent_type = read_type_die (parent, cu); if (parent_type->is_declared_class ()) base-commit: f797b25fdc7ca4a48c09802082426b71e56898aa -- 2.53.0