aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2expr.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/dwarf2expr.h')
-rw-r--r--gdb/dwarf2expr.h29
1 files changed, 21 insertions, 8 deletions
diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h
index 78ff53f..281c65b 100644
--- a/gdb/dwarf2expr.h
+++ b/gdb/dwarf2expr.h
@@ -51,7 +51,7 @@ enum dwarf_value_location
struct dwarf_stack_value
{
- ULONGEST value;
+ struct value *value;
/* Non-zero if the piece is in memory and is known to be
on the program's stack. It is always ok to set this to zero.
@@ -81,6 +81,10 @@ struct dwarf_expr_context
/* Offset used to relocate DW_OP_addr argument. */
CORE_ADDR offset;
+ /* The evaluator is value-based, and frees values up to this point
+ when the expression context is destroyed. */
+ struct value *mark;
+
/* An opaque argument provided by the caller, which will be passed
to all of the callback functions. */
void *baton;
@@ -111,6 +115,13 @@ struct dwarf_expr_context
being passed to and returned from the called DWARF subroutine. */
void (*dwarf_call) (struct dwarf_expr_context *ctx, size_t die_offset);
+ /* Return the base type given by the indicated DIE. This can throw
+ an exception if the DIE is invalid or does not represent a base
+ type. If can also be NULL in the special case where the
+ callbacks are not performing evaluation, and thus it is
+ meaningful to substitute a stub type of the correct size. */
+ struct type *(*get_base_type) (struct dwarf_expr_context *ctx, size_t die);
+
#if 0
/* Not yet implemented. */
@@ -180,9 +191,11 @@ struct dwarf_expr_piece
int in_stack_memory;
} mem;
- /* The piece's register number or literal value, for
- DWARF_VALUE_REGISTER or DWARF_VALUE_STACK pieces. */
- ULONGEST value;
+ /* The piece's register number, for DWARF_VALUE_REGISTER pieces. */
+ int regno;
+
+ /* The piece's literal value, for DWARF_VALUE_STACK pieces. */
+ struct value *value;
struct
{
@@ -214,12 +227,12 @@ void free_dwarf_expr_context (struct dwarf_expr_context *ctx);
struct cleanup *
make_cleanup_free_dwarf_expr_context (struct dwarf_expr_context *ctx);
-void dwarf_expr_push (struct dwarf_expr_context *ctx, ULONGEST value,
- int in_stack_memory);
-void dwarf_expr_pop (struct dwarf_expr_context *ctx);
+void dwarf_expr_push_address (struct dwarf_expr_context *ctx,
+ CORE_ADDR value,
+ int in_stack_memory);
void dwarf_expr_eval (struct dwarf_expr_context *ctx, const gdb_byte *addr,
size_t len);
-ULONGEST dwarf_expr_fetch (struct dwarf_expr_context *ctx, int n);
+struct value *dwarf_expr_fetch (struct dwarf_expr_context *ctx, int n);
CORE_ADDR dwarf_expr_fetch_address (struct dwarf_expr_context *ctx, int n);
int dwarf_expr_fetch_in_stack_memory (struct dwarf_expr_context *ctx, int n);