gdb: remove SYMTAB_LINETABLE macro, add getter/setter
authorSimon Marchi <simon.marchi@efficios.com>
Sat, 20 Nov 2021 13:40:12 +0000 (08:40 -0500)
committerSimon Marchi <simon.marchi@polymtl.ca>
Sun, 6 Feb 2022 20:48:19 +0000 (15:48 -0500)
Add a getter and a setter for a symtab's linetable.  Remove the
corresponding macro and adjust all callers.

Change-Id: I159183fc0ccd8e18ab937b3c2f09ef2244ec6e9c

gdb/buildsym.c
gdb/disasm.c
gdb/jit.c
gdb/mdebugread.c
gdb/mi/mi-symbol-cmds.c
gdb/objfiles.c
gdb/python/py-linetable.c
gdb/record-btrace.c
gdb/symmisc.c
gdb/symtab.c
gdb/symtab.h

index b42c40830c9082418014d3beefdd3b17612614dd..2a99a96e2e600b6485dde3f34b3e80a81e9a58ff 100644 (file)
@@ -977,15 +977,13 @@ buildsym_compunit::end_symtab_with_blockvector (struct block *static_block,
       if (subfile->line_vector)
        {
          /* Reallocate the line table on the symbol obstack.  */
-         SYMTAB_LINETABLE (symtab) = (struct linetable *)
-           obstack_alloc (&m_objfile->objfile_obstack, linetablesize);
-         memcpy (SYMTAB_LINETABLE (symtab), subfile->line_vector,
-                 linetablesize);
+         symtab->set_linetable
+           ((struct linetable *)
+            obstack_alloc (&m_objfile->objfile_obstack, linetablesize));
+         memcpy (symtab->linetable (), subfile->line_vector, linetablesize);
        }
       else
-       {
-         SYMTAB_LINETABLE (symtab) = NULL;
-       }
+       symtab->set_linetable (nullptr);
 
       /* Use whatever language we have been using for this
         subfile, not the one that was deduced in allocate_symtab
index 5cd1f5adbd226dd349f278323e1ca5174673fa31..bfccbfcddcd949f17b629a4e02eec16625f3b99a 100644 (file)
@@ -393,10 +393,10 @@ do_mixed_source_and_assembly_deprecated
   int num_displayed = 0;
   print_source_lines_flags psl_flags = 0;
 
-  gdb_assert (symtab != NULL && SYMTAB_LINETABLE (symtab) != NULL);
+  gdb_assert (symtab != nullptr && symtab->linetable () != nullptr);
 
-  nlines = SYMTAB_LINETABLE (symtab)->nitems;
-  le = SYMTAB_LINETABLE (symtab)->item;
+  nlines = symtab->linetable ()->nitems;
+  le = symtab->linetable ()->item;
 
   if (flags & DISASSEMBLY_FILENAME)
     psl_flags |= PRINT_SOURCE_LINES_FILENAME;
@@ -535,7 +535,7 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch,
   struct symtab *last_symtab;
   int last_line;
 
-  gdb_assert (main_symtab != NULL && SYMTAB_LINETABLE (main_symtab) != NULL);
+  gdb_assert (main_symtab != NULL && main_symtab->linetable () != NULL);
 
   /* First pass: collect the list of all source files and lines.
      We do this so that we can only print lines containing code once.
@@ -553,8 +553,8 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch,
      line after the opening brace.  We still want to print this opening brace.
      first_le is used to implement this.  */
 
-  nlines = SYMTAB_LINETABLE (main_symtab)->nitems;
-  le = SYMTAB_LINETABLE (main_symtab)->item;
+  nlines = main_symtab->linetable ()->nitems;
+  le = main_symtab->linetable ()->item;
   first_le = NULL;
 
   /* Skip all the preceding functions.  */
@@ -850,8 +850,8 @@ gdb_disassembly (struct gdbarch *gdbarch, struct ui_out *uiout,
   /* Assume symtab is valid for whole PC range.  */
   symtab = find_pc_line_symtab (low);
 
-  if (symtab != NULL && SYMTAB_LINETABLE (symtab) != NULL)
-    nlines = SYMTAB_LINETABLE (symtab)->nitems;
+  if (symtab != NULL && symtab->linetable () != NULL)
+    nlines = symtab->linetable ()->nitems;
 
   if (!(flags & (DISASSEMBLY_SOURCE_DEPRECATED | DISASSEMBLY_SOURCE))
       || nlines <= 0)
index c86124c9e1be661f2c64c42733f1fb53f94348b4..9d844bfb4b2bc63f4db43555f17eb5eb2f9954f4 100644 (file)
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -521,10 +521,9 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
       size_t size = ((stab->linetable->nitems - 1)
                     * sizeof (struct linetable_entry)
                     + sizeof (struct linetable));
-      SYMTAB_LINETABLE (filetab)
-       = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size);
-      memcpy (SYMTAB_LINETABLE (filetab),
-             stab->linetable.get (), size);
+      filetab->set_linetable ((struct linetable *)
+                             obstack_alloc (&objfile->objfile_obstack, size));
+      memcpy (filetab->linetable (), stab->linetable.get (), size);
     }
 
   blockvector_size = (sizeof (struct blockvector)
index a6a70ccfea9311113f1f0d812d401a26fc4ace06..3dc6a8b72971e18f16346af8ad8bc104e2c10ade 100644 (file)
@@ -4089,7 +4089,7 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
 
       psymtab_language = cust->primary_filetab ()->language;
 
-      lines = SYMTAB_LINETABLE (cust->primary_filetab ());
+      lines = cust->primary_filetab ()->linetable ();
 
       /* Get a new lexical context.  */
 
@@ -4173,11 +4173,11 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
       size = lines->nitems;
       if (size > 1)
        --size;
-      SYMTAB_LINETABLE (cust->primary_filetab ())
-       ((struct linetable *)
-          obstack_copy (&mdebugread_objfile->objfile_obstack,
-                        lines, (sizeof (struct linetable)
-                                + size * sizeof (lines->item))));
+      cust->primary_filetab ()->set_linetable
+       ((struct linetable *)
+        obstack_copy (&mdebugread_objfile->objfile_obstack,
+                      lines, (sizeof (struct linetable)
+                              + size * sizeof (lines->item))));
       xfree (lines);
 
       /* .. and our share of externals.
@@ -4623,7 +4623,7 @@ new_symtab (const char *name, int maxlines, struct objfile *objfile)
   add_compunit_symtab_to_objfile (cust);
   symtab = allocate_symtab (cust, name);
 
-  SYMTAB_LINETABLE (symtab) = new_linetable (maxlines);
+  symtab->set_linetable (new_linetable (maxlines));
   lang = compunit_language (cust);
 
   /* All symtabs must have at least two blocks.  */
index 2177354ae19ca01f37cfa2e98dff3d6935092c84..2078ab8e524370a906db46f87728c2b7a6229dba 100644 (file)
@@ -53,12 +53,12 @@ mi_cmd_symbol_list_lines (const char *command, char **argv, int argc)
   gdbarch = SYMTAB_OBJFILE (s)->arch ();
 
   ui_out_emit_list list_emitter (uiout, "lines");
-  if (SYMTAB_LINETABLE (s) != NULL && SYMTAB_LINETABLE (s)->nitems > 0)
-    for (i = 0; i < SYMTAB_LINETABLE (s)->nitems; i++)
+  if (s->linetable () != NULL && s->linetable ()->nitems > 0)
+    for (i = 0; i < s->linetable ()->nitems; i++)
       {
        ui_out_emit_tuple tuple_emitter (uiout, NULL);
-       uiout->field_core_addr ("pc", gdbarch, SYMTAB_LINETABLE (s)->item[i].pc);
-       uiout->field_signed ("line", SYMTAB_LINETABLE (s)->item[i].line);
+       uiout->field_core_addr ("pc", gdbarch, s->linetable ()->item[i].pc);
+       uiout->field_signed ("line", s->linetable ()->item[i].line);
       }
 }
 
