gdb: Convert language la_read_var_value field to a method
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 1 May 2020 16:33:22 +0000 (17:33 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 2 Jun 2020 12:53:10 +0000 (13:53 +0100)
This commit changes the language_data::la_read_var_value function
pointer member variable into a member function of language_defn.

An interesting aspect of this change is that the implementation of
language_defn::read_var_value is actually in findvar.c.  This is
partly historical, the new language_defn::read_var_value is a rename
of default_read_var_value, which was already in that file, but also,
that is the file that contains the helper functions needed by the
read_var_value method, so it makes sens that the method implementation
should continue to live there (I think).

There should be no user visible changes after this commit.

gdb/ChangeLog:

* ada-lang.c (ada_read_var_value): Delete function, move
implementation to...
(ada_language::read_var_value): ...here.
(ada_language_data): Delete la_read_var_value initializer.
* c-lang.c (c_language_data): Likewise.
(cplus_language_data): Likewise.
(minimal_language_data): Likewise.
* d-lang.c (d_language_data): Likewise.
* f-lang.c (f_language_data): Likewise.
* findvar.c (default_read_var_value): Rename to...
(language_defn::read_var_value): ...this.
* findvar.c (read_var_value): Update header comment, and change to
call member function instead of function pointer.
* go-lang.c (go_language_data): Likewise.
* language.c (unknown_language_data): Delete la_read_var_value
initializer.
(auto_language_data): Likewise.
* language.h (struct language_data): Delete la_read_var_value
field.
(language_defn::read_var_value): New member function.
(default_read_var_value): Delete declaration.
* m2-lang.c (m2_language_data): Delete la_read_var_value
initializer.
* objc-lang.c (objc_language_data): Likewise.
* opencl-lang.c (opencl_language_data): Likewise.
* p-lang.c (pascal_language_data): Likewise.
* rust-lang.c (rust_language_data): Likewise.
* value.h (default_read_var_value): Delete declaration.

15 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/c-lang.c
gdb/d-lang.c
gdb/f-lang.c
gdb/findvar.c
gdb/go-lang.c
gdb/language.c
gdb/language.h
gdb/m2-lang.c
gdb/objc-lang.c
gdb/opencl-lang.c
gdb/p-lang.c
gdb/rust-lang.c
gdb/value.h

index e0e60a9df1b1ac63d45662a443e5e0601cea10fb..3c2f394d0719654fab64a2ec43d8e4715eea558f 100644 (file)
@@ -1,3 +1,34 @@
+2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * ada-lang.c (ada_read_var_value): Delete function, move
+       implementation to...
+       (ada_language::read_var_value): ...here.
+       (ada_language_data): Delete la_read_var_value initializer.
+       * c-lang.c (c_language_data): Likewise.
+       (cplus_language_data): Likewise.
+       (minimal_language_data): Likewise.
+       * d-lang.c (d_language_data): Likewise.
+       * f-lang.c (f_language_data): Likewise.
+       * findvar.c (default_read_var_value): Rename to...
+       (language_defn::read_var_value): ...this.
+       * findvar.c (read_var_value): Update header comment, and change to
+       call member function instead of function pointer.
+       * go-lang.c (go_language_data): Likewise.
+       * language.c (unknown_language_data): Delete la_read_var_value
+       initializer.
+       (auto_language_data): Likewise.
+       * language.h (struct language_data): Delete la_read_var_value
+       field.
+       (language_defn::read_var_value): New member function.
+       (default_read_var_value): Delete declaration.
+       * m2-lang.c (m2_language_data): Delete la_read_var_value
+       initializer.
+       * objc-lang.c (objc_language_data): Likewise.
+       * opencl-lang.c (opencl_language_data): Likewise.
+       * p-lang.c (pascal_language_data): Likewise.
+       * rust-lang.c (rust_language_data): Likewise.
+       * value.h (default_read_var_value): Delete declaration.
+
 2020-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * ada-lang.c (ada_print_array_index): Delete function, move
index 0ae8756feed48ea81b2def4f2e930ee277bdd5c2..d69d2bb735d3368756131699dddbce9228a987ac 100644 (file)
@@ -14023,26 +14023,6 @@ ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
     }
 }
 
