[Pdbg] [PATCH 17/19] pdbg/gdbserver: Detach from client

Rashmica Gupta rashmica.g at gmail.com
Wed Aug 29 11:50:45 AEST 2018


Signed-off-by: Rashmica Gupta <rashmica.g at gmail.com>
---
 src/gdb_parser.rl | 5 ++++-
 src/pdbgproxy.c   | 9 +++++++++
 src/pdbgproxy.h   | 2 +-
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/gdb_parser.rl b/src/gdb_parser.rl
index 18dfac7..6259b96 100644
--- a/src/gdb_parser.rl
+++ b/src/gdb_parser.rl
@@ -76,6 +76,9 @@
 
 	set_thread = ('H' any* @{cmd = SET_THREAD;});
 
+	disconnect = ('D' @{cmd = DISCONNECT;}
+		     xdigit+ $hex_digit %push);
+
 	# TODO: We don't actually listen to what's supported
 	q_attached = ('qAttached:' xdigit* @{rsp = "1";});
 	q_C = ('qC' @{rsp = "QC1";});
@@ -91,7 +94,7 @@
 
 	commands = (get_mem | get_gprs | get_spr | stop_reason | set_thread |
 		    q_attached | q_C | q_supported | qf_threadinfo | q_C |
-		    v_contq | v_contc | v_conts | put_mem );
+		    v_contq | v_contc | v_conts | put_mem | disconnect );
 
 	cmd = ((commands & ^'#'*) | ^'#'*) $crc
 	      ('#' xdigit{2} $hex_digit @end);
diff --git a/src/pdbgproxy.c b/src/pdbgproxy.c
index ac0b3ae..eb7c0ae 100644
--- a/src/pdbgproxy.c
+++ b/src/pdbgproxy.c
@@ -36,6 +36,8 @@ static int fd = -1;
 enum client_state {IDLE, SIGNAL_WAIT};
 static enum client_state state = IDLE;
 
+static void destroy_client(int dead_fd);
+
 static uint8_t gdbcrc(char *data)
 {
 	uint8_t crc = 0;
@@ -80,6 +82,12 @@ static void stop_reason(uint64_t *stack, void *priv)
 	send_response(fd, "S05");
 }
 
+static void disconnect(uint64_t *stack, void *priv)
+{
+	printf("Terminating connection with client. pid %16" PRIi64 "\n", stack[0]);
+	send_response(fd, "OK");
+}
+
 /* 32 registers represented as 16 char hex numbers with null-termination */
 #define REG_DATA_SIZE (32*16+1)
 static void get_gprs(uint64_t *stack, void *priv)
@@ -413,6 +421,7 @@ command_cb callbacks[LAST_CMD + 1] = {
 	v_conts,
 	put_mem,
 	interrupt,
+	disconnect,
 	NULL};
 
 int gdbserver_start(struct pdbg_target *target, uint16_t port)
diff --git a/src/pdbgproxy.h b/src/pdbgproxy.h
index bd12b5e..1fe67f2 100644
--- a/src/pdbgproxy.h
+++ b/src/pdbgproxy.h
@@ -3,7 +3,7 @@
 
 enum gdb_command {NONE, GET_GPRS, GET_SPR, GET_MEM,
                  STOP_REASON, SET_THREAD, V_CONTC, V_CONTS,
-                 PUT_MEM, INTERRUPT, LAST_CMD};
+                 PUT_MEM, INTERRUPT, DISCONNECT, LAST_CMD};
 typedef void (*command_cb)(uint64_t *stack, void *priv);
 
 void parser_init(command_cb *callbacks);
-- 
2.14.4



More information about the Pdbg mailing list