From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id YF3TAGT+PGAGJAAAWB0awg (envelope-from ) for ; Mon, 01 Mar 2021 09:47:00 -0500 Received: by simark.ca (Postfix, from userid 112) id F11351EF82; Mon, 1 Mar 2021 09:46:59 -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 1AEC21EFC1 for ; Mon, 1 Mar 2021 09:46:55 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A36333939C37; Mon, 1 Mar 2021 14:46:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A36333939C37 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1614610014; bh=aBZh6L+0Ft0RT038Oc+6iN45JCBaOQprNcVcgSJLoy0=; 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=eGsbuQGCUmq+8QUZdPYPtAGgItpaNhfJ2AX+gXTXdQwFLndJGGu5OukWXjPktpkoN iAKensdzJ54Q6vST7HfCZTW3WpoZ7eGcA/UmClWPjCT/XwyJpg5yow/YVNYGttHOBX tGtMADpPPic6Mb+HLw1Zu4mdR3DeH5qWB1x1yeiY= Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2062.outbound.protection.outlook.com [40.107.236.62]) by sourceware.org (Postfix) with ESMTPS id A1BFA3939C2A for ; Mon, 1 Mar 2021 14:46:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A1BFA3939C2A ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GxS9YRzogoQyVnzcO0+PJWN5QEaNH1o476UFoLTUruJy/0ehdo4gTYujWSRNYssqHrSMP6tCSledHiccHnfy/Bp7y7No0b79IXWoEn+kxHTgULvh9UJkIhfsNqKTJQSmPVvSLp2vHOG5v/ioPfCTGJHlyNtI6qt2BCXJqrvvL+WNdtyNYeYSjelHO+ZFyIRWwnqXudRwtVkpIXXpi3NTdG4SC3YrzFzotLO525A7dv0Pqeuk1D/gYnfju66p6rz3RUG4sEOvH9Gz0QMoh5crZbFYXR6cBj4x13uMGH1xcZ3H7XfxMz7akRYGEwg7UhHxex90YrtIRVrIRHWTbx7QNQ== 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=aBZh6L+0Ft0RT038Oc+6iN45JCBaOQprNcVcgSJLoy0=; b=oD4X/PPSwP6SalbFF81WO5HQKfRcrBe6hSNK95/MXVRz7/hvrSyCkM45FUcwi0LtZRFRGcwhtagpmcCXwwY19at59ZD4V2XlMtSEZokhi88V4xtzxAOVr4f69NOpBKXulgSEYYddYqyUDvjTxQXWJwFqto2blDNG7EjAOr+KwG/IGpDTpJG4vkbJae1OCys2HL73Z6lZc1Cd6DmgKQu1WaIzm4NNsPBs6yrq71Q5WUcWdh4fnN4uA1nO7XLcfKKoQ9miR5G7NDyk9OZ/DYAGC3Q9mpA8AHUnmDCHx/TLLfS9gnYw9HsZIiHIRgBELU2rQmUM7dIT7SAgFyB/qLIwmQ== 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 DM5PR1201MB0236.namprd12.prod.outlook.com (2603:10b6:4:57::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.28; Mon, 1 Mar 2021 14:46:46 +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:46:46 +0000 To: gdb-patches@sourceware.org Subject: [PATCH 06/43] Move dwarf_call to dwarf_expr_context Date: Mon, 1 Mar 2021 14:45:43 +0000 Message-Id: <20210301144620.103016-7-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:46:45 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 415192f4-9faf-4e6b-88f5-08d8dcc0d615 X-MS-TrafficTypeDiagnostic: DM5PR1201MB0236: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3968; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Nf3Nk+hPl+qkgn3INBfzOshqP6eX2c0pP5TpQkO+0Zqjc0Qm96Q01Tr/X0Q9ob3e7SIaeC+czVCenLYHPSYyMEtkTgaQmhIH6gt983XQ2wqpyeCRvG203up4t8XGlDHDbJMAQ0s8yAacsggFoymu7o5XzUzNtKY3v1o9/j9huE0LNTUoXqdP5df++q/t2Vv6NblojualBSfFpapPBScAWGlWAEdxQ7jZnBiCnSl/IlqY5nrpORa2a8IGE3nL93B/EMYlLMJgge91oM62nz5pWDThVlLXZTlU6ktDmvMSX7KQ76mvGBJki3cPC3nvmfqWStwHQSPpN1dOcQELbTtAlBTwHD5U+FzIsp/7vUVQErzDG+jeFyAn2mTSvrwe/Z6+MXEVN5/JZ0x7Yn89G5MCx9UosOa2HCO2drzGXLbPNE96NCmqqkI5pjuk2YqVXzKZFj1Z5+e0d6ISbt5+AmTXecbsiIJkRIAyseEzwsfE+vPe+6H3C4odDfLINqoi1ULtAvy8wvLiD9HPjrNWmRsoNrTjts+dwOq0fTJWT6xD5uOM6t30//losdzaMx1vpqbDUBjy9NLx7yIlClYpGX/ROw== 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)(136003)(39860400002)(396003)(346002)(5660300002)(16526019)(1076003)(8936002)(52116002)(478600001)(83380400001)(2906002)(6486002)(66476007)(6916009)(86362001)(4326008)(2616005)(316002)(66946007)(8676002)(6506007)(36756003)(66556008)(6512007)(69590400012)(186003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?/fE+7DGbdBXh9MIx1+FJOFwy3mIh0f3+laKE1ZkgDD2xEG8glv6aeQeWxz25?= =?us-ascii?Q?VdwtXDJd9u1b7P3SqSAYKjb4SIjszjDjvl0QuJ+lAHhzAhnLv72tTMAfXe4n?= =?us-ascii?Q?/V7nEjP55xco3lgB5v1K0qIhLlKqLBrPZMEKrFh/c2z+ihh24XijHwYfSvdi?= =?us-ascii?Q?8/4yJsnNSBVAHaW9TjoQsjUjbNS1XtjAsmLn4bxT7acQtXJKCnKaEYraTw/f?= =?us-ascii?Q?4PQOmsFFoCsgsUh73fZU4fqZWWtK/C1FXnt3TYCQsz8L7TqUQdGUcsS6Fq9k?= =?us-ascii?Q?s8O85lz6qHqjMmyxFzItETi+cEYUGYeV1wkfLb9zh1OWcUWPahaqZoAB1dsc?= =?us-ascii?Q?88+nFRtb8G7ow1c8pDPXk1JMKi3HTxSvnc+e6e9ra/lSvf0HSdcRcoo66uzm?= =?us-ascii?Q?1xfU+hfW1ML6pU7OVXHG79JkYmAiD1ZqEcE0HqopTobGAmg6/buLqaIroxA4?= =?us-ascii?Q?Ev0PVFIo3aUSwprWtVVlSFxy4ZChpAGjwcCMng5uADbh8LD/7ivbns3Jdflv?= =?us-ascii?Q?p+yViwEAavRXJ/a6mCJvAnKEBZ/5HjQEcoESVgAdPL6XGp6jtPoPkS5BseG8?= =?us-ascii?Q?CCaSswlub9b9x5Zx5gGTwK0tQ/CC/4oEfyVtnVC+mfSp4Eip8eWqJoec2KqV?= =?us-ascii?Q?n26hIpg3WUI6vie55WBzUicJ3fe2TLLTjNhqg8oI8CF81Ztl3N7I5waF6sRz?= =?us-ascii?Q?/B1KQs+v6Kd+jQB2TlC5t2OKMLMVmFNur7KqLAT3mtSb984Gzahm4WKZX0Mj?= =?us-ascii?Q?MeuTGAVSt2gINc9KPNE4BMkfHoMzfwzO+/yGX3A04TyWf1lwi79OA1tsmOBS?= =?us-ascii?Q?cmY3tujh28Mij9D05HxzRUSV02BrMSP2J9xEm6BQHJtVSsoXER0pAYgI3ctC?= =?us-ascii?Q?NG9L6RNxU7eHkrcLkuhwCeI/L/i1QyZNfCnCS+KoYcAZkHAJeEYsduvtBfNc?= =?us-ascii?Q?oW2ypBmSK6itVa19EfnfnDl0Ym8KWy3xtV2cf+u+oKs3+cQszcOG4C8zQks8?= =?us-ascii?Q?cdMbUDU3wMzm0SwTE2+f6EzK5N2EOFUeu+Qe6D7f6jeQxbfZjI6bs7XN0qEu?= =?us-ascii?Q?waOnxxcMJUNvOM6i4guPW74PLDgev4Ir0sZgjdpnE933pf8LoCEU/qsXp+Yj?= =?us-ascii?Q?HdYb1rBWXnr1ikBgRC/WzekSGrUOOjgKLdLvRA51x2/m+F4OHK2N8zxbCfEk?= =?us-ascii?Q?s7IfSyeX2rmXTV/6AXp7OWuQL0afEaL0YvMMQdEnvurjO+toTeqw7W2JzNk+?= =?us-ascii?Q?G3bEVGNxFMvjvAvVHJ1ufUb1qOdBvYUBeRQCyiRhrODvxfoYcimDMo/npvAL?= =?us-ascii?Q?or0/OUcTfZCF42XJgavRXkNFaE8umT6gr3X4S2zFFK63tD0j5OAAAeO1y/ZW?= =?us-ascii?Q?azqHn2mq7t/BVe3q2BicSp1eVwFe?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 415192f4-9faf-4e6b-88f5-08d8dcc0d615 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:46:45.9080 (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: LArSuIBiV9mQQ1QLc3mpWmcKQTiVfSNUZQI1/GYRBqsKtNbVy5cDT9xEsAl6PAypV+XY6kj9vPCy4Ek2ukf5Ng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0236 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" From: Zoran Zaric Following the idea of merging the evaluators, the dwarf_call and get_frame_pc method can be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc classes to their base class dwarf_expr_context. Once this is done, the get_frame_pc can be replace with lambda function. gdb/ChangeLog: * dwarf2/expr.c (dwarf_expr_context::dwarf_call): Move from dwarf_evaluate_loc_desc. (dwarf_expr_context::get_frame_pc): Replace with lambda. * dwarf2/expr.h (dwarf_expr_context::get_frame_pc): Remove method. * dwarf2/frame.c (dwarf_expr_executor::dwarf_call): Remove method. (dwarf_expr_executor::get_frame_pc): Remove method. * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_frame_pc): Remove method. (dwarf_evaluate_loc_desc::dwarf_call): Move to dwarf_expr_context. (per_cu_dwarf_call): Inline function. --- gdb/dwarf2/expr.c | 28 +++++++++++++++++++++++++++- gdb/dwarf2/expr.h | 22 ++++++---------------- gdb/dwarf2/frame.c | 10 ---------- gdb/dwarf2/loc.c | 43 ------------------------------------------- 4 files changed, 33 insertions(+), 70 deletions(-) diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index 5a0a4a4299c..9b2c7485720 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -234,6 +234,31 @@ dwarf_expr_context::get_base_type (cu_offset die_cu_off, int size) return result; } +/* See expr.h. */ + +void +dwarf_expr_context::dwarf_call (cu_offset die_cu_off) +{ + ensure_have_per_cu (per_cu, "DW_OP_call"); + + struct frame_info *frame = this->frame; + + auto get_pc_from_frame = [frame] () + { + ensure_have_frame (frame, "DW_OP_call"); + return get_frame_address_in_block (frame); + }; + + struct dwarf2_locexpr_baton block + = dwarf2_fetch_die_loc_cu_off (die_cu_off, per_cu, per_objfile, + get_pc_from_frame); + + /* DW_OP_call_ref is currently not supported. */ + gdb_assert (block.per_cu == per_cu); + + this->eval (block.data, block.size); +} + /* Require that TYPE be an integral type; throw an exception if not. */ static void @@ -1276,7 +1301,8 @@ dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr, returned. */ result = value_as_long (fetch (0)); pop (); - result = this->get_tls_address (result); + result = target_translate_tls_address (this->per_objfile->objfile, + result); result_val = value_from_ulongest (address_type, result); break; diff --git a/gdb/dwarf2/expr.h b/gdb/dwarf2/expr.h index 48dd37150db..9510dfe33d4 100644 --- a/gdb/dwarf2/expr.h +++ b/gdb/dwarf2/expr.h @@ -195,22 +195,6 @@ struct dwarf_expr_context /* Read LENGTH bytes at ADDR into BUF. */ virtual void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) = 0; - /* Return the PC for the frame. */ - virtual CORE_ADDR get_frame_pc () - { - error (_("%s is invalid in this context"), "DW_OP_implicit_pointer"); - } - - /* Return the thread-local storage address for - DW_OP_GNU_push_tls_address or DW_OP_form_tls_address. */ - virtual CORE_ADDR get_tls_address (CORE_ADDR offset) = 0; - - /* Execute DW_AT_location expression for the DWARF expression - subroutine in the DIE at DIE_CU_OFF in the CU. Do not touch - STACK while it being passed to and returned from the called DWARF - subroutine. */ - virtual void dwarf_call (cu_offset die_cu_off) = 0; - /* Push on DWARF stack an entry evaluated for DW_TAG_call_site's parameter matching KIND and KIND_U at the caller of specified BATON. If DEREF_SIZE is not -1 then use DW_AT_call_data_value instead of @@ -247,6 +231,12 @@ struct dwarf_expr_context represent a base type. SIZE is non-zero if this function should verify that the resulting type has the correct size. */ struct type *get_base_type (cu_offset die_cu_off, int size); + + /* Execute DW_AT_location expression for the DWARF expression + subroutine in the DIE at DIE_CU_OFF in the CU. Do not touch + STACK while it being passed to and returned from the called DWARF + subroutine. */ + void dwarf_call (cu_offset die_cu_off); }; /* Return the value of register number REG (a DWARF register number), diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c index 69a3e424c6e..f9f78f472cb 100644 --- a/gdb/dwarf2/frame.c +++ b/gdb/dwarf2/frame.c @@ -248,16 +248,6 @@ class dwarf_expr_executor : public dwarf_expr_context invalid ("DW_OP_push_object_address"); } - CORE_ADDR get_tls_address (CORE_ADDR offset) override - { - invalid ("DW_OP_form_tls_address"); - } - - void dwarf_call (cu_offset die_offset) override - { - invalid ("DW_OP_call*"); - } - private: void invalid (const char *op) ATTRIBUTE_NORETURN diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c index 1281a8a3d34..6b0fd4c8a02 100644 --- a/gdb/dwarf2/loc.c +++ b/gdb/dwarf2/loc.c @@ -600,26 +600,6 @@ func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc, framefunc->natural_name ()); } -static void -per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset, - dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile) -{ - struct dwarf2_locexpr_baton block; - - auto get_frame_pc_from_ctx = [ctx] () - { - return ctx->get_frame_pc (); - }; - - block = dwarf2_fetch_die_loc_cu_off (die_offset, per_cu, per_objfile, - get_frame_pc_from_ctx); - - /* DW_OP_call_ref is currently not supported. */ - gdb_assert (block.per_cu == per_cu); - - ctx->eval (block.data, block.size); -} - /* See loc.h. */ struct value * @@ -654,29 +634,6 @@ class dwarf_evaluate_loc_desc : public dwarf_expr_context CORE_ADDR obj_address; - /* Helper function for dwarf2_evaluate_loc_desc. Computes the PC for - the frame in BATON. */ - - CORE_ADDR get_frame_pc () override - { - return get_frame_address_in_block (frame); - } - - /* Using the objfile specified in BATON, find the address for the - current thread's thread-local storage with offset OFFSET. */ - CORE_ADDR get_tls_address (CORE_ADDR offset) override - { - return target_translate_tls_address (per_objfile->objfile, offset); - } - - /* Helper interface of per_cu_dwarf_call for - dwarf2_evaluate_loc_desc. */ - - void dwarf_call (cu_offset die_offset) override - { - per_cu_dwarf_call (this, die_offset, per_cu, per_objfile); - } - /* Callback function for get_object_address. Return the address of the VLA object. */ -- 2.17.1