aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2020-05-27 11:14:01 -0400
committerSimon Marchi <simon.marchi@efficios.com>2020-05-27 11:15:57 -0400
commit4b167ea1a0f1ff6f02684556e951dab8d48b9fa4 (patch)
tree402be28767b0f35204af185c1b672c597c64d548 /gdb/dwarf2
parent89b07335fe42d6da84c19351ca0c34b11a3c4f8e (diff)
downloadbinutils-4b167ea1a0f1ff6f02684556e951dab8d48b9fa4.zip
binutils-4b167ea1a0f1ff6f02684556e951dab8d48b9fa4.tar.gz
binutils-4b167ea1a0f1ff6f02684556e951dab8d48b9fa4.tar.bz2
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
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r--gdb/dwarf2/loc.c34
-rw-r--r--gdb/dwarf2/read.c10
-rw-r--r--gdb/dwarf2/read.h6
3 files changed, 21 insertions, 29 deletions
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index 964726e..e2c61aa 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -324,7 +324,7 @@ dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
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;
@@ -2649,13 +2649,15 @@ dwarf2_compile_property_to_c (string_file *stream,
= (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
{
@@ -2663,12 +2665,13 @@ dwarf2_compile_property_to_c (string_file *stream,
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);
}
@@ -2956,7 +2959,8 @@ static void
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;
@@ -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
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;
@@ -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);
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);
@@ -3460,7 +3465,7 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *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;
@@ -3585,7 +3590,8 @@ dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
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;
@@ -4383,7 +4389,8 @@ locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
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. */
@@ -4404,7 +4411,7 @@ locexpr_generate_c_location (struct symbol *sym, string_file *stream,
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
@@ -4503,7 +4510,7 @@ loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
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;
@@ -4609,7 +4616,7 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
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. */
@@ -4633,7 +4640,8 @@ loclist_generate_c_location (struct symbol *sym, string_file *stream,
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
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 5ab0e8e..9169bac 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -23392,16 +23392,6 @@ dwarf2_per_cu_data::ref_addr_size () const
/* 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 *
dwarf2_cu::addr_type () const
{
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 77c1f24..15951f5 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -508,12 +508,6 @@ struct dwarf2_per_cu_data
header for this CU. */
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. */
short version () const
{