gdb: avoid accessing global C++ language implementation functions
authorAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 20 Oct 2020 11:38:42 +0000 (12:38 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 23 Dec 2020 20:53:14 +0000 (20:53 +0000)
The function c_printchar is called from two places; it provides the
implementation of language_defn::printchar and it is called from
dwarf2_compute_name.

It would be nice to rename c_printchar as language_defn::printchar and
so avoid the trampoline.

To achieve this, instead of calling c_printchar directly from the
DWARF code, I lookup the C++ language object and call the printchar
member function.

In a later commit I can then rename c_printchar.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* dwarf2/read.c (dwarf2_compute_name): Call methods on C++
language object instead of calling global functions directly.

gdb/ChangeLog
gdb/dwarf2/read.c

index 6788fc76ad558b725f8df1023600806add72ccee..9acbae8b8994590fe7bdf29485261d274bcb93bd 100644 (file)
@@ -1,3 +1,8 @@
+2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * dwarf2/read.c (dwarf2_compute_name): Call methods on C++
+       language object instead of calling global functions directly.
+
 2020-12-23  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * valprint.c (print_char_chars): Delete definition.
index 4edd8d4d9d6858226f09d30624413239b42a487c..5f8d8705e799c7c14c01fa449cef739f449aac4f 100644 (file)
@@ -10549,6 +10549,7 @@ dwarf2_compute_name (const char *name,
              struct attribute *attr;
              struct die_info *child;
              int first = 1;
+             const language_defn *cplus_lang = language_def (cu->language);
 
              die->building_fullname = 1;
 
@@ -10583,8 +10584,8 @@ dwarf2_compute_name (const char *name,
 
                  if (child->tag == DW_TAG_template_type_param)
                    {
-                     c_print_type (type, "", &buf, -1, 0, cu->language,
-                                   &type_print_raw_options);
+                     cplus_lang->print_type (type, "", &buf, -1, 0,
+                                             &type_print_raw_options);
                      continue;
                    }
 
@@ -10604,7 +10605,7 @@ dwarf2_compute_name (const char *name,
                  if (type->has_no_signedness ())
                    /* GDB prints characters as NUMBER 'CHAR'.  If that's
                       changed, this can use value_print instead.  */
-                   c_printchar (value, type, &buf);
+                   cplus_lang->printchar (value, type, &buf);
                  else
                    {
                      struct value_print_options opts;