From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JxUlu-0005bD-7R for qemu-devel@nongnu.org; Sat, 17 May 2008 18:20:58 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JxUls-0005Zf-T2 for qemu-devel@nongnu.org; Sat, 17 May 2008 18:20:57 -0400 Received: from [199.232.76.173] (port=51090 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JxUls-0005ZU-Lm for qemu-devel@nongnu.org; Sat, 17 May 2008 18:20:56 -0400 Received: from savannah.gnu.org ([199.232.41.3]:58353 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JxUlr-0000gr-TF for qemu-devel@nongnu.org; Sat, 17 May 2008 18:20:56 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1JxUlq-0003PH-Kn for qemu-devel@nongnu.org; Sat, 17 May 2008 22:20:54 +0000 Received: from edgar_igl by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1JxUlq-0003PC-8j for qemu-devel@nongnu.org; Sat, 17 May 2008 22:20:54 +0000 MIME-Version: 1.0 Errors-To: edgar_igl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: "Edgar E. Iglesias" Message-Id: Date: Sat, 17 May 2008 22:20:54 +0000 Subject: [Qemu-devel] [4483] Support signal reception in user-mode. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 4483 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4483 Author: edgar_igl Date: 2008-05-17 22:20:53 +0000 (Sat, 17 May 2008) Log Message: ----------- Support signal reception in user-mode. Handle when the peer terminates or aborts the connection. Modified Paths: -------------- trunk/gdbstub.c Modified: trunk/gdbstub.c =================================================================== --- trunk/gdbstub.c 2008-05-17 19:55:28 UTC (rev 4482) +++ trunk/gdbstub.c 2008-05-17 22:20:53 UTC (rev 4483) @@ -65,6 +65,7 @@ int line_csum; uint8_t last_packet[4100]; int last_packet_len; + int signal; #ifdef CONFIG_USER_ONLY int fd; int running_state; @@ -93,9 +94,13 @@ for(;;) { ret = recv(s->fd, &ch, 1, 0); if (ret < 0) { + if (errno == ECONNRESET) + s->fd = -1; if (errno != EINTR && errno != EAGAIN) return -1; } else if (ret == 0) { + close(s->fd); + s->fd = -1; return -1; } else { break; @@ -991,6 +996,10 @@ } gdb_continue(s); return RS_IDLE; + case 'C': + s->signal = strtoul(p, (char **)&p, 16); + gdb_continue(s); + return RS_IDLE; case 'k': /* Kill the target */ fprintf(stderr, "\nQEMU: Terminated via GDBstub\n"); @@ -1364,11 +1373,10 @@ char buf[256]; int n; - if (gdbserver_fd < 0) + s = &gdbserver_state; + if (gdbserver_fd < 0 || s->fd < 0) return sig; - s = &gdbserver_state; - /* disable single step if it was enabled */ cpu_single_step(env, 0); tb_flush(env); @@ -1378,6 +1386,10 @@ snprintf(buf, sizeof(buf), "S%02x", sig); put_packet(s, buf); } + /* put_packet() might have detected that the peer terminated the + connection. */ + if (s->fd < 0) + return sig; sig = 0; s->state = RS_IDLE; @@ -1398,6 +1410,8 @@ return sig; } } + sig = s->signal; + s->signal = 0; return sig; } @@ -1407,11 +1421,10 @@ GDBState *s; char buf[4]; - if (gdbserver_fd < 0) + s = &gdbserver_state; + if (gdbserver_fd < 0 || s->fd < 0) return; - s = &gdbserver_state; - snprintf(buf, sizeof(buf), "W%02x", code); put_packet(s, buf); }