From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from barracuda.ebox.ca (barracuda.ebox.ca [96.127.255.19]) by sourceware.org (Postfix) with ESMTPS id 8CDDA395C86E for ; Tue, 12 May 2020 21:15:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 8CDDA395C86E X-ASG-Debug-ID: 1589318117-0c856e314b8937a0001-fS2M51 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id FmR8DtMJvlrhUeMG (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 12 May 2020 17:15:17 -0400 (EDT) X-Barracuda-Envelope-From: simon.marchi@efficios.com X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from epycamd.internal.efficios.com (192-222-181-218.qc.cable.ebox.net [192.222.181.218]) by smtp.ebox.ca (Postfix) with ESMTP id 7C6C9441B21; Tue, 12 May 2020 17:15:17 -0400 (EDT) From: Simon Marchi X-Barracuda-Effective-Source-IP: 192-222-181-218.qc.cable.ebox.net[192.222.181.218] X-Barracuda-Apparent-Source-IP: 192.222.181.218 X-Barracuda-RBL-IP: 192.222.181.218 To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH v2 24/42] Remove dwarf2_per_cu_data::text_offset Date: Tue, 12 May 2020 17:12:32 -0400 X-ASG-Orig-Subj: [PATCH v2 24/42] Remove dwarf2_per_cu_data::text_offset Message-Id: <20200512211250.6230-25-simon.marchi@efficios.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200512210913.5593-1-simon.marchi@efficios.com> References: <20200512210913.5593-1-simon.marchi@efficios.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp.ebox.ca[96.127.255.82] X-Barracuda-Start-Time: 1589318117 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 13101 X-Virus-Scanned: by bsmtpd at ebox.ca X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.81805 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Spam-Status: No, score=-16.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_SOFTFAIL, TXREP, UNWANTED_LANGUAGE_BODY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 May 2020 21:15:20 -0000 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) : 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. --- gdb/compile/compile-loc2c.c | 20 ++++++++++++-------- gdb/compile/compile.h | 13 +++++++++++-- gdb/dwarf2/loc.c | 34 +++++++++++++++++++++------------- gdb/dwarf2/read.c | 10 ---------- gdb/dwarf2/read.h | 6 ------ 5 files changed, 44 insertions(+), 39 deletions(-) diff --git a/gdb/compile/compile-loc2c.c b/gdb/compile/compile-loc2c.c index 06a044de048..2fd1810759c 100644 --- a/gdb/compile/compile-loc2c.c +++ b/gdb/compile/compile-loc2c.c @@ -583,7 +583,8 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream, 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. */ @@ -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 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; @@ -896,7 +897,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream, 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)); } @@ -1077,7 +1078,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *stream, 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); } } @@ -1123,11 +1124,12 @@ compile_dwarf_expr_to_c (string_file *stream, const char *result_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. */ @@ -1140,9 +1142,11 @@ compile_dwarf_bounds_to_c (string_file *stream, 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); } diff --git a/gdb/compile/compile.h b/gdb/compile/compile.h index 871031c356c..73f714ab230 100644 --- a/gdb/compile/compile.h +++ b/gdb/compile/compile.h @@ -21,6 +21,7 @@ struct ui_file; struct gdbarch; struct dwarf2_per_cu_data; +struct dwarf2_per_objfile; struct symbol; 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. 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, @@ -64,7 +68,8 @@ 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. @@ -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. 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, @@ -99,7 +107,8 @@ 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); diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c index 7f979bfa086..f1c400821f9 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 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 c9bced5d967..79e8889d33f 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -23353,16 +23353,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 77c1f246db7..15951f5221d 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 { -- 2.26.2