lkml.org 
[lkml]   [2019]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/18] dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100'
    Date
    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,4 are treated as func's

    Doc these changes, and sprinkle in a few extra wild-card examples and
    trailing # explanation texts.

    Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
    ---
    .../admin-guide/dynamic-debug-howto.rst | 5 +++++
    lib/dynamic_debug.c | 20 ++++++++++++++++++-
    2 files changed, 24 insertions(+), 1 deletion(-)

    diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
    index e011f8907116..689a30316589 100644
    --- a/Documentation/admin-guide/dynamic-debug-howto.rst
    +++ b/Documentation/admin-guide/dynamic-debug-howto.rst
    @@ -156,6 +156,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
    @@ -164,6 +165,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
    @@ -173,6 +177,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
    diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
    index f0cf90e672b8..9fa6d4eeae5c 100644
    --- a/lib/dynamic_debug.c
    +++ b/lib/dynamic_debug.c
    @@ -322,6 +322,8 @@ static int parse_linerange(struct ddebug_query *query, const char *first)
    } else {
    query->last_lineno = query->first_lineno;
    }
    + vpr_info("parsed line %d-%d\n", query->first_lineno,
    + query->last_lineno);
    return 0;
    }

    @@ -358,6 +360,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 +377,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")) {
    --
    2.23.0
    \
     
     \ /
      Last update: 2019-12-05 22:53    [W:3.312 / U:1.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site