forked from Minki/linux
dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100'
Accept these additional query forms: echo "file $filestr +_" > control path/to/file.c:100 # as from control, column 1 path/to/file.c:1-100 # or any legal line-range path/to/file.c:func_A # as from an editor/browser path/to/file.c:drm_* # wildcards still work path/to/file.c:*_foo # lead wildcard too 1st 2 examples are treated as line-ranges, 3-5 are treated as func's Doc these changes, and sprinkle in a few extra wild-card examples and trailing # explanation texts. Acked-by: <jbaron@akamai.com> Signed-off-by: Jim Cromie <jim.cromie@gmail.com> Link: https://lore.kernel.org/r/20200719231058.1586423-14-jim.cromie@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8037072d81
commit
aaebe329bf
@ -164,6 +164,7 @@ func
|
||||
of each callsite. Example::
|
||||
|
||||
func svc_tcp_accept
|
||||
func *recv* # in rfcomm, bluetooth, ping, tcp
|
||||
|
||||
file
|
||||
The given string is compared against either the src-root relative
|
||||
@ -172,6 +173,9 @@ file
|
||||
|
||||
file svcsock.c
|
||||
file kernel/freezer.c # ie column 1 of control file
|
||||
file drivers/usb/* # all callsites under it
|
||||
file inode.c:start_* # parse :tail as a func (above)
|
||||
file inode.c:1-100 # parse :tail as a line-range (above)
|
||||
|
||||
module
|
||||
The given string is compared against the module name
|
||||
@ -181,6 +185,7 @@ module
|
||||
|
||||
module sunrpc
|
||||
module nfsd
|
||||
module drm* # both drm, drm_kms_helper
|
||||
|
||||
format
|
||||
The given string is searched for in the dynamic debug format
|
||||
|
@ -359,6 +359,7 @@ static int ddebug_parse_query(char *words[], int nwords,
|
||||
{
|
||||
unsigned int i;
|
||||
int rc = 0;
|
||||
char *fline;
|
||||
|
||||
/* check we have an even number of words */
|
||||
if (nwords % 2 != 0) {
|
||||
@ -374,7 +375,22 @@ static int ddebug_parse_query(char *words[], int nwords,
|
||||
if (!strcmp(words[i], "func")) {
|
||||
rc = check_set(&query->function, words[i+1], "func");
|
||||
} else if (!strcmp(words[i], "file")) {
|
||||
rc = check_set(&query->filename, words[i+1], "file");
|
||||
if (check_set(&query->filename, words[i+1], "file"))
|
||||
return -EINVAL;
|
||||
|
||||
/* tail :$info is function or line-range */
|
||||
fline = strchr(query->filename, ':');
|
||||
if (!fline)
|
||||
break;
|
||||
*fline++ = '\0';
|
||||
if (isalpha(*fline) || *fline == '*' || *fline == '?') {
|
||||
/* take as function name */
|
||||
if (check_set(&query->function, fline, "func"))
|
||||
return -EINVAL;
|
||||
} else {
|
||||
if (parse_linerange(query, fline))
|
||||
return -EINVAL;
|
||||
}
|
||||
} else if (!strcmp(words[i], "module")) {
|
||||
rc = check_set(&query->module, words[i+1], "module");
|
||||
} else if (!strcmp(words[i], "format")) {
|
||||
|
Loading…
Reference in New Issue
Block a user