Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 196347
b: refs/heads/master
c: f503b5a
h: refs/heads/master
i:
  196345: 0495e2b
  196343: 6dabed7
v: v3
  • Loading branch information
Jason Wessel committed May 21, 2010
1 parent 45b940f commit 5b1c0c3
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 98ec1878cacb393975cba64f7392eece81716cb4
refs/heads/master: f503b5ae53cb557ac351a668fcac1baab1cef0db
3 changes: 3 additions & 0 deletions trunk/arch/x86/include/asm/kgdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,7 @@ static inline void arch_kgdb_breakpoint(void)
#define BREAK_INSTR_SIZE 1
#define CACHE_FLUSH_IS_SAFE 1

extern int kgdb_ll_trap(int cmd, const char *str,
struct pt_regs *regs, long err, int trap, int sig);

#endif /* _ASM_X86_KGDB_H */
22 changes: 21 additions & 1 deletion trunk/arch/x86/kernel/kgdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,14 +538,34 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd)
return NOTIFY_DONE;
}

if (kgdb_handle_exception(args->trapnr, args->signr, args->err, regs))
if (kgdb_handle_exception(args->trapnr, args->signr, cmd, regs))
return NOTIFY_DONE;

/* Must touch watchdog before return to normal operation */
touch_nmi_watchdog();
return NOTIFY_STOP;
}

#ifdef CONFIG_KGDB_LOW_LEVEL_TRAP
int kgdb_ll_trap(int cmd, const char *str,
struct pt_regs *regs, long err, int trap, int sig)
{
struct die_args args = {
.regs = regs,
.str = str,
.err = err,
.trapnr = trap,
.signr = sig,

};

if (!kgdb_io_module_registered)
return NOTIFY_DONE;

return __kgdb_notify(&args, cmd);
}
#endif /* CONFIG_KGDB_LOW_LEVEL_TRAP */

static int
kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr)
{
Expand Down
6 changes: 6 additions & 0 deletions trunk/arch/x86/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <linux/kprobes.h>
#include <linux/uaccess.h>
#include <linux/kdebug.h>
#include <linux/kgdb.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/ptrace.h>
Expand Down Expand Up @@ -451,6 +452,11 @@ void restart_nmi(void)
/* May run on IST stack. */
dotraplinkage void __kprobes do_int3(struct pt_regs *regs, long error_code)
{
#ifdef CONFIG_KGDB_LOW_LEVEL_TRAP
if (kgdb_ll_trap(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
== NOTIFY_STOP)
return;
#endif /* CONFIG_KGDB_LOW_LEVEL_TRAP */
#ifdef CONFIG_KPROBES
if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
== NOTIFY_STOP)
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/kgdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ struct uart_port;
void kgdb_breakpoint(void);

extern int kgdb_connected;
extern int kgdb_io_module_registered;

extern atomic_t kgdb_setting_breakpoint;
extern atomic_t kgdb_cpu_doing_single_step;
Expand Down
2 changes: 1 addition & 1 deletion trunk/kernel/debug/debug_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ int kgdb_connected;
EXPORT_SYMBOL_GPL(kgdb_connected);

/* All the KGDB handlers are installed */
static int kgdb_io_module_registered;
int kgdb_io_module_registered;

/* Guard for recursive entry */
static int exception_level;
Expand Down
9 changes: 9 additions & 0 deletions trunk/lib/Kconfig.kgdb
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,15 @@ config KGDB_TESTS_BOOT_STRING
information about other strings you could use beyond the
default of V1F100.

config KGDB_LOW_LEVEL_TRAP
bool "KGDB: Allow debugging with traps in notifiers"
depends on X86
default n
help
This will add an extra call back to kgdb for the breakpoint
exception handler on which will will allow kgdb to step
through a notify handler.

config KGDB_KDB
bool "KGDB_KDB: include kdb frontend for kgdb"
default n
Expand Down

0 comments on commit 5b1c0c3

Please sign in to comment.