01 Nov, 2011

1 commit


02 Aug, 2011

1 commit

  • When switching from kdb mode to kgdb mode packets were getting lost
    depending on the size of the fifo queue of the serial chip. When gdb
    initially connects if it is in kdb mode it should entirely send any
    character buffer over to the gdbstub when switching connections.

    Previously kdb was zero'ing out the character buffer and this could
    lead to gdb failing to connect at all, or a lengthy pause could occur
    on the initial connect.

    Signed-off-by: Jason Wessel

    Jason Wessel
     

19 Mar, 2011

1 commit

  • Notify GDB of the machine halting, rebooting or powering off by sending it an
    exited command (remote protocol command 'W'). This is done by calling:

    void gdbstub_exit(int status)

    from the arch's machine_{halt,restart,power_off}() functions with an
    appropriate exit status to be reported to GDB.

    Signed-off-by: David Howells

    David Howells
     

06 Aug, 2010

1 commit

  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb:
    debug_core,kdb: fix crash when arch does not have single step
    kgdb,x86: use macro HBP_NUM to replace magic number 4
    kgdb,mips: remove unused kgdb_cpu_doing_single_step operations
    mm,kdb,kgdb: Add a debug reference for the kdb kmap usage
    KGDB: Remove set but unused newPC
    ftrace,kdb: Allow dumping a specific cpu's buffer with ftdump
    ftrace,kdb: Extend kdb to be able to dump the ftrace buffer
    kgdb,powerpc: Replace hardcoded offset by BREAK_INSTR_SIZE
    arm,kgdb: Add ability to trap into debugger on notify_die
    gdbstub: do not directly use dbg_reg_def[] in gdb_cmd_reg_set()
    gdbstub: Implement gdbserial 'p' and 'P' packets
    kgdb,arm: Individual register get/set for arm
    kgdb,mips: Individual register get/set for mips
    kgdb,x86: Individual register get/set for x86
    kgdb,kdb: individual register set and and get API
    gdbstub: Optimize kgdb's "thread:" response for the gdb serial protocol
    kgdb: remove custom hex_to_bin()implementation

    Linus Torvalds
     

05 Aug, 2010

5 commits

  • Presently the usable registers definitions on x86 are not contiguous
    for kgdb. The x86 kgdb uses a case statement for the sparse register
    accesses. The array which defines the registers (dbg_reg_def) should
    not be used directly in order to safely work with sparse register
    definitions.

    Specifically there was a problem when gdb accesses ORIG_AX, which is
    accessed only through the case statement.

    This patch encodes register memory using the size information provided
    from the debugger which avoids the need to look up the size of the
    register. The dbg_set_reg() function always further validates the
    inputs from the debugger.

    Signed-off-by: Jason Wessel
    Signed-off-by: Dongdong Deng

    Jason Wessel
     
  • The gdbserial 'p' and 'P' packets allow gdb to individually get and
    set registers instead of querying for all the available registers.

    Signed-off-by: Jason Wessel

    Jason Wessel
     
  • The kdb shell specification includes the ability to get and set
    architecture specific registers by name.

    For the time being individual register get and set will be implemented
    on a per architecture basis. If an architecture defines
    DBG_MAX_REG_NUM > 0 then kdb and the gdbstub will use the capability
    for individually getting and setting architecture specific registers.

    Signed-off-by: Jason Wessel

    Jason Wessel
     
  • The gdb debugger understands how to parse short versions of the thread
    reference string as long as the bytes are paired in sets of two
    characters. The kgdb implementation was always sending 8 leading
    zeros which could be omitted, and further optimized in the case of
    non-negative thread numbers. The negative numbers are used to
    reference a specific cpu in the case of kgdb.

    An example of the previous i386 stop packet looks like:
    T05thread:00000000000003bb;

    New stop packet response:
    T05thread:03bb;

    The previous ThreadInfo response looks like:
    m00000000fffffffe,0000000000000001,0000000000000002,0000000000000003,0000000000000004,0000000000000005,0000000000000006,0000000000000007,000000000000000c,0000000000000088,000000000000008a,000000000000008b,000000000000008c,000000000000008d,000000000000008e,00000000000000d4,00000000000000d5,00000000000000dd

    New ThreadInfo response:
    mfffffffe,01,02,03,04,05,06,07,0c,88,8a,8b,8c,8d,8e,d4,d5,dd

    A few bytes saved means better response time when using kgdb over a
    serial line.

    Signed-off-by: Jason Wessel

    Jason Wessel
     
  • Signed-off-by: Andy Shevchenko
    Signed-off-by: Jason Wessel

    Andy Shevchenko
     