index 7e1ec6ca92dddbfe94ee9c6f7981c1b3b938a74f..d41dc73b02b88b5cc29aee923f3e8ed67358dffc 100644 (file)
@@ -656,7 +656,7 @@ objfile_relocate1 (struct objfile *objfile,
            struct linetable *l;
 
            /* First the line table.  */
-           l = SYMTAB_LINETABLE (s);
+           l = s->linetable ();
            if (l)
              {
                for (int i = 0; i < l->nitems; ++i)
index dfd4cbebdae8ba5aed11ec7c389c0d2ee6edaa6c..8e545febb171df94216560cbda25d2cec9a251a1 100644 (file)
@@ -192,16 +192,16 @@ ltpy_has_line (PyObject *self, PyObject *args)
   if (! PyArg_ParseTuple (args, GDB_PY_LL_ARG, &py_line))
     return NULL;
 
-  if (SYMTAB_LINETABLE (symtab) == NULL)
+  if (symtab->linetable () == NULL)
     {
       PyErr_SetString (PyExc_RuntimeError,
                       _("Linetable information not found in symbol table"));
       return NULL;
     }
 
-  for (index = 0; index < SYMTAB_LINETABLE (symtab)->nitems; index++)
+  for (index = 0; index < symtab->linetable ()->nitems; index++)
     {
-      struct linetable_entry *item = &(SYMTAB_LINETABLE (symtab)->item[index]);
+      struct linetable_entry *item = &(symtab->linetable ()->item[index]);
       if (item->line == py_line)
          Py_RETURN_TRUE;
     }
@@ -223,7 +223,7 @@ ltpy_get_all_source_lines (PyObject *self, PyObject *args)
 
   LTPY_REQUIRE_VALID (self, symtab);
 
-  if (SYMTAB_LINETABLE (symtab) == NULL)
+  if (symtab->linetable () == NULL)
     {
       PyErr_SetString (PyExc_RuntimeError,
                       _("Linetable information not found in symbol table"));
@@ -234,9 +234,9 @@ ltpy_get_all_source_lines (PyObject *self, PyObject *args)
   if (source_dict == NULL)
     return NULL;
 
-  for (index = 0; index < SYMTAB_LINETABLE (symtab)->nitems; index++)
+  for (index = 0; index < symtab->linetable ()->nitems; index++)
     {
-      item = &(SYMTAB_LINETABLE (symtab)->item[index]);
+      item = &(symtab->linetable ()->item[index]);
 
       /* 0 is used to signify end of line table information.  Do not
         include in the source set. */
@@ -399,13 +399,13 @@ ltpy_iternext (PyObject *self)
 
   LTPY_REQUIRE_VALID (iter_obj->source, symtab);
 
-  if (iter_obj->current_index >= SYMTAB_LINETABLE (symtab)->nitems)
+  if (iter_obj->current_index >= symtab->linetable ()->nitems)
     {
       PyErr_SetNone (PyExc_StopIteration);
       return NULL;
     }
 
-  item = &(SYMTAB_LINETABLE (symtab)->item[iter_obj->current_index]);
+  item = &(symtab->linetable ()->item[iter_obj->current_index]);
 
   /* Skip over internal entries such as 0.  0 signifies the end of
      line table data and is not useful to the API user.  */
@@ -414,12 +414,12 @@ ltpy_iternext (PyObject *self)
       iter_obj->current_index++;
 
       /* Exit if the internal value is the last item in the line table.  */
-      if (iter_obj->current_index >= SYMTAB_LINETABLE (symtab)->nitems)
+      if (iter_obj->current_index >= symtab->linetable ()->nitems)
        {
          PyErr_SetNone (PyExc_StopIteration);
          return NULL;
        }
-      item = &(SYMTAB_LINETABLE (symtab)->item[iter_obj->current_index]);
+      item = &(symtab->linetable ()->item[iter_obj->current_index]);
     }
 
   obj = build_linetable_entry (item->line, item->pc);
index e6542bd317a921c1090d805c738d6eb4fbd70edd..3dfdf592dd516d2c8a42d433991555609c062caa 100644 (file)
@@ -713,7 +713,7 @@ btrace_find_line_range (CORE_ADDR pc)
   if (symtab == NULL)
     return btrace_mk_line_range (NULL, 0, 0);
 
-  ltable = SYMTAB_LINETABLE (symtab);
+  ltable = symtab->linetable ();
   if (ltable == NULL)
     return btrace_mk_line_range (symtab, 0, 0);
 
index d079ac460ee825de151e58e565d34ce38eef8230..2fdd0f6262740722f7a0e4ad2f416140fd01a7c9 100644 (file)
@@ -77,7 +77,7 @@ print_objfile_statistics (void)
            for (symtab *s : cu->filetabs ())
              {
                i++;
-               if (SYMTAB_LINETABLE (s) != NULL)
+               if (s->linetable () != NULL)
                  linetables++;
              }
          }
@@ -259,7 +259,7 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
                    language_str (symtab->language));
 
   /* First print the line table.  */
-  l = SYMTAB_LINETABLE (symtab);
+  l = symtab->linetable ();
   if (l)
     {
       fprintf_filtered (outfile, "\nLine table:\n\n");
@@ -824,7 +824,8 @@ maintenance_info_symtabs (const char *regexp, int from_tty)
                                     : "(null)");
                    printf_filtered ("\t  "
                                     "linetable ((struct linetable *) %s)\n",
-                                    host_address_to_string (symtab->linetable));
+                                    host_address_to_string
+                                      (symtab->linetable ()));
                    printf_filtered ("\t}\n");
                  }
              }
