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::
|
of each callsite. Example::
|
||||||
|
|
||||||
func svc_tcp_accept
|
func svc_tcp_accept
|
||||||
|
func *recv* # in rfcomm, bluetooth, ping, tcp
|
||||||
|
|
||||||
file
|
file
|
||||||
The given string is compared against either the src-root relative
|
The given string is compared against either the src-root relative
|
||||||
|
@ -172,6 +173,9 @@ file
|
||||||
|
|
||||||
file svcsock.c
|
file svcsock.c
|
||||||
file kernel/freezer.c # ie column 1 of control file
|
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
|
module
|
||||||
The given string is compared against the module name
|
The given string is compared against the module name
|
||||||
|
@ -181,6 +185,7 @@ module
|
||||||
|
|
||||||
module sunrpc
|
module sunrpc
|
||||||
module nfsd
|
module nfsd
|
||||||
|
module drm* # both drm, drm_kms_helper
|
||||||
|
|
||||||
format
|
format
|
||||||
The given string is searched for in the dynamic debug 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;
|
unsigned int i;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
char *fline;
|
||||||
|
|
||||||
/* check we have an even number of words */
|
/* check we have an even number of words */
|
||||||
if (nwords % 2 != 0) {
|
if (nwords % 2 != 0) {
|
||||||
|
@ -374,7 +375,22 @@ static int ddebug_parse_query(char *words[], int nwords,
|
||||||
if (!strcmp(words[i], "func")) {
|
if (!strcmp(words[i], "func")) {
|
||||||
rc = check_set(&query->function, words[i+1], "func");
|
rc = check_set(&query->function, words[i+1], "func");
|
||||||
} else if (!strcmp(words[i], "file")) {
|
} 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")) {
|
} else if (!strcmp(words[i], "module")) {
|
||||||
rc = check_set(&query->module, words[i+1], "module");
|
rc = check_set(&query->module, words[i+1], "module");
|
||||||
} else if (!strcmp(words[i], "format")) {
|
} else if (!strcmp(words[i], "format")) {
|
||||||
|
|
Loading…
Reference in New Issue