Make make-target-delegates grok namespace scope op and template params

The next patch will want to use gdb::array_view<int> 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<const_int> (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.
This commit is contained in:
Pedro Alves 2017-12-03 12:50:43 -05:00 committed by Simon Marchi
parent f0fb2488c9
commit 10f6417841
4 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,14 @@
2017-12-03 Pedro Alves <palves@redhat.com>
* 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.
2017-12-02 Simon Marchi <simon.marchi@polymtl.ca>
* common/poison.h (XDELETE): Fix typo.

View File

@ -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<int>".
$result =~ s/_$//g;
$result = 'target_debug_print_' . $result;
}

View File

@ -116,7 +116,7 @@
target_debug_do_print (host_address_to_string (X))
#define target_debug_print_mem_region_vector(X) \
target_debug_do_print (host_address_to_string (X.data ()))
#define target_debug_print_VEC_static_tracepoint_marker_p__p(X) \
#define target_debug_print_VEC_static_tracepoint_marker_p_p(X) \
target_debug_do_print (host_address_to_string (X))
#define target_debug_print_const_struct_target_desc_p(X) \
target_debug_do_print (host_address_to_string (X))

View File

@ -3352,7 +3352,7 @@ debug_static_tracepoint_markers_by_strid (struct target_ops *self, const char *a
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_const_char_p (arg1);
fputs_unfiltered (") = ", gdb_stdlog);
target_debug_print_VEC_static_tracepoint_marker_p__p (result);
target_debug_print_VEC_static_tracepoint_marker_p_p (result);
fputs_unfiltered ("\n", gdb_stdlog);
return result;
}