From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id CCmpIIX+PGAGJAAAWB0awg (envelope-from ) for ; Mon, 01 Mar 2021 09:47:33 -0500 Received: by simark.ca (Postfix, from userid 112) id 80FA81EF64; Mon, 1 Mar 2021 09:47:33 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id C33B81EF78 for ; Mon, 1 Mar 2021 09:47:23 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A6003393BC03; Mon, 1 Mar 2021 14:47:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A6003393BC03 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614610042; bh=PqyHY5+HRL1LVxGdZfMILFlhdye43Q3spm/WvLkBXbY=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=KMiKeJ87P0b+YnFuQgvyrKO+VdrxepbKgTppevkIo9ST7U+EYa3DwLT4K5f9fWcWT 8BzrrtFsOD6OR3vGcoOzUZqar6UcerBHfk72BUvKmzVMpaYNSUH2c4QudqORBiPpW8 JF8TnX7hAf9+aHfRoJWjlpr8gxoS42RBYnUKFvAI= Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2056.outbound.protection.outlook.com [40.107.244.56]) by sourceware.org (Postfix) with ESMTPS id 780A4393BC06 for ; Mon, 1 Mar 2021 14:47:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 780A4393BC06 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YDlHriKDQDdoLNkpziJ5r6fxNeQn4HkMGTY4WR/rxXpL+aEs0F3GT6Zuu2v4tv6Fbd8DPZKgZjhqZPZWLAaBDwwGguka4gWq+2fsibqx0syd9SUkekQ9Hnsy/0dT8+aR2dFysnj6VUw7191wowaplFWyWinj4pvT4ZJEH7ZWkoAqHiJTlzlvwWUu2/tmDa5lePKYRcjrGoBln5K0McjUpRKUMFnwZ7xx2T7XqUpuh76zjqlEaOlowS3inZPtv/MN9tmZ2ZbfNXTJ0pJPskPyuFGpF839KPymhBD7dqFi/2zV0l/aUsk5xJrvgPnsZJMaTcLGw2jBlabEjoLm2cC8pw== 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=PqyHY5+HRL1LVxGdZfMILFlhdye43Q3spm/WvLkBXbY=; b=LVyWoxBkxZfY0sBj1nJmuTP/fAKy36yaO2tFcfLN2v1mOSv5XZTxG680GRT3lOoTC0jU3yRip55xCUIYZ1S1PnJLzhNVvdCEqwpG36oOV0RZRSWAIKs7AUVGgWlNHF0x5JYasZ+jTrQ79YzxecjefyRTqGZX9WKLOr/17bnI0D7WNYg8ROq9LSi5APkFEkcLv6xjD7m0ZFzTJ1HCwxwlAIrXG8xJpB3yOa0ZjFkPKmG5oS2n5IlNbbDlGKGymKbn2G1v+LmFBqyxXGfNnZ6822hspJVoRuFqz1aHDSEuv+HDIMAJi4RiJUQDc4ER91uKeeThfzWlO1OPeOPE8flfhQ== 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:10 +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:10 +0000 To: gdb-patches@sourceware.org Subject: [PATCH 27/43] Add write_to_gdb_value method to dwarf_location Date: Mon, 1 Mar 2021 14:46:04 +0000 Message-Id: <20210301144620.103016-28-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:09 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 38cf86b3-3dd0-4b87-e00f-08d8dcc0e493 X-MS-TrafficTypeDiagnostic: DM6PR12MB3676: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2733; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GTy7lZytiT3aaYhTrQgVQ3qCwVYP5aAZ/Qgy8Cl1okdH8pXCnS3rszb7ZGJma968IV4vPUDUkltLP2wcQZeedZAFYCB2N/AKdIYxbIxjQwygmcQ3WCXcQAAUNO7MqcEJwuPpWbC+KeZ4Qg0AW9AbIT0tcWo/9rM1fPbco+RPG31yPJ51LORrwjbPi9xeN2Lg4BHxHW7qcxEQfO3g9KFFyb1Y0P0VvPAM/Zp4ZD7K8j6gQqPx7UQDWh7/goK23RdJUGhwE/mwryvlTUgU7fGr+fMqOP3zjxP/YqWw39qg8zDNyVJfMCDluRXj7HDGc3cmLhiyl4ZCUubzoOJn8LFLvnT/wWMoWHycQcGnFp0oB6jOgH2QcJuwKK3jFNlNpdjK09nr7oG/5m+dESLlCfy9rcZLpmSyZi2LfYNhfqUFH1YDSTWSK0H3+ogLFyAgRmE8o+vFPSISJSHij+eW8VW/P2x/9IdcEGhZ1+qlQEFQfNM2ef+lsqsOVgxo1yRc2hStke6rzo232kXNhWcZUc828G1Lf66MFut3kkN4SdAQNFIw2aGH4mRCttsc2nvHdu30cXU6xa5OlQJ8rQX6u+rKqg== 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?rJkruU0VCD/vxaEShZsx023PRD8Co2UKWIHbGnOsknR11FJuvUDNnHN3WTIr?= =?us-ascii?Q?5OU/x8TmswMx4PsxbBwzi5ht/FHXB3a7Nhw29PDfxO2XYZpobkicv+POWNro?= =?us-ascii?Q?0sf/Tjs30EvUdS+0896EMnbYWxpdP7PyXso15kAZaSvbXK226xduR1wS5aG/?= =?us-ascii?Q?em9DzS7vPEdXwuZW+xz4jzC7mYBL0LxomH/3Kcx+02DwNBhjeeEsqC7DuOjS?= =?us-ascii?Q?ZGUUsSdnfx+QgaLj75gFzgwUVsz/ghQgEeWN4eRyr5TSl3ckCG9a278iK871?= =?us-ascii?Q?/nfdCLbewbLOs7d1nhkrWw4Gyup8f3V43v4Na8DoeF0YkiaPcTyHh2j6nL3K?= =?us-ascii?Q?Q/Al/10vOOxn3SDuCwaNtRkJaQnW8v9H1BN7b0WtT8n9DUmTMVxP9ZWVN3N2?= =?us-ascii?Q?NmWjKL+lIMhMx6zyzRRO9RJT5JfFpk2oQNkjpol0JluWQ129EPw8Gsnl2XaS?= =?us-ascii?Q?BC3fIuNXkKgBC7pGAf4wbdq8nnGu1vesAu2P6fh/0hSQj4Uvp8YFFaytSagR?= =?us-ascii?Q?Bu6EsyxKkoYTxv28+58PAPhzPwMSMpNbsr4bfG/SKIyd/LoK1372VemaL44z?= =?us-ascii?Q?mPBFjIMH6BnlETet/xu313rhRd0qkCbv58U8A5d11oam52MeGDc57K7Atcxh?= =?us-ascii?Q?P3PwttS6vEq/BcZ1SFCgI/YuzP1XHPBSZ9YQPCLbTZ1V5hct1ju9XdrXtDHf?= =?us-ascii?Q?AgMGH1WSkJ5YtKMNmB8DhCWSkTELatPcrg4wDnMfXbEiwymf+nMHvXfDTLgn?= =?us-ascii?Q?YLTY+Q/k09yrT7hdJhXkngTM4rxCiZQb26+BKCQLWZUn5xJjLz2nSwD7kyT5?= =?us-ascii?Q?vCtC7kY9JVdnw14wCUyptiSEaz5Jgc8BImKj7gSu/Yy/u4bLtnowbbklAE/a?= =?us-ascii?Q?Yq1PhpAS8shJBzKM1D3RT/5y8+R/xcW+Wy+I46u0AjeHb8lWnY/CQ5GRWPyx?= =?us-ascii?Q?zAK1X43vnUIkZDrpQt/EikeOJ9+dQJBFZw5wxVDQqZ1Br43WtlouqLlKC64D?= =?us-ascii?Q?y0n/c0Bl3a7TZj2UTX21AIqpaVNk+qTyDbkVQodMRez3/RWBtI15tcnD+LdJ?= =?us-ascii?Q?xQLkOOZNNPTv3yeQvWbqCNTlNI9Zauv4/O/jnWHTzc/mNlCyx6uKAvTosMeg?= =?us-ascii?Q?tcliO/UdikE4FZndaT+fCLK+mEOPcXFbmvydBW1Q62YaEOom6k57nw7DrXcA?= =?us-ascii?Q?Lv2OGyb2mPj7IncMwPpz3jafq9O38D/OyJl1y+g+I0SUtF2hjJfkAYm1lIor?= =?us-ascii?Q?CmE3RqgMTv+pe8XXCKgc44m8SWuhw8LVF3fW7Ek3012/9UskKPq7vC1ezvx3?= =?us-ascii?Q?CJNmrYcZlMo5cpvpL+hinEYlj0+2+9GvbaST/lx6UtkgDdkqM9L6J39FId6S?= =?us-ascii?Q?0un1IdP+7X3d8S65dH8nHzuO1kal?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38cf86b3-3dd0-4b87-e00f-08d8dcc0e493 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:10.3151 (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: i9GUzzYm0gia+N1fw47VIkQeQGGyndkAsCP0ntadkV24QeEduiFZY6G3FOw7n+nBTRhXTr2NNJiqkw73rQG5sw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3676 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: , From: Zoran Zaric via Gdb-patches Reply-To: Zoran Zaric Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" Similar story behind the previous read_from_gdb_value method applies to the new write_to_gdb_value. In the same way, reading the data from a location described and writing that data to a struct value object, can be different from just generic read the data from a buffer (location description read method). To make this distinction clear, a new write_to_gdb_value method is added to classes that derive from location description class. gdb/ChangeLog: * dwarf2/expr.c (dwarf_location::write_to_gdb_value): New method. (dwarf_composite::write_to_gdb_value): New method. --- gdb/dwarf2/expr.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index 10386cca858..7e5ba5d636b 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -472,6 +472,23 @@ class dwarf_location : public dwarf_entry LONGEST bits_to_skip, size_t bit_size, size_t location_bit_limit); +/* Write data to the VALUE contents from the location specified by the + location description. + + The write operation is performed in the context of a FRAME. + BIT_SIZE is the number of bits to read. VALUE_BIT_OFFSET is a bit + offset into a VALUE content and BITS_TO_SKIP is a bit offset into + the location. LOCATION_BIT_LIMIT is a maximum number of bits that + location can hold, where value zero signifies that there is no such + restriction. + + Note that some location types can be read without a FRAME context. */ + virtual void write_to_gdb_value (struct frame_info *frame, + struct value *value, + int value_bit_offset, + LONGEST bits_to_skip, size_t bit_size, + size_t location_bit_limit); + protected: /* Architecture of the location. */ struct gdbarch *m_arch; @@ -550,6 +567,26 @@ dwarf_location::read_from_gdb_value (struct frame_info *frame, "is unavailable")); } +void +dwarf_location::write_to_gdb_value (struct frame_info *frame, + struct value *value, + int value_bit_offset, + LONGEST bits_to_skip, size_t bit_size, + size_t location_bit_limit) +{ + int optimized, unavailable; + bool big_endian = type_byte_order (value_type (value)) == BFD_ENDIAN_BIG; + + this->read (frame, value_contents_raw (value), value_bit_offset, + bit_size, bits_to_skip, location_bit_limit, + big_endian, &optimized, &unavailable); + + if (optimized) + mark_value_bits_optimized_out (value, value_bit_offset, bit_size); + if (unavailable) + mark_value_bits_unavailable (value, value_bit_offset, bit_size); +} + /* Value entry found on a DWARF expression evaluation stack. */ class dwarf_value : public dwarf_entry @@ -1094,6 +1131,12 @@ class dwarf_implicit_pointer : public dwarf_location mark_value_bits_optimized_out (value, bits_to_skip, bit_size); } + void write_to_gdb_value (struct frame_info *frame, + struct value *value, int value_bit_offset, + LONGEST bits_to_skip, size_t bit_size, + size_t location_bit_limit) override + {} + private: /* Per object file data of the implicit pointer. */ dwarf2_per_objfile *m_per_objfile; @@ -1176,6 +1219,11 @@ class dwarf_composite : public dwarf_location LONGEST bits_to_skip, size_t bit_size, size_t location_bit_limit) override; + void write_to_gdb_value (struct frame_info *frame, + struct value *value, int value_bit_offset, + LONGEST bits_to_skip, size_t bit_size, + size_t location_bit_limit) override; + private: /* Composite piece that contains a piece location description and it's size. */ @@ -1331,6 +1379,49 @@ dwarf_composite::read_from_gdb_value (struct frame_info *frame, } } +void +dwarf_composite::write_to_gdb_value (struct frame_info *frame, + struct value *value, int value_bit_offset, + LONGEST bits_to_skip, size_t bit_size, + size_t location_bit_limit) +{ + ULONGEST total_bits_to_skip + = bits_to_skip + HOST_CHAR_BIT * m_offset + m_bit_suboffset; + ULONGEST remaining_bit_size = bit_size; + ULONGEST bit_offset = value_bit_offset; + unsigned int pieces_num = m_pieces.size (); + unsigned int i; + + /* Advance to the first non-skipped piece. */ + for (i = 0; i < pieces_num; i++) + { + ULONGEST piece_bit_size = m_pieces[i].m_size; + + if (total_bits_to_skip < piece_bit_size) + break; + + total_bits_to_skip -= piece_bit_size; + } + + for (; i < pieces_num; i++) + { + auto location = m_pieces[i].m_location; + ULONGEST piece_bit_size = m_pieces[i].m_size; + size_t this_bit_size = piece_bit_size - total_bits_to_skip; + + if (this_bit_size > remaining_bit_size) + this_bit_size = remaining_bit_size; + + location->write_to_gdb_value (frame, value, bit_offset, + total_bits_to_skip, this_bit_size, + piece_bit_size); + + bit_offset += this_bit_size; + remaining_bit_size -= this_bit_size; + total_bits_to_skip = 0; + } +} + struct piece_closure { /* Reference count. */ -- 2.17.1