]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Remove get_frame_cfa from dwarf_expr_context
authorZoran Zaric <Zoran.Zaric@amd.com>
Mon, 7 Dec 2020 19:00:04 +0000 (19:00 +0000)
committerSimon Marchi <simon.marchi@polymtl.ca>
Tue, 8 Dec 2020 16:16:18 +0000 (11:16 -0500)
Following the idea of merging the evaluators, the get_frame_cfa 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,
it becomes apparent that the method is only called once and it can be
inlined.

It is also necessary to check if the frame context information was
provided before the DW_OP_call_frame_cfa operation is executed.

gdb/ChangeLog:

* dwarf2/expr.c (dwarf_expr_context::get_frame_cfa): Remove
method.
(dwarf_expr_context::execute_stack_op): Call frame context info
check for DW_OP_call_frame_cfa. Remove use of get_frame_cfa.
* dwarf2/expr.h (dwarf_expr_context::get_frame_cfa): Remove
method.
* dwarf2/frame.c (dwarf_expr_context::get_frame_cfa): Remove
method.
* dwarf2/loc.c (dwarf_expr_context::get_frame_cfa): Remove
method.

Change-Id: I126a97a51bbb4c97f4ee669c96d054426bd79070

gdb/dwarf2/expr.c
gdb/dwarf2/expr.h
gdb/dwarf2/frame.c
gdb/dwarf2/loc.c

index 91d0b99640352f924a9043d033885117df354b56..6ba8b90c584de9c9fb30af5f53b0b249f54a9503 100644 (file)
@@ -29,6 +29,7 @@
 #include "dwarf2/expr.h"
 #include "dwarf2/loc.h"
 #include "dwarf2/read.h"
+#include "frame.h"
 #include "gdbsupport/underlying.h"
 #include "gdbarch.h"
 
@@ -1226,7 +1227,9 @@ dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
          break;
 
        case DW_OP_call_frame_cfa:
-         result = this->get_frame_cfa ();
+         ensure_have_frame (this->frame, "DW_OP_call_frame_cfa");
+
+         result = dwarf2_frame_cfa (this->frame);
          result_val = value_from_ulongest (address_type, result);
          in_stack_memory = true;
          break;
index 140d3c36dbd2c87d5ec077b25e0f24f66deda150..5abb870f883110c4fbb19bcf4928d4005b16958b 100644 (file)
@@ -192,9 +192,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 CFA for the frame.  */
-  virtual CORE_ADDR get_frame_cfa () = 0;
-
   /* Return the PC for the frame.  */
   virtual CORE_ADDR get_frame_pc ()
   {
index ce1f9e27634c8bb06aac2e72f5d8db72b9a6a1b7..4cc0ffe3c57ee360ab155f23568c296a160ed58f 100644 (file)
@@ -248,11 +248,6 @@ public:
     invalid ("DW_OP_push_object_address");
   }
 
-  CORE_ADDR get_frame_cfa () override
-  {
-    invalid ("DW_OP_call_frame_cfa");
-  }
-
   CORE_ADDR get_tls_address (CORE_ADDR offset) override
   {
     invalid ("DW_OP_form_tls_address");
index 8913051e4ef566a95b413d6d73a1eaafa71bc537..ecf1020b3b5990e1b1f18e789794171c57cca62f 100644 (file)
@@ -657,14 +657,6 @@ public:
   struct dwarf2_per_cu_data *per_cu;
   CORE_ADDR obj_address;
 
-  /* Helper function for dwarf2_evaluate_loc_desc.  Computes the CFA for
-     the frame in BATON.  */
-
-  CORE_ADDR get_frame_cfa () override
-  {
-    return dwarf2_frame_cfa (frame);
-  }
-
   /* Helper function for dwarf2_evaluate_loc_desc.  Computes the PC for
      the frame in BATON.  */