aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/debug/gdbstub.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/debug/gdbstub.c')
-rw-r--r--kernel/debug/gdbstub.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/kernel/debug/gdbstub.c b/kernel/debug/gdbstub.c
index ccdf0929f12d..188203a19657 100644
--- a/kernel/debug/gdbstub.c
+++ b/kernel/debug/gdbstub.c
@@ -887,6 +887,13 @@ int gdb_serial_stub(struct kgdb_state *ks)
887 case 'Z': /* Break point set */ 887 case 'Z': /* Break point set */
888 gdb_cmd_break(ks); 888 gdb_cmd_break(ks);
889 break; 889 break;
890#ifdef CONFIG_KGDB_KDB
891 case '3': /* Escape into back into kdb */
892 if (remcom_in_buffer[1] == '\0') {
893 gdb_cmd_detachkill(ks);
894 return DBG_PASS_EVENT;
895 }
896#endif
890 case 'C': /* Exception passing */ 897 case 'C': /* Exception passing */
891 tmp = gdb_cmd_exception_pass(ks); 898 tmp = gdb_cmd_exception_pass(ks);
892 if (tmp > 0) 899 if (tmp > 0)
@@ -932,3 +939,32 @@ kgdb_exit:
932 error = 1; 939 error = 1;
933 return error; 940 return error;
934} 941}
942
943int gdbstub_state(struct kgdb_state *ks, char *cmd)
944{
945 int error;
946
947 switch (cmd[0]) {
948 case 'e':
949 error = kgdb_arch_handle_exception(ks->ex_vector,
950 ks->signo,
951 ks->err_code,
952 remcom_in_buffer,
953 remcom_out_buffer,
954 ks->linux_regs);
955 return error;
956 case 's':
957 case 'c':
958 strcpy(remcom_in_buffer, cmd);
959 return 0;
960 case '?':
961 gdb_cmd_status(ks);
962 break;
963 case '\0':
964 strcpy(remcom_out_buffer, "");
965 break;
966 }
967 dbg_io_ops->write_char('+');
968 put_packet(remcom_out_buffer);
969 return 0;
970}