Code cleanupp: Use cu_offset and sect_offset compile time type checking.
	* dwarf2expr.c (add_piece, dwarf_get_base_type, execute_stack_op)
	(ctx_no_dwarf_call, ctx_no_get_base_type): Use cu_offset and
	sect_offset.
	* dwarf2expr.h (cu_offset, sect_offset): New types.
	(struct dwarf_expr_context_funcs) <dwarf_call>
	(struct dwarf_expr_context_funcs) <get_base_type>: Use cu_offset and
	sect_offset.
	(struct dwarf_expr_context) <len>: Improve the comment.
	(struct dwarf_expr_piece, ctx_no_dwarf_call, ctx_no_get_base_type): Use
	cu_offset and sect_offset.
	* dwarf2loc.c (per_cu_dwarf_call, dwarf_expr_dwarf_call)
	(dwarf_expr_get_base_type, needs_frame_dwarf_call)
	(dwarf2_compile_expr_to_ax, disassemble_dwarf_expression): Likewise.
	* dwarf2loc.h: Include dwarf2expr.h.
	(dwarf2_fetch_die_location_block, dwarf2_get_die_type): Use cu_offset
	and sect_offset.
	* dwarf2read.c (struct dwarf2_per_objfile) <debug_types_type_hash>:
	Improve the comment.
	(struct comp_unit_head, struct dwarf2_cu, struct dwarf2_per_cu_data)
	(struct signatured_type, struct line_header, struct partial_die_info)
	(struct die_info, find_partial_die, dwarf2_get_ref_die_offset)
	(lookup_signatured_type_at_offset, dwarf2_find_containing_comp_unit)
	(get_die_type_at_offset, create_cus_from_index)
	(create_signatured_type_table_from_index, dw2_get_file_names)
	(offset_in_cu_p, read_comp_unit_head, error_check_comp_unit_head)
	(read_and_check_comp_unit_head, read_and_check_type_unit_head)
	(create_debug_types_hash_table, process_psymtab_comp_unit)
	(load_partial_comp_unit, create_all_comp_units)
	(partial_die_parent_scope, partial_die_full_name, skip_one_die)
	(load_full_comp_unit, dwarf2_physname, read_import_statement)
	(inherit_abstract_dies, read_func_scope, read_call_site_scope)
	(dwarf2_add_member_fn, process_enumeration_scope, read_module_type)
	(read_typedef, die_hash, die_eq, read_full_die, dwarf2_read_abbrevs)
	(load_partial_dies, read_partial_die, find_partial_die_in_comp_unit)
	(find_partial_die, read_attribute_value, lookup_die_type)
	(dump_die_shallow, store_in_ref_table): Use cu_offset and sect_offset.
	(is_ref_attr): New function comment.
	(dwarf2_get_ref_die_offset): New function comment, new variable retval.
	Use cu_offset and sect_offset.
	(follow_die_offset, follow_die_ref, dwarf2_fetch_die_location_block)
	(dwarf2_get_die_type, follow_die_sig, lookup_signatured_type_at_offset)
	(load_full_type_unit, read_signatured_type, per_cu_header_read_in)
	(dwarf2_find_containing_comp_unit, struct dwarf2_offset_and_type)
	(offset_and_type_hash, offset_and_type_eq, set_die_type)
	(get_die_type_at_offset, partial_die_hash, partial_die_eq)
	(write_one_signatured_type, write_psymtabs_to_index): Use cu_offset and
	sect_offset.
This commit is contained in:
Jan Kratochvil 2012-03-19 19:59:19 +00:00
parent 2e98ca5343
commit b64f50a1ae
6 changed files with 334 additions and 212 deletions

View file

