diff options
-rw-r--r-- | gdb/ChangeLog | 31 | ||||
-rw-r--r-- | gdb/ada-lang.c | 41 | ||||
-rw-r--r-- | gdb/c-lang.c | 4 | ||||
-rw-r--r-- | gdb/d-lang.c | 1 | ||||
-rw-r--r-- | gdb/f-lang.c | 1 | ||||
-rw-r--r-- | gdb/findvar.c | 13 | ||||
-rw-r--r-- | gdb/go-lang.c | 1 | ||||
-rw-r--r-- | gdb/language.c | 2 | ||||
-rw-r--r-- | gdb/language.h | 30 | ||||
-rw-r--r-- | gdb/m2-lang.c | 1 | ||||
-rw-r--r-- | gdb/objc-lang.c | 1 | ||||
-rw-r--r-- | gdb/opencl-lang.c | 1 | ||||
-rw-r--r-- | gdb/p-lang.c | 1 | ||||
-rw-r--r-- | gdb/rust-lang.c | 1 | ||||
-rw-r--r-- | gdb/value.h | 4 |
15 files changed, 72 insertions, 61 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e0e60a9..3c2f394 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,36 @@ 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 implementation to... (ada_language::print_array_index): ...here. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 0ae8756..d69d2bb 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -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. */ diff --git a/gdb/c-lang.c b/gdb/c-lang.c index dcf6ccd..8663dc1 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -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 */ diff --git a/gdb/d-lang.c b/gdb/d-lang.c index af8143b..e55d82e 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -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 */ diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 7288e72..53e44db 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -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 */ diff --git a/gdb/findvar.c b/gdb/findvar.c index 40cbe8b..c7cd31c 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -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. */ diff --git a/gdb/go-lang.c b/gdb/go-lang.c index 6ddecce..caac9bd 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -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 */ diff --git a/gdb/language.c b/gdb/language.c index de0f856..d541c6f 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -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 */ diff --git a/gdb/language.h b/gdb/language.h index 8960f1e..56260fb 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -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]; }; diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index b7d7681..1769c82 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -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 */ diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index a877ed0..f6fd8f5 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -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 */ diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 96d217a..c1c498c 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -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 */ diff --git a/gdb/p-lang.c b/gdb/p-lang.c index 06a2b43..e55f0b0 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -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 */ diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index c02399c..3522ce5 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -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 */ diff --git a/gdb/value.h b/gdb/value.h index ae859ca..70c3d56 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -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, |