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.
This commit is contained in:
Andrew Burgess
2020-10-20 12:38:42 +01:00
parent 016382f8a4
commit 2c75ccb24c
2 changed files with 9 additions and 3 deletions

View 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.

View 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,7 +10584,7 @@ dwarf2_compute_name (const char *name,
if (child->tag == DW_TAG_template_type_param)
{
c_print_type (type, "", &buf, -1, 0, cu->language,
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;