@ -1,3 +1,54 @@
2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
Code cleanupp: Use cu_offset and sect_offset compile time type checking.
* dwarf2expr.c (add_piece, dwarf_get_base_type, execute_stack_op)
(ctx_no_dwarf_call, ctx_no_get_base_type): Use cu_offset and
sect_offset.
* dwarf2expr.h (cu_offset, sect_offset): New types.
(struct dwarf_expr_context_funcs) <dwarf_call>
(struct dwarf_expr_context_funcs) <get_base_type>: Use cu_offset and
sect_offset.
(struct dwarf_expr_context) <len>: Improve the comment.
(struct dwarf_expr_piece, ctx_no_dwarf_call, ctx_no_get_base_type): Use
cu_offset and sect_offset.
* dwarf2loc.c (per_cu_dwarf_call, dwarf_expr_dwarf_call)
(dwarf_expr_get_base_type, needs_frame_dwarf_call)
(dwarf2_compile_expr_to_ax, disassemble_dwarf_expression): Likewise.
* dwarf2loc.h: Include dwarf2expr.h.
(dwarf2_fetch_die_location_block, dwarf2_get_die_type): Use cu_offset
and sect_offset.
* dwarf2read.c (struct dwarf2_per_objfile) <debug_types_type_hash>:
Improve the comment.
(struct comp_unit_head, struct dwarf2_cu, struct dwarf2_per_cu_data)
(struct signatured_type, struct line_header, struct partial_die_info)
(struct die_info, find_partial_die, dwarf2_get_ref_die_offset)
(lookup_signatured_type_at_offset, dwarf2_find_containing_comp_unit)
(get_die_type_at_offset, create_cus_from_index)
(create_signatured_type_table_from_index, dw2_get_file_names)
(offset_in_cu_p, read_comp_unit_head, error_check_comp_unit_head)
(read_and_check_comp_unit_head, read_and_check_type_unit_head)
(create_debug_types_hash_table, process_psymtab_comp_unit)
(load_partial_comp_unit, create_all_comp_units)
(partial_die_parent_scope, partial_die_full_name, skip_one_die)
(load_full_comp_unit, dwarf2_physname, read_import_statement)
(inherit_abstract_dies, read_func_scope, read_call_site_scope)
(dwarf2_add_member_fn, process_enumeration_scope, read_module_type)
(read_typedef, die_hash, die_eq, read_full_die, dwarf2_read_abbrevs)
(load_partial_dies, read_partial_die, find_partial_die_in_comp_unit)
(find_partial_die, read_attribute_value, lookup_die_type)
(dump_die_shallow, store_in_ref_table): Use cu_offset and sect_offset.
(is_ref_attr): New function comment.
(dwarf2_get_ref_die_offset): New function comment, new variable retval.
Use cu_offset and sect_offset.
(follow_die_offset, follow_die_ref, dwarf2_fetch_die_location_block)
(dwarf2_get_die_type, follow_die_sig, lookup_signatured_type_at_offset)
(load_full_type_unit, read_signatured_type, per_cu_header_read_in)
(dwarf2_find_containing_comp_unit, struct dwarf2_offset_and_type)
(offset_and_type_hash, offset_and_type_eq, set_die_type)
(get_die_type_at_offset, partial_die_hash, partial_die_eq)
(write_one_signatured_type, write_psymtabs_to_index): Use cu_offset and
sect_offset.
2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com> 2012-03-19 Jan Kratochvil <jan.kratochvil@redhat.com>
Code cleanup. Code cleanup.

View file

