aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-10-20 12:38:42 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-12-23 20:53:14 +0000
commit2c75ccb24cec32180e057aade6bd9141296860e0 (patch)
treec61eba8249f1c31268ecc38f59230c7d43f2ece5 /gdb
parent016382f8a43a59eca49f68c7d8b8058f64eaf40f (diff)
downloadbinutils-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/ChangeLog5
-rw-r--r--gdb/dwarf2/read.c7
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;