From 10f64178412d9c6e4f2faade0da271ab8be273c9 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Sun, 3 Dec 2017 12:50:43 -0500 Subject: Make make-target-delegates grok namespace scope op and template params The next patch will want to use gdb::array_view as parameter type of a target_ops method. However, that runs into a make-target-delegates limitation: target_debug_foo calls in target-delegates.c for parameters/return types with namespace scope operators ("::") or template parameters, end up looking like: @@ -1313,9 +1313,7 @@ debug_set_syscall_catchpoint (struct target_ops *self, int arg1, int arg2, int a fputs_unfiltered (", ", gdb_stdlog); target_debug_print_int (arg3); fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_int (arg4); - fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_int_p (arg5); + target_debug_print_gdb::array_view (arg4); which obviously isn't something that compiles. The problem is that make-target-delegates wasn't ever taught that '::', '<', and '>' can appear in parameter/return types. You could work around it by hidding the unsupported characters behind a typedef in the target method declaration, or by using an explicit TARGET_DEBUG_PRINTER, but it's better to just remove the limitation. While at it, also fix an "abuse" of reserved identifiers. gdb/ChangeLog: * make-target-delegates (munge_type): Also munge '<', '>', and ':'. Avoid double underscores in identifiers, and trailing underscores. * target-debug.h (target_debug_print_VEC_static_tracepoint_marker_p__p): Rename to ... (target_debug_print_VEC_static_tracepoint_marker_p_p): ... this. * target-delegates.c: Regenerate. --- gdb/make-target-delegates | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'gdb/make-target-delegates') diff --git a/gdb/make-target-delegates b/gdb/make-target-delegates index fd51c64..1773232 100755 --- a/gdb/make-target-delegates +++ b/gdb/make-target-delegates @@ -232,8 +232,18 @@ sub munge_type($) { $result = $1; } else { ($result = $typename) =~ s/\s+$//; - $result =~ s/[ ()]/_/g; + $result =~ s/[ ()<>:]/_/g; $result =~ s/[*]/p/g; + + # Identifers with double underscores are reserved to the C++ + # implementation. + $result =~ s/_+/_/g; + + # Avoid ending the function name with underscore, for + # cosmetics. Trailing underscores appear after munging types + # with template parameters, like e.g. "foo". + $result =~ s/_$//g; + $result = 'target_debug_print_' . $result; } -- cgit v1.1