Remove dwarf2_per_cu_data::text_offset
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 27 May 2020 15:14:01 +0000 (11:14 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 27 May 2020 15:15:57 +0000 (11:15 -0400)
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

gdb/ChangeLog
gdb/compile/compile-loc2c.c
gdb/compile/compile.h
gdb/dwarf2/loc.c
gdb/dwarf2/read.c
gdb/dwarf2/read.h

index 6ad1a71f6e0c350269697652c1976468321c02de..45e33cbc91b0c8597aae4bb0038747b85bee10ab 100644 (file)
@@ -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>
 
        * dwarf2/expr.h (struct dwarf_expr_context)
index 06a044de0483f5d17bcd6acfaac965a307bf87f5..2fd1810759cc56946295539f194d539588733146 100644 (file)
@@ -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);
 }
index 871031c356c043855e53f522b1a94a838079e606..73f714ab2308182d6334f722ec737ecfab87626b 100644 (file)
@@ -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);
 
index 964726e862581e5974405684177c4b3c7b479f6d..e2c61aa668c8ea852a49576d4e9b3bf11e69fd23 100644 (file)
@@ -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);
 }
 
 \f
@@ -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
index 5ab0e8eefa28d0569c0376e4212b12060beceb6e..9169bac33e8671a25696e5ab708a646d3ebc9325 100644 (file)
@@ -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
 {
index 77c1f246db741ce17033cb8b8ad9189fdd49d0a0..15951f5221ddd843583897aa05570d38e7c57fae 100644 (file)
@@ -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
   {