unsigned int addr_size,
const gdb_byte *op_ptr, const gdb_byte *op_end,
CORE_ADDR *initial,
- struct dwarf2_per_cu_data *per_cu)
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile)
{
/* We keep a counter so that labels and other objects we create have
unique names. */
index, not an address. We don't support things like
branching between the address and the TLS op. */
if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
- uoffset += per_cu->text_offset ();
+ uoffset += per_objfile->objfile->text_section_offset ();
push (indent, stream, uoffset);
break;
sym, pc,
arch, registers_used, addr_size,
datastart, datastart + datalen,
- NULL, per_cu);
+ NULL, per_cu, per_objfile);
pushf (indent, stream, "%s + %s", fb_name, hex_string (offset));
}
sym, pc, arch, registers_used,
addr_size,
cfa_start, cfa_end,
- &text_offset, per_cu);
+ &text_offset, per_cu, per_objfile);
pushf (indent, stream, "%s", cfa_name);
}
}
struct gdbarch *arch, unsigned char *registers_used,
unsigned int addr_size,
const gdb_byte *op_ptr, const gdb_byte *op_end,
- struct dwarf2_per_cu_data *per_cu)
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile)
{
do_compile_dwarf_expr_to_c (2, stream, GCC_UINTPTR, result_name, sym, pc,
arch, registers_used, addr_size, op_ptr, op_end,
- NULL, per_cu);
+ NULL, per_cu, per_objfile);
}
/* See compile.h. */
struct gdbarch *arch, unsigned char *registers_used,
unsigned int addr_size,
const gdb_byte *op_ptr, const gdb_byte *op_end,
- struct dwarf2_per_cu_data *per_cu)
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile)
{
do_compile_dwarf_expr_to_c (2, stream, "unsigned long ", result_name,
sym, pc, arch, registers_used,
- addr_size, op_ptr, op_end, NULL, per_cu);
+ addr_size, op_ptr, op_end, NULL, per_cu,
+ per_objfile);
}
struct ui_file;
struct gdbarch;
struct dwarf2_per_cu_data;
+struct dwarf2_per_objfile;
struct symbol;
struct dynamic_prop;
OPT_PTR and OP_END are the bounds of the DWARF expression.
PER_CU is the per-CU object used for looking up various other
+ things.
+
+ PER_OBJFILE is the per-objfile object also used for looking up various other
things. */
extern void compile_dwarf_expr_to_c (string_file *stream,
unsigned int addr_size,
const gdb_byte *op_ptr,
const gdb_byte *op_end,
- struct dwarf2_per_cu_data *per_cu);
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile);
/* Compile a DWARF bounds expression to C, suitable for use by the
compiler.
OPT_PTR and OP_END are the bounds of the DWARF expression.
PER_CU is the per-CU object used for looking up various other
+ things.
+
+ PER_OBJFILE is the per-objfile object also used for looking up various other
things. */
extern void compile_dwarf_bounds_to_c (string_file *stream,
unsigned int addr_size,
const gdb_byte *op_ptr,
const gdb_byte *op_end,
- struct dwarf2_per_cu_data *per_cu);
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile);
extern void compile_print_value (struct value *val, void *data_voidp);
unsigned int addr_size = baton->per_cu->addr_size ();
int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
/* Adjust base_address for relocatable objects. */
- CORE_ADDR base_offset = baton->per_cu->text_offset ();
+ CORE_ADDR base_offset = baton->per_objfile->objfile->text_section_offset ();
CORE_ADDR base_address = baton->base_address + base_offset;
const gdb_byte *loc_ptr, *buf_end;
= (struct dwarf2_property_baton *) prop->data.baton;
const gdb_byte *data;
size_t size;
- struct dwarf2_per_cu_data *per_cu;
+ dwarf2_per_cu_data *per_cu;
+ dwarf2_per_objfile *per_objfile;
if (prop->kind == PROP_LOCEXPR)
{
data = baton->locexpr.data;
size = baton->locexpr.size;
per_cu = baton->locexpr.per_cu;
+ per_objfile = baton->locexpr.per_objfile;
}
else
{
data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
per_cu = baton->loclist.per_cu;
+ per_objfile = baton->loclist.per_objfile;
}
compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
gdbarch, registers_used,
per_cu->addr_size (),
- data, data + size, per_cu);
+ data, data + size, per_cu, per_objfile);
}
\f
dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
unsigned int addr_size, const gdb_byte *op_ptr,
const gdb_byte *op_end,
- struct dwarf2_per_cu_data *per_cu)
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile)
{
gdbarch *arch = expr->gdbarch;
std::vector<int> dw_labels, patches;
index, not an address. We don't support things like
branching between the address and the TLS op. */
if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
- uoffset += per_cu->text_offset ();
+ uoffset += per_objfile->objfile->text_section_offset ();
ax_const_l (expr, uoffset);
break;
op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
- datastart + datalen, per_cu);
+ datastart + datalen, per_cu,
+ per_objfile);
if (loc->kind == axs_lvalue_register)
require_rvalue (expr, loc);
/* Another expression. */
ax_const_l (expr, text_offset);
dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
- cfa_end, per_cu);
+ cfa_end, per_cu, per_objfile);
}
loc->kind = axs_lvalue_memory;
gdb_assert (block.per_cu == per_cu);
dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
- block.data + block.size, per_cu);
+ block.data + block.size, per_cu,
+ per_objfile);
}
break;
value->optimized_out = 1;
else
dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
- dlbaton->data + dlbaton->size, dlbaton->per_cu);
+ dlbaton->data + dlbaton->size, dlbaton->per_cu,
+ dlbaton->per_objfile);
}
/* symbol_computed_ops 'generate_c_location' method. */
compile_dwarf_expr_to_c (stream, result_name,
sym, pc, gdbarch, registers_used, addr_size,
dlbaton->data, dlbaton->data + dlbaton->size,
- dlbaton->per_cu);
+ dlbaton->per_cu, dlbaton->per_objfile);
}
/* The set of location functions used with the DWARF-2 expression
int offset_size = dlbaton->per_cu->offset_size ();
int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
/* Adjust base_address for relocatable objects. */
- CORE_ADDR base_offset = dlbaton->per_cu->text_offset ();
+ CORE_ADDR base_offset = objfile->text_section_offset ();
CORE_ADDR base_address = dlbaton->base_address + base_offset;
int done = 0;
value->optimized_out = 1;
else
dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
- dlbaton->per_cu);
+ dlbaton->per_cu, dlbaton->per_objfile);
}
/* symbol_computed_ops 'generate_c_location' method. */
compile_dwarf_expr_to_c (stream, result_name,
sym, pc, gdbarch, registers_used, addr_size,
data, data + size,
- dlbaton->per_cu);
+ dlbaton->per_cu,
+ dlbaton->per_objfile);
}
/* The set of location functions used with the DWARF-2 expression