2 * Kernel Debugger Architecture Independent Console I/O handler
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive
8 * Copyright (c) 1999-2006 Silicon Graphics, Inc. All Rights Reserved.
9 * Copyright (c) 2009 Wind River Systems, Inc. All Rights Reserved.
12 #include <linux/types.h>
13 #include <linux/ctype.h>
14 #include <linux/kernel.h>
15 #include <linux/init.h>
16 #include <linux/kdev_t.h>
17 #include <linux/console.h>
18 #include <linux/string.h>
19 #include <linux/sched.h>
20 #include <linux/smp.h>
21 #include <linux/nmi.h>
22 #include <linux/delay.h>
23 #include <linux/kgdb.h>
24 #include <linux/kdb.h>
25 #include <linux/kallsyms.h>
26 #include "kdb_private.h"
28 #define CMD_BUFLEN 256
29 char kdb_prompt_str
[CMD_BUFLEN
];
32 int kdb_printf_cpu
= -1;
34 static int kgdb_transition_check(char *buffer
)
36 if (buffer
[0] != '+' && buffer
[0] != '$') {
37 KDB_STATE_SET(KGDB_TRANS
);
38 kdb_printf("%s", buffer
);
40 int slen
= strlen(buffer
);
41 if (slen
> 3 && buffer
[slen
- 3] == '#') {
42 kdb_gdb_state_pass(buffer
);
43 strcpy(buffer
, "kgdb");
44 KDB_STATE_SET(DOING_KGDB
);
52 * kdb_handle_escape() - validity check on an accumulated escape sequence.
53 * @buf: Accumulated escape characters to be examined. Note that buf
54 * is not a string, it is an array of characters and need not be
56 * @sz: Number of accumulated escape characters.
58 * Return: -1 if the escape sequence is unwanted, 0 if it is incomplete,
59 * otherwise it returns a mapped key value to pass to the upper layers.
61 static int kdb_handle_escape(char *buf
, size_t sz
)
63 char *lastkey
= buf
+ sz
- 1;
71 case 2: /* \e<something> */
78 case 'A': /* \e[A, up arrow */
80 case 'B': /* \e[B, down arrow */
82 case 'C': /* \e[C, right arrow */
84 case 'D': /* \e[D, left arrow */
86 case '1': /* \e[<1,3,4>], may be home, del, end */
94 if (*lastkey
== '~') {
96 case '1': /* \e[1~, home */
98 case '3': /* \e[3~, del */
100 case '4': /* \e[4~, end */
111 * kdb_getchar() - Read a single character from a kdb console (or consoles).
113 * Other than polling the various consoles that are currently enabled,
114 * most of the work done in this function is dealing with escape sequences.
116 * An escape key could be the start of a vt100 control sequence such as \e[D
117 * (left arrow) or it could be a character in its own right. The standard
118 * method for detecting the difference is to wait for 2 seconds to see if there
119 * are any other characters. kdb is complicated by the lack of a timer service
120 * (interrupts are off), by multiple input sources. Escape sequence processing
121 * has to be done as states in the polling loop.
123 * Return: The key pressed or a control code derived from an escape sequence.
125 char kdb_getchar(void)
127 #define ESCAPE_UDELAY 1000
128 #define ESCAPE_DELAY (2*1000000/ESCAPE_UDELAY) /* 2 seconds worth of udelays */
129 char buf
[4]; /* longest vt100 escape sequence is 4 bytes */
131 int escape_delay
= 0;
132 get_char_func
*f
, *f_prev
= NULL
;
134 static bool last_char_was_cr
;
136 for (f
= &kdb_poll_funcs
[0]; ; ++f
) {
138 /* Reset NMI watchdog once per poll loop */
139 touch_nmi_watchdog();
140 f
= &kdb_poll_funcs
[0];
146 udelay(ESCAPE_UDELAY
);
147 if (--escape_delay
== 0)
154 * The caller expects that newlines are either CR or LF. However
155 * some terminals send _both_ CR and LF. Avoid having to handle
156 * this in the caller by stripping the LF if we saw a CR right
159 if (last_char_was_cr
&& key
== '\n') {
160 last_char_was_cr
= false;
163 last_char_was_cr
= (key
== '\r');
166 * When the first character is received (or we get a change
167 * input source) we set ourselves up to handle an escape
168 * sequences (just in case).
173 escape_delay
= ESCAPE_DELAY
;
177 key
= kdb_handle_escape(buf
, pbuf
- buf
);
178 if (key
< 0) /* no escape sequence; return best character */
179 return buf
[pbuf
- buf
== 2 ? 1 : 0];
188 * kdb_position_cursor() - Place cursor in the correct horizontal position
189 * @prompt: Nil-terminated string containing the prompt string
190 * @buffer: Nil-terminated string containing the entire command line
191 * @cp: Cursor position, pointer the character in buffer where the cursor
192 * should be positioned.
194 * The cursor is positioned by sending a carriage-return and then printing
195 * the content of the line until we reach the correct cursor position.
197 * There is some additional fine detail here.
199 * Firstly, even though kdb_printf() will correctly format zero-width fields
200 * we want the second call to kdb_printf() to be conditional. That keeps things
201 * a little cleaner when LOGGING=1.
203 * Secondly, we can't combine everything into one call to kdb_printf() since
204 * that renders into a fixed length buffer and the combined print could result
205 * in unwanted truncation.
207 static void kdb_position_cursor(char *prompt
, char *buffer
, char *cp
)
209 kdb_printf("\r%s", prompt
);
211 kdb_printf("%.*s", (int)(cp
- buffer
), buffer
);
217 * This function reads a string of characters, terminated by
218 * a newline, or by reaching the end of the supplied buffer,
219 * from the current kernel debugger console device.
221 * buffer - Address of character buffer to receive input characters.
222 * bufsize - size, in bytes, of the character buffer
224 * Returns a pointer to the buffer containing the received
225 * character string. This string will be terminated by a
228 * No locks are required to be held upon entry to this
229 * function. It is not reentrant - it relies on the fact
230 * that while kdb is running on only one "master debug" cpu.
232 * The buffer size must be >= 2.
235 static char *kdb_read(char *buffer
, size_t bufsize
)
238 char *bufend
= buffer
+bufsize
-2; /* Reserve space for newline
243 static char tmpbuffer
[CMD_BUFLEN
];
244 int len
= strlen(buffer
);
249 int diag
, dtab_count
;
252 diag
= kdbgetintenv("DTABCOUNT", &dtab_count
);
258 if (*(buffer
+len
-1) == '\n')
264 kdb_printf("%s", buffer
);
270 case 8: /* backspace */
272 memmove(cp
-1, cp
, lastchar
- cp
+ 1);
275 kdb_printf("\b%s ", cp
);
276 kdb_position_cursor(kdb_prompt_str
, buffer
, cp
);
279 case 10: /* linefeed */
280 case 13: /* carriage return */
283 if (!KDB_STATE(KGDB_TRANS
)) {
284 KDB_STATE_SET(KGDB_TRANS
);
285 kdb_printf("%s", buffer
);
291 memmove(cp
, cp
+1, lastchar
- cp
);
293 kdb_printf("%s ", cp
);
294 kdb_position_cursor(kdb_prompt_str
, buffer
, cp
);
300 kdb_position_cursor(kdb_prompt_str
, buffer
, cp
);
305 kdb_printf("%s", cp
);
317 kdb_printf("\r%*c\r",
318 (int)(strlen(kdb_prompt_str
) + (lastchar
- buffer
)),
320 *lastchar
= (char)key
;
321 *(lastchar
+1) = '\0';
325 kdb_printf("%c", *cp
);
335 p_tmp
= strrchr(buffer
, ' ');
336 p_tmp
= (p_tmp
? p_tmp
+ 1 : buffer
);
337 strscpy(tmpbuffer
, p_tmp
, sizeof(tmpbuffer
));
340 len
= strlen(tmpbuffer
);
341 count
= kallsyms_symbol_complete(tmpbuffer
, sizeof(tmpbuffer
));
342 if (tab
== 2 && count
> 0) {
343 kdb_printf("\n%d symbols are found.", count
);
344 if (count
> dtab_count
) {
346 kdb_printf(" But only first %d symbols will"
347 " be printed.\nYou can change the"
348 " environment variable DTABCOUNT.",
352 for (i
= 0; i
< count
; i
++) {
353 ret
= kallsyms_symbol_next(tmpbuffer
, i
, sizeof(tmpbuffer
));
357 kdb_printf("%s ", tmpbuffer
);
359 kdb_printf("%s... ", tmpbuffer
);
360 tmpbuffer
[len
] = '\0';
365 kdb_printf("%s", kdb_prompt_str
);
366 kdb_printf("%s", buffer
);
368 kdb_position_cursor(kdb_prompt_str
, buffer
, cp
);
369 } else if (tab
!= 2 && count
> 0) {
370 /* How many new characters do we want from tmpbuffer? */
371 len_tmp
= strlen(tmpbuffer
) - len
;
372 if (lastchar
+ len_tmp
>= bufend
)
373 len_tmp
= bufend
- lastchar
;
376 /* + 1 ensures the '\0' is memmove'd */
377 memmove(cp
+len_tmp
, cp
, (lastchar
-cp
) + 1);
378 memcpy(cp
, tmpbuffer
+len
, len_tmp
);
379 kdb_printf("%s", cp
);
383 kdb_position_cursor(kdb_prompt_str
,
387 kdb_nextline
= 1; /* reset output line number */
390 if (key
>= 32 && lastchar
< bufend
) {
392 memmove(cp
+1, cp
, lastchar
- cp
+ 1);
395 kdb_printf("%s", cp
);
397 kdb_position_cursor(kdb_prompt_str
, buffer
, cp
);
401 /* The kgdb transition check will hide
402 * printed characters if we think that
403 * kgdb is connecting, until the check
405 if (!KDB_STATE(KGDB_TRANS
)) {
406 if (kgdb_transition_check(buffer
))
409 kdb_printf("%c", key
);
412 /* Special escape to kgdb */
413 if (lastchar
- buffer
>= 5 &&
414 strcmp(lastchar
- 5, "$?#3f") == 0) {
415 kdb_gdb_state_pass(lastchar
- 5);
416 strcpy(buffer
, "kgdb");
417 KDB_STATE_SET(DOING_KGDB
);
420 if (lastchar
- buffer
>= 11 &&
421 strcmp(lastchar
- 11, "$qSupported") == 0) {
422 kdb_gdb_state_pass(lastchar
- 11);
423 strcpy(buffer
, "kgdb");
424 KDB_STATE_SET(DOING_KGDB
);
436 * Print the prompt string and read a command from the
440 * buffer Address of buffer to receive command
441 * bufsize Size of buffer in bytes
442 * prompt Pointer to string to use as prompt string
444 * Pointer to command buffer.
448 * For SMP kernels, the processor number will be
449 * substituted for %d, %x or %o in the prompt.
452 char *kdb_getstr(char *buffer
, size_t bufsize
, const char *prompt
)
454 if (prompt
&& kdb_prompt_str
!= prompt
)
455 strscpy(kdb_prompt_str
, prompt
, CMD_BUFLEN
);
456 kdb_printf("%s", kdb_prompt_str
);
457 kdb_nextline
= 1; /* Prompt and input resets line number */
458 return kdb_read(buffer
, bufsize
);
464 * Get rid of any buffered console input.
473 * Call this function whenever you want to flush input. If there is any
474 * outstanding input, it ignores all characters until there has been no
475 * data for approximately 1ms.
478 static void kdb_input_flush(void)
483 while (flush_delay
) {
486 touch_nmi_watchdog();
487 for (f
= &kdb_poll_funcs
[0]; *f
; ++f
) {
502 * Print a string to the output device(s).
505 * printf-like format and optional args.
511 * use 'kdbcons->write()' to avoid polluting 'log_buf' with
514 * If the user is doing a cmd args | grep srch
515 * then kdb_grepping_flag is set.
516 * In that case we need to accumulate full lines (ending in \n) before
517 * searching for the pattern.
520 static char kdb_buffer
[256]; /* A bit too big to go on stack */
521 static char *next_avail
= kdb_buffer
;
522 static int size_avail
;
523 static int suspend_grep
;
526 * search arg1 to see if it contains arg2
527 * (kdmain.c provides flags for ^pat and pat$)
529 * return 1 for found, 0 for not found
531 static int kdb_search_string(char *searched
, char *searchfor
)
536 /* not counting the newline at the end of "searched" */
537 len1
= strlen(searched
)-1;
538 len2
= strlen(searchfor
);
541 if (kdb_grep_leading
&& kdb_grep_trailing
&& len1
!= len2
)
543 if (kdb_grep_leading
) {
544 if (!strncmp(searched
, searchfor
, len2
))
546 } else if (kdb_grep_trailing
) {
547 if (!strncmp(searched
+len1
-len2
, searchfor
, len2
))
550 firstchar
= *searchfor
;
552 while ((cp
= strchr(cp
, firstchar
))) {
553 if (!strncmp(cp
, searchfor
, len2
))
561 static void kdb_msg_write(const char *msg
, int msg_len
)
575 dbg_io_ops
->write_char(*cp
);
580 * The console_srcu_read_lock() only provides safe console list
581 * traversal. The use of the ->write() callback relies on all other
582 * CPUs being stopped at the moment and console drivers being able to
583 * handle reentrance when @oops_in_progress is set.
585 * There is no guarantee that every console driver can handle
586 * reentrance in this way; the developer deploying the debugger
587 * is responsible for ensuring that the console drivers they
588 * have selected handle reentrance appropriately.
590 cookie
= console_srcu_read_lock();
591 for_each_console_srcu(c
) {
592 if (!(console_srcu_read_flags(c
) & CON_ENABLED
))
594 if (c
== dbg_io_ops
->cons
)
599 * Set oops_in_progress to encourage the console drivers to
600 * disregard their internal spin locks: in the current calling
601 * context the risk of deadlock is a bigger problem than risks
602 * due to re-entering the console driver. We operate directly on
603 * oops_in_progress rather than using bust_spinlocks() because
604 * the calls bust_spinlocks() makes on exit are not appropriate
605 * for this calling context.
608 c
->write(c
, msg
, msg_len
);
610 touch_nmi_watchdog();
612 console_srcu_read_unlock(cookie
);
615 int vkdb_printf(enum kdb_msgsrc src
, const char *fmt
, va_list ap
)
620 int logging
, saved_loglevel
= 0;
623 int this_cpu
, old_cpu
;
624 char *cp
, *cp2
, *cphold
= NULL
, replaced_byte
= ' ';
625 char *moreprompt
= "more> ";
628 /* Serialize kdb_printf if multiple cpus try to write at once.
629 * But if any cpu goes recursive in kdb, just print the output,
630 * even if it is interleaved with any other text.
632 local_irq_save(flags
);
633 this_cpu
= smp_processor_id();
635 old_cpu
= cmpxchg(&kdb_printf_cpu
, -1, this_cpu
);
636 if (old_cpu
== -1 || old_cpu
== this_cpu
)
642 diag
= kdbgetintenv("LINES", &linecount
);
643 if (diag
|| linecount
<= 1)
646 diag
= kdbgetintenv("COLUMNS", &colcount
);
647 if (diag
|| colcount
<= 1)
650 diag
= kdbgetintenv("LOGGING", &logging
);
654 if (!kdb_grepping_flag
|| suspend_grep
) {
655 /* normally, every vsnprintf starts a new buffer */
656 next_avail
= kdb_buffer
;
657 size_avail
= sizeof(kdb_buffer
);
659 vsnprintf(next_avail
, size_avail
, fmt
, ap
);
662 * If kdb_parse() found that the command was cmd xxx | grep yyy
663 * then kdb_grepping_flag is set, and kdb_grep_string contains yyy
665 * Accumulate the print data up to a newline before searching it.
666 * (vsnprintf does null-terminate the string that it generates)
669 /* skip the search if prints are temporarily unconditional */
670 if (!suspend_grep
&& kdb_grepping_flag
) {
671 cp
= strchr(kdb_buffer
, '\n');
674 * Special cases that don't end with newlines
675 * but should be written without one:
676 * The "[nn]kdb> " prompt should
677 * appear at the front of the buffer.
679 * The "[nn]more " prompt should also be
680 * (MOREPROMPT -> moreprompt)
681 * written * but we print that ourselves,
682 * we set the suspend_grep flag to make
686 if (next_avail
== kdb_buffer
) {
688 * these should occur after a newline,
689 * so they will be at the front of the
693 len
= strlen(kdb_prompt_str
);
694 if (!strncmp(cp2
, kdb_prompt_str
, len
)) {
696 * We're about to start a new
697 * command, so we can go back
700 kdb_grepping_flag
= 0;
704 /* no newline; don't search/write the buffer
705 until one is there */
706 len
= strlen(kdb_buffer
);
707 next_avail
= kdb_buffer
+ len
;
708 size_avail
= sizeof(kdb_buffer
) - len
;
713 * The newline is present; print through it or discard
714 * it, depending on the results of the search.
716 cp
++; /* to byte after the newline */
717 replaced_byte
= *cp
; /* remember what/where it was */
719 *cp
= '\0'; /* end the string for our search */
722 * We now have a newline at the end of the string
723 * Only continue with this output if it contains the
726 fnd
= kdb_search_string(kdb_buffer
, kdb_grep_string
);
729 * At this point the complete line at the start
730 * of kdb_buffer can be discarded, as it does
731 * not contain what the user is looking for.
732 * Shift the buffer left.
734 *cphold
= replaced_byte
;
735 strcpy(kdb_buffer
, cphold
);
736 len
= strlen(kdb_buffer
);
737 next_avail
= kdb_buffer
+ len
;
738 size_avail
= sizeof(kdb_buffer
) - len
;
741 if (kdb_grepping_flag
>= KDB_GREPPING_FLAG_SEARCH
) {
743 * This was a interactive search (using '/' at more
744 * prompt) and it has completed. Replace the \0 with
745 * its original value to ensure multi-line strings
746 * are handled properly, and return to normal mode.
748 *cphold
= replaced_byte
;
749 kdb_grepping_flag
= 0;
752 * at this point the string is a full line and
753 * should be printed, up to the null.
759 * Write to all consoles.
761 retlen
= strlen(kdb_buffer
);
762 cp
= (char *) printk_skip_headers(kdb_buffer
);
763 if (!dbg_kdb_mode
&& kgdb_connected
)
764 gdbstub_msg_write(cp
, retlen
- (cp
- kdb_buffer
));
766 kdb_msg_write(cp
, retlen
- (cp
- kdb_buffer
));
769 saved_loglevel
= console_loglevel
;
770 console_loglevel
= CONSOLE_LOGLEVEL_SILENT
;
771 if (printk_get_level(kdb_buffer
) || src
== KDB_MSGSRC_PRINTK
)
772 printk("%s", kdb_buffer
);
774 pr_info("%s", kdb_buffer
);
777 if (KDB_STATE(PAGER
)) {
779 * Check printed string to decide how to bump the
780 * kdb_nextline to control when the more prompt should
786 if (kdb_buffer
[len
] == '\n') {
789 } else if (kdb_buffer
[len
] == '\r') {
795 kdb_nextline
+= got
/ (colcount
+ 1);
798 /* check for having reached the LINES number of printed lines */
799 if (kdb_nextline
>= linecount
) {
802 /* Watch out for recursion here. Any routine that calls
803 * kdb_printf will come back through here. And kdb_read
804 * uses kdb_printf to echo on serial consoles ...
806 kdb_nextline
= 1; /* In case of recursion */
811 moreprompt
= kdbgetenv("MOREPROMPT");
812 if (moreprompt
== NULL
)
813 moreprompt
= "more> ";
816 kdb_msg_write(moreprompt
, strlen(moreprompt
));
819 printk("%s", moreprompt
);
822 kdb_nextline
= 1; /* Really set output line 1 */
824 /* empty and reset the buffer: */
825 kdb_buffer
[0] = '\0';
826 next_avail
= kdb_buffer
;
827 size_avail
= sizeof(kdb_buffer
);
828 if ((ch
== 'q') || (ch
== 'Q')) {
829 /* user hit q or Q */
830 KDB_FLAG_SET(CMD_INTERRUPT
); /* command interrupted */
831 KDB_STATE_CLEAR(PAGER
);
832 /* end of command output; back to normal mode */
833 kdb_grepping_flag
= 0;
835 } else if (ch
== ' ') {
837 suspend_grep
= 1; /* for this recursion */
838 } else if (ch
== '\n' || ch
== '\r') {
839 kdb_nextline
= linecount
- 1;
841 suspend_grep
= 1; /* for this recursion */
842 } else if (ch
== '/' && !kdb_grepping_flag
) {
844 kdb_getstr(kdb_grep_string
, KDB_GREP_STRLEN
,
845 kdbgetenv("SEARCHPROMPT") ?: "search> ");
846 *strchrnul(kdb_grep_string
, '\n') = '\0';
847 kdb_grepping_flag
+= KDB_GREPPING_FLAG_SEARCH
;
848 suspend_grep
= 1; /* for this recursion */
850 /* user hit something unexpected */
851 suspend_grep
= 1; /* for this recursion */
854 "\nOnly 'q', 'Q' or '/' are processed at "
855 "more prompt, input ignored\n");
857 kdb_printf("\n'/' cannot be used during | "
858 "grep filtering, input ignored\n");
859 } else if (kdb_grepping_flag
) {
861 suspend_grep
= 1; /* for this recursion */
868 * For grep searches, shift the printed string left.
869 * replaced_byte contains the character that was overwritten with
870 * the terminating null, and cphold points to the null.
871 * Then adjust the notion of available space in the buffer.
873 if (kdb_grepping_flag
&& !suspend_grep
) {
874 *cphold
= replaced_byte
;
875 strcpy(kdb_buffer
, cphold
);
876 len
= strlen(kdb_buffer
);
877 next_avail
= kdb_buffer
+ len
;
878 size_avail
= sizeof(kdb_buffer
) - len
;
882 suspend_grep
= 0; /* end of what may have been a recursive call */
884 console_loglevel
= saved_loglevel
;
885 /* kdb_printf_cpu locked the code above. */
886 smp_store_release(&kdb_printf_cpu
, old_cpu
);
887 local_irq_restore(flags
);
891 int kdb_printf(const char *fmt
, ...)
897 r
= vkdb_printf(KDB_MSGSRC_INTERNAL
, fmt
, ap
);
902 EXPORT_SYMBOL_GPL(kdb_printf
);