Commit eded3777 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'kgdb-6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt/linux

Pull kgdb updates from Daniel Thompson:
 "Fairly small changes this cycle:

   - An additional static inline function when kgdb is not enabled to
     reduce boilerplate in arch files

   - kdb will now handle input with linefeeds more like carriage return.
     This will make little difference for interactive use but can make
     it script to use expect-like interaction with kdb

   - A couple of warning fixes"

* tag 'kgdb-6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/danielt/linux:
  kdb: move kdb_send_sig() declaration to a better header file
  kdb: Handle LF in the command parser
  kdb: include kdb_private.h for function prototypes
  kgdb: Provide a stub kgdb_nmicallback() if !CONFIG_KGDB
parents 56cbceab b6464883
...@@ -196,6 +196,8 @@ int kdb_process_cpu(const struct task_struct *p) ...@@ -196,6 +196,8 @@ int kdb_process_cpu(const struct task_struct *p)
return cpu; return cpu;
} }
extern void kdb_send_sig(struct task_struct *p, int sig);
#ifdef CONFIG_KALLSYMS #ifdef CONFIG_KALLSYMS
extern const char *kdb_walk_kallsyms(loff_t *pos); extern const char *kdb_walk_kallsyms(loff_t *pos);
#else /* ! CONFIG_KALLSYMS */ #else /* ! CONFIG_KALLSYMS */
......
...@@ -365,5 +365,6 @@ extern void kgdb_free_init_mem(void); ...@@ -365,5 +365,6 @@ extern void kgdb_free_init_mem(void);
#define dbg_late_init() #define dbg_late_init()
static inline void kgdb_panic(const char *msg) {} static inline void kgdb_panic(const char *msg) {}
static inline void kgdb_free_init_mem(void) { } static inline void kgdb_free_init_mem(void) { }
static inline int kgdb_nmicallback(int cpu, void *regs) { return 1; }
#endif /* ! CONFIG_KGDB */ #endif /* ! CONFIG_KGDB */
#endif /* _KGDB_H_ */ #endif /* _KGDB_H_ */
...@@ -131,6 +131,7 @@ char kdb_getchar(void) ...@@ -131,6 +131,7 @@ char kdb_getchar(void)
int escape_delay = 0; int escape_delay = 0;
get_char_func *f, *f_prev = NULL; get_char_func *f, *f_prev = NULL;
int key; int key;
static bool last_char_was_cr;
for (f = &kdb_poll_funcs[0]; ; ++f) { for (f = &kdb_poll_funcs[0]; ; ++f) {
if (*f == NULL) { if (*f == NULL) {
...@@ -149,6 +150,18 @@ char kdb_getchar(void) ...@@ -149,6 +150,18 @@ char kdb_getchar(void)
continue; continue;
} }
/*
* The caller expects that newlines are either CR or LF. However
* some terminals send _both_ CR and LF. Avoid having to handle
* this in the caller by stripping the LF if we saw a CR right
* before.
*/
if (last_char_was_cr && key == '\n') {
last_char_was_cr = false;
continue;
}
last_char_was_cr = (key == '\r');
/* /*
* When the first character is received (or we get a change * When the first character is received (or we get a change
* input source) we set ourselves up to handle an escape * input source) we set ourselves up to handle an escape
...@@ -244,7 +257,8 @@ static char *kdb_read(char *buffer, size_t bufsize) ...@@ -244,7 +257,8 @@ static char *kdb_read(char *buffer, size_t bufsize)
*cp = tmp; *cp = tmp;
} }
break; break;
case 13: /* enter */ case 10: /* linefeed */
case 13: /* carriage return */
*lastchar++ = '\n'; *lastchar++ = '\n';
*lastchar++ = '\0'; *lastchar++ = '\0';
if (!KDB_STATE(KGDB_TRANS)) { if (!KDB_STATE(KGDB_TRANS)) {
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include <linux/ctype.h> #include <linux/ctype.h>
#include <linux/io.h> #include <linux/io.h>
#include "kdb_private.h"
/* Keyboard Controller Registers on normal PCs. */ /* Keyboard Controller Registers on normal PCs. */
#define KBD_STATUS_REG 0x64 /* Status register (R) */ #define KBD_STATUS_REG 0x64 /* Status register (R) */
......
...@@ -194,7 +194,6 @@ extern char kdb_task_state_char (const struct task_struct *); ...@@ -194,7 +194,6 @@ extern char kdb_task_state_char (const struct task_struct *);
extern bool kdb_task_state(const struct task_struct *p, const char *mask); extern bool kdb_task_state(const struct task_struct *p, const char *mask);
extern void kdb_ps_suppressed(void); extern void kdb_ps_suppressed(void);
extern void kdb_ps1(const struct task_struct *p); extern void kdb_ps1(const struct task_struct *p);
extern void kdb_send_sig(struct task_struct *p, int sig);
extern char kdb_getchar(void); extern char kdb_getchar(void);
extern char *kdb_getstr(char *, size_t, const char *); extern char *kdb_getstr(char *, size_t, const char *);
extern void kdb_gdb_state_pass(char *buf); extern void kdb_gdb_state_pass(char *buf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment