aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2/expr.c
diff options
context:
space:
mode:
authorZoran Zaric <Zoran.Zaric@amd.com>2020-10-09 11:22:23 +0100
committerZoran Zaric <zoran.zaric@amd.com>2021-08-05 16:39:27 +0100
commit6c7779b34b38ca71df9460c07bc4c03d01dfaa0b (patch)
tree4a2d0ea8953c4544e6c23f6cc36c206df391e611 /gdb/dwarf2/expr.c
parent62e37eac1c5b9e4805d40715e7570f7146caa788 (diff)
downloadgdb-6c7779b34b38ca71df9460c07bc4c03d01dfaa0b.zip
gdb-6c7779b34b38ca71df9460c07bc4c03d01dfaa0b.tar.gz
gdb-6c7779b34b38ca71df9460c07bc4c03d01dfaa0b.tar.bz2
Remove get_frame_cfa from dwarf_expr_context
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.
Diffstat (limited to 'gdb/dwarf2/expr.c')
-rw-r--r--gdb/dwarf2/expr.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c
index 0e992c1..4427c53 100644
--- a/gdb/dwarf2/expr.c
+++ b/gdb/dwarf2/expr.c
@@ -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"
@@ -1217,7 +1218,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;