From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2075.outbound.protection.outlook.com [40.107.244.75]) by sourceware.org (Postfix) with ESMTPS id EB806393A43E for ; Mon, 1 Mar 2021 14:47:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org EB806393A43E ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g+UY46/tS3MT2/hfwjxC0SI/payB8nGBuVikJLqALgNWocv641ne8qL17oKmnjH4KmK2488TYsbBVwWIXNBHrUNDhmA8qA3XlGI4dj4Bqd/8hoOBKwaQ/KE5ss+86au2C44KciJ+FckJOxOYgCvHI/JbLgSPXkcnw0qqU5SV2wjaGJ4ybzLzVVB6G/qHIzf/CG8YRQ1HdKUyh63xCMyc8zXFTHgT7YxAIiNe171wn7iknUMBrHxmvjaWjTsvHXtu/PThIF62404ggqkNQozWRXQl9h6NbF/h2pSGD8wIjEONvJJRnKNKvtv9cn8YwgXVaehcBZsmu8zDZOxwnBQg2w== 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-SenderADCheck; bh=pZqlQSfWsbWJvW0oitpKNWx2S7DUPovac5tnRcmdy3c=; b=lLM8ks3OKIn4Yabd0NoGhH9576Da+o/OmnNQr7HmHVhEiiE0IxbYCLyU6QqbaXxcRQaU/jmjkbPDybmBjdhdPNBivqMiaTW7dyBLjj/u2vJ6Jp2ocMEyCrjgAazx7N4nGhFNNdXzfEsRfZsrtyNVRXagxLcx221WSa8k68Er9Se0SiWqw+uvDY3zvhdUAGzgmDfHc02Ld4eDN9IwQnOPlCmpYLAIGkIJ1Ha4JGgZexkznNerWPn6Pb4P4Y0vMAvlxqT2HEMnzBcG5oFJurXb7Od9C5KiyT9CxahvPbwgrBNwhNtRDMUfh0Gbmh1+40Q3teTevMZo07sYqe7CRKLFYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none Received: from DM6PR12MB2762.namprd12.prod.outlook.com (2603:10b6:5:45::15) by DM6PR12MB3676.namprd12.prod.outlook.com (2603:10b6:5:1c7::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.19; Mon, 1 Mar 2021 14:47:11 +0000 Received: from DM6PR12MB2762.namprd12.prod.outlook.com ([fe80::31d8:f503:f7b2:f44]) by DM6PR12MB2762.namprd12.prod.outlook.com ([fe80::31d8:f503:f7b2:f44%3]) with mapi id 15.20.3868.033; Mon, 1 Mar 2021 14:47:11 +0000 From: Zoran Zaric To: gdb-patches@sourceware.org Subject: [PATCH 28/43] Add is_implicit_ptr_at method to dwarf_location Date: Mon, 1 Mar 2021 14:46:05 +0000 Message-Id: <20210301144620.103016-29-Zoran.Zaric@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210301144620.103016-1-Zoran.Zaric@amd.com> References: <20210301144620.103016-1-Zoran.Zaric@amd.com> Content-Type: text/plain X-Originating-IP: [2a00:23c7:5a85:6801:b4ed:fe7b:8064:d4d] X-ClientProxiedBy: AM0PR04CA0073.eurprd04.prod.outlook.com (2603:10a6:208:be::14) To DM6PR12MB2762.namprd12.prod.outlook.com (2603:10b6:5:45::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (2a00:23c7:5a85:6801:b4ed:fe7b:8064:d4d) by AM0PR04CA0073.eurprd04.prod.outlook.com (2603:10a6:208:be::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.19 via Frontend Transport; Mon, 1 Mar 2021 14:47:10 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 36f8a032-6384-4300-ce5a-08d8dcc0e552 X-MS-TrafficTypeDiagnostic: DM6PR12MB3676: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PIqbrqJvPB006Li3gpgfn7TRMWuzzwI91Mf3BzJXCrxkHJBF6/5seW7N2NLcCevFqxWQAjCoV8snZi1rj7anWWmHGvLe9EYdTqIC1wyE+zEsqikt33klP05RYgJ0brkStGNA/3RI5OmfRLlA5Q9L+/50Ipjt2JL4savZSa8TbtGgaNUzpSHdZA0RJhBMPN2R1laKB5qeyTg8WP9N6hiSsv4BVesWsbFOWHe3QoeDks+sZpvht9JC1BrO5zpDzk13lGP8/N4EMq+MENzkV6tD48N2DcuTNf5E05misv3JEBrLqVNIh0nrPbO+rdByrcLreRyTvHrraKHabJor4CiyV8YBJ1Bdu/TpAAPpFlEaVUIqrRCTWhKJu9xYYPkerUK7PcJbGM2PfE91lthcp0mJGo/Pd7kGQz7s+wzcvJsXHGJNCemm5MudLtO7qXEQBg5Lf3aP94uSFhjrQ6BUk3VjzbWJCzfu5mxds3+25/q+/WujvdDQ5K1yQO2jLN5wSlDuItGdwoOr5TN14QvU2rDC3Yw4w1V6XRYXZ5n3z8BGm1GVvMrKRY2kVOr/PwkYjIiWbmeupT41d+Tt0VUJTyVJcg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR12MB2762.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(396003)(346002)(136003)(39860400002)(6666004)(16526019)(1076003)(83380400001)(2616005)(69590400012)(2906002)(186003)(36756003)(66946007)(316002)(66476007)(8936002)(52116002)(86362001)(6506007)(478600001)(5660300002)(4326008)(6486002)(8676002)(6916009)(6512007)(66556008); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?hMHf/5EdVV3YTnh5Q3s4CVKU5bulP4X9P9z0W96YNTiI0s88xfVzloV8Fikl?= =?us-ascii?Q?CAx4pKVx//UBufTNydrJiHLFXaDGCqb849rcBy+jYdJn9ZtRw3dBj3lYuL1N?= =?us-ascii?Q?QbXP7tqkXOkIA0lsl9cUwfcCmfJiwuqXyuCCKGjVrGXu/y1r9c5KrLYCxMXS?= =?us-ascii?Q?X67zKzg3K/5ah+QEhkugk3nLSfJ5qLiE4nBedw3j33bRCWDT4KroGzutGWNW?= =?us-ascii?Q?fAvmtEwlTwyab4IxX9SxHwNKZ8/bcJShZazam1wbDHceYc3aKqFLPgKU0M7k?= =?us-ascii?Q?pZ8HVjOkXsH0qoijnew3Rq6VWBf4SPYJJKz3kxEbu2BbvMDkkAQL6/aE41kN?= =?us-ascii?Q?cHycV7If1LpCBl+Foe01i5jQEGj5w0JoQfWjc3rlFIVsb6S369Z8TYtDoqEe?= =?us-ascii?Q?f2oHn1gLcbONt6GaEFzRPjXWIBbPQKyEGa6XuNWFi/QU5QTZ86XMZaUTIe5B?= =?us-ascii?Q?fkkj+01HvAbEtu1h4SDFgcG6wtwCf/B5UMUPD/PEYMA5iTLf5ftgeB1Jdl9W?= =?us-ascii?Q?K4DCYxWQOrw8oQBn2rT2jW8l/vrH7isPsCkNR4KVIQUAIEiji85lWORVZn+s?= =?us-ascii?Q?xv2VSUszfoFdnzMDL7BjzVdFBZHY8xKD5b/QK6veoIeUTFAPakC/AmRZ4eRX?= =?us-ascii?Q?CqdXv1T7ioEUTcSXAOTLLPkHf/IQNCHAm0DfiXOYu5SNCjM9zpWFQ0HvrW7X?= =?us-ascii?Q?J1Yn1ro5N3+d9CnODMe0Rd7QrCalfnyG0tEVohZ2kZYYIf84fLfp8FlP3iRR?= =?us-ascii?Q?gN5cbHecyPCat5DH10OGxi4t2q1dPyb7JCVm33O7B/bGSnL0FLgL/iQ02pwk?= =?us-ascii?Q?Sua4t9bvvdOHNVN9bWTQn+H1Tg6vhRm4dTV7P7WMAiRXw1nrf+F1aYU2F6+0?= =?us-ascii?Q?9r7ZndeQWPyDS8acrrBhTiImEsg3ADwNUoAW76V6tU+dWA2biueEAoINKko3?= =?us-ascii?Q?JmTasZt7MMzmKhvQzYk4UqvLPoJ6zo67O3AWHJWkQ4JDMXlUZzoSrgKbNuVt?= =?us-ascii?Q?iZ2jv6ouJsue1eJlhBdhOf01wCmdwyedLmVOj4Tx3qD8OK8Nz9DVUN5briwp?= =?us-ascii?Q?FJkmIbtye2/d16LSc3RcGJpNtDNevx8PqI1h+lHMYBEF5XEg8QaQU6UYDFHk?= =?us-ascii?Q?QR06G1FH6oZ0IhWyGgCEc3Uz9lg2Q/bPhgnFJAkfxfGyMp5UQC9P8Wa4Avyo?= =?us-ascii?Q?yyw9wIl2faxr/Onqnt8jbkSuTlaw2wSJytOkoVnNhe/WRPSWVkbb2FbKPGaQ?= =?us-ascii?Q?t6RCzUrEAOlAGFYSjpeUllZ1NK3WYDXn/Jz2mFhVq5FRVHYtzXdGz9SfpZTN?= =?us-ascii?Q?pzfswce+okZf0qBNakc6zIjKKfcgQQXRtfkpoyRS5f2tEt53t1WRkUGpMGAL?= =?us-ascii?Q?NEPb558jS6x+dplgRKeqSafPeEjt?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36f8a032-6384-4300-ce5a-08d8dcc0e552 X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB2762.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Mar 2021 14:47:11.5184 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PNXBD4VU9Oad3erFE6UC1VISFAMe+aEHaYiCPMxHzyzVIOQheOmFSx7m/qh4w/GkHkGDXq++tkT1XstO0tMJKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3676 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Mon, 01 Mar 2021 14:47:22 -0000 Another expectation of the existing function callback interface of the computed struct value is to check if a specific part (on a given offset of a given length) of an underlying location description is an implicit pointer location description. To satisfy this expectation a new is_implicit_ptr_at has been added. gdb/ChangeLog: * dwarf2/expr.c (dwarf_location::is_implicit_ptr_at): New method. (dwarf_implicit_pointer::is_implicit_ptr_at): New method. (dwarf_composite::is_implicit_ptr_at): New method. --- gdb/dwarf2/expr.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index 7e5ba5d636b..5de75f570aa 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -489,6 +489,14 @@ class dwarf_location : public dwarf_entry LONGEST bits_to_skip, size_t bit_size, size_t location_bit_limit); + /* Check if a given DWARF location description contains an implicit + pointer location description of a BIT_LENGTH size on a given + BIT_OFFSET offset. */ + virtual bool is_implicit_ptr_at (LONGEST bit_offset, int bit_length) const + { + return false; + } + protected: /* Architecture of the location. */ struct gdbarch *m_arch; @@ -1137,6 +1145,11 @@ class dwarf_implicit_pointer : public dwarf_location size_t location_bit_limit) override {} + bool is_implicit_ptr_at (LONGEST bit_offset, int bit_length) const override + { + return true; + } + private: /* Per object file data of the implicit pointer. */ dwarf2_per_objfile *m_per_objfile; @@ -1224,6 +1237,8 @@ class dwarf_composite : public dwarf_location LONGEST bits_to_skip, size_t bit_size, size_t location_bit_limit) override; + bool is_implicit_ptr_at (LONGEST bit_offset, int bit_length) const override; + private: /* Composite piece that contains a piece location description and it's size. */ @@ -1422,6 +1437,42 @@ dwarf_composite::write_to_gdb_value (struct frame_info *frame, } } +bool +dwarf_composite::is_implicit_ptr_at (LONGEST bit_offset, int bit_length) const +{ + /* Advance to the first non-skipped piece. */ + unsigned int pieces_num = m_pieces.size (); + LONGEST total_bit_offset = bit_offset; + LONGEST total_bit_length = bit_length; + + total_bit_offset += HOST_CHAR_BIT * m_offset + m_bit_suboffset; + + for (unsigned int i = 0; i < pieces_num && total_bit_length != 0; i++) + { + ULONGEST read_bit_length = m_pieces[i].m_size; + + if (total_bit_offset >= read_bit_length) + { + total_bit_offset -= read_bit_length; + continue; + } + + read_bit_length -= total_bit_offset; + + if (total_bit_length < read_bit_length) + read_bit_length = total_bit_length; + + if (!m_pieces[i].m_location->is_implicit_ptr_at (total_bit_offset, + read_bit_length)) + return false; + + total_bit_offset = 0; + total_bit_length -= read_bit_length; + } + + return true; +} + struct piece_closure { /* Reference count. */ -- 2.17.1