@ -342,7 +342,7 @@ add_piece (struct dwarf_expr_context *ctx, ULONGEST size, ULONGEST offset)
} }
else if (p->location == DWARF_VALUE_IMPLICIT_POINTER) else if (p->location == DWARF_VALUE_IMPLICIT_POINTER)
{ {
p->v.ptr.die = ctx->len; p->v.ptr.die.cu_off = ctx->len;
p->v.ptr.offset = value_as_long (dwarf_expr_fetch (ctx, 0)); p->v.ptr.offset = value_as_long (dwarf_expr_fetch (ctx, 0));
} }
else if (p->location == DWARF_VALUE_REGISTER) else if (p->location == DWARF_VALUE_REGISTER)
@ -464,7 +464,7 @@ base_types_equal_p (struct type *t1, struct type *t2)
size. */ size. */
static struct type * static struct type *
dwarf_get_base_type (struct dwarf_expr_context *ctx, ULONGEST die, int size) dwarf_get_base_type (struct dwarf_expr_context *ctx, cu_offset die, int size)
{ {
struct type *result; struct type *result;
@ -869,7 +869,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
error (_("DWARF-2 expression error: DW_OP_GNU_implicit_pointer " error (_("DWARF-2 expression error: DW_OP_GNU_implicit_pointer "
"is not allowed in frame context")); "is not allowed in frame context"));
/* The referred-to DIE. */ /* The referred-to DIE of cu_offset kind. */
ctx->len = extract_unsigned_integer (op_ptr, ctx->ref_addr_size, ctx->len = extract_unsigned_integer (op_ptr, ctx->ref_addr_size,
byte_order); byte_order);
op_ptr += ctx->ref_addr_size; op_ptr += ctx->ref_addr_size;
@ -1031,9 +1031,10 @@ execute_stack_op (struct dwarf_expr_context *ctx,
if (op == DW_OP_GNU_deref_type) if (op == DW_OP_GNU_deref_type)
{ {
ULONGEST type_die; cu_offset type_die;
op_ptr = read_uleb128 (op_ptr, op_end, &type_die); op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
type_die.cu_off = uoffset;
type = dwarf_get_base_type (ctx, type_die, 0); type = dwarf_get_base_type (ctx, type_die, 0);
} }
else else
@ -1335,15 +1336,23 @@ execute_stack_op (struct dwarf_expr_context *ctx,
goto no_push; goto no_push;
case DW_OP_call2: case DW_OP_call2:
result = extract_unsigned_integer (op_ptr, 2, byte_order); {
cu_offset offset;
offset.cu_off = extract_unsigned_integer (op_ptr, 2, byte_order);
op_ptr += 2; op_ptr += 2;
ctx->funcs->dwarf_call (ctx, result); ctx->funcs->dwarf_call (ctx, offset);
}
goto no_push; goto no_push;
case DW_OP_call4: case DW_OP_call4:
result = extract_unsigned_integer (op_ptr, 4, byte_order); {
cu_offset offset;
offset.cu_off = extract_unsigned_integer (op_ptr, 4, byte_order);
op_ptr += 4; op_ptr += 4;
ctx->funcs->dwarf_call (ctx, result); ctx->funcs->dwarf_call (ctx, offset);
}
goto no_push; goto no_push;
case DW_OP_GNU_entry_value: case DW_OP_GNU_entry_value:
@ -1386,12 +1395,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
case DW_OP_GNU_const_type: case DW_OP_GNU_const_type:
{ {
ULONGEST type_die; cu_offset type_die;
int n; int n;
const gdb_byte *data; const gdb_byte *data;
struct type *type; struct type *type;
op_ptr = read_uleb128 (op_ptr, op_end, &type_die); op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
type_die.cu_off = uoffset;
n = *op_ptr++; n = *op_ptr++;
data = op_ptr; data = op_ptr;
op_ptr += n; op_ptr += n;
@ -1403,11 +1413,12 @@ execute_stack_op (struct dwarf_expr_context *ctx,
case DW_OP_GNU_regval_type: case DW_OP_GNU_regval_type:
{ {
ULONGEST type_die; cu_offset type_die;
struct type *type; struct type *type;
op_ptr = read_uleb128 (op_ptr, op_end, &reg); op_ptr = read_uleb128 (op_ptr, op_end, &reg);
op_ptr = read_uleb128 (op_ptr, op_end, &type_die); op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
type_die.cu_off = uoffset;
type = dwarf_get_base_type (ctx, type_die, 0); type = dwarf_get_base_type (ctx, type_die, 0);
result = (ctx->funcs->read_reg) (ctx->baton, reg); result = (ctx->funcs->read_reg) (ctx->baton, reg);
@ -1420,12 +1431,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
case DW_OP_GNU_convert: case DW_OP_GNU_convert:
case DW_OP_GNU_reinterpret: case DW_OP_GNU_reinterpret:
{ {
ULONGEST type_die; cu_offset type_die;
struct type *type; struct type *type;
op_ptr = read_uleb128 (op_ptr, op_end, &type_die); op_ptr = read_uleb128 (op_ptr, op_end, &uoffset);
type_die.cu_off = uoffset;
if (type_die == 0) if (type_die.cu_off == 0)
type = address_type; type = address_type;
else else
type = dwarf_get_base_type (ctx, type_die, 0); type = dwarf_get_base_type (ctx, type_die, 0);
@ -1506,7 +1518,7 @@ ctx_no_get_tls_address (void *baton, CORE_ADDR offset)
/* Stub dwarf_expr_context_funcs.dwarf_call implementation. */ /* Stub dwarf_expr_context_funcs.dwarf_call implementation. */
void void
ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset) ctx_no_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
{ {
error (_("%s is invalid in this context"), "DW_OP_call*"); error (_("%s is invalid in this context"), "DW_OP_call*");
} }
@ -1514,7 +1526,7 @@ ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
/* Stub dwarf_expr_context_funcs.get_base_type implementation. */ /* Stub dwarf_expr_context_funcs.get_base_type implementation. */
struct type * struct type *
ctx_no_get_base_type (struct dwarf_expr_context *ctx, size_t die) ctx_no_get_base_type (struct dwarf_expr_context *ctx, cu_offset die)
{ {
error (_("Support for typed DWARF is not supported in this context")); error (_("Support for typed DWARF is not supported in this context"));
} }

View file

@ -25,6 +25,18 @@
struct dwarf_expr_context; struct dwarf_expr_context;
/* Offset relative to the start of its containing CU (compilation unit). */
typedef struct
{
unsigned int cu_off;
} cu_offset;
/* Offset relative to the start of its .debug_info or .debug_types section. */
typedef struct
{
unsigned int sect_off;
} sect_offset;
/* Virtual method table for struct dwarf_expr_context below. */ /* Virtual method table for struct dwarf_expr_context below. */
struct dwarf_expr_context_funcs struct dwarf_expr_context_funcs
@ -53,14 +65,14 @@ struct dwarf_expr_context_funcs
/* Execute DW_AT_location expression for the DWARF expression subroutine in /* Execute DW_AT_location expression for the DWARF expression subroutine in
the DIE at DIE_OFFSET in the CU from CTX. Do not touch STACK while it the DIE at DIE_OFFSET in the CU from CTX. Do not touch STACK while it
being passed to and returned from the called DWARF subroutine. */ being passed to and returned from the called DWARF subroutine. */
void (*dwarf_call) (struct dwarf_expr_context *ctx, size_t die_offset); void (*dwarf_call) (struct dwarf_expr_context *ctx, cu_offset die_offset);
/* Return the base type given by the indicated DIE. This can throw /* 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 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 type. If can also be NULL in the special case where the
callbacks are not performing evaluation, and thus it is callbacks are not performing evaluation, and thus it is
meaningful to substitute a stub type of the correct size. */ meaningful to substitute a stub type of the correct size. */
struct type *(*get_base_type) (struct dwarf_expr_context *ctx, size_t die); struct type *(*get_base_type) (struct dwarf_expr_context *ctx, cu_offset die);
/* Push on DWARF stack an entry evaluated for DW_TAG_GNU_call_site's /* Push on DWARF stack an entry evaluated for DW_TAG_GNU_call_site's
DWARF_REG/FB_OFFSET at the caller of specified BATON. If DWARF register DWARF_REG/FB_OFFSET at the caller of specified BATON. If DWARF register
@ -160,7 +172,7 @@ struct dwarf_expr_context
/* For DWARF_VALUE_LITERAL, the current literal value's length and /* For DWARF_VALUE_LITERAL, the current literal value's length and
data. For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the data. For DWARF_VALUE_IMPLICIT_POINTER, LEN is the offset of the
target DIE. */ target DIE of cu_offset kind. */
ULONGEST len; ULONGEST len;
const gdb_byte *data; const gdb_byte *data;
@ -231,7 +243,7 @@ struct dwarf_expr_piece
struct struct
{ {
/* The referent DIE from DW_OP_GNU_implicit_pointer. */ /* The referent DIE from DW_OP_GNU_implicit_pointer. */
ULONGEST die; cu_offset die;
/* The byte offset into the resulting data. */ /* The byte offset into the resulting data. */
LONGEST offset; LONGEST offset;
} ptr; } ptr;
@ -275,8 +287,9 @@ void ctx_no_get_frame_base (void *baton, const gdb_byte **start,
CORE_ADDR ctx_no_get_frame_cfa (void *baton); CORE_ADDR ctx_no_get_frame_cfa (void *baton);
CORE_ADDR ctx_no_get_frame_pc (void *baton); CORE_ADDR ctx_no_get_frame_pc (void *baton);
CORE_ADDR ctx_no_get_tls_address (void *baton, CORE_ADDR offset); CORE_ADDR ctx_no_get_tls_address (void *baton, CORE_ADDR offset);
void ctx_no_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset); void ctx_no_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset);
struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx, size_t die); struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx,
cu_offset die);
void ctx_no_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx, void ctx_no_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
int dwarf_reg, CORE_ADDR fb_offset, int dwarf_reg, CORE_ADDR fb_offset,
int deref_size); int deref_size);

View file

@ -284,7 +284,7 @@ dwarf_expr_tls_address (void *baton, CORE_ADDR offset)
call and return. */ call and return. */
static void static void
per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset, per_cu_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset,
struct dwarf2_per_cu_data *per_cu, struct dwarf2_per_cu_data *per_cu,
CORE_ADDR (*get_frame_pc) (void *baton), CORE_ADDR (*get_frame_pc) (void *baton),
void *baton) void *baton)
@ -303,7 +303,7 @@ per_cu_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset,
/* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc. */ /* Helper interface of per_cu_dwarf_call for dwarf2_evaluate_loc_desc. */
static void static void
dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset) dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
{ {
struct dwarf_expr_baton *debaton = ctx->baton; struct dwarf_expr_baton *debaton = ctx->baton;
@ -314,7 +314,8 @@ dwarf_expr_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset)
/* Callback function for dwarf2_evaluate_loc_desc. */ /* Callback function for dwarf2_evaluate_loc_desc. */
static struct type * static struct type *
dwarf_expr_get_base_type (struct dwarf_expr_context *ctx, size_t die_offset) dwarf_expr_get_base_type (struct dwarf_expr_context *ctx,
cu_offset die_offset)
{ {
struct dwarf_expr_baton *debaton = ctx->baton; struct dwarf_expr_baton *debaton = ctx->baton;
@ -2221,7 +2222,7 @@ needs_frame_tls_address (void *baton, CORE_ADDR offset)
/* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */ /* Helper interface of per_cu_dwarf_call for dwarf2_loc_desc_needs_frame. */
static void static void
needs_frame_dwarf_call (struct dwarf_expr_context *ctx, size_t die_offset) needs_frame_dwarf_call (struct dwarf_expr_context *ctx, cu_offset die_offset)
{ {
struct needs_frame_baton *nf_baton = ctx->baton; struct needs_frame_baton *nf_baton = ctx->baton;
@ -3014,11 +3015,13 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
{ {
struct dwarf2_locexpr_baton block; struct dwarf2_locexpr_baton block;
int size = (op == DW_OP_call2 ? 2 : 4); int size = (op == DW_OP_call2 ? 2 : 4);
cu_offset offset;
uoffset = extract_unsigned_integer (op_ptr, size, byte_order); uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
op_ptr += size; op_ptr += size;
block = dwarf2_fetch_die_location_block (uoffset, per_cu, offset.cu_off = uoffset;
block = dwarf2_fetch_die_location_block (offset, per_cu,
get_ax_pc, expr); get_ax_pc, expr);
/* DW_OP_call_ref is currently not supported. */ /* DW_OP_call_ref is currently not supported. */
@ -3517,43 +3520,48 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_GNU_deref_type: case DW_OP_GNU_deref_type:
{ {
int addr_size = *data++; int addr_size = *data++;
ULONGEST offset; cu_offset offset;
struct type *type; struct type *type;
data = read_uleb128 (data, end, &offset); data = read_uleb128 (data, end, &ul);
offset.cu_off = ul;
type = dwarf2_get_die_type (offset, per_cu); type = dwarf2_get_die_type (offset, per_cu);
fprintf_filtered (stream, "<"); fprintf_filtered (stream, "<");
type_print (type, "", stream, -1); type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset, 0), fprintf_filtered (stream, " [0x%s]> %d", phex_nz (offset.cu_off, 0),
addr_size); addr_size);
} }
break; break;
case DW_OP_GNU_const_type: case DW_OP_GNU_const_type:
{ {
ULONGEST type_die; cu_offset type_die;
struct type *type; struct type *type;
data = read_uleb128 (data, end, &type_die); data = read_uleb128 (data, end, &ul);
type_die.cu_off = ul;
type = dwarf2_get_die_type (type_die, per_cu); type = dwarf2_get_die_type (type_die, per_cu);
fprintf_filtered (stream, "<"); fprintf_filtered (stream, "<");
type_print (type, "", stream, -1); type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0)); fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
} }
break; break;
case DW_OP_GNU_regval_type: case DW_OP_GNU_regval_type:
{ {
ULONGEST type_die, reg; ULONGEST reg;
cu_offset type_die;
struct type *type; struct type *type;
data = read_uleb128 (data, end, &reg); data = read_uleb128 (data, end, &reg);
data = read_uleb128 (data, end, &type_die); data = read_uleb128 (data, end, &ul);
type_die.cu_off = ul;
type = dwarf2_get_die_type (type_die, per_cu); type = dwarf2_get_die_type (type_die, per_cu);
fprintf_filtered (stream, "<"); fprintf_filtered (stream, "<");
type_print (type, "", stream, -1); type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]> [$%s]", phex_nz (type_die, 0), fprintf_filtered (stream, " [0x%s]> [$%s]",
phex_nz (type_die.cu_off, 0),
locexpr_regname (arch, reg)); locexpr_regname (arch, reg));
} }
break; break;
@ -3561,11 +3569,12 @@ disassemble_dwarf_expression (struct ui_file *stream,
case DW_OP_GNU_convert: case DW_OP_GNU_convert:
case DW_OP_GNU_reinterpret: case DW_OP_GNU_reinterpret:
{ {
ULONGEST type_die; cu_offset type_die;
data = read_uleb128 (data, end, &type_die); data = read_uleb128 (data, end, &ul);
type_die.cu_off = ul;
if (type_die == 0) if (type_die.cu_off == 0)
fprintf_filtered (stream, "<0>"); fprintf_filtered (stream, "<0>");
else else
{ {
@ -3574,7 +3583,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
type = dwarf2_get_die_type (type_die, per_cu); type = dwarf2_get_die_type (type_die, per_cu);
fprintf_filtered (stream, "<"); fprintf_filtered (stream, "<");
type_print (type, "", stream, -1); type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die, 0)); fprintf_filtered (stream, " [0x%s]>", phex_nz (type_die.cu_off, 0));
} }
} }
break; break;

View file

@ -20,6 +20,8 @@
#if !defined (DWARF2LOC_H) #if !defined (DWARF2LOC_H)
#define DWARF2LOC_H #define DWARF2LOC_H
#include "dwarf2expr.h"
struct symbol_computed_ops; struct symbol_computed_ops;
struct objfile; struct objfile;
struct dwarf2_per_cu_data; struct dwarf2_per_cu_data;
@ -61,11 +63,11 @@ const gdb_byte *dwarf2_find_location_expression
CORE_ADDR pc); CORE_ADDR pc);
struct dwarf2_locexpr_baton dwarf2_fetch_die_location_block struct dwarf2_locexpr_baton dwarf2_fetch_die_location_block
(unsigned int offset_in_cu, struct dwarf2_per_cu_data *per_cu, (cu_offset offset_in_cu, struct dwarf2_per_cu_data *per_cu,
CORE_ADDR (*get_frame_pc) (void *baton), CORE_ADDR (*get_frame_pc) (void *baton),
void *baton); void *baton);
struct type *dwarf2_get_die_type (unsigned int die_offset, struct type *dwarf2_get_die_type (cu_offset die_offset,
struct dwarf2_per_cu_data *per_cu); struct dwarf2_per_cu_data *per_cu);
/* Evaluate a location description, starting at DATA and with length /* Evaluate a location description, starting at DATA and with length

File diff suppressed because it is too large Load diff