[PATCH 2/9] gdb: avoid accessing global C++ language implementation functions

Andrew Burgess andrew.burgess@embecosm.com
Fri Nov 20 11:54:57 GMT 2020


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     | 5 +++++
 gdb/dwarf2/read.c | 7 ++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 3c598262913..b3e51d49584 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -10464,6 +10464,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;
 
@@ -10498,8 +10499,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;
 		    }
 
@@ -10519,7 +10520,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;
-- 
2.25.4



More information about the Gdb-patches mailing list