aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoran Zaric <Zoran.Zaric@amd.com>2020-10-09 13:25:10 +0100
committerZoran Zaric <zoran.zaric@amd.com>2021-08-05 16:39:51 +0100
commit73e6b863308a026a5c87dc73ab2417ee39027d4c (patch)
treeade78d0214d645150fd8924406669dae4bc12702
parentb6d156edd8f2186445ff7b73dede720619a27d02 (diff)
downloadgdb-73e6b863308a026a5c87dc73ab2417ee39027d4c.zip
gdb-73e6b863308a026a5c87dc73ab2417ee39027d4c.tar.gz
gdb-73e6b863308a026a5c87dc73ab2417ee39027d4c.tar.bz2
Move get_object_address to dwarf_expr_context
Following the idea of merging the evaluators, the get_object_address and can be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc classes to their base class dwarf_expr_context. gdb/ChangeLog: * dwarf2/expr.c (dwarf_expr_context::get_object_address): Move from dwarf_evaluate_loc_desc. (class dwarf_expr_context): Add object address member to dwarf_expr_context. * dwarf2/expr.h (dwarf_expr_context::get_frame_pc): Remove method. * dwarf2/frame.c (dwarf_expr_executor::get_object_address): Remove method. * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_object_address): move to dwarf_expr_context. (class dwarf_evaluate_loc_desc): Move object address member to dwarf_expr_context.
-rw-r--r--gdb/dwarf2/expr.h10
-rw-r--r--gdb/dwarf2/frame.c5
-rw-r--r--gdb/dwarf2/loc.c12
3 files changed, 9 insertions, 18 deletions
diff --git a/gdb/dwarf2/expr.h b/gdb/dwarf2/expr.h
index 52f5051..d10bf9c 100644
--- a/gdb/dwarf2/expr.h
+++ b/gdb/dwarf2/expr.h
@@ -188,6 +188,9 @@ struct dwarf_expr_context
/* Compilation unit used for the evaluation. */
dwarf2_per_cu_data *per_cu = nullptr;
+ /* Object address used for the evaluation. */
+ CORE_ADDR obj_address = 0;
+
/* Read LENGTH bytes at ADDR into BUF. */
virtual void read_mem (gdb_byte *buf, CORE_ADDR addr, size_t length) = 0;
@@ -200,7 +203,12 @@ struct dwarf_expr_context
int deref_size) = 0;
/* Return the `object address' for DW_OP_push_object_address. */
- virtual CORE_ADDR get_object_address () = 0;
+ virtual CORE_ADDR get_object_address ()
+ {
+ if (obj_address == 0)
+ error (_("Location address is not set."));
+ return obj_address;
+ }
private:
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index 6aaad94..37d3a40 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -244,11 +244,6 @@ public:
invalid ("DW_OP_entry_value");
}
- CORE_ADDR get_object_address () override
- {
- invalid ("DW_OP_push_object_address");
- }
-
private:
void invalid (const char *op) ATTRIBUTE_NORETURN
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index e63b339..217d74c 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -674,18 +674,6 @@ public:
: dwarf_expr_context (per_objfile)
{}
- CORE_ADDR obj_address;
-
- /* Callback function for get_object_address. Return the address of the VLA
- object. */
-
- CORE_ADDR get_object_address () override
- {
- if (obj_address == 0)
- error (_("Location address is not set."));
- return obj_address;
- }
-
/* Execute DWARF block of call_site_parameter which matches KIND and
KIND_U. Choose DEREF_SIZE value of that parameter. Search
caller of this objects's frame.