From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2063.outbound.protection.outlook.com [40.107.96.63]) by sourceware.org (Postfix) with ESMTPS id A171C3888C58 for ; Fri, 18 Mar 2022 14:28:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A171C3888C58 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kchrvq5jHbpyVlZ4D03JujzD2D5fISIKb9h3kf6DM9PWAmQ2EHkTEhw+gJqrm8I5J/byBQEa0yf4G3VDX/Kg+fPXcQIabu8o9q1jY0HFUXTDfrq89zHWsOImklQjmRzkcmlDsIViZvzsxHksf+Six/eR3aB7jjT2Y5e39am/SKFb5eOM6VNgTozllxzQB5c/p31+qhejGWQBJLw/7x+mlWVnVNpmyQgx5OGbEjymdEMQKBMMA6JxnIpDN6o8Uow8PhKyFgKBxyuNWBcUzK1LnJS1H1qhhz73CHWy4U2Ybr9tzjz5TNLYJqvVpbqZKKam24w2Qb+TMXeQQRCW6fOdiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=i2N1p71VP4v/STvKJM6P2pP0ruG+hDCD48ARengLMRw=; b=ko5zKbkDZm9JOFO3wnDOHaplKk0ssqSkFe5V1Rh+1YfmrarVJWFpH3uDNOfNc4KoPPu9+W2p0hRvpIriqlwE7V3PzPNKfGa4GPGFOTb/KXUzIVunSa2sTo55jvplo5ffQNINfC78zFUr5rTz5Q+4NGpiviyrBoycNtIUoYNM3VYzwEq0rWvXTWQAXbsbdu/jvejRZSZKvqhRfHeUUQTBal6hOFiVWlhcP1SxGJ4EluB4cN3+9eslbhz2dwoI9csMXCsYTyrjCBQECLAA8REQhax1HBeQlrhaCKpRAOFq23qkSWdYGWgu5JB0PRkAbpaEib1UcFF729A2UGoQKaeilg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=sourceware.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none Received: from DM6PR05CA0048.namprd05.prod.outlook.com (2603:10b6:5:335::17) by MN2PR12MB3968.namprd12.prod.outlook.com (2603:10b6:208:16f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.15; Fri, 18 Mar 2022 14:28:36 +0000 Received: from DM6NAM11FT050.eop-nam11.prod.protection.outlook.com (2603:10b6:5:335:cafe::22) by DM6PR05CA0048.outlook.office365.com (2603:10b6:5:335::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.14 via Frontend Transport; Fri, 18 Mar 2022 14:28:36 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; Received: from SATLEXMB04.amd.com (165.204.84.17) by DM6NAM11FT050.mail.protection.outlook.com (10.13.173.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5081.14 via Frontend Transport; Fri, 18 Mar 2022 14:28:35 +0000 Received: from khazad-dum.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 18 Mar 2022 09:28:34 -0500 From: Lancelot SIX To: CC: , Lancelot SIX Subject: [PATCH 1/2] gdb/buildsym: Line record use a record flag Date: Fri, 18 Mar 2022 14:27:32 +0000 Message-ID: <20220318142733.1097657-2-lancelot.six@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220318142733.1097657-1-lancelot.six@amd.com> References: <20220318142733.1097657-1-lancelot.six@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1a47c2b-6b19-4d9a-279f-08da08eb966f X-MS-TrafficTypeDiagnostic: MN2PR12MB3968:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0d9rh3Q9VkfPqXzY1AU6bqAEV8EgtiW4ZTwQ1VCbU1Iq5xHairLfCVOEPzEzmsqBG9uyuzKfqA6a89IfbcO4dzd5yOR8mDuxn8tt8VNpOpWBRjVbCJp7CcNkBk07je7Tz+JcOg1mnb+xUADLxxr94imlh1a82NpvITQ1rk3OYZtnfXWgyX5DWFP11R5TsN1TRUNfvbBPZ3wD9TF0Hb3FXGSKJ6X5Umj47/EKkBW5wg6loWoTqVxPNtNeDhBFq60F4rlonEeTupSk7kaWT/yRIecKHLfzTSr2wrYVqzHAFTmoIL7kup580OXnYw11oVLgK85KweFP2zOhetUXDjQ70465vtb6LWGigjmsUdTxjm9Mqaz2b+0//huO+/OW//qnOmbtOmpJ36mU4xF+2/M3eF9tNDRwXxsLh1kAzldplBA5DxO3jjXKBDVkZ6xV/khm+39YqpByzGa0k5htRYQsu0nkJTfRJBfB5d+A2ldxA6PwFXw9jf3rLsyKgrRW9V1SMrpgiO8xdX0ZjuA57pKO87spkOs5ozUbmBLyVRaZKOp4pD7Tlmcq2Yl9mP7wn29PMfsTGb6qs5PGneFDKPUghW4/+xIuW+YPfOMpzRYFxzmUbtoaO6BlfSM57I0V6gXODQ4i8NDVNMnacgZfgV2VELT0pMhS9+twslqi8e3TMCfidsRBgAVqJn57i7hNHnA9xI1Ek7zia/sWi4e9zsH/Pw== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230001)(4636009)(40470700004)(46966006)(36840700001)(8676002)(82310400004)(7696005)(336012)(40460700003)(2616005)(1076003)(426003)(26005)(186003)(16526019)(2906002)(4326008)(8936002)(47076005)(508600001)(86362001)(83380400001)(81166007)(5660300002)(36860700001)(70206006)(70586007)(54906003)(6916009)(316002)(356005)(36756003)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2022 14:28:35.9456 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d1a47c2b-6b19-4d9a-279f-08da08eb966f X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT050.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3968 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, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Mar 2022 14:28:41 -0000 Currently when recording a line entry (with buildsym_compunit::record_line), a boolean argument argument is used indicate that the is_stmt flag should be se for this particular record. A later commit will add support for new flags to associate with line table entries. Instead of adding a parameter to record_line for each possible flag, transform the current is_stmt parameter into a enum flag which fill support all required flags. This enum flags type is not propagated into the linetable_entry type as this would require a lot of changes across the codebase for no practical gain (it currently uses a bitfield where each interesting flag only occupy 1 bit in the structure). Tested on x86_64-linux, no regression observed. Change-Id: I5d061fa67bdb34918742505ff983d37453839d6a --- gdb/buildsym-legacy.c | 2 +- gdb/buildsym.c | 4 ++-- gdb/buildsym.h | 11 ++++++++++- gdb/dwarf2/read.c | 37 ++++++++++++++++++++++--------------- 4 files changed, 35 insertions(+), 19 deletions(-) diff --git a/gdb/buildsym-legacy.c b/gdb/buildsym-legacy.c index 7659f53cbe0..53cd3bd865b 100644 --- a/gdb/buildsym-legacy.c +++ b/gdb/buildsym-legacy.c @@ -254,7 +254,7 @@ record_line (struct subfile *subfile, int line, CORE_ADDR pc) gdb_assert (buildsym_compunit != nullptr); /* Assume every line entry is a statement start, that is a good place to put a breakpoint for that line number. */ - buildsym_compunit->record_line (subfile, line, pc, true); + buildsym_compunit->record_line (subfile, line, pc, LEF_IS_STMT); } /* Start a new symtab for a new source file in OBJFILE. Called, for example, diff --git a/gdb/buildsym.c b/gdb/buildsym.c index 999f632f401..a875eb5ce38 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -667,7 +667,7 @@ buildsym_compunit::pop_subfile () void buildsym_compunit::record_line (struct subfile *subfile, int line, - CORE_ADDR pc, bool is_stmt) + CORE_ADDR pc, linetable_entry_flags flags) { struct linetable_entry *e; @@ -723,7 +723,7 @@ buildsym_compunit::record_line (struct subfile *subfile, int line, e = subfile->line_vector->item + subfile->line_vector->nitems++; e->line = line; - e->is_stmt = is_stmt ? 1 : 0; + e->is_stmt = (flags & LEF_IS_STMT) != 0; e->pc = pc; } diff --git a/gdb/buildsym.h b/gdb/buildsym.h index 003d8a59719..09c2d563ec9 100644 --- a/gdb/buildsym.h +++ b/gdb/buildsym.h @@ -110,6 +110,15 @@ struct context_stack }; +/* Flags associated with a linetable entry. */ + +enum linetable_entry_flag : unsigned +{ + LEF_IS_STMT = 1 << 1, +}; +DEF_ENUM_FLAGS_TYPE (enum linetable_entry_flag, linetable_entry_flags); + + /* Buildsym's counterpart to struct compunit_symtab. */ struct buildsym_compunit @@ -188,7 +197,7 @@ struct buildsym_compunit const char *pop_subfile (); void record_line (struct subfile *subfile, int line, CORE_ADDR pc, - bool is_stmt); + linetable_entry_flags flags); struct compunit_symtab *get_compunit_symtab () { diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 10550336063..e470fc6fd5d 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -20883,7 +20883,7 @@ class lnp_state_machine /* Handle DW_LNS_negate_stmt. */ void handle_negate_stmt () { - m_is_stmt = !m_is_stmt; + m_flags ^= LEF_IS_STMT; } /* Handle DW_LNS_const_add_pc. */ @@ -20942,7 +20942,7 @@ class lnp_state_machine /* These are initialized in the constructor. */ CORE_ADDR m_address; - bool m_is_stmt; + linetable_entry_flags m_flags; unsigned int m_discriminator; /* Additional bits of state we need to track. */ @@ -20957,9 +20957,9 @@ class lnp_state_machine CORE_ADDR m_last_address; /* Set to true when a previous line at the same address (using - m_last_address) had m_is_stmt true. This is reset to false when a - line entry at a new address (m_address different to m_last_address) is - processed. */ + m_last_address) had LEF_IS_STMT set in m_flags. This is reset to false + when a line entry at a new address (m_address different to + m_last_address) is processed. */ bool m_stmt_at_address = false; /* When true, record the lines we decode. */ @@ -21089,7 +21089,8 @@ dwarf_record_line_p (struct dwarf2_cu *cu, static void dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile, - unsigned int line, CORE_ADDR address, bool is_stmt, + unsigned int line, CORE_ADDR address, + linetable_entry_flags flags, struct dwarf2_cu *cu) { CORE_ADDR addr = gdbarch_addr_bits_remove (gdbarch, address); @@ -21103,7 +21104,7 @@ dwarf_record_line_1 (struct gdbarch *gdbarch, struct subfile *subfile, } if (cu != nullptr) - cu->get_builder ()->record_line (subfile, line, addr, is_stmt); + cu->get_builder ()->record_line (subfile, line, addr, flags); } /* Subroutine of dwarf_decode_lines_1 to simplify it. @@ -21126,7 +21127,7 @@ dwarf_finish_line (struct gdbarch *gdbarch, struct subfile *subfile, paddress (gdbarch, address)); } - dwarf_record_line_1 (gdbarch, subfile, 0, address, true, cu); + dwarf_record_line_1 (gdbarch, subfile, 0, address, LEF_IS_STMT, cu); } void @@ -21139,7 +21140,8 @@ lnp_state_machine::record_line (bool end_sequence) " address %s, is_stmt %u, discrim %u%s\n", m_line, m_file, paddress (m_gdbarch, m_address), - m_is_stmt, m_discriminator, + (m_flags & LEF_IS_STMT) != 0, + m_discriminator, (end_sequence ? "\t(end sequence)" : "")); } @@ -21174,7 +21176,8 @@ lnp_state_machine::record_line (bool end_sequence) = m_last_subfile != m_cu->get_builder ()->get_current_subfile (); bool ignore_this_line = ((file_changed && !end_sequence && m_last_address == m_address - && !m_is_stmt && m_stmt_at_address) + && ((m_flags & LEF_IS_STMT) == 0) + && m_stmt_at_address) || (!end_sequence && m_line == 0)); if ((file_changed && !ignore_this_line) || end_sequence) @@ -21185,7 +21188,9 @@ lnp_state_machine::record_line (bool end_sequence) if (!end_sequence && !ignore_this_line) { - bool is_stmt = producer_is_codewarrior (m_cu) || m_is_stmt; + linetable_entry_flags lte_flags = m_flags; + if (producer_is_codewarrior (m_cu)) + lte_flags |= LEF_IS_STMT; if (dwarf_record_line_p (m_cu, m_line, m_last_line, m_line_has_non_zero_discriminator, @@ -21194,7 +21199,7 @@ lnp_state_machine::record_line (bool end_sequence) buildsym_compunit *builder = m_cu->get_builder (); dwarf_record_line_1 (m_gdbarch, builder->get_current_subfile (), - m_line, m_address, is_stmt, + m_line, m_address, m_flags, m_currently_recording_lines ? m_cu : nullptr); } m_last_subfile = m_cu->get_builder ()->get_current_subfile (); @@ -21203,14 +21208,14 @@ lnp_state_machine::record_line (bool end_sequence) } } - /* Track whether we have seen any m_is_stmt true at m_address in case we + /* Track whether we have seen any IS_STMT true at m_address in case we have multiple line table entries all at m_address. */ if (m_last_address != m_address) { m_stmt_at_address = false; m_last_address = m_address; } - m_stmt_at_address |= m_is_stmt; + m_stmt_at_address |= (m_flags & LEF_IS_STMT) != 0; } lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, @@ -21228,7 +21233,9 @@ lnp_state_machine::lnp_state_machine (struct dwarf2_cu *cu, gdbarch *arch, and also record it in case it needs it. This is currently used by MIPS code, cf. `mips_adjust_dwarf2_line'. */ m_address = gdbarch_adjust_dwarf2_line (arch, 0, 0); - m_is_stmt = lh->default_is_stmt; + m_flags = 0; + if (lh->default_is_stmt) + m_flags |= LEF_IS_STMT; m_discriminator = 0; m_last_address = m_address; -- 2.25.1