-/* Implement the "la_read_var_value" language_defn method for Ada.  */
-
-static struct value *
-ada_read_var_value (struct symbol *var, const struct block *var_block,
-                   struct frame_info *frame)
-{
-  /* The only case where default_read_var_value is not sufficient
-     is when VAR is a renaming...  */
-  if (frame != nullptr)
-    {
-      const struct block *frame_block = get_frame_block (frame, NULL);
-      if (frame_block != nullptr && ada_is_renaming_symbol (var))
-       return ada_read_renaming_var_value (var, frame_block);
-    }
-
-  /* This is a typical case where we expect the default_read_var_value
-     function to work.  */
-  return default_read_var_value (var, var_block, frame);
-}
-
 static const char *ada_extensions[] =
 {
   ".adb", ".ads", ".a", ".ada", ".dg", NULL
@@ -14071,7 +14051,6 @@ extern const struct language_data ada_language_data =
   ada_print_typedef,            /* Print a typedef using appropriate syntax */
   ada_value_print_inner,       /* la_value_print_inner */
   ada_value_print,              /* Print a top-level value */
-  ada_read_var_value,          /* la_read_var_value */
   NULL,                         /* Language specific skip_trampoline */
   NULL,                         /* name_of_this */
   true,                         /* la_store_sym_names_in_linkage_form_p */
@@ -14120,6 +14099,26 @@ public:
     LA_VALUE_PRINT (index_value, stream, options);
     fprintf_filtered (stream, " => ");
   }
+
+  /* Implement the "read_var_value" language_defn method for Ada.  */
+
+  struct value *read_var_value (struct symbol *var,
+                               const struct block *var_block,
+                               struct frame_info *frame) const override
+  {
+    /* The only case where default_read_var_value is not sufficient
+       is when VAR is a renaming...  */
+    if (frame != nullptr)
+      {
+       const struct block *frame_block = get_frame_block (frame, NULL);
+       if (frame_block != nullptr && ada_is_renaming_symbol (var))
+         return ada_read_renaming_var_value (var, frame_block);
+      }
+
+    /* This is a typical case where we expect the default_read_var_value
+       function to work.  */
+    return language_defn::read_var_value (var, var_block, frame);
+  }
 };
 
 /* Single instance of the Ada language class.  */
index dcf6ccda758d028be8d4d2bf8be5c3a37c9004b9..8663dc1dfa39e95f1efacba17908fe7b87263892 100644 (file)
@@ -907,7 +907,6 @@ extern const struct language_data c_language_data =
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                                /* name_of_this */
   true,                                /* la_store_sym_names_in_linkage_form_p */
@@ -1067,7 +1066,6 @@ extern const struct language_data cplus_language_data =
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   cplus_skip_trampoline,       /* Language specific skip_trampoline */
   "this",                       /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
@@ -1136,7 +1134,6 @@ extern const struct language_data asm_language_data =
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                                /* name_of_this */
   true,                                /* la_store_sym_names_in_linkage_form_p */
@@ -1202,7 +1199,6 @@ extern const struct language_data minimal_language_data =
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                                /* name_of_this */
   true,                                /* la_store_sym_names_in_linkage_form_p */
index af8143b9b13497eb693b4ee8a2fc9efa788f5ebf..e55d82e08be12233fe72b98a7b18bfb89cc24f56 100644 (file)
@@ -228,7 +228,6 @@ extern const struct language_data d_language_data =
                                   syntax.  */
   d_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value.  */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline.  */
   "this",
   false,                       /* la_store_sym_names_in_linkage_form_p */
