This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 7/8] Remove the objfile backlink from comp_unit


On 2/8/20 12:27 PM, Tom Tromey wrote:
This removes the objfile backlink from comp_unit.  The only remaining
uses involved fetching the text offset from the objfile.  However,
this is already convenient computed at all the sites that call
execute_cfa_program, and so it can simply be passed in.

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

	* dwarf2/frame.c (struct comp_unit) <objfile>: Remove.
	(execute_cfa_program): Add text_offset parameter.
	(execute_cfa_program_test, dwarf2_fetch_cfa_info)
	(dwarf2_frame_cache): Update.
	(dwarf2_build_frame_info): Don't set "objfile" member.

Change-Id: I81b1c82d514dad83b3d00053756a07ef54b19796
---
  gdb/ChangeLog      |  8 ++++++++
  gdb/dwarf2/frame.c | 25 +++++++++++++------------
  2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
index d4f6165b75c..2c35016e2d9 100644
--- a/gdb/dwarf2/frame.c
+++ b/gdb/dwarf2/frame.c
@@ -139,8 +139,6 @@ struct comp_unit
    /* Keep the bfd convenient.  */
    bfd *abfd = nullptr;
- struct objfile *objfile = nullptr;
-
    /* Pointer to the .debug_frame section loaded into memory.  */
    const gdb_byte *dwarf_frame_buffer = nullptr;
@@ -349,7 +347,8 @@ Not implemented: computing unwound register using explicit value operator"));
  static const gdb_byte *
  execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
  		     const gdb_byte *insn_end, struct gdbarch *gdbarch,
-		     CORE_ADDR pc, struct dwarf2_frame_state *fs)
+		     CORE_ADDR pc, struct dwarf2_frame_state *fs,
+		     CORE_ADDR text_offset)
  {
    int eh_frame_p = fde->eh_frame_p;
    unsigned int bytes_read;
@@ -386,8 +385,8 @@ execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
  	      fs->pc = read_encoded_value (fde->cie->unit, fde->cie->encoding,
  					   fde->cie->ptr_size, insn_ptr,
  					   &bytes_read, fde->initial_location);
-	      /* Apply the objfile offset for relocatable objects.  */
-	      fs->pc += fde->cie->unit->objfile->text_section_offset ();
+	      /* Apply the text offset for relocatable objects.  */
+	      fs->pc += text_offset;
  	      insn_ptr += bytes_read;
  	      break;
@@ -646,7 +645,7 @@ execute_cfa_program_test (struct gdbarch *gdbarch) const gdb_byte *insn_end = insns + sizeof (insns);
    const gdb_byte *out = execute_cfa_program (&fde, insns, insn_end, gdbarch,
-					     0, &fs);
+					     0, &fs, 0);
SELF_CHECK (out == insn_end);
    SELF_CHECK (fs.pc == 0);
@@ -894,13 +893,14 @@ dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc,
/* First decode all the insns in the CIE. */
    execute_cfa_program (fde, fde->cie->initial_instructions,
-		       fde->cie->end, gdbarch, pc, &fs);
+		       fde->cie->end, gdbarch, pc, &fs, text_offset);
/* Save the initialized register set. */
    fs.initial = fs.regs;
/* Then decode the insns in the FDE up to our target PC. */
-  execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs);
+  execute_cfa_program (fde, fde->instructions, fde->end, gdbarch, pc, &fs,
+		       text_offset);
/* Calculate the CFA. */
    switch (fs.regs.cfa_how)
@@ -1022,7 +1022,8 @@ dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
    /* First decode all the insns in the CIE.  */
    execute_cfa_program (fde, fde->cie->initial_instructions,
  		       fde->cie->end, gdbarch,
-		       get_frame_address_in_block (this_frame), &fs);
+		       get_frame_address_in_block (this_frame), &fs,
+		       cache->text_offset);
/* Save the initialized register set. */
    fs.initial = fs.regs;
@@ -1037,7 +1038,7 @@ dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
      {
        /* Decode the insns in the FDE up to the entry PC.  */
        instr = execute_cfa_program (fde, fde->instructions, fde->end, gdbarch,
-				   entry_pc, &fs);
+				   entry_pc, &fs, cache->text_offset);
if (fs.regs.cfa_how == CFA_REG_OFFSET
  	  && (dwarf_reg_to_regnum (gdbarch, fs.regs.cfa_reg)
@@ -1052,7 +1053,8 @@ dwarf2_frame_cache (struct frame_info *this_frame, void **this_cache)
/* Then decode the insns in the FDE up to our target PC. */
    execute_cfa_program (fde, instr, fde->end, gdbarch,
-		       get_frame_address_in_block (this_frame), &fs);
+		       get_frame_address_in_block (this_frame), &fs,
+		       cache->text_offset);
try
      {
@@ -2135,7 +2137,6 @@ dwarf2_build_frame_info (struct objfile *objfile)
    /* Build a minimal decoding of the DWARF2 compilation unit.  */
    unit = new comp_unit;
    unit->abfd = objfile->obfd;
-  unit->objfile = objfile;
if (objfile->separate_debug_objfile_backlink == NULL)
      {


LGTM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]