01 Mar, 2015

1 commit


18 Feb, 2015

25 commits

  • While reporting the (refreshed) list of modules on automatic updates we
    may hit the page boundary of the output console and cause a stop if
    pagination is enabled. However, gdb does not accept user input while
    running over the breakpoint handler. So we get stuck, and the user is
    forced to interrupt gdb.

    Resolve this by disabling pagination during automatic symbol updates. We
    restore the user's configuration once done.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Yet another code simplification.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Analogously to the task list, convert the module list to a generator
    function. It noticeably simplifies the code.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • The iterator does not return any task_struct from the thread_group list
    because the first condition in the 'if not t or ...' will only be the
    first time None.

    Instead of keeping track of the state ourself in the next() function, we
    fall back using Python's generator.

    Signed-off-by: Daniel Wagner
    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Wagner
     
  • Using the gdb scripts leaves byte-compiled python files in the scripts/
    directory. These should be ignored by git.

    [jan.kiszka@siemens.com: drop redundant mrproper rule as suggested by Michal]
    Signed-off-by: Daniel Thompson
    Signed-off-by: Jan Kiszka
    Cc: Michal Marek
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Thompson
     
  • I tried to use these scripts in an ubuntu 14.04 host (gdb 7.7 compiled
    against python 3.3) but there were several errors.

    I believe this patch fixes these issues so that the commands now work (I
    tested lx-symbols, lx-dmesg, lx-lsmod).

    Main issues that needed to be resolved:

    * In python 2 iterators have a "next()" method. In python 3 it is
    __next__() instead (so let's just add both).

    * In older python versions there was an implicit conversion
    in object.__format__() (used when an object is in string.format())
    where it was converting the object to str first and then
    calling str's __format__(). This has now been removed so
    we must explicitly convert to str the objects for which
    we need to keep this behavior.

    * In dmesg.py: in python 3 log_buf is now a "memoryview" object
    which needs to be converted to a string in order to use string
    methods like "splitlines()". Luckily memoryview exists in
    python 2.7.6 as well, so we can convert log_buf to memoryview
    and use the same code in both python 2 and python 3.

    This version of the patch has now been tested with gdb 7.7 and both python
    3.4 and python 2.7.6 (I think asking for at least python 2.7.6 is a
    reasonable requirement instead of complicating the code with version
    checks etc).

    Signed-off-by: Pantelis Koukousoulas
    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pantelis Koukousoulas
     
  • This adds a lsmod-like command to list all currently loaded modules of the
    target.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Will be used first to count module references. It is optimized to read
    the mask only once per stop.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This is a shorthand for *$lx_per_cpu("current_task"), i.e. a convenience
    function to retrieve the currently running task of the active context.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This function allows to obtain a per-cpu variable, either of the current
    or an explicitly specified CPU.

    Note: sparc64 version is untested.

    Signed-off-by: Jan Kiszka
    Cc: "David S. Miller"
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This helper probes the type of the gdb server. Supported are QEMU and
    KGDB so far. Knowledge about the gdb server is required e.g. to
    retrieve the current CPU or current task.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Add the internal helper get_thread_info that calculates the thread_info
    from a given task variable. Also export this service as a convenience
    function.

    Note: ia64 version is untested.

    Signed-off-by: Jan Kiszka
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This helper caches to result of "show architecture" and matches the
    provided arch (sub-)string against that output.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Add the helper task_by_pid that can look up a task by its PID. Also
    export it as a convenience function.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This class allows to iterate over all tasks of the target.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This pokes into the log buffer of the debugged kernel, dumping it to the
    gdb console. Helping in case the target should or can no longer execute
    dmesg itself.

    Signed-off-by: Jan Kiszka
    Cc: Kay Sievers
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Add helpers for reading integers from target memory buffers. Required
    when caching the memory access is more efficient than reading individual
    values via gdb.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Parse the target endianness from the output of "show endian" and cache the
    result to return it via the new helper get_target_endiannes. We will need
    it for reading integers from buffers that contain target memory.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Add the internal helper get_module_by_name to obtain the module structure
    corresponding to the given name. Also export this service as a
    convenience function.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This installs a silent breakpoint on the do_init_module function. The
    breakpoint handler will try to load symbols from the module files found
    during lx-symbols execution. This way, breakpoints can be set to module
    initialization functions, and there is no need to explicitly call
    lx-symbols after (re-)loading a module.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This is probably the most useful helper when debugging kernel modules:
    lx-symbols first reloads vmlinux. Then it searches recursively for *.ko
    files in the specified paths and the current directory. Finally it walks
    the kernel's module list, issuing the necessary add-symbol-file command
    for each loaded module so that gdb knows which module symbol corresponds
    to which address. It also looks up variable sections (bss, data, rodata)
    and appends their address to the add-symbole-file command line. This
    allows to access global module variables just like any other variable.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Will soon be used for loading symbols, printing global variables or
    listing modules.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Provide an internal helper with container_of semantics. As type lookups
    are very slow in gdb-python and we need a type "long" for this, cache the
    reference to this type object. Then export the helper also as a
    convenience function form use at the gdb command line.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • Type lookups are very slow in gdb-python which is often noticeable when
    iterating over a number of objects. Introduce the helper class CachedType
    that keeps a reference to a gdb.Type object but also refreshes it after an
    object file has been loaded.

    Signed-off-by: Jan Kiszka
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • This provides the basic infrastructure to load kernel-specific python
    helper scripts when debugging the kernel in gdb.

    The loading mechanism is based on gdb loading for -gdb.py when
    opening . Therefore, this places a corresponding link to the
    main helper script into the output directory that contains vmlinux.

    The main scripts will pull in submodules containing Linux specific gdb
    commands and functions. To avoid polluting the source directory with
    compiled python modules, we link to them from the object directory.

    Due to gdb.parse_and_eval and string redirection for gdb.execute, we
    depend on gdb >= 7.2.

    This feature is enabled via CONFIG_GDB_SCRIPTS.

    Signed-off-by: Jan Kiszka
    Acked-by: Michal Marek [kbuild stuff]
    Cc: Thomas Gleixner
    Cc: Jason Wessel
    Cc: Andi Kleen
    Cc: Ben Widawsky
    Cc: Borislav Petkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka