From patchwork Thu Mar 20 19:26:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108651 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5F16C3857B84 for ; Thu, 20 Mar 2025 19:33:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5F16C3857B84 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=d+VmRVUa X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd30.google.com (mail-io1-xd30.google.com [IPv6:2607:f8b0:4864:20::d30]) by sourceware.org (Postfix) with ESMTPS id 282373858427 for ; Thu, 20 Mar 2025 19:27:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 282373858427 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 282373858427 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d30 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498822; cv=none; b=kVfUB8zWGcZFW1jhxKnKaEr4m8AkCoEoNkp+z246jzMTSsFehw0m434QcHgNdJmSqGaSZ0lw3O510lESEvh9I97PlWOfBFY+WX86bx8pVCwA5aJPfpjwyXaUQUJ20S5kcUgaIsNCm+/M4zrIg2ZmVjxOrioz+hbS39iFfLM67So= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498822; c=relaxed/simple; bh=hS0SB/kA5dP2LfZ4N1CVesO3wK/dKxq4hmpLv9iAt3k=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=Ic8Apg3AZ1qshKRzn0TyMYW/I5r+d2uaVCqQtgn+eLoye9NjtXf3s3OmLd7mPRHdKxAzmNnA4Z7zlZJpXHWzNGt/h6CFOUCuk8T7N+habnUZl5I2nfSSkd5nISm+JxF3u0u1siTDzmbCoQBDm9p46fqIXEw+xesBNMUdtdhgDTs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 282373858427 Received: by mail-io1-xd30.google.com with SMTP id ca18e2360f4ac-85b44094782so35818939f.3 for ; Thu, 20 Mar 2025 12:27:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498821; x=1743103621; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sf+GjQ7tNHy15d8yjCsSIUPIx0dVjdDYMMJiJIIWzd8=; b=d+VmRVUadgTk/V2M9o4NDP6q7XiM3lbiO/79IQTkSkeF93FGfUHGdrngW68LRU0ki9 5oHh3oQyCwd56y3tWwvjCbOVmgGHUskGz2uuARTGU9DWgJxsFCCH+33IJ9i6RZ5lxXAL Ap6LanibhkZ4+RquRpf30HYWFx5hKEOadXx2PlHTDporpC63mjIjyxHcC0a402MKWOl0 NshEZ0aakDGNflHb78N9OnZgdoLQu2TAmZBK8aINvwGVJNd9BX+dqt12j3to/w5idXly 4VQh3U+KqthvMOGJ3j5uFPAjo3tIlZ2Co+vmqzZc77p1pjUcJmLT8aYcUiVMJiwx8Soe JBjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498821; x=1743103621; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sf+GjQ7tNHy15d8yjCsSIUPIx0dVjdDYMMJiJIIWzd8=; b=JwqIorJ7grEZhqJPLIIrQZAnEURi9nW0Rx3J72KXI65c/0Lidk31GkEMU7mlFU6Su/ yL6X6uFAGC3yrPvs+p0QRu78X42cqduInjaVnJr5+IBOi83DLIcuCZApPPqtBdlrjNv7 ELmouO3N2c3YhkyP+cFqbEHJhiC56C9AbzGO9co7MmA0lvegjhlnnujoEnKMbJgfLgb2 DzdrEjqlbag3HTXm3zWtBgnMKwGrFnzGUYnD1jMDxyeP+R2+p9419mRjZXM0z1OqGNTI 6AIOfvoz0qIYKo+7DPHi0pOjg3uuVoVvb/sS5gUNc1RrJ5P8Nk4yoleHx3j3ilpf2o/1 h5Dg== X-Gm-Message-State: AOJu0YyZob1FRzKNLy+ksfAVsmXsvIg24LkOGJABfBSf8u7Q1GH1r2t+ clkaY1gLyoSc0ZEWAPq4OFfKqU9XqPUYHzc4nEddhZY+RXwOPaS/31s1ys9jvA== X-Gm-Gg: ASbGnct502XEFBKiFztK5oKdAPVaEV2+v/WIfilSMKBI1VTIpDlQZDZgd3XrhCG+/BR tntse08QaXewvGom4fksl3isf4nvaYTjGYGcrekkVAwI5hu38VLkgXo7ouDeQugPWda+WKF5Lu/ 62Cb0M/uioCWZ1TqWjFaMKX1Wcw+LRzP2dU3tPFx9/oifHQL5d+lSvn24kuWr7OmnfF7pelT2pk WBHvxSOieVys5KEzxto4NTeJ2tkVdY6PC9QZOEf8u/R01/6n1LNj4noXCValOBUM+Oe1lxfmFZa vzZwyJAzoVeiimDJ1De3kD1x3fmIjO9ZedmU/ohz+Mc2f9r83Y1jsg5dI1jPN3hkheAKyrqGz9T r/UYUT34ADkSRGIvu/94= X-Google-Smtp-Source: AGHT+IHl8WmsgY3GSY2t1gWyK8Jt4huHyY840lBYlBFXA1XP/DyDgSpDRTnbKczoBkcjnCVUEWnUTg== X-Received: by 2002:a05:6602:388c:b0:85c:c7f9:9a23 with SMTP id ca18e2360f4ac-85e2cc60437mr57308439f.14.1742498821334; Thu, 20 Mar 2025 12:27:01 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:00 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:26:57 -0600 Subject: [PATCH 01/13] Use attribute::unsigned_constant for sizes MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-1-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes the DWARF reader to use attribute::unsigned_constant for DW_AT_bit_size, DW_AT_byte_size, DW_AT_data_byte_size, and DW_AT_string_length. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index b9040a57cf962e9b04921aad4ed27dc767cc8e00..25d5566926de8cf836ecb83d656caa7a057b07c2 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -10168,7 +10168,7 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, /* Get bit size of field (zero if none). */ attr = dwarf2_attr (die, DW_AT_bit_size, cu); if (attr != nullptr) - fp->set_bitsize (attr->constant_value (0)); + fp->set_bitsize (attr->unsigned_constant ().value_or (0)); else fp->set_bitsize (0); @@ -10203,7 +10203,7 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, /* The size of the anonymous object containing the bit field is explicit, so use the indicated size (in bytes). */ - anonymous_size = attr->constant_value (0); + anonymous_size = attr->unsigned_constant ().value_or (0); } else { @@ -11176,7 +11176,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu) if (attr != nullptr) { if (attr->form_is_constant ()) - type->set_length (attr->constant_value (0)); + type->set_length (attr->unsigned_constant ().value_or (0)); else { struct dynamic_prop prop; @@ -11772,7 +11772,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_byte_size, cu); if (attr != nullptr) - type->set_length (attr->constant_value (0)); + type->set_length (attr->unsigned_constant ().value_or (0)); else type->set_length (0); @@ -12731,7 +12731,8 @@ read_tag_pointer_type (struct die_info *die, struct dwarf2_cu *cu) attr_byte_size = dwarf2_attr (die, DW_AT_byte_size, cu); if (attr_byte_size) - byte_size = attr_byte_size->constant_value (cu_header->addr_size); + byte_size = (attr_byte_size->unsigned_constant () + .value_or (cu_header->addr_size)); else byte_size = cu_header->addr_size; @@ -12843,7 +12844,8 @@ read_tag_reference_type (struct die_info *die, struct dwarf2_cu *cu, type = lookup_reference_type (target_type, refcode); attr = dwarf2_attr (die, DW_AT_byte_size, cu); if (attr != nullptr) - type->set_length (attr->constant_value (cu_header->addr_size)); + type->set_length (attr->unsigned_constant () + .value_or (cu_header->addr_size)); else type->set_length (cu_header->addr_size); @@ -13007,9 +13009,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) len = dwarf2_attr (die, DW_AT_byte_size, cu); if (len != nullptr && len->form_is_constant ()) { - /* Pass 0 as the default as we know this attribute is constant - and the default value will not be returned. */ - LONGEST sz = len->constant_value (0); + LONGEST sz = len->unsigned_constant ().value_or (0); prop_type = objfile_int_type (objfile, sz, true); } else @@ -13028,15 +13028,14 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) else if (attr != nullptr) { /* This DW_AT_string_length just contains the length with no - indirection. There's no need to create a dynamic property in this - case. Pass 0 for the default value as we know it will not be - returned in this case. */ - length = attr->constant_value (0); + indirection. There's no need to create a dynamic property in + this case. */ + length = attr->unsigned_constant ().value_or (0); } else if ((attr = dwarf2_attr (die, DW_AT_byte_size, cu)) != nullptr) { /* We don't currently support non-constant byte sizes for strings. */ - length = attr->constant_value (1); + length = attr->unsigned_constant ().value_or (1); } else { @@ -13752,7 +13751,7 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu) } attr = dwarf2_attr (die, DW_AT_byte_size, cu); if (attr != nullptr) - bits = attr->constant_value (0) * TARGET_CHAR_BIT; + bits = attr->unsigned_constant ().value_or (0) * TARGET_CHAR_BIT; name = dwarf2_full_name (nullptr, die, cu); if (!name) complaint (_("DW_AT_name missing from DW_TAG_base_type")); @@ -13903,7 +13902,7 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_bit_size, cu); if (attr != nullptr && attr->form_is_constant ()) { - unsigned real_bit_size = attr->constant_value (0); + unsigned real_bit_size = attr->unsigned_constant ().value_or (0); if (real_bit_size >= 0 && real_bit_size <= 8 * type->length ()) { attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu); @@ -14319,7 +14318,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_byte_size, cu); if (attr != nullptr) - range_type->set_length (attr->constant_value (0)); + range_type->set_length (attr->unsigned_constant ().value_or (0)); maybe_set_alignment (cu, die, range_type); From patchwork Thu Mar 20 19:26:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108648 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 74F573857B84 for ; Thu, 20 Mar 2025 19:30:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 74F573857B84 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=GyXdR0I/ X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd32.google.com (mail-io1-xd32.google.com [IPv6:2607:f8b0:4864:20::d32]) by sourceware.org (Postfix) with ESMTPS id 2F6C8385842C for ; Thu, 20 Mar 2025 19:27:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2F6C8385842C 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 2F6C8385842C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d32 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498823; cv=none; b=Ew4tQdNLHtBKT6RKsJKxNoQR3S2KpvqisvqVD8zMF9aqLmw+Hd+FDbWM/T8+LDqoWI7HCA2SBHUMX0wai/nMfkcjLx2Q5bgqxuo3CljO7BMnWCP2iiyI3t5haRTNvi6MTANxY2OMNUkf+a75TTprhaTKGboh7PdHC4ADQxLmWqs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498823; c=relaxed/simple; bh=fp1STeRt1VzX+pg386FriE20Ro6jeL0WCmm8AIPtYKg=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=MwPmwZmpB7/gLijcDw2XXQyd5cmgHGJg4HOQ3vjZOxnE3pHM2ydciBmO4RQXVEYhYPLQbVMY76BFRaShObM7wKAEONUs/Au6vMaPMc0+/ClKBLXh0BK5xYzK9BJy7kAACLkrZ/MXqccs2oBv9yFhGlK51ZVTwMnWjQ/Q1e4mOfc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2F6C8385842C Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-85e15dc801aso96692339f.2 for ; Thu, 20 Mar 2025 12:27:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498822; x=1743103622; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=a48uAihUzbSf0ZzMNspL67QNRU7KyvVy4UW4pTQ2aY0=; b=GyXdR0I/O3fst3AXUJ/KOJ6kOYjb3IEjKHZ5Y2N1QxPSFtuZlYj9SPLLN6cqbEu0CW 78Tsd9sjRlWEn+wDRJiEWPw2gOqv+MWSeUMTtEud7hDhHoYWJ2vtq758BYQXH1eeuZ6d QMKE4HVeFrLLjD5GvVkXtM8oRXOYTgjBCuCI60suxnLVzqfWkxGRv+n+uGofO6XAFYBh Fs0bINP5p1hjwYgpUnPxXEmN3WRhCe0jcResTiUywL0NWtG1Ovjo9fi9f5KNEyg0B+U6 83QQ6t0O//U/blPy9nwyQGo0CK20uvN/zBc6YDfk3aCP/Ndbqn82h5SYcGYVic64iI3H HCgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498822; x=1743103622; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=a48uAihUzbSf0ZzMNspL67QNRU7KyvVy4UW4pTQ2aY0=; b=UNNcSSPB6n3nOAWFB0U+r0aOtKnTm0vS2+U03WywQijHXhRRMI/qq8KJ9QAIGeWfWt tvREKKfXI8zGjH8UUA+A4H318IELZONWz8EM2tHHiMnZbilw0XU1CdQd0DEZTl+46F87 +Tqv1yz3ha1lFFaaCXSsUTxoVZGctJhbGW1X5vGsku8VQRzLaeS9iJU9HYy8r43msXVJ h2UPu0ui+7HQblUe+bayY7eGI5JNISzXYtFObYI/LRqb6VLaNNKRtIEmP8qaar5uU8hB GIMr8sF6qSuR7vqH1eYpyuEcN4/8CDajtxisIznN0DQT5+EnMPZ4CNU6LdS2ykFKQInZ U8uQ== X-Gm-Message-State: AOJu0YzvESh8zI+F6VtPYhimk85+MHIg/IY6r1CZhogthIXMgs9+ttfo Nj3yNK9DhRzCGiGEOFCZf/QENq+RwQgCZqHVWXH/nDbY0o/YgkSx+UftO//lPw== X-Gm-Gg: ASbGncuS21zSX5e20/26lXWfIeywhzudStjPJBpEGSiTDHz5vE7Q3j4jeaiOk+ltuvH JctsqAT6+8Vvv1eHza0/xIWa/XU7oyQsNVJweH1+vdn1KssN76KnNfP7vh905X/xbiyk0Gne6ns OQ7KOv1TPpJkMgNqbQ5gCPFJ2KlqNAmZmUjDC6viAy+6lRw+tL07Bl0HfTo4HrvYUkr2e9nlBQU 8sJWBLK66lwE0tbY11u86/TgiqWjrHEfYbiNyM2EKwY039GxcU008Fnxx+v7+AmNfG/hxfem1h4 PyrWppGf7Vh5V9X+dp37hriqmaNq+tJF2xXBiPL48//QI1kLnQgIaZXB1+4qePhD781M9ebcszU eaHUv8cW6 X-Google-Smtp-Source: AGHT+IGUEThHkqsGurw4ICI4oAW45SQaiOdA+Mu2NDSaN1dINloWEiw8aYB/tKabbEDM348OgVWNPA== X-Received: by 2002:a05:6602:3997:b0:85a:ec03:b124 with SMTP id ca18e2360f4ac-85e2ca64293mr65716439f.4.1742498822459; Thu, 20 Mar 2025 12:27:02 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:02 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:26:58 -0600 Subject: [PATCH 02/13] Introduce attribute::signed_constant MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-2-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This introduces a new method, attribute::signed_constant. This should be used wherever DWARF specifies a signed integer constant, or where this is implied by the context. It properly handles sign-extension for DW_FORM_data*. To my surprise, there doesn't seem to be a pre-existing sign-extension function. I've added one to common-utils.h alongside the align functions. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/attribute.c | 30 ++++++++++++++++++++++++++++++ gdb/dwarf2/attribute.h | 9 +++++++++ gdbsupport/common-utils.h | 10 ++++++++++ 3 files changed, 49 insertions(+) diff --git a/gdb/dwarf2/attribute.c b/gdb/dwarf2/attribute.c index 49c0bc07d75dd23f5b4f952f4ccb7c46cebc5265..25cf2b62cfd1c8f4981be2787fe4ade8c8c66b81 100644 --- a/gdb/dwarf2/attribute.c +++ b/gdb/dwarf2/attribute.c @@ -185,6 +185,36 @@ attribute::unsigned_constant () const /* See attribute.h. */ +std::optional +attribute::signed_constant () const +{ + if (form_is_strictly_signed ()) + return u.snd; + + switch (form) + { + case DW_FORM_data8: + case DW_FORM_udata: + /* Not sure if DW_FORM_udata should be handled or not. Anyway + for DW_FORM_data8, there's no need to sign-extend. */ + return u.snd; + + case DW_FORM_data1: + return sign_extend (u.unsnd, 8); + case DW_FORM_data2: + return sign_extend (u.unsnd, 16); + case DW_FORM_data4: + return sign_extend (u.unsnd, 32); + } + + /* For DW_FORM_data16 see attribute::form_is_constant. */ + complaint (_("Attribute value is not a constant (%s)"), + dwarf_form_name (form)); + return {}; +} + +/* See attribute.h. */ + bool attribute::form_is_unsigned () const { diff --git a/gdb/dwarf2/attribute.h b/gdb/dwarf2/attribute.h index ce6c5639c1ae25644844447399988648842d8f58..6f321a53844141f408f45e99f16608eb86f33e6b 100644 --- a/gdb/dwarf2/attribute.h +++ b/gdb/dwarf2/attribute.h @@ -114,6 +114,15 @@ struct attribute returned. */ std::optional unsigned_constant () const; + /* Return a signed constant value. This only handles constant forms + (i.e., form_is_constant -- and not the extended list of + "unsigned" forms) and assumes a signed value is desired. This + function will sign-extend DW_FORM_data* values. + + If non-constant form is used, then complaint is issued and an + empty value is returned. */ + std::optional signed_constant () const; + /* Return non-zero if ATTR's value falls in the 'constant' class, or zero otherwise. When this function returns true, you can apply the constant_value method to it. diff --git a/gdbsupport/common-utils.h b/gdbsupport/common-utils.h index 114342d845d8d76ce919e7c0518ab1251e7f2d5b..316ce89af23b926f10cb6a6fdda6621a7d4e507c 100644 --- a/gdbsupport/common-utils.h +++ b/gdbsupport/common-utils.h @@ -196,6 +196,16 @@ in_inclusive_range (T value, T low, T high) extern ULONGEST align_up (ULONGEST v, int n); extern ULONGEST align_down (ULONGEST v, int n); +/* Sign-extend the value V, using N as the number of valid bits. That + is, bit N-1 is the sign bit. The higher-order bits (those outside + 0..N-1) must be zero. */ +static inline ULONGEST +sign_extend (ULONGEST v, int n) +{ + ULONGEST mask = (ULONGEST) 1 << (n - 1); + return (v ^ mask) - mask; +} + /* Convert hex digit A to a number, or throw an exception. */ extern int fromhex (int a); From patchwork Thu Mar 20 19:26:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108645 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 714F23857B96 for ; Thu, 20 Mar 2025 19:29:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 714F23857B96 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=i6mdX0me X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2d.google.com (mail-io1-xd2d.google.com [IPv6:2607:f8b0:4864:20::d2d]) by sourceware.org (Postfix) with ESMTPS id 8821C385800F for ; Thu, 20 Mar 2025 19:27:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8821C385800F 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 8821C385800F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498824; cv=none; b=Ada542OeEyfjOmtRoCTfs9c3yRJUy6Cve7fBO52LQJzZ7IKtecYeDGIOAHycTmO7TcHuX8eKwuDoYC2aquOHj1QfZUM4jSMgGDFkVpiq/DmknTIEwQ2/yZp9ISvUvXg1Hyqs1w9nXVyZU2PVcK5zcxEASM1veK3XKRLB0nVPu+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498824; c=relaxed/simple; bh=bcme/Uf5zDXqDfcRdW6mhYxcS0nR9bufXwjyB/CVZBE=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=AFWJ0Np30cfku760r42ktjneaSpvhss6qb5YV9i4AEFsCCbXW8St9S/HLJgs8NwFUsjJM1NyP0rWqr4udj88T03LpnexufYZrkIm2Ftcu1s2dBypFWbcJ1mKjcZl3aZmalJs2vkvpIX2J/T4e108w3g/GUDAE3s3x/gxi71vZjA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8821C385800F Received: by mail-io1-xd2d.google.com with SMTP id ca18e2360f4ac-85ae131983eso128506039f.0 for ; Thu, 20 Mar 2025 12:27:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498824; x=1743103624; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=0FTStrNZ+CbO6pcnGzAyxj8dMNQOtKxaqfmoxO4eo7w=; b=i6mdX0me8yy3+Tw1VqqkmD1mA/bycUI69y07hK9sF8ZPTMyjRePxHL9rk0g/DrcIUm 9Xqx4w3UKUDDsxvLGmsgxizh4zC1GW2qQQ6o67mpWhKB6xByuMGgUX+hX1+hKj2cJhk7 Rrdswh56VAbF6khQ7A0pGHQNBEFy7S8iLxQS3O2uDeUycgDKj1r9n7uo+3L6g67f0yWN 6z0Ju8cAObVMcSZ59Gf+i7K3WnkCeWGNfGqKiQIst6yJVyyqmpiuu2vwKrvq54T2GLX+ 5PmE4035WshwrzxaF+UEAubWlHY3g8mD20rLPw9B/UKyWIzp6MZtj4AwAG/smLpFk8+P wXSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498824; x=1743103624; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0FTStrNZ+CbO6pcnGzAyxj8dMNQOtKxaqfmoxO4eo7w=; b=ZCoscdvkcZqjWQpW1p4Fie9/ThcHkRfBAdq1ROXeHBSj1kLIGX83L54LPz0XCrPgn8 PMdeqliSRevw7xrqcaPLUTgpy1rLervZq73yn8U0mXnxlJvhKbqxQ/fg5G5lHK0Xd7LG JNg+ZIiJbRhzRKLDlVm7t/Mar4ElG0r1ajisy2pdfkFHWiGb+OOnUCspy8EN05PdDRXc qpp6qHoqBRaeh5GP6Ae4WcPvtDjzmuj4uPZ8jcy9T3xRATmd1l7+KmbtHrOZQLgJgQnA sqambz76pO8zIXujUJpZS7O4q3KE1HE6lP7Vqh2qRS0a1LG6DWRbcQgVM5KQ+dn3r7Mg oQ+w== X-Gm-Message-State: AOJu0YxPhGgAwFry/xS5U0citZAh46G7r6rbNXMgkexZC//RHrEwIcG8 C9bddMzVQevv8U3WHJyTBqR+QdxA0i2stqKaBBlvLCjajf72qXtA0gKSPNTKIQ== X-Gm-Gg: ASbGncsWBSmZ+wm2WGV5vnap3VxwCZ4ies6xp4b7NqFHlKyC8tSp7Wd+IJQ3EN5Z+e/ 7tLpIidVzk7Os59uM6kSKIGG/NjjZ8WS+FMly+E32sickY4sUejeyRzyNHyXoGSmi7HL9wX9mBY RcHG1dG+Zvjt1TNttocPuvFhvuVu9H5ztg9gcWyBvVaCi/SL/vKMjNtTAhHZbgp5QyoXcSS+AP0 ZK5VMd2wexuyNSr9VYQDa6fGLNMFlD9QKV+qoPQs/uEzMm/Cdp3xmtKT8JYuoE6kNXJ8zdw8OhN HBgFXDdzeZhdc/coVVf4pi/2MsgXYFRu6va/0sY58GUs8lKnKazQ+pQjo7+G38WRhK624XPz9Ra odLguhkuN X-Google-Smtp-Source: AGHT+IGr3xFtdwj9pnsN4csCgXl0mbOYhOdRzToGcwpZl8EFPjuYxJOl+LZ1wKU+Dv6HyQ3mW8OUIw== X-Received: by 2002:a05:6602:c89:b0:85b:4154:7906 with SMTP id ca18e2360f4ac-85e2ca726e5mr73107339f.5.1742498823796; Thu, 20 Mar 2025 12:27:03 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:03 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:26:59 -0600 Subject: [PATCH 03/13] Use attribute::signed_constant for fixed-point scale MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-3-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes the DWARF reader to use attribute::signed_constant for DW_AT_binary_scale and DW_AT_decimal_scale. (FWIW these were the attributes that first lead me to find this problem.) Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 25d5566926de8cf836ecb83d656caa7a057b07c2..81f4ba98608528413e6463c3b04ddc3796c8e23c 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -13532,14 +13532,14 @@ finish_fixed_point_type (struct type *type, const char *suffix, } else if (attr->name == DW_AT_binary_scale) { - LONGEST scale_exp = attr->constant_value (0); + LONGEST scale_exp = attr->signed_constant ().value_or (0); gdb_mpz &num_or_denom = scale_exp > 0 ? scale_num : scale_denom; num_or_denom <<= std::abs (scale_exp); } else if (attr->name == DW_AT_decimal_scale) { - LONGEST scale_exp = attr->constant_value (0); + LONGEST scale_exp = attr->signed_constant ().value_or (0); gdb_mpz &num_or_denom = scale_exp > 0 ? scale_num : scale_denom; num_or_denom = gdb_mpz::pow (10, std::abs (scale_exp)); From patchwork Thu Mar 20 19:27:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108647 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6A0303857B84 for ; Thu, 20 Mar 2025 19:30:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6A0303857B84 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=SecnL+yx X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2e.google.com (mail-io1-xd2e.google.com [IPv6:2607:f8b0:4864:20::d2e]) by sourceware.org (Postfix) with ESMTPS id 3FF1A3858031 for ; Thu, 20 Mar 2025 19:27:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3FF1A3858031 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 3FF1A3858031 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498825; cv=none; b=UWYzEWSLNF55pUmHzX8Jy3cthnrZKIUQEX2zdvpOoRVwKZtUayba8bAkRPXmDFnyrnvVuK0bD+p65/zaMMrRZopBBNA7KUTZstTPO3ySsNOiaHWSq3VaXmwPcPyc+nCnjRP+OGHRcHgHmgys7zh9OdVpw5s0Ta6FCPsZXrpORvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498825; c=relaxed/simple; bh=vBWKKRn/A5dARw79lGLO3lrarSFIR70aeHv6BhXp+v0=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=C3HCpd2IUQZ+1kuZ8IW9gBM7Ihr/G9/UW2dpDn7NWCY+Y0gzDi0tcpvUMf39Swyaa17cUdy1eDdycXQ+48wzaVQEaibEgi7QCwqpDtBietcXOwFM+5R+YHwfMT/IRhFM7SZKu486IPz6v4inzF+yDKYQP58RYY3UrpqcEM3yjso= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3FF1A3858031 Received: by mail-io1-xd2e.google.com with SMTP id ca18e2360f4ac-85b3f92c8f8so105799839f.1 for ; Thu, 20 Mar 2025 12:27:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498824; x=1743103624; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=th3QOmh9+s6/eh0QzEUvfEMBBrpXlSNoPZMYV++mo+o=; b=SecnL+yxecpiMw4InF/TuufNuzSy+XErQA0AHw2/reUFRWrXpISFumcqgzzlOAzCjj Q1d0XqcEZXSDNQnhDePept4p3h/55z1F+3y3ocmA3ImzZ0oOvLudvYEbnd/CzuFgkATP ZWiB3SXYhWNlpB7f+u07fP+tZHgCpYywfYIuAoekObgo6feax+6ZCIscYH/hGD7z9sZ6 sTWFiY00JgSya4nMZeSwwPHMJGP5DZzHDt7VmdiAql7RTnvigvaf85uyzecy321VCLJF JHSrkRMOdibbiAOlh+B6YcpKxdlu4UfEZLGl06VP8ihLVtiBSZn+Na5G/N2+A9pxc9ZW 16wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498824; x=1743103624; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=th3QOmh9+s6/eh0QzEUvfEMBBrpXlSNoPZMYV++mo+o=; b=Cb9iK6NO8MNG5+bZik0HOl6WjDX4hEbabCS4Hr/+hngc8IU98KHUTy5/JMj0lGQC+x YXi5+y2DrZc3qh9aYMXeMCvEL6ZrXjiwNnEuBgEXLAzm/LW2FEjgS8igQl6Vu28P0VmY Q2L93skTDdGXna3q0bz3vjXJAbGrmTTopSvcOHPZkPum5kcHDbSMiZsb1fTif5AQlY6w Wg2MCx5klMRbf94A46baj8XzYJ0TxNMN815XBCNBqQIlY86LSg+HXrUf51OFDion0uqG yurlI7aqin3GNynPiFqn/DeyKdWQxNHlI2ivvriq/JILQrhSDOBW1gzqx2oaqM+ZqqeU 0EGw== X-Gm-Message-State: AOJu0YwCZ+MEyRKy7RDonYL5AdkFRKHejXdhPHYDfiUsT26in5rSajEf BwNx8jVBKoAa32NDnWamXgET+Kxv0YQ/X+4MuUQrrj8pS2hKGMMbuPyRE1XNI9WfOKggowuktHQ = X-Gm-Gg: ASbGncsqsVW5IBLJ+bR3Sc/RmJU9NSGYkJeFTvOP0BxDXxuE46ZX7FTLhNZd338DhD0 tX6G5mZtjmQvk+igTm3Fk7DW8C5beZIm5qRXaFB8b1tdOUR1az+WGsWKqaAYG9MDzoYtZvnU//r fS0CVpC6NZwgQ12/t7X/E9RM5FSgxDD3EFvIzOi66CITE1UXIaiwS8acWupQn5USMbvKUqInwYc OgioK9AImRaMfXQLGNN/2RCaiox3KrtgeH6NhUaujkZsk7jEAMJgYeiH421Qyu+cmkj4I7KLDdB zrjmbUot52o7a6K4JG08b1SuffN0wYplOzD5ATwn7jZdysk2vztytGmtxQh2zX7OMTb1ILX76B0 pln8IL4Rt X-Google-Smtp-Source: AGHT+IFAP+zFOM3oZ5Pi9DTh7/+JIIHOyAHJWJqD0V5HraKzXH9RycX0fOtb3ed7Ci4tBJJ/wPAMOQ== X-Received: by 2002:a05:6602:b8b:b0:85b:505a:7def with SMTP id ca18e2360f4ac-85e2ca729dfmr71416139f.6.1742498824369; Thu, 20 Mar 2025 12:27:04 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:04 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:00 -0600 Subject: [PATCH 04/13] Use attribute::unsigned_constant for DW_AT_bit_stride MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-4-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org DW_AT_bit_stride uses an unsigned constant, so make this explicit in the reader. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 81f4ba98608528413e6463c3b04ddc3796c8e23c..b48e5db82bca388fb122de05695ea1f3c9abdb1a 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -12176,7 +12176,7 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu) attr = dwarf2_attr (die, DW_AT_bit_stride, cu); if (attr != NULL) - bit_stride = attr->constant_value (0); + bit_stride = attr->unsigned_constant ().value_or (0); /* Irix 6.2 native cc creates array types without children for arrays with unspecified length. */ From patchwork Thu Mar 20 19:27:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108646 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B4EB4385840D for ; Thu, 20 Mar 2025 19:29:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B4EB4385840D 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=LVQAjFZ5 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd34.google.com (mail-io1-xd34.google.com [IPv6:2607:f8b0:4864:20::d34]) by sourceware.org (Postfix) with ESMTPS id 6CB6F3858039 for ; Thu, 20 Mar 2025 19:27:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6CB6F3858039 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 6CB6F3858039 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d34 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498826; cv=none; b=uOL1zwC/kIujRTu6ZII3LSD35wq6lTqZQDG/032a0T0WNSoVrbacMcXkQ4vFP8AWMqb8rxMLQWEUR27H9rp0Vzl4/6Kk1lE4rkzgejWRXIrDHSxvK4XoJa66H6YDutR3DHJ564jsLT2fhC4t0sui83a7ZkmBb86k1WrC1eNnqdU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498826; c=relaxed/simple; bh=GFi4Mf7ffQXJFqkCLyXtSvFIT0WEZDAqf2FAiGelSus=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=Qphd0pbwXkI6w0cZrU5SHPRonAaA5vPCH+IliuagWxIJfQESrkxSN2PEH9CTPu9lsZNKFiF8siu8I9leUxraKvdGHHP+3sdx8vvFsEkFKZCeg53G/E2V/Oou22zwBIL5bP9m9PF4xyILlVS8mjAyhSkOhOBDmzmZbxW4l7gka54= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6CB6F3858039 Received: by mail-io1-xd34.google.com with SMTP id ca18e2360f4ac-85517db52a2so20145439f.3 for ; Thu, 20 Mar 2025 12:27:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498825; x=1743103625; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=0JilrflSnoRRPEUPtk5SVe9fsA3+V8WWu/GRZHWfbUk=; b=LVQAjFZ5qeDxqujEZXUTBtbTeNaCdsl+fd55+8T+4bLi1czDqWnFaEeOe4IkBo3vP2 6848aHOr4XA1OEMxM26ufCFGwEULfQIg4mFefekTFENAtde8NU7RoNXscoBURBG13fWM PURRNIGF2f6NjcjIcSYb+YGTanqZ0WLHod9lyv3czdRY+xov3XNCXtfvw3ihX6Az7WTI FnJJL/lrFswJh6aqJFRC+ubrfRXtQRWnTHaY8qRPlbO25xAXw26Dvstqz/si6wPfFAI+ dfElTJ/eh01JfPDjTCSivdUoRE76Fj3hZsQHHkzgb+HZ+SjCM+j1P6nStHUgecH25X5i 780g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498825; x=1743103625; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0JilrflSnoRRPEUPtk5SVe9fsA3+V8WWu/GRZHWfbUk=; b=DybuGWRjuZUwO1k1cGJSt6nvJSiIn1rxN9IqFYcoFgAoUNPMMSo3qFZan0/0ayj19i W9us1zDbjaUmGZtnyypNvYgHE2A155lEJK4GYDgJNsf/QJUSVAKtDSRNZ91dimKRt/tV x8V2kqM2kTCWUbAN15Spcg5CbAsb8SuDQtuRA4BDojZme5u3RD0IKKpgIVQJXjJ7sa+l 6uyZtbk0T6Ony49YRjqz7lzAjYodDRn8Agl7XJcOvXnO/q5A9F2Sm3Prr0/zyKaUpeAQ p+f9vvl9lHv6VrW6u/jqzHz5hqAwShzYGgvR+1QNfdVEd0tDk+ngOBBosNgUVBtek3fN xsaw== X-Gm-Message-State: AOJu0YwTjfTedlybfY3DN/iMmqQfP4XB2IQopdcRzaqGXG/AM1VKMjHk LRw7uPtpvNsdL2fIBpBwdoA+ao0gRqJfUEo9bdq/lBGl+HXgAm0CDc8dW3Q38w== X-Gm-Gg: ASbGncuVpH4v6n8K67CoxSVtoaEk8eZJtnD2XR1q8U6DeLog4JXSIQLMSlc1UhyQr6Q UPQAyQpiiarSD65By5mOg/2Z/Otd4+bjrEl8XqO9LxvBhQg3XGMOZD0Eeztm/CLozHBH7wWSxuH ok9jDjqo0bkWA1WNVDio/Qt+JPh95xsAK7myDAspdJFuNqgynIqbwBy7Ls4ZqrXUb0Jdw5EDLwe vGRVrq9XFa6UMd87myOdZ1aUQT5u3pgAOFk4hx99Qc+cu0cgxCYnkeCjGu791is8UzECAcB6X6w HlWpesFDr/upqb5im3nsFmQ1xWfHd/XDtwoPftzdiMxtsybDbDw/7Y/h2gWSKXj+4Il+RuP7imh eGmebSoTy X-Google-Smtp-Source: AGHT+IFDmiOfWWGJsK9OevNuhcThF+nZDb/gBXTtGb88b9tmJBZknpkutRNfMUBhqUQ2i0no8SIpQQ== X-Received: by 2002:a05:6602:3f08:b0:85a:eecd:37b with SMTP id ca18e2360f4ac-85e2cb46088mr46843839f.11.1742498825594; Thu, 20 Mar 2025 12:27:05 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:05 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:01 -0600 Subject: [PATCH 05/13] Use correct sign for DW_AT_GNU_bias MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-5-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org DW_AT_GNU_bias may be signed or unsigned, depending on the underlying type. This patch changes the DWARF reader to examine the type before decoding the attribute. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index b48e5db82bca388fb122de05695ea1f3c9abdb1a..bd3951a263c43597b1b77afa901e3c17947a71a4 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -14230,8 +14230,13 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) LONGEST bias = 0; struct attribute *bias_attr = dwarf2_attr (die, DW_AT_GNU_bias, cu); - if (bias_attr != nullptr && bias_attr->form_is_constant ()) - bias = bias_attr->constant_value (0); + if (bias_attr != nullptr) + { + if (base_type->is_unsigned ()) + bias = (LONGEST) bias_attr->unsigned_constant ().value_or (0); + else + bias = bias_attr->signed_constant ().value_or (0); + } /* Normally, the DWARF producers are expected to use a signed constant form (Eg. DW_FORM_sdata) to express negative bounds. From patchwork Thu Mar 20 19:27:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108650 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B39A93857BBA for ; Thu, 20 Mar 2025 19:32:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B39A93857BBA 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=CayQl3He X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2c.google.com (mail-io1-xd2c.google.com [IPv6:2607:f8b0:4864:20::d2c]) by sourceware.org (Postfix) with ESMTPS id 9B4F73857C5F for ; Thu, 20 Mar 2025 19:27:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9B4F73857C5F 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 9B4F73857C5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498827; cv=none; b=loKIosK7z3ydqDBtX00YYDWvgmbRl9iTydusVmWmnl6J4AvaUiei4QErsKRnGb3ln5FCY2ikzZDHs9zx4gKHzkb1dx1t+4Ijc7B7Ce4bFCcfcfckMdwzenRG+UiI3bIZnG4xaPCwd42a86Ne7kbbe0MFikdo/t+iAf6wvjk6Tvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498827; c=relaxed/simple; bh=gdHKQSVnjLiaoc296Jecp55XD4MOodT+ldwHUvBXeRY=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=qdC3ZKYPOspfjEHGSFfRhFPugngff7WpL50eQLop5sGRlFU1lurvs8SsWJxh5DmmqNvaf95cS6H1dcvQGvQJ6imxAoJIGnlYdO8fBYCpHz/kQBgpgrJVdGvbS/KCB8WBt56hiCpIx9GwKz5eTSxQK7eyEPY+zRIR+6mmV6wiApU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9B4F73857C5F Received: by mail-io1-xd2c.google.com with SMTP id ca18e2360f4ac-85db7a3da71so83494739f.1 for ; Thu, 20 Mar 2025 12:27:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498827; x=1743103627; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tgc+SujFUB7WCCP1F2yx2pFJUyl0qAnpv5SYqXCpPgk=; b=CayQl3He5as0zAIsmkoP/Q5abmoA9oMmWdycUfwpAtGME18UUjmC32vfcGQW1tE7F9 uXgCunGGq4kQpU144M9YyQ4rfFPmYtO6eG+fjmbT7VHAEAR4Skv4UncHhWbw4YeDZobK 6RbttPF2rRlwOCqNo8YFzcnAmK3ljAMIBkdlYUceMQlFjCAS9IpgkBgPdXOy1nS4mIo2 XNPMfvrhLNeDRaKdjJaPpB5/LCCIKen7Ho+w5B4WiG8vveyXucQHQ2z9Y9C+njeoZydY mfz2+L0AodGuJhMu7MPQCa5plo7cSBX1TtzyFNlfrOcc07ZFavVEElrQHleSsWBdc7w4 oyhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498827; x=1743103627; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tgc+SujFUB7WCCP1F2yx2pFJUyl0qAnpv5SYqXCpPgk=; b=Z6T3KAIuO1MT1XlIyUZJs/Zw0bECEmN4K8MKiN7nWShlxccWEnv9lay0V5Xi26pcfR phA8wPkHw9QAgpcAqb8G6qV0Y/sY6n7+XtzEucvggZqG7Ezn3UDGR+hdEQ+9pHU9gdzj Omw3sqHNQbT4Tgqpf52Q5sGIZd0DDTOf7MQ/Zyu1HlYIWql4ONtFURJvotu/b7DcTWem BO/1RW2x/dk+/phjNAmLHeeXj2z/ex/UKgjRWTn/K1HKdPRP5X49L1GhVMWTgqnduuW3 SBhXn1PWCkMAp92WQawmcP1fJljAa3pJ9rVprSI2ocmM/rzwlpBg6Ve5a1wffhgME3g/ VQxQ== X-Gm-Message-State: AOJu0YybDEoCg/iZ2QXH4hfpAMOC4Ib/AeVt3tldv8bj0Eh+0OavGKZm hNi9eEQjtLEzK2TbezI6/iuhDR6ORdsaxeFoFQyqntyoryuLppAviazbF7bflCFZFQNU4tA1obQ = X-Gm-Gg: ASbGnctC/QfankVDkUSdbMyREGQqP1JCpmSp0jEuqSNz7Rg8FWuyL0XOaQInJ0qB15q G9VRPUZjVMKYxJltbzUp6mhRpdgmmlsuBjRumjQQNhV+8S7fEBKPWooGRk8BBKTpU6v33iZ34RE 3+lBONHaoOMWb8HUAZCDU0bIJeCOpqc/SGhwjOdEXY33DGdZSN+ebo2CZZ4/TIUlPLBh+VR2rcB 28eTTW3xb+9UkDV5TcF68gzeqjo+39t728y2qNgPuwxcDJhEVlbIdL9fl9xG5M0104CXdVaqEXH qjR99pVaEQeTeHUUqCW3HCFkm+cU7HQRkEK32dqnrK2LpAM/I5g9PCJCasUUO5l6exD4A6w/QUo pKBj19SZP X-Google-Smtp-Source: AGHT+IGYKnGoYasV9B97QTAsyWElfdsm7DfjKopkk6XMZGYyHKU6+niOBRQxsb9FsAgrsGZX475liQ== X-Received: by 2002:a05:6602:c84:b0:85b:3a51:2923 with SMTP id ca18e2360f4ac-85e2ccdba1bmr55352039f.14.1742498826618; Thu, 20 Mar 2025 12:27:06 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:05 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:02 -0600 Subject: [PATCH 06/13] Use attribute::unsigned_constant for DW_AT_data_bit_offset MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-6-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes the DWARF reader to use attribute::unsigned_constant when examining DW_AT_data_bit_offset. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index bd3951a263c43597b1b77afa901e3c17947a71a4..18f03f0eb7ce552ef5383a34b1112cb12230678d 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -10028,7 +10028,7 @@ handle_member_location (struct die_info *die, struct dwarf2_cu *cu, attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu); if (attr != nullptr) { - *offset = attr->constant_value (0); + *offset = attr->unsigned_constant ().value_or (0); return 1; } } @@ -10099,7 +10099,7 @@ handle_member_location (struct die_info *die, struct dwarf2_cu *cu, { attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu); if (attr != nullptr) - field->set_loc_bitpos (attr->constant_value (0)); + field->set_loc_bitpos (attr->unsigned_constant ().value_or (0)); } } @@ -10177,6 +10177,7 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, attr = dwarf2_attr (die, DW_AT_bit_offset, cu); if (attr != nullptr && attr->form_is_constant ()) { + ULONGEST bit_offset = attr->unsigned_constant ().value_or (0); if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) { /* For big endian bits, the DW_AT_bit_offset gives the @@ -10184,7 +10185,7 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, anonymous object to the MSB of the field. We don't have to do anything special since we don't need to know the size of the anonymous object. */ - fp->set_loc_bitpos (fp->loc_bitpos () + attr->constant_value (0)); + fp->set_loc_bitpos (fp->loc_bitpos () + bit_offset); } else { @@ -10195,7 +10196,6 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, the field itself. The result is the bit offset of the LSB of the field. */ int anonymous_size; - int bit_offset = attr->constant_value (0); attr = dwarf2_attr (die, DW_AT_byte_size, cu); if (attr != nullptr && attr->form_is_constant ()) @@ -13907,17 +13907,23 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu) { attr = dwarf2_attr (die, DW_AT_data_bit_offset, cu); /* Only use the attributes if they make sense together. */ - if (attr == nullptr - || (attr->form_is_constant () - && attr->constant_value (0) >= 0 - && (attr->constant_value (0) + real_bit_size - <= 8 * type->length ()))) + std::optional bit_offset; + if (attr == nullptr) + bit_offset = 0; + else if (attr->form_is_constant ()) + { + bit_offset = attr->unsigned_constant (); + if (bit_offset.has_value () + && *bit_offset + real_bit_size > 8 * type->length ()) + bit_offset.reset (); + } + if (bit_offset.has_value ()) { TYPE_MAIN_TYPE (type)->type_specific.int_stuff.bit_size = real_bit_size; if (attr != nullptr) TYPE_MAIN_TYPE (type)->type_specific.int_stuff.bit_offset - = attr->constant_value (0); + = *bit_offset; } } } From patchwork Thu Mar 20 19:27:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108652 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 23AB93857BA0 for ; Thu, 20 Mar 2025 19:33:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 23AB93857BA0 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=SuhNM/QN X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by sourceware.org (Postfix) with ESMTPS id E1E7E3857B91 for ; Thu, 20 Mar 2025 19:27:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E1E7E3857B91 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 E1E7E3857B91 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498829; cv=none; b=wn1wrY6lb4xJpzX4hLrxW9HO8v2xuYs/r10IXwHB9uO4S9hJfi7vkZ+zUuB4cyGT9HeCA3mrQbY7a6qD4RwCukiCYAWBF2NZoXWu1LzIRVx7eIK23fIiuQa/rQZIFdAoWy4+pbF6gdHAeq7F7O93qxa3sxaHgmyIr2GBTsWS+7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498829; c=relaxed/simple; bh=yc3uvXNZU7LOxnK3291X/P/1BKhTeFLNox/C4Uijm94=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=ZQRm2ZEA/27qGghYazmUsCz4326XigBZUIwHpH5A8vWbjScCWEVgleNimrTREz4e24tdPiHg3iP3ALJ4QrCs+mBiL0xYsUsd5nY6qwl/TKdHincMwFoo/ZMjHGh+V4tAykuBIhJVoBuc8Hap4JAVqalRdX0R6jvjogdjKTVRa3U= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E1E7E3857B91 Received: by mail-io1-xd2a.google.com with SMTP id ca18e2360f4ac-85b3f92c8f8so105803939f.1 for ; Thu, 20 Mar 2025 12:27:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498828; x=1743103628; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=AZIPQCGjPHV2hhIiAYu7tep2McSKt+AyOPzV6waaOas=; b=SuhNM/QN6PMKtOgHqHrQyaRkF28z89pGJzjjiVOvSaTnGLZ92AN44HFOfb0aM46KOE jcIgng9W4XhOL7BMVrDUHC9+1DSoYqDe792D0lw7uwbXB7EPoAJ7QpsXlBlTreiePB+O ff5rZSp2moID3ALY0BIshk4e47SgYFdEVI2EukqO9WHCht4QhUJb/TWlvHyyr7gUtFmS 4SVwsDwlKry2I+8nykCjr8nYvcBKJ54WLt+dT2Cr+jO3OUT/UAn6W0RQMNwa60hYhfOL 6FtHQdbhqHWy7RSY9GmoezLKE6bpL2JjGgl/wlnAuvGzIjnNRQF1sKjy4+YkX/3rCS07 WkHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498828; x=1743103628; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AZIPQCGjPHV2hhIiAYu7tep2McSKt+AyOPzV6waaOas=; b=WIMGASk2qLLxTdKqD55QeI2HCsIWanYhSxSBsJzhgSHksL8zqildaQhBfALQbhuhC0 ACTp5iLehwrlyXwqsjDvY7/g3OeoRSx120MeCR0QoafFpklQrcQWEJ4Z8zaViLwFYSCJ cCYzYhCqMLY25+2kWZwFXefObD5xdG3I5YXwztX4CspttYmsMdlJZEZ6Nj79qpYqTgLM NYn+D8LEnHultysgG998WcIqqAJ4uNgOdfN44JIJ+7Bsz/rVsQ32yt/h2bo45+x14LOG UEiUaL/3H6vpBRS8gibyO4GqboaM4bKJrNfQP6DmBBI9rNNH2inEQqq/Myl+yr2i7rms GFHg== X-Gm-Message-State: AOJu0Yx9Hvy3mZrNpx+x68fN0SW9qSZvFW/LclXPL2EagCjLsrMAimA3 orlgjyQMJTJNer1KaJAb4qraOeH0dbc+9xO+yXiNIOdsankrySz+9BgAz0wMijv432wixWGDiAw = X-Gm-Gg: ASbGnctgjHLcKoJU8NvXtHCvlPFSlT5+84lHppzDcZewbUbNWBKJFgCSaxHCUOJjPdA CQDcGU100rt3NAy4GV2ebVzXKoe63HMp1tXZPUURDltmNHe5S+rsdOTnQ8d+RWS6f7FFZSYhBwv BpXwtRNU7LaX6PFR1Qz8r80keZ2EPiuNNyus08AMdypNzAskmhsROsIUs2JX5KlEXMS2xtsl3Yi VRj68q8wlx8Ea5IdJ7GYWv0X55VaSInzHIkKlqhrdBvCurguS/OVOV+74cWxYlnkJvjl7J4yxFE 4svUcXMtepAXAh8M+i8KSW6ztHJKCpTXkCMIQsXbZbY++C6lD507Itdv159dt/bPL8Rq+Ubaa0t 2PVB4k2Fg X-Google-Smtp-Source: AGHT+IGwRyTGx764nKHuffE3lNIs4Rfab0zZAwJjezAMUMd18leS3aksHbiMFfTZT9TyzR5bqUIwyw== X-Received: by 2002:a05:6602:4013:b0:85b:601d:dfb9 with SMTP id ca18e2360f4ac-85e2ca2d52dmr62487739f.3.1742498828017; Thu, 20 Mar 2025 12:27:08 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:07 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:03 -0600 Subject: [PATCH 07/13] Use attribute::unsigned_constant for DW_AT_data_member_location MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-7-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes the DWARF reader to use attribute::unsigned_constant for DW_AT_data_member_location. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 18f03f0eb7ce552ef5383a34b1112cb12230678d..eabe07107d9ac01c3a4403d45b75f7ebcfd57d78 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -10010,7 +10010,7 @@ handle_member_location (struct die_info *die, struct dwarf2_cu *cu, so if we see it, we can assume that a constant form is really a constant and not a section offset. */ if (attr->form_is_constant ()) - *offset = attr->constant_value (0); + *offset = attr->unsigned_constant ().value_or (0); else if (attr->form_is_section_offset ()) dwarf2_complex_location_expr_complaint (); else if (attr->form_is_block () @@ -10050,7 +10050,7 @@ handle_member_location (struct die_info *die, struct dwarf2_cu *cu, { if (attr->form_is_constant ()) { - LONGEST offset = attr->constant_value (0); + LONGEST offset = attr->unsigned_constant ().value_or (0); /* Work around this GCC 11 bug, where it would erroneously use -1 data member locations, instead of 0: @@ -12402,7 +12402,7 @@ mark_common_block_symbol_computed (struct symbol *sym, if (member_loc->form_is_constant ()) { - offset = member_loc->constant_value (0); + offset = member_loc->unsigned_constant ().value_or (0); baton->size += 1 /* DW_OP_addr */ + cu->header.addr_size; } else From patchwork Thu Mar 20 19:27:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108655 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 10F713857B8C for ; Thu, 20 Mar 2025 19:37:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 10F713857B8C 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=ZaaEtmMq X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2b.google.com (mail-io1-xd2b.google.com [IPv6:2607:f8b0:4864:20::d2b]) by sourceware.org (Postfix) with ESMTPS id CC73A3857B94 for ; Thu, 20 Mar 2025 19:27:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CC73A3857B94 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 CC73A3857B94 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498829; cv=none; b=Y9P9D1O8V6yVUvPRxQWSZ07Yz3zSTigGNaqKGmSHdCZ/VWYTeVwaAvlLJ+y89A1MYckByVrTPUspUKG70dXbQQzItzVPuH8jzyyHn756HP0tKxiXIPY5gSZ3TeCpEoiH57ka/gCdzDVijKJs9zI15lcCDzFFSgIbBOnGyeyp24s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498829; c=relaxed/simple; bh=fAzu663ZyAnJIrknOOedrHppgiHryI04abqWf4FfSzg=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=qXriAf7E3FaFndZIXAA4yq+xH1iiqVdwSXeJ17ZNAw0qewLBUfqpdjtieEBwSt2m3B4WzyudM1AzEqDCSoQITH1H0Og/6u6q9KxKUszzaU1FJZqdJ3XNwI86sE+p562G+0MIrOId0D0OKPGxrTj0kyA5p4yUXGH9o2hBCK8zQFo= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CC73A3857B94 Received: by mail-io1-xd2b.google.com with SMTP id ca18e2360f4ac-85b40c7d608so102763239f.3 for ; Thu, 20 Mar 2025 12:27:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498829; x=1743103629; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=5GSlyQZm3AJXAsPUmnQwp7Cs76kYyCpuAlEPc460t6Y=; b=ZaaEtmMqPmI2boJunhtogOdi8okK8OhbIOVFMjvbH5yg2SzGxqzEAsFsDjroWq46Yj 2wPxZMB6ql6gFz826SjnS5OhJiKmRTdNDZ6jcQKcZlL7snACD8+5zRh96vYnAAV4PVrQ a0Op0krfY7p2C+70keuZ7SRnvcw/IJLOv+i6Bbwd0wereUdeHUM1OrP3rNY6L3f9pplF vSQZ5lAgl9pe5ls5mgfYJ+EyBbNz/GQc9jmTbKaHjrpT2e/9gUyGSL9jFOdf6eNh9eZj QvbjmPQl3tYXSNASzV/ijYYe4Tlv+KVr/kRbgrGaYorjsjGIq67b0EtAoqiimoPQ6nF9 v60A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498829; x=1743103629; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5GSlyQZm3AJXAsPUmnQwp7Cs76kYyCpuAlEPc460t6Y=; b=GM6lrBexoO5Ocd5i0TSb2vygKfxdkO4k6cxgLOEfyehv/WY92lQje/pR4XLzPP8CQt uKRZQTa2FKLd4ePyH6srscwdqHJNv1KRArCyJIe3LePlC1JvVwJMz2s/Mkvcyf79yQR8 rC9lSaHHvHKoQlG06JiR+hdWIeEusS0v2A9nvPVzmU6gIfuOCl70KcqMnw86+a1hgZqK fLmhi//lOikioso2C7mkBViGy+EENiQYqGzjhOc5ypYObRaDGZ8EjjdyufpEVtXb8qZT UIh3IaE7yF3r2UqcY6X6zVzOrb+7EVZl9Z0xY6AtLWGbQbta8L4tJJeyo/kIbf5uxmt+ Lvww== X-Gm-Message-State: AOJu0Yz8unwTqY5T8hDw0S1I7JFEt8iWHb+Isqln7GS/5IQ8KhFUKI/J 93n3G2krw5hzSXT6m4zrfyyCZNELJtl0B7kEDsDYrddxcdr5zuHz2XWPbpvj7g== X-Gm-Gg: ASbGnctJWZswpcbrJx7G2HQbYydwFU03tRtJBeS4Kr2xrRA6ixvU8qdmGj+Toj8/77n K/OJgG1sXZ2ksYAMujZu2kjxzVjJ+v58ERNHW7PHlZx19kc8o3NEsl36yfodQS4ERKxIJyf5k8B PvTQj9tCpad9b8JPpxRGWmfkl1fW/Zg7cKu9nDFOZoDTgnL/+BSW0LxUUzFbMVWvqLvcxEDxx44 wLG2qp0XMdsLmZJos9knhNafHiRqYKMbL3bLIUUWQkO0HCZQ/Z5rGbkQynylU/01QeddxXzShjf 6XzlPxpovv1AYBcMzkU9yZWH5Ba6xjPkvffld2fwKKs4xrMl3r8w5hoxLQ4IBnWIjA+hA6/mrUd 8sYe+NWTu X-Google-Smtp-Source: AGHT+IGDqrVZg3Mei5Av2Y7ycTkbmxu3KgoOB0MS/08Kc25PbaJebElU4ALPugwRBK1KcPFrp2k0vg== X-Received: by 2002:a05:6602:2b15:b0:85b:482b:8530 with SMTP id ca18e2360f4ac-85e2ca2d1a0mr57194839f.2.1742498829046; Thu, 20 Mar 2025 12:27:09 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:08 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:04 -0600 Subject: [PATCH 08/13] Use correct sign in get_mpz MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-8-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes dwarf2/read.c:get_mpz to use the correct sign-extension function. Normally a rational constant uses signed values, but a purely unsigned form also seems fine here. This adds a new attribute::form_is_strictly_unsigned, which is more precise than form_is_unsigned (which accepts a lot of forms that aren't really for ordinary constants). Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/attribute.h | 9 +++++++++ gdb/dwarf2/read.c | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gdb/dwarf2/attribute.h b/gdb/dwarf2/attribute.h index 6f321a53844141f408f45e99f16608eb86f33e6b..3150325db75e74328e858e8d2fdf09881bbb5110 100644 --- a/gdb/dwarf2/attribute.h +++ b/gdb/dwarf2/attribute.h @@ -173,6 +173,15 @@ struct attribute false. */ bool form_is_strictly_signed () const; + /* Check if the attribute's form is an unsigned constant form. This + only returns true for forms that are strictly unsigned -- that + is, for a context-dependent form like DW_FORM_data1, this returns + false. */ + bool form_is_strictly_unsigned () const + { + return form == DW_FORM_udata; + } + /* Check if the attribute's form is a form that requires "reprocessing". */ bool form_requires_reprocessing () const; diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index eabe07107d9ac01c3a4403d45b75f7ebcfd57d78..e6ab3c8b596f3fc1c627efd6e9e7146fb40a3575 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -13350,10 +13350,10 @@ get_mpz (struct dwarf2_cu *cu, gdb_mpz *value, struct attribute *attr) ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE, true); } - else if (attr->form_is_unsigned ()) + else if (attr->form_is_strictly_unsigned ()) *value = gdb_mpz (attr->as_unsigned ()); else - *value = gdb_mpz (attr->constant_value (1)); + *value = gdb_mpz (attr->signed_constant ().value_or (1)); } /* Assuming DIE is a rational DW_TAG_constant, read the DIE's From patchwork Thu Mar 20 19:27:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108649 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9CA7C3857C7F for ; Thu, 20 Mar 2025 19:32:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9CA7C3857C7F 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=SaseyVC2 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by sourceware.org (Postfix) with ESMTPS id E3289385840D for ; Thu, 20 Mar 2025 19:27:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E3289385840D 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 E3289385840D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498831; cv=none; b=X8qDrJGuyvsJsFiJfHEwzA75pkThmReEBhwWw+IGriQndW6WLC+dnflnOZih27bsrH+aj+Y2P6bHCTX92BC8hyvRmvILgOM6rfUGQsypoMzJZNznHKGjS3EBCWwiTQvAXPf6Cx+KAyQ5qCoPq3NRmgFU67hcwGf84MlnDC6kN30= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498831; c=relaxed/simple; bh=0ms7Hg8/prjOGwV2YFrYpuIpe/FRlz3OZ6yIakuDmJg=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=W17BiwMX0CMkSChodWECXFW+f4AbE5sU6rAsAi4WDh2bu7Js61dhuHhMTLzJWNwoWjRSpnLK3iZX2G9lSyLmmZTAaGF00utPPPGK7b3BmUHCO6e7uoYoaz80IW1LZysyn6NPz2kycaJazYUZm2A8pRkf4tp2MjMnZUizJ7pBHas= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E3289385840D Received: by mail-io1-xd2a.google.com with SMTP id ca18e2360f4ac-85ad83ba141so148224539f.2 for ; Thu, 20 Mar 2025 12:27:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498830; x=1743103630; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sS9VPzYNbpEUTIoJJvoqzXtHnzxxIH7Lohhm81QZALg=; b=SaseyVC2/t6Diqw17tVwxu4Xb3ZMBjskqZzhmJ6gjJoxBIYBy6vyzE4mReh6llwDhJ +Umr75lRZHLflO8TdRU6rJBV69aOJdq5IV/FyuGPxXvNV5gB+AYew0m8ACkLATvukThD GLzFad4cPILHnx7Mr86QJ8uy+gqU+nxLfS6bYhjCs1dqFEX7ik8utaIvB7eMlo843g/Y 4T5095nE08uzzk+fW2on0temCn5FCJhxic9JKyCTkrfc3jTvil59X/MDc7LJPVWPLZ91 dqKxDutzoYnrqALkyU/gMSB2URLQVPqdCER3Q0vmzBfjm31Nb2oaw30CU3kiJ9jG1/ND /SsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498830; x=1743103630; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sS9VPzYNbpEUTIoJJvoqzXtHnzxxIH7Lohhm81QZALg=; b=bXsHhNItAgT+QSmfmGnoJORuGPi6h5hz9O4tuUltxJj3SKQKXD3R0RgVqZbY1AWInb 6JOVp0SHASgKq2BRPIE3//R+YdciPJlvOpx72+UtnOZqNStu73pL/gDQrAs3LzNBoORR OkJKBCKKauoABrkBGzMmGIkRi+6GGzLt9sxbRe8sizPxGvoNjSsVNXGl5E9M4FYPCcjs 3M/O2iUMnob/GanBXoeU1ePjvxWSTU7XVhb2nMa7yuEzuidujd84THLG3Fu83I9/SGLd fPstztNegm7etP3zthBdleTXJSnzfCe1SCM7pOUVeg/DQARQpcmMgV2yh8c8Gz5cqoEU FzYw== X-Gm-Message-State: AOJu0YzwqSxzM8q+IptTI1jQl25S7W4xwo5WdgjkWxknG6sdG6kLwSFS 69ma0kx+VLInT1n7hHVfKOs/PnC8nfug0sMzBvAUi4Sm4ogv28I769+IVWJMNA== X-Gm-Gg: ASbGncvaG9yEzNbLKBiCsdW5nR00tbcPcGKCmY+C55GvWYllXyaAOPgcG+U7InA3S+y urKQGXmIqWBYHSXAJcqAV6VOKaOlzTSf/yPfnFZkHTyJFDgcpBRfsmOj1hLXY2RDfJSZLmm6k2+ SV5QdFeiomyGsc2NAniDhGRWs8ityYfHiXZ3Ba0yhpOXCDcXElSnPLys30Jash1oZ1tI2X/NyKp yeHj7gqQFFLkorhXcmWCn0LGPv4q2Jb/uCaWnPFhPi2VF8jsbVQRMVpwLDt51dWoRW5xnup3QzG NmIh/iKu0nB4ALOR3ilt/cGEFlQEcgMWMX+96WUtk11NCqBiB3PEadC56YsMCIaI/1sCkJVbWNx 5648B4Xwv X-Google-Smtp-Source: AGHT+IEKMgy8W6nMVMxBXV3K6avGlk8QhGtJ9iRjetQ0hkLRughq4ix4+o1u0Eu1SvXefhl1kRGTTA== X-Received: by 2002:a05:6602:36c4:b0:85b:5494:5519 with SMTP id ca18e2360f4ac-85e2ca6fff3mr59233639f.5.1742498830270; Thu, 20 Mar 2025 12:27:10 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:09 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:05 -0600 Subject: [PATCH 09/13] Use correct sign for variant part discriminants MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-9-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org The discriminant value for a variant part may be signed or unsigned, depending on the type of the variant. This patch changes the DWARF reader to delay interpretation of the relevant attribute until the signed-ness is known. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index e6ab3c8b596f3fc1c627efd6e9e7146fb40a3575..6bfdac82e08f32f9d9172ee8f16a27a0a1f0f6f9 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -622,15 +622,21 @@ struct variant_field /* A variant can contain other variant parts. */ std::vector variant_parts; - /* If we see a DW_TAG_variant, then this will be set if this is the - default branch. */ - bool default_branch = false; /* If we see a DW_AT_discr_value, then this will be the discriminant - value. */ - ULONGEST discriminant_value = 0; + value. Just the attribute is stored here, because we have to + defer deciding whether the value is signed or unsigned until the + end. */ + const attribute *discriminant_attr = nullptr; /* If we see a DW_AT_discr_list, then this is a pointer to the list data. */ struct dwarf_block *discr_list_data = nullptr; + + /* If both DW_AT_discr_value and DW_AT_discr_list are absent, then + this is the default branch. */ + bool is_default () const + { + return discriminant_attr == nullptr && discr_list_data == nullptr; + } }; /* This represents a DW_TAG_variant_part. */ @@ -10356,13 +10362,19 @@ convert_variant_range (struct obstack *obstack, const variant_field &variant, { std::vector ranges; - if (variant.default_branch) + if (variant.is_default ()) return {}; if (variant.discr_list_data == nullptr) { - discriminant_range r - = {variant.discriminant_value, variant.discriminant_value}; + ULONGEST value; + + if (is_unsigned) + value = variant.discriminant_attr->unsigned_constant ().value_or (0); + else + value = variant.discriminant_attr->signed_constant ().value_or (0); + + discriminant_range r = { value, value }; ranges.push_back (r); } else @@ -11323,12 +11335,14 @@ handle_variant (struct die_info *die, struct type *type, { discr = dwarf2_attr (die, DW_AT_discr_list, cu); if (discr == nullptr || discr->as_block ()->size == 0) - variant.default_branch = true; + { + /* Nothing to do here -- default branch. */ + } else variant.discr_list_data = discr->as_block (); } else - variant.discriminant_value = discr->constant_value (0); + variant.discriminant_attr = discr; for (die_info *variant_child = die->child; variant_child != NULL; From patchwork Thu Mar 20 19:27:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108653 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5F7743857C5F for ; Thu, 20 Mar 2025 19:35:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5F7743857C5F 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=TSqj2Pzz X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd29.google.com (mail-io1-xd29.google.com [IPv6:2607:f8b0:4864:20::d29]) by sourceware.org (Postfix) with ESMTPS id 428813857C6E for ; Thu, 20 Mar 2025 19:27:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 428813857C6E 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 428813857C6E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d29 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498832; cv=none; b=Teu1TiA2XCXUAEn0qc7CHY9d3CeuUtHLS67RV9582JdoxslxAROZVTdIbQZ+4tBuE24383PmX5RZTZDeftCfY9gog4SweIqqt6Q2gn+bKV2yIdgK01N2lGinU2vAeDo5hN/h+S3r2ID0Glj0OWh8ukdqjSLAO9uvVYZ8+TlDRgw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498832; c=relaxed/simple; bh=FFU//LYsIVCBkUphx3kNSON5vJJouqbsi1A/xOJpHqs=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=GLADQaU+6URWDJHfGTAVUTUcatpudgyZPxXCbpBArZhYefervfA6xKlCSLAPcAF1hcu8W5e0TFX8IbFNwys81aXyZh6R/m7u5Z0sgPvUahgAjSVmqJYSEIXbhy4Dnz7c9AZzrDApE9s4mTr44pGwpE3mwiPWRv8nJ024WK+P7m8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 428813857C6E Received: by mail-io1-xd29.google.com with SMTP id ca18e2360f4ac-85b4170f1f5so32635939f.3 for ; Thu, 20 Mar 2025 12:27:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498831; x=1743103631; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=oTq9ixHvT3heZ5gzuoqb8aRtWPUipK9iKRN1Wkbuptw=; b=TSqj2PzzdBLH7T+I5VN3HvfYR9SWZfx18EzRnhTEn1+mBBXpPjGnvO4uA54DGw1+gm E5rz4t2T6Nm7fEdPvlO/skSKpgDNHgcFVJHgkafsLIKKxdWFVu1+evZ+CemLHONbkaKs SElMhEXE9lXRdOpEb8kpUMq1/tPLknFQxBtkDNOZ7OwnEVONkkM3fj/H5DAf1X858hpU 80NOC+hGqMFfok6G+VWaI5QiZ0JkVsYYImyU4zIosyKPAn0v6Eyc2IKKNJbM/+pqz+7S yBgHvFl2PXq9QE9PElGzo4/ULgJkub6e6t2t2QVH4fM45Wj4S5WWXisFPsFJ+4l/rpHV 2K6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498831; x=1743103631; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oTq9ixHvT3heZ5gzuoqb8aRtWPUipK9iKRN1Wkbuptw=; b=WoVo5aOz/WkF5YRtZylf9shCNDQihutM30+rOSNHMod4ldXWuVF86aIhO3lxvzK18D SAxkdZEhUnaBaNxAdXjtRmlv8Pbb4cVaP6hklYOM8fcfL1+l0+nORkq5Q3Q12XQaEvHV U1Cn103nlGLIKKtZ2QHMe8a9eE/mefsIcaeqm/aY/ygRIyprnEsdhimFHdlndefqHYu8 38Q78l5+pmjE1s/LL8u8KroDgiAwamdadBIvf4fnfamMBZhaJeaHodMv3vovZZEstayT +FdMpAExgjq0s9zj0n5SaSKf63N9qHTeR/ceWNXkOwT4ZH4mBNdpZhjuklzDoi9q5aDh AoJQ== X-Gm-Message-State: AOJu0Yxlv0TE2M/2KilP9+cCpuvK060JiOiAlQYaqRH2hJkPDD12Llns YV1ZMD3EtIx6eh88OqdticpO8p64iGtXVv9Gz14MCoJSjsadUC9vpAaVHHQ7CGdZbWYL9JWdGhI = X-Gm-Gg: ASbGnctepBuAAMzZzDh+86er6Tsw6EINkoaV257CAMXXruUkQ2mcwC4OWOJNNjbQBGq wLGtdYOtU5gfMVVdrafrerQXAuQIZUBIXt4dmMc4MCoFvjO88k7I1w1X6hr9vlV19PIhMxm1lsf ALkhHmFVOiGv/olYhYfSZGOC+KuVyEfoY6oQEMnSAG79keT+GTHywOAwFwoNyhm86XmIMG/2Mgi yVP792UCBko9S3JNnf8V4EM0FrX//UK7V2m6TxPZZ85IHBSGtX1qUdXOoCb9QcYyINyiF6zNyM+ /xuRlKDWdX9HVYt1NUQZfUOZMtCFFBqap9wjRbbIB9rbOW7ameOvf2eU/PPDYSnRohF7jAeiII7 xMQwNOzp0 X-Google-Smtp-Source: AGHT+IGbzVFJCahAslMjUgJhEL3sesn/lG0lYtx+9dLM8LBAs/YG365TeSpKcJqSASSULpH+AQFx1w== X-Received: by 2002:a05:6602:3896:b0:85e:1ee9:1c18 with SMTP id ca18e2360f4ac-85e2cb1dda1mr53901239f.9.1742498831452; Thu, 20 Mar 2025 12:27:11 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:10 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:06 -0600 Subject: [PATCH 10/13] Use attribute::signed_constant in attribute::as_boolean MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-10-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes attribute::as_boolean to use attribute::signed_constant. This is maybe overkill but lets any reasonable constant form through. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/attribute.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gdb/dwarf2/attribute.c b/gdb/dwarf2/attribute.c index 25cf2b62cfd1c8f4981be2787fe4ade8c8c66b81..d3b3eed81bd500bf06dc8c83cab7ae1fa8c17974 100644 --- a/gdb/dwarf2/attribute.c +++ b/gdb/dwarf2/attribute.c @@ -323,5 +323,8 @@ attribute::as_boolean () const return true; else if (form == DW_FORM_flag) return u.unsnd != 0; - return constant_value (0) != 0; + /* Using signed_constant here will work even for the weird case + where a negative value is provided. Probably doesn't matter but + also seems harmless. */ + return signed_constant ().value_or (0) != 0; } From patchwork Thu Mar 20 19:27:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108656 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DBC0A3857B8C for ; Thu, 20 Mar 2025 19:38:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DBC0A3857B8C 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=WWh9+5nC X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd32.google.com (mail-io1-xd32.google.com [IPv6:2607:f8b0:4864:20::d32]) by sourceware.org (Postfix) with ESMTPS id C496C3857B84 for ; Thu, 20 Mar 2025 19:27:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C496C3857B84 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 C496C3857B84 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d32 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498833; cv=none; b=Y57wxFQ1YJH8Z5pBxtaGMhyJVvTV2JVitdhsuDRN7TijZt5Qs9BI/Yd8Pd25BCad+JRphakxhHU/JrVRH1SASf5QgPTU3c3U9yNidLpFVuBvoaLJoeUtFhVVjQg7zAAa7BuLywZNuSvBnYrSsQ2dnfD7DTHEP2zGM7T867eMFDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498833; c=relaxed/simple; bh=4PFYqctlYu+gfi22PxtdD7/qlz7+atChyqi8cHwiflU=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=cpTl1jFmXC3waujqYBqxhtLXBAxKPI2nmOUQJnb0Ds3zcW4XVn/cQ0wJocJQCTopppUn5dp/t8zV2h/TEQtaV7livMCXHwKpM3mJKZ6/TgRXPTFPgT18O6/v591l2JQKmIjMiDJ1FhXuckjTQ6d8cdDrsdbWIstzEyo5HNsnPhc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C496C3857B84 Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-85ad83ba141so148230539f.2 for ; Thu, 20 Mar 2025 12:27:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498833; x=1743103633; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KUBtc54/uzoZ42zmXTM6FvSU2bFy5jWR1slNoJ6qaLQ=; b=WWh9+5nCxuGFdrANUnat/cZZb8YB273Y6FRuErAY2UbM1njiXnvCt+T1gcWVysljaO deUx+fIbm5FQG8lci3vnaqpg7t+G04+95R4Z+KNZYGkinwC/jZ5gUN64+AsXDXzbBiM1 YDYQyrqh3mJHafc3WYCYX9nxhJ5gm0jxe04qynZwbgc+5RS9ltGjVC0lOriJr3+SCJ7N 5ZbIc03UKdYTXL+S2QfbgqOH/XQDNlq7AP7aASRl2K8x5YUD4oMadqDiTIttE34HF3rc ghC79+03YsnReXZhr7aFKc2k6ka85yWqtk7veh3n7t2WtJHcPxu0kHhae8uUf1SS7aNV AKgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498833; x=1743103633; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KUBtc54/uzoZ42zmXTM6FvSU2bFy5jWR1slNoJ6qaLQ=; b=uew4XGbLVlH75qzfGzldvrUX8bIO8ICAwJ9hrG3wLGt6OnCbmVe4R71K08Fh56TMmN fD0xTMRxH7DUEMZU4N9EblAUP/HDwDoC3JIqZg4c9OpLAo9nbqOOTwFtvXiVV5O4l0mp f2MBwp6D0ufV0jPQ7Iv87Km21hvXRf4oM8xkWgpQGHMdXMVV8v5XoGN0A8RXpyjPV7eF +6daU4pjthpXfvBkV8n2WmL1UegSSx4cBL1OLlTLC7PYzCyOXCMnFawwUdRqWxfb9rO3 edrj1/AMLSlDT3QkzRt05CTiNA0VcKOmd8OzPSKwIv6Mk7nPGAkAy4rfolvOJabWCHWz vy5g== X-Gm-Message-State: AOJu0Yw3df8bQeThdPnXAsTFu2etQIiJZxjDhvJ6vPNH27wavkvOJZRF vOMjXKzZiQK4alu6+FiNA7UV6xTIRZqStRSk/dH1gbl+unJRVH9hT16pHq2Y620+l3KLFa3ER6M = X-Gm-Gg: ASbGncv0mh3lGKcYvzaeNV9qsGdxOLmhxRydvxg8fPmQAa238NcnqrZSsNAkVLoU7JI 1BW33TN5C0DF6B8bFLLgoVB0gqLax2xDhfvf4r94u2LbTOjoIYhLJX1hy81rqrdmtspRqqdZksg LdIwFal++g34PtGNl8e1ThEeoMfS4kvSpssLtEsaRNBiDbshSQwSEuAPFOIGX6GYf3uTu+v0kIm e4fHBQfznNIHzp9717rMCGKJIC50hwh0L8H9UaMogh/UDptmtG38caSLPnm8NCvCQR0SXSZe7LH gOe0XWZPsdOlhzxFZWnm3x95Trw6eEBx+tHc6wK9XBWFTDnvt6NP5EdMp3FOOlTIkP1Mh/NjcyT 6dv48teBL+uSmWU6yeHU= X-Google-Smtp-Source: AGHT+IFKgCWFX8v+Ov4QIR1i8FDg1wvg0YEaAEuiRCaCaIOzk4dnDEa8Y7I9BuEHMJMwKiLrKu/ixA== X-Received: by 2002:a05:6602:360c:b0:85b:3c49:8811 with SMTP id ca18e2360f4ac-85e2ca58ccamr65191239f.4.1742498832987; Thu, 20 Mar 2025 12:27:12 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:12 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:07 -0600 Subject: [PATCH 11/13] Remove dead code from dwarf2_const_value_data MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-11-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org dwarf2_const_value_data checks the size of the data like so: if (bits < sizeof (*value) * 8) ... else if (bits == sizeof (*value) * 8) ... else ... However, 'bits' can only be 8, 16, 32, or 64. And, because 'value' is a LONGEST, which is alwasy 64-bit, the final 'else' can never be taken. This patch removes the dead code. And, because this was the only reason for a non-void return value, the return type is changed as well. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 51 ++++++++++++++++----------------------------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 6bfdac82e08f32f9d9172ee8f16a27a0a1f0f6f9..bed3da1c2e456d78ef5a47d4b1cef2ad4c47a033 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -17327,13 +17327,10 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu, list was that this is unspecified. We choose to always zero-extend because that is the interpretation long in use by GCC. */ -static gdb_byte * -dwarf2_const_value_data (const struct attribute *attr, struct obstack *obstack, - struct dwarf2_cu *cu, LONGEST *value, int bits) +static void +dwarf2_const_value_data (const struct attribute *attr, LONGEST *value, + int bits) { - struct objfile *objfile = cu->per_objfile->objfile; - enum bfd_endian byte_order = bfd_big_endian (objfile->obfd.get ()) ? - BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE; LONGEST l = attr->constant_value (0); if (bits < sizeof (*value) * 8) @@ -17341,16 +17338,8 @@ dwarf2_const_value_data (const struct attribute *attr, struct obstack *obstack, l &= ((LONGEST) 1 << bits) - 1; *value = l; } - else if (bits == sizeof (*value) * 8) - *value = l; else - { - gdb_byte *bytes = (gdb_byte *) obstack_alloc (obstack, bits / 8); - store_unsigned_integer (bytes, bits / 8, byte_order, l); - return bytes; - } - - return NULL; + *value = l; } /* Read a constant value from an attribute. Either set *VALUE, or if @@ -17435,16 +17424,16 @@ dwarf2_const_value_attr (const struct attribute *attr, struct type *type, converted to host endianness, so we just need to sign- or zero-extend it as appropriate. */ case DW_FORM_data1: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 8); + dwarf2_const_value_data (attr, value, 8); break; case DW_FORM_data2: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 16); + dwarf2_const_value_data (attr, value, 16); break; case DW_FORM_data4: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 32); + dwarf2_const_value_data (attr, value, 32); break; case DW_FORM_data8: - *bytes = dwarf2_const_value_data (attr, obstack, cu, value, 64); + dwarf2_const_value_data (attr, value, 64); break; case DW_FORM_sdata: @@ -18651,31 +18640,23 @@ dwarf2_fetch_constant_bytes (sect_offset sect_off, zero-extend it as appropriate. */ case DW_FORM_data1: type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 8); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); + dwarf2_const_value_data (attr, &value, 8); + result = write_constant_as_bytes (obstack, byte_order, type, value, len); break; case DW_FORM_data2: type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 16); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); + dwarf2_const_value_data (attr, &value, 16); + result = write_constant_as_bytes (obstack, byte_order, type, value, len); break; case DW_FORM_data4: type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 32); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); + dwarf2_const_value_data (attr, &value, 32); + result = write_constant_as_bytes (obstack, byte_order, type, value, len); break; case DW_FORM_data8: type = die_type (die, cu); - result = dwarf2_const_value_data (attr, obstack, cu, &value, 64); - if (result == NULL) - result = write_constant_as_bytes (obstack, byte_order, - type, value, len); + dwarf2_const_value_data (attr, &value, 64); + result = write_constant_as_bytes (obstack, byte_order, type, value, len); break; case DW_FORM_sdata: From patchwork Thu Mar 20 19:27:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108658 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CCA78385841E for ; Thu, 20 Mar 2025 19:39:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CCA78385841E 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=L3Ss7ozl X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by sourceware.org (Postfix) with ESMTPS id 099543857C7F for ; Thu, 20 Mar 2025 19:27:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 099543857C7F 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 099543857C7F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498835; cv=none; b=Fp8hV2+Zlppq05zW1oO6a8IjtOTk//P1urepLoeBAtr79bX3TiouHUC+LPUVMbp8BEY1KONrxGV/a09S1TCXZigH6BTW+vou/S5Anh//8WH0ngSjRUGPkjnY+4kZel9QiF8rG+3nsUZGByEd27bx1VArl9MPHA/wz5GgJ2ChWDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498835; c=relaxed/simple; bh=eiMzA2ZmysDSCoaQyslkqOTCOWS4J1hjGNZNMlaP/yg=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=wqFhC7nXt2wF7VnRrranvzOWUyk8j4paFWfnQa7rSApKPeoQFeIUU/GuDjNljgpZpQ6koGJ7EGXqMNL6hWAMySoyc4YMLoKTK4+dFCK8XUD95c1wdu7vGvoxsPinQL55hmKP4iV1yS2JoXo6RDuVgag4OFHNMiWL+KFOGtGym2c= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 099543857C7F Received: by mail-io1-xd2a.google.com with SMTP id ca18e2360f4ac-85517db52a2so20147939f.3 for ; Thu, 20 Mar 2025 12:27:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498834; x=1743103634; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=y+Yp8YJnaQAZ0qz676+a6BKgkb3p42MmmCL5SMXUqLk=; b=L3Ss7ozlEhnIe0FP61jWLM2Fi6MjKudVWjzydxp68+o8SXHUggRSpFLhCHOBh5HfH3 xyuKAdM4KMo1Icjw78gUbDWSrlpU6Qyow1qZtiaBBDucI7d1qeffQy5EVu8b0GDyl5po 4qiqr2cWo0lBdrEMk5JLXi7652Zc1FlWsCfjKkiaSjHkn/bN5Ae3X9QZKGpNSCk5I0hs OO5rC36suRIT2B9k57LNjRbtW4oi0/fOMVjiLGgZQ5ZiECP4WTkanA+8/5wWoZNwRZTs m3msuCbdZ/6daQsTTipBICSMM09Y+pXry7SwreYglEYAnwF0qsBwjrmQajdmEkv0qZz5 IMqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498834; x=1743103634; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y+Yp8YJnaQAZ0qz676+a6BKgkb3p42MmmCL5SMXUqLk=; b=lP310utmcV4N5cr4rQHTosvqHojM2sY0zxoWNm0ez2esbt1ImEFHpRnnBUwJMG4sVI b6qcRzo4Pj2Fxlel0qEAVowNxwueKRTWnhvAJ1MfDpWmW5kCjT65714SOxFHBm7hh9YO C8U/IGb3q7mU11Ygj8YFRd/0FmiltBL58jMFwlqibYG7nLQT5WSR5UjN2mygEGPOO4hm rAn8U0SYSpOAmH8ItpRSxeCQigjsr4OPKGLpsukdjKI8Tr0ivJxSU5pEDempMnNKXthA XyTJi9NELGv1pT7RKzWhYvy9vtBJPcobLQaSUFHuv/Y0unaHovVvA+Z3P1JjHZYYNCGU zd0w== X-Gm-Message-State: AOJu0YwrlIpUTKRD1dglgdn1SJeBv/M5UkYzLfyKRrNc6QVeDQSVBoiC JRiXWByfSN6P9N2hY81bCZk7ET/fdgTi43SSDGjZ4HEG02+jEnNlaczORpoSgA== X-Gm-Gg: ASbGncuNLgyLctynkQ9cSr5uMd63J+0VK/zvCvLelK2bfnc3yikw82Vk4fBtjoZ0uPb v8PnYfzcF3qgQtX2G0cbwGOMvYu6dDLyXmVla0DVqjgnatoHaecG5f3QTsGXuZGCAMoDqReKHF0 iRwE0A+q+1DoethTs/Hv7jDzy68RhIR6iBuwgNzX+vy+wrWyeLAnIMk1Pqty9zF6sJzd6VWy6XG yZQNAKJzxBYePEUktvz+COOx2L8xy3pW6XSk0/aTWHAkZqrMX280NtAySKdUcAaUYsz+hTmXsZ9 egpJA/1EpAbS1NjhNeWJqdt0HJjkHLsG0TeJj/mP8LNtwnMLklUbUkUEVUgEBkgMpqoDpDk50DJ RYtaR7dBw X-Google-Smtp-Source: AGHT+IGifmRaN3ehQO+/d+//kFWQRFxl+t0jnAiWpp2DcJJNyHvEge22t5ybULp4qPSzEjepoDxS1w== X-Received: by 2002:a05:6602:1496:b0:85e:181e:1bd3 with SMTP id ca18e2360f4ac-85e2ca2d20dmr50388139f.1.1742498834307; Thu, 20 Mar 2025 12:27:14 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:13 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:08 -0600 Subject: [PATCH 12/13] Use bool in update_enumeration_type_from_children MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-12-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This is just a small preliminary cleanup to use 'bool' in update_enumeration_type_from_children. --- gdb/dwarf2/read.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index bed3da1c2e456d78ef5a47d4b1cef2ad4c47a033..c8f78571d701e68735bf11c436721666860e87e4 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -11688,8 +11688,8 @@ update_enumeration_type_from_children (struct die_info *die, struct dwarf2_cu *cu) { struct die_info *child_die; - int unsigned_enum = 1; - int flag_enum = 1; + bool unsigned_enum = true; + bool flag_enum = true; auto_obstack obstack; std::vector fields; @@ -11719,13 +11719,13 @@ update_enumeration_type_from_children (struct die_info *die, &value, &bytes, &baton); if (value < 0) { - unsigned_enum = 0; - flag_enum = 0; + unsigned_enum = false; + flag_enum = false; } else { if (count_one_bits_ll (value) >= 2) - flag_enum = 0; + flag_enum = false; } struct field &field = fields.emplace_back (); @@ -11736,7 +11736,7 @@ update_enumeration_type_from_children (struct die_info *die, if (!fields.empty ()) type->copy_fields (fields); else - flag_enum = 0; + flag_enum = false; if (unsigned_enum) type->set_is_unsigned (true); From patchwork Thu Mar 20 19:27:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 108654 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 542143858031 for ; Thu, 20 Mar 2025 19:36:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 542143858031 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=iORfvjxy X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd33.google.com (mail-io1-xd33.google.com [IPv6:2607:f8b0:4864:20::d33]) by sourceware.org (Postfix) with ESMTPS id BB1AA3857BA5 for ; Thu, 20 Mar 2025 19:27:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BB1AA3857BA5 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 BB1AA3857BA5 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d33 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498836; cv=none; b=oGG8W06Ure+Bx2L+sdUw9Q8rXfyNUccTspha+OvjeA8mN0cZ6iTrs1zdLS1jOHWSwBiXYVT1OI/3djlWKqidcfUW62S+NI6eGmpdS6UatZFNM5DrDnZgkorL5hycVxxxiEWv9XVKBoDjO3hKTExBitxFwImmud65Isz+KjPLfEs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742498836; c=relaxed/simple; bh=chT/TB3h5rJXNjgcR4dlSuwKFE/Zi/a/61PXmWOASTY=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=k2OqSpvz3D8Q+0fN9RoEr4KXGrfQQX4Dhff0gz98lc/m0BjZw347d3ezDN0LjTT3BE7ANUrTg83MaDNnJBMUcKfFP+kYKUpzAEDqIby3f/RgSIPt+YwwzIWQFJmLsxGYa7p0Qw6KN40tt4ShrpDGtdZaXM1+lDKNJrljjZ04FPQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BB1AA3857BA5 Received: by mail-io1-xd33.google.com with SMTP id ca18e2360f4ac-85db7a3da71so83504839f.1 for ; Thu, 20 Mar 2025 12:27:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1742498836; x=1743103636; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=MUme2Nrl/KhFXCZZtI2eQdfEHTXNYbeodxtT8L49XOs=; b=iORfvjxybrvI75w4dMjuhcF7KUem2hJ4kJJHXac54bYkUnwF3drzXdHNZUPTMtt2AJ LCCBIbdhq6Z4Up6ZWuS8xL2u81xoBAe5HdF+AN+wrehqOOtNJwqslk2UF7qZSvSBkocD Xw3n84YNP725LUYtrwL8RRFcRuEBfAqmL2vX7BS6+A82gB/W9Rfu8ZNtL5O8GnP1dgrh 1DcjIY1xKDG4M2pkMx40ZecZ2CGEh9YOU/3mztHIxbYm9IxhrvEAQ7gFPZIGyY3EiMQg FlZnYmix+ouF53M9LoHh/Bk6VMTkY6novbGXrGx9Fw718DIyTvkSWgRy6Yo52EtNumdB uZMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742498836; x=1743103636; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MUme2Nrl/KhFXCZZtI2eQdfEHTXNYbeodxtT8L49XOs=; b=DtHOUoYjp1M1ALarbA3tTYGERT7JVhmY6rfwPP7bYlAc/FET/Wfd1n/dGXktLlM5Zp MPIkO3xlx4EhMOYvfV7BnlV/m+9qOpmdhpiNL/FKOibfqH47eDJN/bxOrh6LAhB4AoBr FqLz5dUBD04TRFwaYJxKsZY1Z2baW4f6pQNQ44MEp/D/xFhVP5rtY3p5Hn7wtvGtG2A0 My67aL90Dsh8H5X2T5ILOVgmzJuKXCcUxOeK1dtzaR+oVkurqnd0xHjMyXDx2jriRpS4 +gegVxUxRlx7Oa2xxs+ye1lhSijN9bAFTwyh1G68E7qWTnwG7BzMjNOhpIyRESoffRIN fmlA== X-Gm-Message-State: AOJu0YxcCUNYUd0CrzqjSVyr2R1AJpZokqQDPFhqZnUWVBoSG5vo38fB T1mKX+EM6MUh9uylrYtroxLTgCBkxKsu+tLcryswsp2QZLZ9fYsOsPcl+JVNZQ== X-Gm-Gg: ASbGncu2O94AOMO/eXNFvpg+v5rEBtF/qnmgX7ZUHaBS5Bl7zN34bLpYYDMn+isOKuW QuG+eANrhvJKiJ73Tst/44sgPUTA8yJytWbJGJDKfhWS4TsjJBe98ds2XMNA0Hde7vmxEeEtmxR Up7DP6O+fRBHcoNOCT+Tx/1P/WxAqwDSXIs/uGcR7sbNMsZOGlbEVAd0/0YmU25AINexLzy9Nds tGVs/nZEX4yUf8sw1T5yTfqWoEta+CboMXhKN01hlmOZAsWNDvEEN6bdgvUI4WzDh6zcQ03sEkR Mpavr6xzrpyXWa6vXnZusBmC/JcLFcgUTm7prbSlPnC/r34IbWz1nAqPquNA/QenEHksdtLbYi4 ZnzAA3qNM X-Google-Smtp-Source: AGHT+IExxZrr0UjFi2dAYEgpI5ThF+kcVe37TWRc25hsO+MdOcMvnfnHMKblzCx4MY9kWCswhGrKPQ== X-Received: by 2002:a05:6602:3f08:b0:85d:a5d3:618c with SMTP id ca18e2360f4ac-85e2cb59310mr44442239f.11.1742498835976; Thu, 20 Mar 2025 12:27:15 -0700 (PDT) Received: from localhost.localdomain (97-122-123-18.hlrn.qwest.net. [97.122.123.18]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-85e2bc6ab31sm8285939f.22.2025.03.20.12.27.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Mar 2025 12:27:14 -0700 (PDT) From: Tom Tromey Date: Thu, 20 Mar 2025 13:27:09 -0600 Subject: [PATCH 13/13] Use correct sign extension for enumeration types MIME-Version: 1.0 Message-Id: <20250320-attribute-madness-v1-13-79d42789f881@adacore.com> References: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> In-Reply-To: <20250320-attribute-madness-v1-0-79d42789f881@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.2 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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: 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~patchwork=sourceware.org@sourceware.org This changes update_enumeration_type_from_children to use the correct sign-extension method on the attribute. The logic here is a bit complicated: if the enum has an underlying type, then we use that type's signed-ness to interpret attributes; otherwise we must assume attributes are encoded as signed values. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32680 --- gdb/dwarf2/read.c | 59 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index c8f78571d701e68735bf11c436721666860e87e4..1126b6a3bec826b5d85b8587d0e9c616d723acc9 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -11680,18 +11680,25 @@ die_byte_order (die_info *die, dwarf2_cu *cu, enum bfd_endian *byte_order) /* Assuming DIE is an enumeration type, and TYPE is its associated type, update TYPE using some information only available in DIE's - children. In particular, the fields are computed. */ + children. In particular, the fields are computed. If IS_UNSIGNED + is set, the enumeration type's sign is already known (a true value + means unsigned), and so examining the constants to determine the + sign isn't needed; when this is unset, the enumerator constants are + read as signed values. */ static void update_enumeration_type_from_children (struct die_info *die, struct type *type, - struct dwarf2_cu *cu) + struct dwarf2_cu *cu, + std::optional is_unsigned) { struct die_info *child_die; - bool unsigned_enum = true; + /* This is used to check whether the enum is signed or unsigned; for + simplicity, it is always correct regardless of whether + IS_UNSIGNED is set. */ + bool unsigned_enum = is_unsigned.value_or (true); bool flag_enum = true; - auto_obstack obstack; std::vector fields; for (child_die = die->child; @@ -11700,8 +11707,6 @@ update_enumeration_type_from_children (struct die_info *die, { struct attribute *attr; LONGEST value; - const gdb_byte *bytes; - struct dwarf2_locexpr_baton *baton; const char *name; if (child_die->tag != DW_TAG_enumerator) @@ -11715,19 +11720,26 @@ update_enumeration_type_from_children (struct die_info *die, if (name == NULL) name = ""; - dwarf2_const_value_attr (attr, type, name, &obstack, cu, - &value, &bytes, &baton); - if (value < 0) - { - unsigned_enum = false; - flag_enum = false; - } + /* Can't check UNSIGNED_ENUM here because that is + optimistic. */ + if (is_unsigned.has_value () && *is_unsigned) + value = attr->unsigned_constant ().value_or (0); else { - if (count_one_bits_ll (value) >= 2) - flag_enum = false; + /* Read as signed, either because we don't know the sign or + because we know it is definitely signed. */ + value = attr->signed_constant ().value_or (0); + + if (value < 0) + { + unsigned_enum = false; + flag_enum = false; + } } + if (flag_enum && count_one_bits_ll (value) >= 2) + flag_enum = false; + struct field &field = fields.emplace_back (); field.set_name (dwarf2_physname (name, child_die, cu)); field.set_loc_enumval (value); @@ -11738,11 +11750,8 @@ update_enumeration_type_from_children (struct die_info *die, else flag_enum = false; - if (unsigned_enum) - type->set_is_unsigned (true); - - if (flag_enum) - type->set_is_flag_enum (true); + type->set_is_unsigned (unsigned_enum); + type->set_is_flag_enum (flag_enum); } /* Given a DW_AT_enumeration_type die, set its type. We do not @@ -11800,6 +11809,11 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) if (die_is_declaration (die, cu)) type->set_is_stub (true); + /* If the underlying type is known, and is unsigned, then we'll + assume the enumerator constants are unsigned. Otherwise we have + to assume they are signed. */ + std::optional is_unsigned; + /* If this type has an underlying type that is not a stub, then we may use its attributes. We always use the "unsigned" attribute in this situation, because ordinarily we guess whether the type @@ -11812,7 +11826,8 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) struct type *underlying_type = type->target_type (); underlying_type = check_typedef (underlying_type); - type->set_is_unsigned (underlying_type->is_unsigned ()); + is_unsigned = underlying_type->is_unsigned (); + type->set_is_unsigned (*is_unsigned); if (type->length () == 0) type->set_length (underlying_type->length ()); @@ -11832,7 +11847,7 @@ read_enumeration_type (struct die_info *die, struct dwarf2_cu *cu) Note that, as usual, this must come after set_die_type to avoid infinite recursion when trying to compute the names of the enumerators. */ - update_enumeration_type_from_children (die, type, cu); + update_enumeration_type_from_children (die, type, cu, is_unsigned); return type; }