forked from Imagelibrary/binutils-gdb
gdb/
Code cleanup. * dwarf2-frame.c (dwarf2_frame_ctx_funcs): New. (execute_stack_op): Use dwarf2_frame_ctx_funcs * dwarf2expr.c (dwarf_get_base_type): Access get_base_type via funcs. (execute_stack_op): Access read_reg, get_frame_base, read_mem, get_frame_cfa, get_tls_address and dwarf_call via funcs. * dwarf2expr.h (struct dwarf_expr_context): New forward declaration. (struct dwarf_expr_context_funcs): New, move here methods from ... (struct dwarf_expr_context): ... here. New fields funcs. * dwarf2loc.c (dwarf_expr_dwarf_call): Access get_frame_pc via funcs. (dwarf_expr_ctx_funcs): New. (dwarf2_evaluate_loc_desc_full): Use dwarf_expr_ctx_funcs. (needs_frame_dwarf_call): Access get_frame_pc via funcs. (needs_frame_ctx_funcs): New. (dwarf2_loc_desc_needs_frame): Use needs_frame_ctx_funcs.
This commit is contained in:
@@ -283,7 +283,7 @@ dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
|
||||
struct dwarf_expr_baton *debaton = ctx->baton;
|
||||
|
||||
per_cu_dwarf_call (ctx, die_offset, debaton->per_cu,
|
||||
ctx->get_frame_pc, ctx->baton);
|
||||
ctx->funcs->get_frame_pc, ctx->baton);
|
||||
}
|
||||
|
||||
/* Callback function for dwarf2_evaluate_loc_desc. */
|
||||
@@ -1072,6 +1072,20 @@ invalid_synthetic_pointer (void)
|
||||
"referenced via synthetic pointer"));
|
||||
}
|
||||
|
||||
/* Virtual method table for dwarf2_evaluate_loc_desc_full below. */
|
||||
|
||||
static const struct dwarf_expr_context_funcs dwarf_expr_ctx_funcs =
|
||||
{
|
||||
dwarf_expr_read_reg,
|
||||
dwarf_expr_read_mem,
|
||||
dwarf_expr_frame_base,
|
||||
dwarf_expr_frame_cfa,
|
||||
dwarf_expr_frame_pc,
|
||||
dwarf_expr_tls_address,
|
||||
dwarf_expr_dwarf_call,
|
||||
dwarf_expr_get_base_type
|
||||
};
|
||||
|
||||
/* Evaluate a location description, starting at DATA and with length
|
||||
SIZE, to find the current location of variable of TYPE in the
|
||||
context of FRAME. BYTE_OFFSET is applied after the contents are
|
||||
@@ -1107,14 +1121,7 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
|
||||
ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
|
||||
ctx->offset = dwarf2_per_cu_text_offset (per_cu);
|
||||
ctx->baton = &baton;
|
||||
ctx->read_reg = dwarf_expr_read_reg;
|
||||
ctx->read_mem = dwarf_expr_read_mem;
|
||||
ctx->get_frame_base = dwarf_expr_frame_base;
|
||||
ctx->get_frame_cfa = dwarf_expr_frame_cfa;
|
||||
ctx->get_frame_pc = dwarf_expr_frame_pc;
|
||||
ctx->get_tls_address = dwarf_expr_tls_address;
|
||||
ctx->dwarf_call = dwarf_expr_dwarf_call;
|
||||
ctx->get_base_type = dwarf_expr_get_base_type;
|
||||
ctx->funcs = &dwarf_expr_ctx_funcs;
|
||||
|
||||
TRY_CATCH (ex, RETURN_MASK_ERROR)
|
||||
{
|
||||
@@ -1341,9 +1348,23 @@ needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
|
||||
struct needs_frame_baton *nf_baton = ctx->baton;
|
||||
|
||||
per_cu_dwarf_call (ctx, die_offset, nf_baton->per_cu,
|
||||
ctx->get_frame_pc, ctx->baton);
|
||||
ctx->funcs->get_frame_pc, ctx->baton);
|
||||
}
|
||||
|
||||
/* Virtual method table for dwarf2_loc_desc_needs_frame below. */
|
||||
|
||||
static const struct dwarf_expr_context_funcs needs_frame_ctx_funcs =
|
||||
{
|
||||
needs_frame_read_reg,
|
||||
needs_frame_read_mem,
|
||||
needs_frame_frame_base,
|
||||
needs_frame_frame_cfa,
|
||||
needs_frame_frame_cfa, /* get_frame_pc */
|
||||
needs_frame_tls_address,
|
||||
needs_frame_dwarf_call,
|
||||
NULL /* get_base_type */
|
||||
};
|
||||
|
||||
/* Return non-zero iff the location expression at DATA (length SIZE)
|
||||
requires a frame to evaluate. */
|
||||
|
||||
@@ -1368,13 +1389,7 @@ dwarf2_loc_desc_needs_frame (const gdb_byte *data, unsigned short size,
|
||||
ctx->addr_size = dwarf2_per_cu_addr_size (per_cu);
|
||||
ctx->offset = dwarf2_per_cu_text_offset (per_cu);
|
||||
ctx->baton = &baton;
|
||||
ctx->read_reg = needs_frame_read_reg;
|
||||
ctx->read_mem = needs_frame_read_mem;
|
||||
ctx->get_frame_base = needs_frame_frame_base;
|
||||
ctx->get_frame_cfa = needs_frame_frame_cfa;
|
||||
ctx->get_frame_pc = needs_frame_frame_cfa;
|
||||
ctx->get_tls_address = needs_frame_tls_address;
|
||||
ctx->dwarf_call = needs_frame_dwarf_call;
|
||||
ctx->funcs = &needs_frame_ctx_funcs;
|
||||
|
||||
dwarf_expr_eval (ctx, data, size);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user