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 16/16] dyndbg: allow negating flag-chars in modflags
    Date
    Extend flags modifications to allow [PFMLTU] negating flags.
    This allows control-queries like:

    #> Q () { echo file inode.c $* > control } # to type less
    #> Q -P # same as +p
    #> Q +U # same as -u
    #> Q u-P # same as u+p

    This allows flags in a callsite to be simultaneously set and cleared,
    while still starting with the current flagstate (with +- ops).
    Generally, you chose -p or +p 1st, then set or clear flags
    accordingly.

    Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
    ---
    Documentation/admin-guide/dynamic-debug-howto.rst | 10 ++++++----
    lib/dynamic_debug.c | 6 ++++--
    2 files changed, 10 insertions(+), 6 deletions(-)

    diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
    index 26a19f511afa..45470c9f0dad 100644
    --- a/Documentation/admin-guide/dynamic-debug-howto.rst
    +++ b/Documentation/admin-guide/dynamic-debug-howto.rst
    @@ -252,9 +252,11 @@ only callsites with ``u`` and ``f`` cleared.

    Flagsets cannot contain ``pP`` etc, a flag cannot be true and false.

    -modflags containing upper-case flags is reserved/undefined for now.
    -inverted-flags are currently ignored, usage gets trickier if given
    -``-pXy``, it should leave x set.
    +modflags may contain upper-case flags also, using these lets you
    +invert the flag setting implied by the OP; '-pU' means disable
    +printing, and mark that callsite with the user-flag to create a group,
    +for optional further manipulation. Generally, '+p' and '-p' is your
    +main choice, and use of negating flags in modflags is rare.

    Notes::

    @@ -264,7 +266,7 @@ For ``print_hex_dump_debug()`` and ``print_hex_dump_bytes()``, only
    For display, the flags are preceded by ``=``
    (mnemonic: what the flags are currently equal to).

    -Note the regexp ``^[-+=][flmptu_]+$`` matches a flags specification.
    +Note the regexp ``/^[-+=][flmptu_]+$/i`` matches a flags specification.
    To clear all flags at once, use ``=_`` or ``-flmptu``.


    diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
    index ee92e93cf23d..63ae6f77a0e4 100644
    --- a/lib/dynamic_debug.c
    +++ b/lib/dynamic_debug.c
    @@ -485,15 +485,17 @@ static int ddebug_parse_flags(const char *str,

    /* calculate final mods: flags, mask based upon op */
    switch (op) {
    + unsigned int tmp;
    case '=':
    mods->mask = 0;
    break;
    case '+':
    - mods->mask = ~0U;
    + mods->mask = ~mods->mask;
    break;
    case '-':
    + tmp = mods->mask;
    mods->mask = ~mods->flags;
    - mods->flags = 0;
    + mods->flags = tmp;
    break;
    }

    --
    2.26.2
    \
     
     \ /
      Last update: 2020-06-05 18:29    [W:2.913 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site