@@ -968,7 +969,7 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
                   styled_string (file_name_style.style (),
                                  symtab_to_fullname (symtab)),
                   host_address_to_string (symtab));
-  linetable = SYMTAB_LINETABLE (symtab);
+  linetable = symtab->linetable ();
   printf_filtered (_("linetable: ((struct linetable *) %s):\n"),
                   host_address_to_string (linetable));
 
index 459c0c3c748781f2cd4c318683f775d42f78f5fd..f796ee4bd36239f38b9c270a37e3741cfbf17e36 100644 (file)
@@ -3285,7 +3285,7 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
   for (symtab *iter_s : cust->filetabs ())
     {
       /* Find the best line in this symtab.  */
-      l = SYMTAB_LINETABLE (iter_s);
+      l = iter_s->linetable ();
       if (!l)
        continue;
       len = l->nitems;
@@ -3454,7 +3454,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
   struct symtab *best_symtab;
 
   /* First try looking it up in the given symtab.  */
-  best_linetable = SYMTAB_LINETABLE (sym_tab);
+  best_linetable = sym_tab->linetable ();
   best_symtab = sym_tab;
   best_index = find_line_common (best_linetable, line, &exact, 0);
   if (best_index < 0 || !exact)
@@ -3493,7 +3493,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
                  if (FILENAME_CMP (symtab_to_fullname (sym_tab),
                                    symtab_to_fullname (s)) != 0)
                    continue;   
-                 l = SYMTAB_LINETABLE (s);
+                 l = s->linetable ();
                  ind = find_line_common (l, line, &exact, 0);
                  if (ind >= 0)
                    {
@@ -3545,14 +3545,14 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line,
       int was_exact;
       int idx;
 
-      idx = find_line_common (SYMTAB_LINETABLE (symtab), line, &was_exact,
+      idx = find_line_common (symtab->linetable (), line, &was_exact,
                              start);
       if (idx < 0)
        break;
 
       if (!was_exact)
        {
-         struct linetable_entry *item = &SYMTAB_LINETABLE (symtab)->item[idx];
+         struct linetable_entry *item = &symtab->linetable ()->item[idx];
 
          if (*best_item == NULL
              || (item->line < (*best_item)->line && item->is_stmt))
@@ -3561,7 +3561,7 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line,
          break;
        }
 
-      result.push_back (SYMTAB_LINETABLE (symtab)->item[idx].pc);
+      result.push_back (symtab->linetable ()->item[idx].pc);
       start = idx + 1;
     }
 
@@ -3586,7 +3586,7 @@ find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
   symtab = find_line_symtab (symtab, line, &ind, NULL);
   if (symtab != NULL)
     {
-      l = SYMTAB_LINETABLE (symtab);
+      l = symtab->linetable ();
       *pc = l->item[ind].pc;
       return true;
     }
@@ -3783,7 +3783,7 @@ skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
   int i;
 
   /* Give up if this symbol has no lineinfo table.  */
-  l = SYMTAB_LINETABLE (symtab);
+  l = symtab->linetable ();
   if (l == NULL)
     return func_addr;
 
@@ -4025,7 +4025,7 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
         do this.  */
       if (prologue_sal.symtab->language != language_asm)
        {
-         struct linetable *linetable = SYMTAB_LINETABLE (prologue_sal.symtab);
+         struct linetable *linetable = prologue_sal.symtab->linetable ();
          int idx = 0;
 
          /* Skip any earlier lines, and any end-of-sequence marker
index c313d54de18e40dbfe4c50579d703a8c7db95f97..8881f4e5c02b1898ad398f93cddea5ef5ad594cb 100644 (file)
@@ -1383,6 +1383,16 @@ struct symtab
     m_compunit = compunit;
   }
 
+  struct linetable *linetable () const
+  {
+    return m_linetable;
+  }
+
+  void set_linetable (struct linetable *linetable)
+  {
+    m_linetable = linetable;
+  }
+
   /* Unordered chain of all filetabs in the compunit,  with the exception
      that the "main" source file is the first entry in the list.  */
 
@@ -1395,7 +1405,7 @@ struct symtab
   /* Table mapping core addresses to line numbers for this file.
      Can be NULL if none.  Never shared between different symtabs.  */
 
-  struct linetable *linetable;
+  struct linetable *m_linetable;
 
   /* Name of this source file.  This pointer is never NULL.  */
 
@@ -1415,7 +1425,6 @@ struct symtab
 
 using symtab_range = next_range<symtab>;
 
-#define SYMTAB_LINETABLE(symtab) ((symtab)->linetable)
 #define SYMTAB_LANGUAGE(symtab) ((symtab)->language)
 #define SYMTAB_BLOCKVECTOR(symtab) \
   (symtab->compunit ()->blockvector ())