From 2c75ccb24cec32180e057aade6bd9141296860e0 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Tue, 20 Oct 2020 12:38:42 +0100 Subject: [PATCH] gdb: avoid accessing global C++ language implementation functions 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/ChangeLog b/gdb/ChangeLog index 6788fc76ad5..9acbae8b899 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-12-23 Andrew Burgess + + * dwarf2/read.c (dwarf2_compute_name): Call methods on C++ + language object instead of calling global functions directly. + 2020-12-23 Andrew Burgess * valprint.c (print_char_chars): Delete definition. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 4edd8d4d9d6..5f8d8705e79 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -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; -- 2.30.2