index 7288e727421eb5d20d8c67b891b85ad83d944f52..53e44db5caff24b7215f8970c6bd88ae3c29a1e8 100644 (file)
@@ -650,7 +650,6 @@ extern const struct language_data f_language_data =
   f_print_typedef,             /* Print a typedef using appropriate syntax */
   f_value_print_innner,                /* la_value_print_inner */
   c_value_print,               /* FIXME */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                        /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index 40cbe8b48f42a03d9d93806454137ab0fe48a21d..c7cd31ce1a68066fbd891aad219a36752434f312 100644 (file)
@@ -578,12 +578,12 @@ get_hosting_frame (struct symbol *var, const struct block *var_block,
   return frame;
 }
 
-/* A default implementation for the "la_read_var_value" hook in
-   the language vector which should work in most situations.  */
+/* See language.h.  */
 
 struct value *
-default_read_var_value (struct symbol *var, const struct block *var_block,
-                       struct frame_info *frame)
+language_defn::read_var_value (struct symbol *var,
+                              const struct block *var_block,
+                              struct frame_info *frame) const
 {
   struct value *v;
   struct type *type = SYMBOL_TYPE (var);
@@ -801,7 +801,7 @@ default_read_var_value (struct symbol *var, const struct block *var_block,
   return v;
 }
 
-/* Calls VAR's language la_read_var_value hook with the given arguments.  */
+/* Calls VAR's language read_var_value hook with the given arguments.  */
 
 struct value *
 read_var_value (struct symbol *var, const struct block *var_block,
@@ -810,9 +810,8 @@ read_var_value (struct symbol *var, const struct block *var_block,
   const struct language_defn *lang = language_def (var->language ());
 
   gdb_assert (lang != NULL);
-  gdb_assert (lang->la_read_var_value != NULL);
 
-  return lang->la_read_var_value (var, var_block, frame);
+  return lang->read_var_value (var, var_block, frame);
 }
 
 /* Install default attributes for register values.  */
index 6ddeccef66908f208f61767fda588ed71e0ec183..caac9bdc646a6ed38ccb37859cc60042300639bb 100644 (file)
@@ -599,7 +599,6 @@ extern const struct language_data go_language_data =
                                   syntax.  */
   go_value_print_inner,                /* la_value_print_inner */
   c_value_print,               /* Print a top-level value.  */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline.  */
   NULL,                                /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index de0f85669c4c6303b2797e4100ba2ff1991f51ae..d541c6f2dd884fbfced936cdfc8b052c87694136 100644 (file)
@@ -833,7 +833,6 @@ extern const struct language_data unknown_language_data =
   default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_value_print_inner,  /* la_value_print_inner */
   unk_lang_value_print,                /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
   "this",                      /* name_of_this */
   true,                                /* store_sym_names_in_linkage_form_p */
@@ -897,7 +896,6 @@ extern const struct language_data auto_language_data =
   default_print_typedef,       /* Print a typedef using appropriate syntax */
   unk_lang_value_print_inner,  /* la_value_print_inner */
   unk_lang_value_print,                /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   unk_lang_trampoline,         /* Language specific skip_trampoline */
   "this",                      /* name_of_this */
   false,                       /* store_sym_names_in_linkage_form_p */
index 8960f1ec53be4da221c7589fd63e1389a5e166f3..56260fb6ee9df9720636c969fb44b172e9938ec7 100644 (file)
@@ -272,21 +272,6 @@ struct language_data
     void (*la_value_print) (struct value *, struct ui_file *,
                            const struct value_print_options *);
 
-    /* Given a symbol VAR, the corresponding block VAR_BLOCK (if any) and a
-       stack frame id FRAME, read the value of the variable and return (pointer
-       to a) struct value containing the value.
-
-       VAR_BLOCK is needed if there's a possibility for VAR to be outside
-       FRAME.  This is what happens if FRAME correspond to a nested function
-       and VAR is defined in the outer function.  If callers know that VAR is
-       located in FRAME or is global/static, NULL can be passed as VAR_BLOCK.
-
-       Throw an error if the variable cannot be found.  */
-
-    struct value *(*la_read_var_value) (struct symbol *var,
-                                       const struct block *var_block,
-                                       struct frame_info *frame);
-
     /* PC is possibly an unknown languages trampoline.
        If that PC falls in a trampoline belonging to this language,
        return the address of the first pc in the real function, or 0
@@ -497,6 +482,21 @@ struct language_defn : language_data
                                  struct ui_file *stream,
                                  const value_print_options *options) const;
 
+  /* Given a symbol VAR, the corresponding block VAR_BLOCK (if any) and a
+     stack frame id FRAME, read the value of the variable and return (pointer
+     to a) struct value containing the value.
+
+     VAR_BLOCK is needed if there's a possibility for VAR to be outside
+     FRAME.  This is what happens if FRAME correspond to a nested function
+     and VAR is defined in the outer function.  If callers know that VAR is
+     located in FRAME or is global/static, NULL can be passed as VAR_BLOCK.
+
+     Throw an error if the variable cannot be found.  */
+
+  virtual struct value *read_var_value (struct symbol *var,
+                                       const struct block *var_block,
+                                       struct frame_info *frame) const;
+
   /* List of all known languages.  */
   static const struct language_defn *languages[nr_languages];
 };
index b7d7681e3a68446a9ccdc1e07aca564283d39e30..1769c820228b9119bc63d2b759bf815176df2e2a 100644 (file)
@@ -397,7 +397,6 @@ extern const struct language_data m2_language_data =
   m2_print_typedef,            /* Print a typedef using appropriate syntax */
   m2_value_print_inner,                /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                                /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index a877ed073de3d0b45a04406c9b3690d2bbc75187..f6fd8f5e465f490eabe511f46c9d04defcf57f85 100644 (file)
@@ -386,7 +386,6 @@ extern const struct language_data objc_language_data =
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   objc_skip_trampoline,        /* Language specific skip_trampoline */
   "self",                      /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index 96d217a81c6cfb98434c731d83ae0fe3d55be3a6..c1c498c7377fd028ff7f0cf6320faf936761ab1e 100644 (file)
@@ -1063,7 +1063,6 @@ extern const struct language_data opencl_language_data =
   c_print_typedef,             /* Print a typedef using appropriate syntax */
   c_value_print_inner,         /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                         /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index 06a2b435438c1930356a72e235dc49c637d17376..e55f0b0769640be46c0762e914b31f900003fda1 100644 (file)
@@ -451,7 +451,6 @@ extern const struct language_data pascal_language_data =
   pascal_print_typedef,                /* Print a typedef using appropriate syntax */
   pascal_value_print_inner,    /* la_value_print_inner */
   pascal_value_print,          /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   "this",                      /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index c02399c5c5c42327810d37b1d87bfabcbf739658..3522ce52f4b3742c4e3c265b5e54206637283b8c 100644 (file)
@@ -2123,7 +2123,6 @@ extern const struct language_data rust_language_data =
   rust_print_typedef,          /* Print a typedef using appropriate syntax */
   rust_value_print_inner,      /* la_value_print_inner */
   c_value_print,               /* Print a top-level value */
-  default_read_var_value,      /* la_read_var_value */
   NULL,                                /* Language specific skip_trampoline */
   NULL,                                /* name_of_this */
   false,                       /* la_store_sym_names_in_linkage_form_p */
index ae859ca7224849664a2814a4a9241a8a5c645a8c..70c3d5667aef93f915fc5166c7aa0eb397a46805 100644 (file)
@@ -744,10 +744,6 @@ extern struct value *read_var_value (struct symbol *var,
                                     const struct block *var_block,
                                     struct frame_info *frame);
 
-extern struct value *default_read_var_value (struct symbol *var,
-                                            const struct block *var_block,
-                                            struct frame_info *frame);
-
 extern struct value *allocate_value (struct type *type);
 extern struct value *allocate_value_lazy (struct type *type);
 extern void value_contents_copy (struct value *dst, LONGEST dst_offset,