lkml.org 
[lkml]   [2020]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/16] 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 2854d418b31b..880d33d1782f 100644
    --- a/Documentation/admin-guide/dynamic-debug-howto.rst
    +++ b/Documentation/admin-guide/dynamic-debug-howto.rst
    @@ -159,6 +159,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
    @@ -167,6 +168,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
    @@ -176,6 +180,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 d43bc3547d3a..8f250c67acbe 100644
    --- a/lib/dynamic_debug.c
    +++ b/lib/dynamic_debug.c
    @@ -321,6 +321,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;
    }

    @@ -357,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) {
    @@ -373,7 +376,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.26.2
    \
     
     \ /
      Last update: 2020-06-05 18:28    [W:6.719 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site