04 Aug, 2010

1 commit


22 Jul, 2010

1 commit

  • The gdbserial protocol handler should return an empty packet instead
    of an error string when ever it responds to a command it does not
    implement.

    The problem cases come from a debugger client sending
    qTBuffer, qTStatus, qSearch, qSupported.

    The incorrect response from the gdbstub leads the debugger clients to
    not function correctly. Recent versions of gdb will not detach correctly as a result of this behavior.

    Signed-off-by: Jason Wessel
    Signed-off-by: Dongdong Deng

    Jason Wessel
     

19 Jul, 2010

1 commit


21 May, 2010

4 commits

  • One of the driving forces behind integrating another front end (kdb)
    to the debug core is to allow front end commands to be accessible via
    gdb's monitor command. It is true that you could write gdb macros to
    get certain data, but you may want to just use gdb to access the
    commands that are available in the kdb front end.

    This patch implements the Rcmd gdb stub packet. In gdb you access
    this with the "monitor" command. For instance you could type "monitor
    help", "monitor lsmod" or "monitor ps A" etc...

    There is no error checking or command restrictions on what you can and
    cannot access at this point. Doing something like trying to set
    breakpoints with the monitor command is going to cause nothing but
    problems. Perhaps in the future only the commands that are actually
    known to work with the gdb monitor command will be available.

    Signed-off-by: Jason Wessel

    Jason Wessel
     
  • The design of the kdb shell requires that every device that can
    provide input to kdb have a polling routine that exits immediately if
    there is no character available. This is required in order to get the
    page scrolling mechanism working.

    Changing the kernel debugger I/O API to require all polling character
    routines to exit immediately if there is no data allows the kernel
    debugger to process multiple input channels.

    NO_POLL_CHAR will be the return code to the polling routine when ever
    there is no character available.

    CC: linux-serial@vger.kernel.org
    Signed-off-by: Jason Wessel

    Jason Wessel
     
  • These are the minimum changes to the kgdb core in order to enable an
    API to connect a new front end (kdb) to the debug core.

    This patch introduces the dbg_kdb_mode variable controls where the
    user level I/O is routed. It will be routed to the gdbstub (kgdb) or
    to the kdb front end which is a simple shell available over the kgdboc
    connection.

    You can switch back and forth between kdb or the gdb stub mode of
    operation dynamically. From gdb stub mode you can blindly type
    "$3#33", or from the kdb mode you can enter "kgdb" to switch to the
    gdb stub.

    The logic in the debug core depends on kdb to look for the typical gdb
    connection sequences and return immediately with KGDB_PASS_EVENT if a
    gdb serial command sequence is detected. That should allow a
    reasonably seamless transition between kdb -> gdb without leaving the
    kernel exception state. The two gdb serial queries that kdb is
    responsible for detecting are the "?" and "qSupported" packets.

    CC: Ingo Molnar
    Signed-off-by: Jason Wessel
    Acked-by: Martin Hicks

    Jason Wessel
     
  • Split the former kernel/kgdb.c into debug_core.c which contains the
    kernel debugger exception logic and to the gdbstub.c which contains
    the logic for allowing gdb to talk to the debug core.

    This also created a private include file called debug_core.h which
    contains all the definitions to glue the debug_core to any other
    debugger connections.

    CC: Ingo Molnar
    Signed-off-by: Jason Wessel

    Jason Wessel