diff mbox series

[v2,18/43] windbg: windbg_vm_stop

Message ID 150824583198.6816.6831787773022564675.stgit@Misha-PC.lan02.inno
State New
Headers show
Series Windbg supporting | expand

Commit Message

Mikhail Abakumov Oct. 17, 2017, 1:10 p.m. UTC
Added function for stop vm. Also, ExceptionStateChange data is generated and sent here.

Signed-off-by: Mihail Abakumov <mikhail.abakumov@ispras.ru>
Signed-off-by: Pavel Dovgalyuk <dovgaluk@ispras.ru>
Signed-off-by: Dmitriy Koltunov <koltunov@ispras.ru>
---
 windbgstub.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/windbgstub.c b/windbgstub.c
index b71449e369..dc9eba3e3c 100755
--- a/windbgstub.c
+++ b/windbgstub.c
@@ -71,7 +71,6 @@  static uint32_t compute_checksum(uint8_t *data, uint16_t len)
     return checksum;
 }
 
-__attribute__ ((unused)) /* unused yet */
 static void windbg_send_data_packet(uint8_t *data, uint16_t byte_count,
                                     uint16_t type)
 {
@@ -116,6 +115,16 @@  static void windbg_send_control_packet(uint16_t type)
     windbg_state->ctrl_packet_id ^= 1;
 }
 
+static void windbg_vm_stop(void)
+{
+    CPUState *cpu = qemu_get_cpu(0);
+    vm_stop(RUN_STATE_PAUSED);
+
+    SizedBuf buf = kd_gen_exception_sc(cpu);
+    windbg_send_data_packet(buf.data, buf.size, PACKET_TYPE_KD_STATE_CHANGE64);
+    SBUF_FREE(buf);
+}
+
 static void windbg_process_data_packet(ParsingContext *ctx)
 {}
 
@@ -129,7 +138,7 @@  static void windbg_ctx_handler(ParsingContext *ctx)
         break;
 
     case RESULT_BREAKIN_BYTE:
-        vm_stop(RUN_STATE_PAUSED);
+        windbg_vm_stop();
         break;
 
     case RESULT_CONTROL_PACKET: