From: Zoran Zaric via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Subject: [PATCH 35/43] Remove dwarf_expr_context from expr.h interface
Date: Mon, 1 Mar 2021 14:46:12 +0000 [thread overview]
Message-ID: <20210301144620.103016-36-Zoran.Zaric@amd.com> (raw)
In-Reply-To: <20210301144620.103016-1-Zoran.Zaric@amd.com>
After the switch to the new evaluator implementation, it is now
possible to completely remove the dwarf_expr_context class from the
expr.h interface and encapsulate it inside the expr.c file.
The new interface consists of a new function called dwarf2_evaluate
that takes a DWARF expression stream, initial DWARF stack elements (in
a form of a vector of a struct value objects), evaluation context and
expected result type information. Function returns an evaluation result
in a form of a struct value object.
Currently, there is ever only one initial stack element provided to the
evaluator and that element is always a memory address, so having a
vector of struct value object might seems like an overkill.
In reality this new flexibility allows implementation of a new DWARF
attribute extensions that could provide any number of initial stack
elements to describe any location description or value.
gdb/ChangeLog:
* dwarf2/expr.c (dwarf2_evaluate): New function.
(struct dwarf_expr_context): Move from expr.h.
(dwarf_expr_context::push_address): Remove function.
* dwarf2/expr.h (struct dwarf_expr_context): Move to expr.c.
(address_type): Expose function.
* dwarf2/frame.c (execute_stack_op): Now calls dwarf2_evaluate.
* dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Now calls
dwarf2_evaluate.
(dwarf2_locexpr_baton_eval): Now calls dwarf2_evaluate.
---
gdb/dwarf2/expr.c | 199 +++++++++++++++++++++++++++++++++++----------
gdb/dwarf2/expr.h | 157 ++++++-----------------------------
gdb/dwarf2/frame.c | 14 +++-
gdb/dwarf2/loc.c | 23 ++++--
4 files changed, 205 insertions(+), 188 deletions(-)
diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c
index aa28d632442..7a091e74ce5 100644
--- a/gdb/dwarf2/expr.c
+++ b/gdb/dwarf2/expr.c
@@ -285,12 +285,9 @@ write_to_memory (CORE_ADDR address, const gdb_byte *buffer,
length, buffer);
}
-/* Return the type used for DWARF operations where the type is
- generic in the DWARF spec, the ARCH is a target architecture.
- of the type and ADDR_SIZE is expected size of the address.
- Only certain sizes are supported. */
-static struct type *
+
+struct type *
address_type (struct gdbarch *gdbarch, int addr_size)
{
struct dwarf_gdbarch_types *types
@@ -2221,6 +2218,137 @@ sect_variable_value (sect_offset sect_off,
type, true);
}
+/* The expression evaluator works with a dwarf_expr_context, describing
+ its current state and its callbacks. */
+struct dwarf_expr_context
+{
+ /* Create a new context for the expression evaluator.
+
+ We should ever only pass in the PER_OBJFILE and the ADDR_SIZE
+ information should be retrievable from there. The PER_OBJFILE
+ contains a pointer to the PER_BFD information anyway and the
+ address size information must be the same for the whole BFD. */
+ dwarf_expr_context (struct dwarf2_per_objfile *per_objfile,
+ int addr_size);
+
+ /* Evaluate the expression at ADDR (LEN bytes long) in a given PER_CU
+ FRAME context. INIT_VALUES vector contains values that are
+ expected to be pushed on a DWARF expression stack before the
+ evaluation. AS_LVAL defines if the returned struct value is
+ expected to be a value or a location description. Where TYPE,
+ SUBOBJ_TYPE and SUBOBJ_OFFSET describe expected struct value
+ representation of the evaluation result. The ADDR_INFO property
+ can be specified to override the range of memory addresses with
+ the passed in buffer. */
+ struct value *evaluate (const gdb_byte *addr, size_t len, bool as_lval,
+ struct dwarf2_per_cu_data *per_cu,
+ struct frame_info *frame,
+ std::vector<struct value *> *init_values,
+ const struct property_addr_info *addr_info,
+ struct type *type, struct type *subobj_type,
+ LONGEST subobj_offset);
+
+private:
+ /* The stack of DWARF entries. */
+ std::vector<std::shared_ptr<dwarf_entry>> stack;
+
+ /* Target architecture to use for address operations. */
+ struct gdbarch *gdbarch;
+
+ /* Target address size in bytes. */
+ int addr_size;
+
+ /* DW_FORM_ref_addr size in bytes. If -1 DWARF is executed
+ from a frame context and operations depending on DW_FORM_ref_addr
+ are not allowed. */
+ int ref_addr_size = 0;
+
+ /* The current depth of dwarf expression recursion, via DW_OP_call*,
+ DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum
+ depth we'll tolerate before raising an error. */
+ int recursion_depth = 0, max_recursion_depth = 0x100;
+
+ /* We evaluate the expression in the context of this objfile. */
+ dwarf2_per_objfile *per_objfile;
+
+ /* Frame information used for the evaluation. */
+ struct frame_info *frame = nullptr;
+
+ /* Compilation unit used for the evaluation. */
+ struct dwarf2_per_cu_data *per_cu = nullptr;
+
+ /* Property address info used for the evaluation. */
+ const struct property_addr_info *addr_info = nullptr;
+
+ /* Evaluate the expression at ADDR (LEN bytes long). */
+ void eval (const gdb_byte *addr, size_t len);
+
+ /* Return the type used for DWARF operations where the type is
+ unspecified in the DWARF spec. Only certain sizes are
+ supported. */
+ struct type *address_type () const;
+
+ /* Push ENTRY onto the stack. */
+ void push (std::shared_ptr<dwarf_entry> value);
+
+ /* Return true if the expression stack is empty. */
+ bool stack_empty_p () const;
+
+ /* Pop a top element of the stack and add as a composite piece.
+
+ If the fallowing top element of the stack is a composite
+ location description, the piece will be added to it. Otherwise
+ a new composite location description will be created and
+ the piece will be added to that composite. */
+ std::shared_ptr<dwarf_entry> add_piece (ULONGEST bit_size,
+ ULONGEST bit_offset);
+
+ /* The engine for the expression evaluator. Using the context in this
+ object, evaluate the expression between OP_PTR and OP_END. */
+ void execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end);
+
+ /* Pop the top item off of the stack. */
+ void pop ();
+
+ /* Retrieve the N'th item on the stack. */
+ std::shared_ptr<dwarf_entry> fetch (int n);
+
+ /* Fetch the result of the expression evaluation in a form of
+ a struct value, where TYPE, SUBOBJ_TYPE and SUBOBJ_OFFSET
+ describe the source level representation of that result.
+ AS_LVAL defines if the fetched struct value is expected to
+ be a value or a location description. */
+ struct value *fetch_result (struct type *type,
+ struct type *subobj_type,
+ LONGEST subobj_offset,
+ bool as_lval);
+
+ /* Return the location expression for the frame base attribute, in
+ START and LENGTH. The result must be live until the current
+ expression evaluation is complete. */
+ void get_frame_base (const gdb_byte **start, size_t *length);
+
+ /* Return the base type given by the indicated DIE at DIE_CU_OFF.
+ This can throw an exception if the DIE is invalid or does not
+ 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);
+
+ /* 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 DW_AT_call_value. */
+ void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
+ union call_site_parameter_u kind_u,
+ int deref_size);
+};
+
/* Return the type used for DWARF operations where the type is
unspecified in the DWARF spec. Only certain sizes are
supported. */
@@ -2241,26 +2369,12 @@ dwarf_expr_context::dwarf_expr_context (dwarf2_per_objfile *per_objfile,
{
}
-/* See expr.h. */
-
void
dwarf_expr_context::push (std::shared_ptr<dwarf_entry> entry)
{
stack.emplace_back (entry);
}
-/* See expr.h. */
-
-void
-dwarf_expr_context::push_address (CORE_ADDR addr, bool in_stack_memory)
-{
- stack.emplace_back (std::make_shared<dwarf_memory> (this->gdbarch, addr,
- 0, in_stack_memory));
-}
-
-
-/* See expr.h. */
-
void
dwarf_expr_context::pop ()
{
@@ -2270,8 +2384,6 @@ dwarf_expr_context::pop ()
stack.pop_back ();
}
-/* See expr.h. */
-
std::shared_ptr<dwarf_entry>
dwarf_expr_context::fetch (int n)
{
@@ -2282,8 +2394,6 @@ dwarf_expr_context::fetch (int n)
return stack[stack.size () - (1 + n)];
}
-/* See expr.h. */
-
void
dwarf_expr_context::get_frame_base (const gdb_byte **start,
size_t * length)
@@ -2310,8 +2420,6 @@ dwarf_expr_context::get_frame_base (const gdb_byte **start,
start, length);
}
-/* See expr.h. */
-
struct type *
dwarf_expr_context::get_base_type (cu_offset die_cu_off, int size)
{
@@ -2329,8 +2437,6 @@ 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)
{
@@ -2354,8 +2460,6 @@ dwarf_expr_context::dwarf_call (cu_offset die_cu_off)
this->eval (block.data, block.size);
}
-/* See expr.h. */
-
void
dwarf_expr_context::push_dwarf_reg_entry_value
(enum call_site_parameter_kind kind,
@@ -2405,8 +2509,6 @@ dwarf_expr_context::push_dwarf_reg_entry_value
this->eval (data_src, size);
}
-/* See expr.h. */
-
struct value *
dwarf_expr_context::fetch_result (struct type *type,
struct type *subobj_type,
@@ -2429,12 +2531,11 @@ dwarf_expr_context::fetch_result (struct type *type,
return entry->to_gdb_value (this->frame, type, subobj_type, subobj_offset);
}
-/* See expr.h. */
-
struct value *
dwarf_expr_context::evaluate (const gdb_byte *addr, size_t len, bool as_lval,
struct dwarf2_per_cu_data *per_cu,
struct frame_info *frame,
+ std::vector<struct value *> *init_values,
const struct property_addr_info *addr_info,
struct type *type,
struct type *subobj_type,
@@ -2447,6 +2548,10 @@ dwarf_expr_context::evaluate (const gdb_byte *addr, size_t len, bool as_lval,
if (per_cu != nullptr)
this->ref_addr_size = per_cu->ref_addr_size ();
+ if (init_values != nullptr)
+ for (unsigned int i = 0; i < init_values->size (); i++)
+ push (gdb_value_to_dwarf_entry (this->gdbarch, (*init_values)[i]));
+
eval (addr, len);
return fetch_result (type, subobj_type, subobj_offset, as_lval);
}
@@ -2506,16 +2611,12 @@ get_signed_type (struct gdbarch *gdbarch, struct type *type)
}
}
-/* See expr.h. */
-
bool
dwarf_expr_context::stack_empty_p () const
{
return stack.empty ();
}
-/* See expr.h. */
-
std::shared_ptr<dwarf_entry>
dwarf_expr_context::add_piece (ULONGEST bit_size, ULONGEST bit_offset)
{
@@ -2549,9 +2650,6 @@ dwarf_expr_context::add_piece (ULONGEST bit_size, ULONGEST bit_offset)
return composite;
}
-
-/* See expr.h. */
-
void
dwarf_expr_context::eval (const gdb_byte *addr, size_t len)
{
@@ -2790,8 +2888,6 @@ dwarf_block_to_sp_offset (struct gdbarch *gdbarch, const gdb_byte *buf,
return 1;
}
-/* See expr.h. */
-
void
dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
const gdb_byte *op_end)
@@ -3729,6 +3825,25 @@ dwarf_expr_context::execute_stack_op (const gdb_byte *op_ptr,
gdb_assert (this->recursion_depth >= 0);
}
+/* See expr.h. */
+
+struct value *
+dwarf2_evaluate (const gdb_byte *addr, size_t len, bool as_lval,
+ struct dwarf2_per_objfile *per_objfile,
+ struct dwarf2_per_cu_data *per_cu,
+ struct frame_info *frame, int addr_size,
+ std::vector<struct value *> *init_values,
+ const struct property_addr_info *addr_info,
+ struct type *type, struct type *subobj_type,
+ LONGEST subobj_offset)
+{
+ dwarf_expr_context ctx (per_objfile, addr_size);
+
+ return ctx.evaluate (addr, len, as_lval, per_cu,
+ frame, init_values, addr_info,
+ type, subobj_type, subobj_offset);
+}
+
void _initialize_dwarf2expr ();
void
_initialize_dwarf2expr ()
diff --git a/gdb/dwarf2/expr.h b/gdb/dwarf2/expr.h
index 5170ac2df43..132f924014f 100644
--- a/gdb/dwarf2/expr.h
+++ b/gdb/dwarf2/expr.h
@@ -25,142 +25,31 @@
#include "leb128.h"
#include "gdbtypes.h"
-class dwarf_entry;
struct dwarf2_per_objfile;
-/* The expression evaluator works with a dwarf_expr_context, describing
- its current state and its callbacks. */
-struct dwarf_expr_context
-{
- /* Create a new context for the expression evaluator.
-
- We should ever only pass in the PER_OBJFILE and the ADDR_SIZE
- information should be retrievable from there. The PER_OBJFILE
- contains a pointer to the PER_BFD information anyway and the
- address size information must be the same for the whole BFD. */
- dwarf_expr_context (struct dwarf2_per_objfile *per_objfile,
- int addr_size);
- virtual ~dwarf_expr_context () = default;
-
- /* Push ADDR onto the stack. */
- void push_address (CORE_ADDR addr, bool in_stack_memory);
-
- /* Evaluate the expression at ADDR (LEN bytes long) in a given PER_CU
- FRAME context. AS_LVAL defines if the returned struct value is
- expected to be a value or a location description. Where TYPE,
- SUBOBJ_TYPE and SUBOBJ_OFFSET describe expected struct value
- representation of the evaluation result. The ADDR_INFO property
- can be specified to override the range of memory addresses with
- the passed in buffer. */
- struct value *evaluate (const gdb_byte *addr, size_t len, bool as_lval,
- struct dwarf2_per_cu_data *per_cu,
- struct frame_info *frame,
- const struct property_addr_info *addr_info = nullptr,
- struct type *type = nullptr,
- struct type *subobj_type = nullptr,
- LONGEST subobj_offset = 0);
-
-private:
- /* The stack of DWARF entries. */
- std::vector<std::shared_ptr<dwarf_entry>> stack;
-
- /* Target architecture to use for address operations. */
- struct gdbarch *gdbarch = nullptr;
-
- /* Target address size in bytes. */
- int addr_size = 0;
-
- /* DW_FORM_ref_addr size in bytes. If -1 DWARF is executed from a frame
- context and operations depending on DW_FORM_ref_addr are not allowed. */
- int ref_addr_size = 0;
-
- /* The current depth of dwarf expression recursion, via DW_OP_call*,
- DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum
- depth we'll tolerate before raising an error. */
- int recursion_depth = 0, max_recursion_depth = 0x100;
-
- /* We evaluate the expression in the context of this objfile. */
- dwarf2_per_objfile *per_objfile;
-
- /* Frame information used for the evaluation. */
- struct frame_info *frame = nullptr;
-
- /* Compilation unit used for the evaluation. */
- struct dwarf2_per_cu_data *per_cu = nullptr;
-
- /* Property address info used for the evaluation. */
- const struct property_addr_info *addr_info = nullptr;
-
- /* Evaluate the expression at ADDR (LEN bytes long). */
- void eval (const gdb_byte *addr, size_t len);
-
- /* Return the type used for DWARF operations where the type is
- unspecified in the DWARF spec. Only certain sizes are
- supported. */
- struct type *address_type () const;
-
- /* Push ENTRY onto the stack. */
- void push (std::shared_ptr<dwarf_entry> entry);
-
- /* Return true if the expression stack is empty. */
- bool stack_empty_p () const;
-
- /* Pop a top element of the stack and add as a composite piece
- with an BIT_OFFSET offset and of a BIT_SIZE size.
-
- If the following top element of the stack is a composite
- location description, the piece will be added to it. Otherwise
- a new composite location description will be created and
- the piece will be added to that composite. */
- std::shared_ptr<dwarf_entry> add_piece (ULONGEST bit_size,
- ULONGEST bit_offset);
-
- /* The engine for the expression evaluator. Using the context in
- this object, evaluate the expression between OP_PTR and
- OP_END. */
- void execute_stack_op (const gdb_byte *op_ptr, const gdb_byte *op_end);
-
- /* Pop the top item off of the stack. */
- void pop ();
-
- /* Retrieve the N'th item on the stack. */
- std::shared_ptr<dwarf_entry> fetch (int n);
-
- /* Fetch the result of the expression evaluation in a form of
- a struct value, where TYPE, SUBOBJ_TYPE and SUBOBJ_OFFSET
- describe the source level representation of that result.
- AS_LVAL defines if the fetched struct value is expected to
- be a value or a location description. */
- struct value *fetch_result (struct type *type,
- struct type *subobj_type,
- LONGEST subobj_offset,
- bool as_lval);
-
- /* Return the location expression for the frame base attribute, in
- START and LENGTH. The result must be live until the current
- expression evaluation is complete. */
- void get_frame_base (const gdb_byte **start, size_t *length);
-
- /* Return the base type given by the indicated DIE at DIE_CU_OFF.
- This can throw an exception if the DIE is invalid or does not
- 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);
-
- /* 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
- DW_AT_call_value. */
- void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind,
- union call_site_parameter_u kind_u,
- int deref_size);
-};
+/* Evaluate the expression at ADDR (LEN bytes long) in a given PER_CU
+ FRAME context. The PER_OBJFILE contains a pointer to the PER_BFD
+ information. ADDR_SIZE defines a size of the DWARF generic type.
+ INIT_VALUES vector contains values that are expected to be pushed
+ on a DWARF expression stack before the evaluation. AS_LVAL defines
+ if the returned struct value is expected to be a value or a location
+ description. Where TYPE, SUBOBJ_TYPE and SUBOBJ_OFFSET describe
+ expected struct value representation of the evaluation result. The
+ ADDR_INFO property can be specified to override the range of memory
+ addresses with the passed in buffer. */
+struct value *dwarf2_evaluate (const gdb_byte *addr, size_t len, bool as_lval,
+ struct dwarf2_per_objfile *per_objfile,
+ struct dwarf2_per_cu_data *per_cu,
+ struct frame_info *frame, int addr_size,
+ std::vector<struct value *> *init_values,
+ const struct property_addr_info *addr_info,
+ struct type *type = nullptr,
+ struct type *subobj_type = nullptr,
+ LONGEST subobj_offset = 0);
+
+/* Return the address type used of the GDBARCH architecture and
+ ADDR_SIZE is expected size of the type. */
+struct type *address_type (struct gdbarch *gdbarch, int addr_size);
/* Return the value of register number REG (a DWARF register number),
read as an address in a given FRAME. */
diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index 51d308fd94f..97bd0d35319 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -228,11 +228,19 @@ execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size,
struct frame_info *this_frame, CORE_ADDR initial,
int initial_in_stack_memory, dwarf2_per_objfile *per_objfile)
{
- dwarf_expr_context ctx (per_objfile, addr_size);
scoped_value_mark free_values;
+ struct type *type = address_type (per_objfile->objfile->arch (),
+ addr_size);
- ctx.push_address (initial, initial_in_stack_memory);
- struct value *result_val = ctx.evaluate (exp, len, true, nullptr, this_frame);
+ struct value *init_value = value_at_lazy (type, initial);
+ std::vector<struct value *> init_values;
+
+ set_value_stack (init_value, initial_in_stack_memory);
+ init_values.push_back (init_value);
+
+ struct value *result_val
+ = dwarf2_evaluate (exp, len, true, per_objfile, nullptr,
+ this_frame, addr_size, &init_values, nullptr);
if (VALUE_LVAL (result_val) == lval_memory)
return value_address (result_val);
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index c53413a942f..7dfe28c3e46 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -1434,15 +1434,15 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
if (size == 0)
return allocate_optimized_out_value (subobj_type);
- dwarf_expr_context ctx (per_objfile, per_cu->addr_size ());
-
struct value *retval;
scoped_value_mark free_values;
try
{
- retval = ctx.evaluate (data, size, as_lval, per_cu, frame, nullptr,
- type, subobj_type, subobj_byte_offset);
+ retval
+ = dwarf2_evaluate (data, size, as_lval, per_objfile, per_cu,
+ frame, per_cu->addr_size (), nullptr, nullptr,
+ type, subobj_type, subobj_byte_offset);
}
catch (const gdb_exception_error &ex)
{
@@ -1513,23 +1513,28 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
struct dwarf2_per_cu_data *per_cu = dlbaton->per_cu;
- dwarf_expr_context ctx (per_objfile, per_cu->addr_size ());
struct value *result;
scoped_value_mark free_values;
+ std::vector<struct value *> init_values;
if (push_initial_value)
{
+ struct type *type = address_type (per_objfile->objfile->arch (),
+ per_cu->addr_size ());
+
if (addr_stack != nullptr)
- ctx.push_address (addr_stack->addr, false);
+ init_values.push_back (value_at_lazy (type, addr_stack->addr));
else
- ctx.push_address (0, false);
+ init_values.push_back (value_at_lazy (type, 0));
}
try
{
- result = ctx.evaluate (dlbaton->data, dlbaton->size,
- true, per_cu, frame, addr_stack);
+ result
+ = dwarf2_evaluate (dlbaton->data, dlbaton->size, true, per_objfile,
+ per_cu, frame, per_cu->addr_size (), &init_values,
+ addr_stack);
}
catch (const gdb_exception_error &ex)
{
--
2.17.1
next prev parent reply other threads:[~2021-03-01 14:48 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-01 14:45 [PATCH 00/43 V2] Allow location description on the DWARF stack Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 01/43] Replace the symbol needs evaluator with a parser Zoran Zaric via Gdb-patches
2021-04-27 1:20 ` Simon Marchi via Gdb-patches
2021-04-28 10:17 ` Zoran Zaric via Gdb-patches
2021-04-28 14:08 ` Simon Marchi via Gdb-patches
2021-04-28 15:02 ` Zoran Zaric via Gdb-patches
2021-04-28 15:31 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 02/43] Cleanup of the dwarf_expr_context constructor Zoran Zaric via Gdb-patches
2021-04-27 1:23 ` Simon Marchi via Gdb-patches
2021-04-28 10:19 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 03/43] Move frame context info to dwarf_expr_context Zoran Zaric via Gdb-patches
2021-04-27 2:19 ` Simon Marchi via Gdb-patches
2021-04-28 10:51 ` Zoran Zaric via Gdb-patches
2021-04-28 14:14 ` Simon Marchi via Gdb-patches
2021-04-28 15:55 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 04/43] Remove get_frame_cfa from dwarf_expr_context Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 05/43] Move compilation unit info to dwarf_expr_context Zoran Zaric via Gdb-patches
2021-04-27 2:58 ` Simon Marchi via Gdb-patches
2021-04-28 11:28 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 06/43] Move dwarf_call " Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 07/43] Move get_object_address " Zoran Zaric via Gdb-patches
2021-04-27 3:12 ` Simon Marchi via Gdb-patches
2021-04-28 11:34 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 08/43] Move read_mem " Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 09/43] Move push_dwarf_reg_entry_value to expr.c Zoran Zaric via Gdb-patches
2021-04-27 3:56 ` Simon Marchi via Gdb-patches
2021-04-28 11:36 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 10/43] Inline get_reg_value method of dwarf_expr_context Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 11/43] Remove empty frame and full evaluators Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 12/43] Merge evaluate_for_locexpr_baton evaluator Zoran Zaric via Gdb-patches
2021-04-28 1:33 ` Simon Marchi via Gdb-patches
2021-04-28 11:39 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 13/43] Move piece_closure and its support to expr.c Zoran Zaric via Gdb-patches
2021-04-28 1:56 ` Simon Marchi via Gdb-patches
2021-04-28 11:40 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 14/43] Make value_copy also copy the stack data member Zoran Zaric via Gdb-patches
2021-04-28 2:01 ` Simon Marchi via Gdb-patches
2021-04-28 11:43 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 15/43] Make DWARF evaluator return a single struct value Zoran Zaric via Gdb-patches
2021-04-28 2:21 ` Simon Marchi via Gdb-patches
2021-04-28 11:47 ` Zoran Zaric via Gdb-patches
2021-04-28 14:24 ` Simon Marchi via Gdb-patches
2021-03-01 14:45 ` [PATCH 16/43] Simplify dwarf_expr_context class interface Zoran Zaric via Gdb-patches
2021-04-28 2:45 ` Simon Marchi via Gdb-patches
2021-04-28 13:15 ` Zoran Zaric via Gdb-patches
2021-04-28 14:41 ` Simon Marchi via Gdb-patches
2021-04-28 15:39 ` Zoran Zaric via Gdb-patches
2021-04-28 19:19 ` Simon Marchi via Gdb-patches
2021-04-29 15:49 ` Simon Marchi via Gdb-patches
2021-04-29 15:55 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 17/43] Add as_lval argument to expression evaluator Zoran Zaric via Gdb-patches
2021-04-28 3:04 ` Simon Marchi via Gdb-patches
2021-04-28 13:16 ` Zoran Zaric via Gdb-patches
2021-04-28 3:30 ` Simon Marchi via Gdb-patches
2021-03-01 14:45 ` [PATCH 18/43] Add new register access interface to expr.c Zoran Zaric via Gdb-patches
2021-03-08 23:52 ` Lancelot SIX via Gdb-patches
2021-04-28 3:25 ` Simon Marchi via Gdb-patches
2021-04-28 13:29 ` Zoran Zaric via Gdb-patches
2021-04-28 14:48 ` Simon Marchi via Gdb-patches
2021-04-28 15:42 ` Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 19/43] Add new memory " Zoran Zaric via Gdb-patches
2021-04-30 21:24 ` Simon Marchi via Gdb-patches
2021-03-01 14:45 ` [PATCH 20/43] Add new classes that model DWARF stack element Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 21/43] Add to_location method to DWARF entry classes Zoran Zaric via Gdb-patches
2021-03-01 14:45 ` [PATCH 22/43] Add to_value " Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 23/43] Add read method to location description classes Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 24/43] Add write " Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 25/43] Add deref " Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 26/43] Add read_from_gdb_value method to dwarf_location Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 27/43] Add write_to_gdb_value " Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 28/43] Add is_implicit_ptr_at " Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 29/43] Add indirect_implicit_ptr to dwarf_location class Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 30/43] Add new computed struct value callback interface Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 31/43] Add to_gdb_value method to DWARF entry class Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 32/43] Change DWARF stack to use new dwarf_entry classes Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 33/43] Remove old computed struct value callbacks Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 34/43] Comments cleanup between expr.h and expr.c Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` Zoran Zaric via Gdb-patches [this message]
2021-03-01 14:46 ` [PATCH 36/43] Move read_addr_from_reg function to frame.c Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 37/43] Add frame info check to DW_OP_reg operations Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 38/43] Remove DWARF expression composition check Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 39/43] Change back the symbol needs to use the evaluator Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 40/43] Add support for any location description in CFI Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 41/43] Add DWARF operations for byte and bit offset Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 42/43] Add support for DW_OP_LLVM_undefined operation Zoran Zaric via Gdb-patches
2021-03-01 14:46 ` [PATCH 43/43] Add support for nested composite locations Zoran Zaric via Gdb-patches
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210301144620.103016-36-Zoran.Zaric@amd.com \
--to=gdb-patches@sourceware.org \
--cc=Zoran.Zaric@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox