diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-10-20 12:38:42 +0100 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-12-23 20:53:14 +0000 |
commit | 2c75ccb24cec32180e057aade6bd9141296860e0 (patch) | |
tree | c61eba8249f1c31268ecc38f59230c7d43f2ece5 /gdb | |
parent | 016382f8a43a59eca49f68c7d8b8058f64eaf40f (diff) | |
download | binutils-2c75ccb24cec32180e057aade6bd9141296860e0.zip binutils-2c75ccb24cec32180e057aade6bd9141296860e0.tar.gz binutils-2c75ccb24cec32180e057aade6bd9141296860e0.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6788fc7..9acbae8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 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. * valprint.h (print_char_chars): Delete declaration. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 4edd8d4..5f8d870 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; |