forked from Imagelibrary/binutils-gdb
Remove dwarf2_per_cu_data::text_offset
This method simply returns the text offset of the objfile associated to the dwarf2_per_cu_data object. Since dwarf2_per_cu_data objects are going to become objfile-independent, we can't keep this method. This patch removes it. Existing callers need to figure out the in the context of which objfile this is being used, and call text_offset on it. Typically, this comes from a symbol baton, where we store the corresponding dwarf2_per_objfile. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_cu_data) <text_offset>: Remove. * dwarf2/read.c (dwarf2_per_cu_data::text_offset): Remove. * dwarf2/loc.c (dwarf2_find_location_expression): Update. (dwarf2_compile_property_to_c): Update. (dwarf2_compile_expr_to_ax): Add dwarf2_per_objfile parameter, use text offset from objfile. (locexpr_tracepoint_var_ref): Update. (locexpr_generate_c_location): Update. (loclist_describe_location): Update. (loclist_tracepoint_var_ref): Update. * dwarf2/compile.h (compile_dwarf_bounds_to_c): Add dwarf2_per_objfile parameter. * dwarf2/loc2c.c (do_compile_dwarf_expr_to_c): Likewise, use text offset from objfile. (compile_dwarf_expr_to_c): Add dwarf2_per_objfile parameter. Change-Id: I56b01ba294733362a3562426a96d48ae051a776f
This commit is contained in:
@@ -1,3 +1,22 @@
|
|||||||
|
2020-05-27 Simon Marchi <simon.marchi@efficios.com>
|
||||||
|
|
||||||
|
* dwarf2/read.h (struct dwarf2_per_cu_data) <text_offset>:
|
||||||
|
Remove.
|
||||||
|
* dwarf2/read.c (dwarf2_per_cu_data::text_offset): Remove.
|
||||||
|
* dwarf2/loc.c (dwarf2_find_location_expression): Update.
|
||||||
|
(dwarf2_compile_property_to_c): Update.
|
||||||
|
(dwarf2_compile_expr_to_ax): Add dwarf2_per_objfile parameter,
|
||||||
|
use text offset from objfile.
|
||||||
|
(locexpr_tracepoint_var_ref): Update.
|
||||||
|
(locexpr_generate_c_location): Update.
|
||||||
|
(loclist_describe_location): Update.
|
||||||
|
(loclist_tracepoint_var_ref): Update.
|
||||||
|
* dwarf2/compile.h (compile_dwarf_bounds_to_c): Add
|
||||||
|
dwarf2_per_objfile parameter.
|
||||||
|
* dwarf2/loc2c.c (do_compile_dwarf_expr_to_c): Likewise,
|
||||||
|
use text offset from objfile.
|
||||||
|
(compile_dwarf_expr_to_c): Add dwarf2_per_objfile parameter.
|
||||||
|
|
||||||
2020-05-27 Simon Marchi <simon.marchi@efficios.com>
|
2020-05-27 Simon Marchi <simon.marchi@efficios.com>
|
||||||
|
|
||||||
* dwarf2/expr.h (struct dwarf_expr_context)
|
* dwarf2/expr.h (struct dwarf_expr_context)
|
||||||
|
|||||||
@@ -583,7 +583,8 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
|
|||||||
unsigned int addr_size,
|
unsigned int addr_size,
|
||||||
const gdb_byte *op_ptr, const gdb_byte *op_end,
|
const gdb_byte *op_ptr, const gdb_byte *op_end,
|
||||||
CORE_ADDR *initial,
|
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
|
/* We keep a counter so that labels and other objects we create have
|
||||||
unique names. */
|
unique names. */
|
||||||
@@ -719,7 +720,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
|
|||||||
index, not an address. We don't support things like
|
index, not an address. We don't support things like
|
||||||
branching between the address and the TLS op. */
|
branching between the address and the TLS op. */
|
||||||
if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
|
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);
|
push (indent, stream, uoffset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -896,7 +897,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
|
|||||||
sym, pc,
|
sym, pc,
|
||||||
arch, registers_used, addr_size,
|
arch, registers_used, addr_size,
|
||||||
datastart, datastart + datalen,
|
datastart, datastart + datalen,
|
||||||
NULL, per_cu);
|
NULL, per_cu, per_objfile);
|
||||||
|
|
||||||
pushf (indent, stream, "%s + %s", fb_name, hex_string (offset));
|
pushf (indent, stream, "%s + %s", fb_name, hex_string (offset));
|
||||||
}
|
}
|
||||||
@@ -1077,7 +1078,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream,
|
|||||||
sym, pc, arch, registers_used,
|
sym, pc, arch, registers_used,
|
||||||
addr_size,
|
addr_size,
|
||||||
cfa_start, cfa_end,
|
cfa_start, cfa_end,
|
||||||
&text_offset, per_cu);
|
&text_offset, per_cu, per_objfile);
|
||||||
pushf (indent, stream, "%s", cfa_name);
|
pushf (indent, stream, "%s", cfa_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1123,11 +1124,12 @@ compile_dwarf_expr_to_c (string_file *stream, const char *result_name,
|
|||||||
struct gdbarch *arch, unsigned char *registers_used,
|
struct gdbarch *arch, unsigned char *registers_used,
|
||||||
unsigned int addr_size,
|
unsigned int addr_size,
|
||||||
const gdb_byte *op_ptr, const gdb_byte *op_end,
|
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,
|
do_compile_dwarf_expr_to_c (2, stream, GCC_UINTPTR, result_name, sym, pc,
|
||||||
arch, registers_used, addr_size, op_ptr, op_end,
|
arch, registers_used, addr_size, op_ptr, op_end,
|
||||||
NULL, per_cu);
|
NULL, per_cu, per_objfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See compile.h. */
|
/* See compile.h. */
|
||||||
@@ -1140,9 +1142,11 @@ compile_dwarf_bounds_to_c (string_file *stream,
|
|||||||
struct gdbarch *arch, unsigned char *registers_used,
|
struct gdbarch *arch, unsigned char *registers_used,
|
||||||
unsigned int addr_size,
|
unsigned int addr_size,
|
||||||
const gdb_byte *op_ptr, const gdb_byte *op_end,
|
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,
|
do_compile_dwarf_expr_to_c (2, stream, "unsigned long ", result_name,
|
||||||
sym, pc, arch, registers_used,
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
struct ui_file;
|
struct ui_file;
|
||||||
struct gdbarch;
|
struct gdbarch;
|
||||||
struct dwarf2_per_cu_data;
|
struct dwarf2_per_cu_data;
|
||||||
|
struct dwarf2_per_objfile;
|
||||||
struct symbol;
|
struct symbol;
|
||||||
struct dynamic_prop;
|
struct dynamic_prop;
|
||||||
|
|
||||||
@@ -53,6 +54,9 @@ extern void eval_compile_command (struct command_line *cmd,
|
|||||||
OPT_PTR and OP_END are the bounds of the DWARF expression.
|
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
|
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. */
|
things. */
|
||||||
|
|
||||||
extern void compile_dwarf_expr_to_c (string_file *stream,
|
extern void compile_dwarf_expr_to_c (string_file *stream,
|
||||||
@@ -64,7 +68,8 @@ extern void compile_dwarf_expr_to_c (string_file *stream,
|
|||||||
unsigned int addr_size,
|
unsigned int addr_size,
|
||||||
const gdb_byte *op_ptr,
|
const gdb_byte *op_ptr,
|
||||||
const gdb_byte *op_end,
|
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
|
/* Compile a DWARF bounds expression to C, suitable for use by the
|
||||||
compiler.
|
compiler.
|
||||||
@@ -88,6 +93,9 @@ extern void compile_dwarf_expr_to_c (string_file *stream,
|
|||||||
OPT_PTR and OP_END are the bounds of the DWARF expression.
|
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
|
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. */
|
things. */
|
||||||
|
|
||||||
extern void compile_dwarf_bounds_to_c (string_file *stream,
|
extern void compile_dwarf_bounds_to_c (string_file *stream,
|
||||||
@@ -99,7 +107,8 @@ extern void compile_dwarf_bounds_to_c (string_file *stream,
|
|||||||
unsigned int addr_size,
|
unsigned int addr_size,
|
||||||
const gdb_byte *op_ptr,
|
const gdb_byte *op_ptr,
|
||||||
const gdb_byte *op_end,
|
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);
|
extern void compile_print_value (struct value *val, void *data_voidp);
|
||||||
|
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
|
|||||||
unsigned int addr_size = baton->per_cu->addr_size ();
|
unsigned int addr_size = baton->per_cu->addr_size ();
|
||||||
int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
|
int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
|
||||||
/* Adjust base_address for relocatable objects. */
|
/* 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;
|
CORE_ADDR base_address = baton->base_address + base_offset;
|
||||||
const gdb_byte *loc_ptr, *buf_end;
|
const gdb_byte *loc_ptr, *buf_end;
|
||||||
|
|
||||||
@@ -2649,13 +2649,15 @@ dwarf2_compile_property_to_c (string_file *stream,
|
|||||||
= (struct dwarf2_property_baton *) prop->data.baton;
|
= (struct dwarf2_property_baton *) prop->data.baton;
|
||||||
const gdb_byte *data;
|
const gdb_byte *data;
|
||||||
size_t size;
|
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)
|
if (prop->kind == PROP_LOCEXPR)
|
||||||
{
|
{
|
||||||
data = baton->locexpr.data;
|
data = baton->locexpr.data;
|
||||||
size = baton->locexpr.size;
|
size = baton->locexpr.size;
|
||||||
per_cu = baton->locexpr.per_cu;
|
per_cu = baton->locexpr.per_cu;
|
||||||
|
per_objfile = baton->locexpr.per_objfile;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2663,12 +2665,13 @@ dwarf2_compile_property_to_c (string_file *stream,
|
|||||||
|
|
||||||
data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
|
data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
|
||||||
per_cu = baton->loclist.per_cu;
|
per_cu = baton->loclist.per_cu;
|
||||||
|
per_objfile = baton->loclist.per_objfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
|
compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
|
||||||
gdbarch, registers_used,
|
gdbarch, registers_used,
|
||||||
per_cu->addr_size (),
|
per_cu->addr_size (),
|
||||||
data, data + size, per_cu);
|
data, data + size, per_cu, per_objfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2956,7 +2959,8 @@ static void
|
|||||||
dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
|
dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
|
||||||
unsigned int addr_size, const gdb_byte *op_ptr,
|
unsigned int addr_size, const gdb_byte *op_ptr,
|
||||||
const gdb_byte *op_end,
|
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;
|
gdbarch *arch = expr->gdbarch;
|
||||||
std::vector<int> dw_labels, patches;
|
std::vector<int> dw_labels, patches;
|
||||||
@@ -3043,7 +3047,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
|
|||||||
index, not an address. We don't support things like
|
index, not an address. We don't support things like
|
||||||
branching between the address and the TLS op. */
|
branching between the address and the TLS op. */
|
||||||
if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
|
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);
|
ax_const_l (expr, uoffset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -3234,7 +3238,8 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
|
|||||||
|
|
||||||
op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
|
op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
|
||||||
dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
|
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)
|
if (loc->kind == axs_lvalue_register)
|
||||||
require_rvalue (expr, loc);
|
require_rvalue (expr, loc);
|
||||||
|
|
||||||
@@ -3460,7 +3465,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
|
|||||||
/* Another expression. */
|
/* Another expression. */
|
||||||
ax_const_l (expr, text_offset);
|
ax_const_l (expr, text_offset);
|
||||||
dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
|
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;
|
loc->kind = axs_lvalue_memory;
|
||||||
@@ -3585,7 +3590,8 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
|
|||||||
gdb_assert (block.per_cu == per_cu);
|
gdb_assert (block.per_cu == per_cu);
|
||||||
|
|
||||||
dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
|
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;
|
break;
|
||||||
|
|
||||||
@@ -4383,7 +4389,8 @@ locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
|
|||||||
value->optimized_out = 1;
|
value->optimized_out = 1;
|
||||||
else
|
else
|
||||||
dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
|
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. */
|
/* symbol_computed_ops 'generate_c_location' method. */
|
||||||
@@ -4404,7 +4411,7 @@ locexpr_generate_c_location (struct symbol *sym, string_file *stream,
|
|||||||
compile_dwarf_expr_to_c (stream, result_name,
|
compile_dwarf_expr_to_c (stream, result_name,
|
||||||
sym, pc, gdbarch, registers_used, addr_size,
|
sym, pc, gdbarch, registers_used, addr_size,
|
||||||
dlbaton->data, dlbaton->data + dlbaton->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
|
/* The set of location functions used with the DWARF-2 expression
|
||||||
@@ -4503,7 +4510,7 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
|
|||||||
int offset_size = dlbaton->per_cu->offset_size ();
|
int offset_size = dlbaton->per_cu->offset_size ();
|
||||||
int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
|
int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd);
|
||||||
/* Adjust base_address for relocatable objects. */
|
/* 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;
|
CORE_ADDR base_address = dlbaton->base_address + base_offset;
|
||||||
int done = 0;
|
int done = 0;
|
||||||
|
|
||||||
@@ -4609,7 +4616,7 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
|
|||||||
value->optimized_out = 1;
|
value->optimized_out = 1;
|
||||||
else
|
else
|
||||||
dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
|
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. */
|
/* symbol_computed_ops 'generate_c_location' method. */
|
||||||
@@ -4633,7 +4640,8 @@ loclist_generate_c_location (struct symbol *sym, string_file *stream,
|
|||||||
compile_dwarf_expr_to_c (stream, result_name,
|
compile_dwarf_expr_to_c (stream, result_name,
|
||||||
sym, pc, gdbarch, registers_used, addr_size,
|
sym, pc, gdbarch, registers_used, addr_size,
|
||||||
data, data + size,
|
data, data + size,
|
||||||
dlbaton->per_cu);
|
dlbaton->per_cu,
|
||||||
|
dlbaton->per_objfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The set of location functions used with the DWARF-2 expression
|
/* The set of location functions used with the DWARF-2 expression
|
||||||
|
|||||||
@@ -23392,16 +23392,6 @@ dwarf2_per_cu_data::ref_addr_size () const
|
|||||||
|
|
||||||
/* See read.h. */
|
/* See read.h. */
|
||||||
|
|
||||||
CORE_ADDR
|
|
||||||
dwarf2_per_cu_data::text_offset () const
|
|
||||||
{
|
|
||||||
struct objfile *objfile = dwarf2_per_objfile->objfile;
|
|
||||||
|
|
||||||
return objfile->text_section_offset ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* See read.h. */
|
|
||||||
|
|
||||||
struct type *
|
struct type *
|
||||||
dwarf2_cu::addr_type () const
|
dwarf2_cu::addr_type () const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -508,12 +508,6 @@ struct dwarf2_per_cu_data
|
|||||||
header for this CU. */
|
header for this CU. */
|
||||||
int ref_addr_size () const;
|
int ref_addr_size () const;
|
||||||
|
|
||||||
/* Return the text offset of the CU. The returned offset comes from
|
|
||||||
this CU's objfile. If this objfile came from a separate
|
|
||||||
debuginfo file, then the offset may be different from the
|
|
||||||
corresponding offset in the parent objfile. */
|
|
||||||
CORE_ADDR text_offset () const;
|
|
||||||
|
|
||||||
/* Return DWARF version number of this CU. */
|
/* Return DWARF version number of this CU. */
|
||||||
short version () const
|
short version () const
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user