kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
#ifndef _KDB_H
|
|
|
|
#define _KDB_H
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Kernel Debugger Architecture Independent Global Headers
|
|
|
|
*
|
|
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
|
|
* for more details.
|
|
|
|
*
|
|
|
|
* Copyright (c) 2000-2007 Silicon Graphics, Inc. All Rights Reserved.
|
|
|
|
* Copyright (C) 2000 Stephane Eranian <eranian@hpl.hp.com>
|
|
|
|
* Copyright (C) 2009 Jason Wessel <jason.wessel@windriver.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef CONFIG_KGDB_KDB
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/sched.h>
|
2011-07-26 17:09:06 -06:00
|
|
|
#include <linux/atomic.h>
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
|
|
|
|
#define KDB_POLL_FUNC_MAX 5
|
2010-05-20 20:04:22 -06:00
|
|
|
extern int kdb_poll_idx;
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
|
|
|
|
/*
|
|
|
|
* kdb_initial_cpu is initialized to -1, and is set to the cpu
|
|
|
|
* number whenever the kernel debugger is entered.
|
|
|
|
*/
|
|
|
|
extern int kdb_initial_cpu;
|
|
|
|
extern atomic_t kdb_event;
|
|
|
|
|
2010-10-11 09:20:14 -06:00
|
|
|
/* Types and messages used for dynamically added kdb shell commands */
|
|
|
|
|
|
|
|
#define KDB_MAXARGS 16 /* Maximum number of arguments to a function */
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
KDB_REPEAT_NONE = 0, /* Do not repeat this command */
|
|
|
|
KDB_REPEAT_NO_ARGS, /* Repeat the command without arguments */
|
|
|
|
KDB_REPEAT_WITH_ARGS, /* Repeat the command including its arguments */
|
|
|
|
} kdb_repeat_t;
|
|
|
|
|
|
|
|
typedef int (*kdb_func_t)(int, const char **);
|
|
|
|
|
|
|
|
/* KDB return codes from a command or internal kdb function */
|
|
|
|
#define KDB_NOTFOUND (-1)
|
|
|
|
#define KDB_ARGCOUNT (-2)
|
|
|
|
#define KDB_BADWIDTH (-3)
|
|
|
|
#define KDB_BADRADIX (-4)
|
|
|
|
#define KDB_NOTENV (-5)
|
|
|
|
#define KDB_NOENVVALUE (-6)
|
|
|
|
#define KDB_NOTIMP (-7)
|
|
|
|
#define KDB_ENVFULL (-8)
|
|
|
|
#define KDB_ENVBUFFULL (-9)
|
|
|
|
#define KDB_TOOMANYBPT (-10)
|
|
|
|
#define KDB_TOOMANYDBREGS (-11)
|
|
|
|
#define KDB_DUPBPT (-12)
|
|
|
|
#define KDB_BPTNOTFOUND (-13)
|
|
|
|
#define KDB_BADMODE (-14)
|
|
|
|
#define KDB_BADINT (-15)
|
|
|
|
#define KDB_INVADDRFMT (-16)
|
|
|
|
#define KDB_BADREG (-17)
|
|
|
|
#define KDB_BADCPUNUM (-18)
|
|
|
|
#define KDB_BADLENGTH (-19)
|
|
|
|
#define KDB_NOBP (-20)
|
|
|
|
#define KDB_BADADDR (-21)
|
|
|
|
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
/*
|
|
|
|
* kdb_diemsg
|
|
|
|
*
|
|
|
|
* Contains a pointer to the last string supplied to the
|
|
|
|
* kernel 'die' panic function.
|
|
|
|
*/
|
|
|
|
extern const char *kdb_diemsg;
|
|
|
|
|
|
|
|
#define KDB_FLAG_EARLYKDB (1 << 0) /* set from boot parameter kdb=early */
|
|
|
|
#define KDB_FLAG_CATASTROPHIC (1 << 1) /* A catastrophic event has occurred */
|
|
|
|
#define KDB_FLAG_CMD_INTERRUPT (1 << 2) /* Previous command was interrupted */
|
|
|
|
#define KDB_FLAG_NOIPI (1 << 3) /* Do not send IPIs */
|
|
|
|
#define KDB_FLAG_NO_CONSOLE (1 << 5) /* No console is available,
|
|
|
|
* kdb is disabled */
|
|
|
|
#define KDB_FLAG_NO_VT_CONSOLE (1 << 6) /* No VT console is available, do
|
|
|
|
* not use keyboard */
|
|
|
|
#define KDB_FLAG_NO_I8042 (1 << 7) /* No i8042 chip is available, do
|
|
|
|
* not use keyboard */
|
|
|
|
|
|
|
|
extern int kdb_flags; /* Global flags, see kdb_state for per cpu state */
|
|
|
|
|
|
|
|
extern void kdb_save_flags(void);
|
|
|
|
extern void kdb_restore_flags(void);
|
|
|
|
|
|
|
|
#define KDB_FLAG(flag) (kdb_flags & KDB_FLAG_##flag)
|
|
|
|
#define KDB_FLAG_SET(flag) ((void)(kdb_flags |= KDB_FLAG_##flag))
|
|
|
|
#define KDB_FLAG_CLEAR(flag) ((void)(kdb_flags &= ~KDB_FLAG_##flag))
|
|
|
|
|
|
|
|
/*
|
|
|
|
* External entry point for the kernel debugger. The pt_regs
|
|
|
|
* at the time of entry are supplied along with the reason for
|
|
|
|
* entry to the kernel debugger.
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
KDB_REASON_ENTER = 1, /* KDB_ENTER() trap/fault - regs valid */
|
|
|
|
KDB_REASON_ENTER_SLAVE, /* KDB_ENTER_SLAVE() trap/fault - regs valid */
|
|
|
|
KDB_REASON_BREAK, /* Breakpoint inst. - regs valid */
|
|
|
|
KDB_REASON_DEBUG, /* Debug Fault - regs valid */
|
|
|
|
KDB_REASON_OOPS, /* Kernel Oops - regs valid */
|
|
|
|
KDB_REASON_SWITCH, /* CPU switch - regs valid*/
|
|
|
|
KDB_REASON_KEYBOARD, /* Keyboard entry - regs valid */
|
|
|
|
KDB_REASON_NMI, /* Non-maskable interrupt; regs valid */
|
|
|
|
KDB_REASON_RECURSE, /* Recursive entry to kdb;
|
|
|
|
* regs probably valid */
|
|
|
|
KDB_REASON_SSTEP, /* Single Step trap. - regs valid */
|
|
|
|
} kdb_reason_t;
|
|
|
|
|
2010-05-20 20:04:27 -06:00
|
|
|
extern int kdb_trap_printk;
|
2011-10-31 18:11:33 -06:00
|
|
|
extern __printf(1, 0) int vkdb_printf(const char *fmt, va_list args);
|
|
|
|
extern __printf(1, 2) int kdb_printf(const char *, ...);
|
|
|
|
typedef __printf(1, 2) int (*kdb_printf_t)(const char *, ...);
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
|
|
|
|
extern void kdb_init(int level);
|
|
|
|
|
|
|
|
/* Access to kdb specific polling devices */
|
|
|
|
typedef int (*get_char_func)(void);
|
|
|
|
extern get_char_func kdb_poll_funcs[];
|
|
|
|
extern int kdb_get_kbd_char(void);
|
|
|
|
|
|
|
|
static inline
|
|
|
|
int kdb_process_cpu(const struct task_struct *p)
|
|
|
|
{
|
|
|
|
unsigned int cpu = task_thread_info(p)->cpu;
|
|
|
|
if (cpu > num_possible_cpus())
|
|
|
|
cpu = 0;
|
|
|
|
return cpu;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* kdb access to register set for stack dumping */
|
|
|
|
extern struct pt_regs *kdb_current_regs;
|
2010-08-23 08:20:14 -06:00
|
|
|
#ifdef CONFIG_KALLSYMS
|
|
|
|
extern const char *kdb_walk_kallsyms(loff_t *pos);
|
|
|
|
#else /* ! CONFIG_KALLSYMS */
|
|
|
|
static inline const char *kdb_walk_kallsyms(loff_t *pos)
|
|
|
|
{
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
#endif /* ! CONFIG_KALLSYMS */
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
|
2010-10-11 09:20:14 -06:00
|
|
|
/* Dynamic kdb shell command registration */
|
|
|
|
extern int kdb_register(char *, kdb_func_t, char *, char *, short);
|
|
|
|
extern int kdb_register_repeat(char *, kdb_func_t, char *, char *,
|
|
|
|
short, kdb_repeat_t);
|
|
|
|
extern int kdb_unregister(char *);
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
#else /* ! CONFIG_KGDB_KDB */
|
|
|
|
#define kdb_printf(...)
|
|
|
|
#define kdb_init(x)
|
2010-10-11 09:20:14 -06:00
|
|
|
#define kdb_register(...)
|
|
|
|
#define kdb_register_repeat(...)
|
|
|
|
#define kdb_uregister(x)
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
#endif /* CONFIG_KGDB_KDB */
|
|
|
|
enum {
|
|
|
|
KDB_NOT_INITIALIZED,
|
|
|
|
KDB_INIT_EARLY,
|
|
|
|
KDB_INIT_FULL,
|
|
|
|
};
|
2010-08-05 08:22:30 -06:00
|
|
|
|
|
|
|
extern int kdbgetintenv(const char *, int *);
|
|
|
|
extern int kdb_set(int, const char **);
|
|
|
|
|
kdb: core for kgdb back end (1 of 2)
This patch contains only the kdb core. Because the change set was
large, it was split. The next patch in the series includes the
instrumentation into the core kernel which are mainly helper functions
for kdb.
This work is directly derived from kdb v4.4 found at:
ftp://oss.sgi.com/projects/kdb/download/v4.4/
The kdb internals have been re-organized to make them mostly platform
independent and to connect everything to the debug core which is used by
gdbstub (which has long been known as kgdb).
The original version of kdb was 58,000 lines worth of changes to
support x86. From that implementation only the kdb shell, and basic
commands for memory access, runcontrol, lsmod, and dmesg where carried
forward.
This is a generic implementation which aims to cover all the current
architectures using the kgdb core: ppc, arm, x86, mips, sparc, sh and
blackfin. More archictectures can be added by implementing the
architecture specific kgdb functions.
[mort@sgi.com: Compile fix with hugepages enabled]
[mort@sgi.com: Clean breakpoint code renaming kdba_ -> kdb_]
[mort@sgi.com: fix new line after printing registers]
[mort@sgi.com: Remove the concept of global vs. local breakpoints]
[mort@sgi.com: Rework kdb_si_swapinfo to use more generic name]
[mort@sgi.com: fix the information dump macros, remove 'arch' from the names]
[sfr@canb.auug.org.au: include fixup to include linux/slab.h]
CC: linux-arch@vger.kernel.org
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Martin Hicks <mort@sgi.com>
2010-05-20 20:04:20 -06:00
|
|
|
#endif /* !_KDB_H */
|