[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 16/39] windbg: init DBGKD_ANY_WAIT_STATE_CHANGE
From: |
Mikhail Abakumov |
Subject: |
[Qemu-devel] [PATCH v3 16/39] windbg: init DBGKD_ANY_WAIT_STATE_CHANGE |
Date: |
Thu, 06 Dec 2018 15:00:08 +0300 |
User-agent: |
StGit/0.17.1-dirty |
Add function for init DBGKD_ANY_WAIT_STATE_CHANGE. It is a header of
'state change' packets.
Signed-off-by: Mikhail Abakumov <address@hidden>
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
target/i386/windbgstub.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/target/i386/windbgstub.c b/target/i386/windbgstub.c
index f1bab10b10..b2ac7a6d5f 100644
--- a/target/i386/windbgstub.c
+++ b/target/i386/windbgstub.c
@@ -15,9 +15,13 @@
#ifdef TARGET_X86_64
#define OFFSET_KPCR_SELF 0x18
#define OFFSET_KPCR_LOCK_ARRAY 0x28
+#define OFFSET_KPRCB 0x20
+#define OFFSET_KPRCB_CURRTHREAD 0x8
#else /* TARGET_I386 */
#define OFFSET_KPCR_SELF 0x1C
#define OFFSET_KPCR_VERSION 0x34
+#define OFFSET_KPRCB 0x20
+#define OFFSET_KPRCB_CURRTHREAD 0x4
#endif /* TARGET_I386 */
#ifdef TARGET_X86_64
@@ -156,3 +160,44 @@ void windbg_on_reset(void)
kdVersion.is_init = false;
#endif
}
+
+__attribute__ ((unused)) /* unused yet */
+static void kd_init_state_change(CPUState *cs, DBGKD_ANY_WAIT_STATE_CHANGE *sc)
+{
+ X86CPU *cpu = X86_CPU(cs);
+ CPUX86State *env = &cpu->env;
+ DBGKD_CONTROL_REPORT *cr = &sc->ControlReport;
+ target_ulong KPRCB = VMEM_ADDR(cs, KPCR.addr + OFFSET_KPRCB);
+ target_ulong thread = VMEM_ADDR(cs, KPRCB + OFFSET_KPRCB_CURRTHREAD);
+ int number_processors = 0;
+
+ CPUState *cpu_tmp;
+ CPU_FOREACH(cpu_tmp) {
+ ++number_processors;
+ }
+
+ /* HEADER */
+
+ /* TODO: Fix this hardcoded value. */
+ stw_p(&sc->ProcessorLevel, 0);
+ /* TODO: Fix this hardcoded value. */
+ stw_p(&sc->Processor, 0);
+ stl_p(&sc->NumberProcessors, number_processors);
+ sttul_p(&sc->Thread, thread);
+ sttul_p(&sc->ProgramCounter, env->eip);
+
+ /* CONTROL REPORT */
+
+ sttul_p(&cr->Dr6, env->dr[6]);
+ sttul_p(&cr->Dr7, env->dr[7]);
+ stw_p(&cr->ReportFlags, REPORT_INCLUDES_SEGS | REPORT_STANDARD_CS);
+ stw_p(&cr->SegCs, env->segs[R_CS].selector);
+ stw_p(&cr->SegDs, env->segs[R_DS].selector);
+ stw_p(&cr->SegEs, env->segs[R_ES].selector);
+ stw_p(&cr->SegFs, env->segs[R_FS].selector);
+ stl_p(&cr->EFlags, env->eflags);
+
+ /* This is a feature */
+ memset(cr->InstructionStream, 0, DBGKD_MAXSTREAM);
+ stw_p(&cr->InstructionCount, 0);
+}
- [Qemu-devel] [PATCH v3 06/39] windbg: add chardev, (continued)
- [Qemu-devel] [PATCH v3 06/39] windbg: add chardev, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 07/39] windbg: hook to wrmsr operation, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 08/39] windbg: implement windbg_on_load, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 09/39] windbg: implement find_KPCR, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 10/39] windbg: implement find_kdVersion, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 11/39] windbg: add windbg_search_vmaddr, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 12/39] windbg: implement find_kdDebuggerDataBlock, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 13/39] windbg: parsing data stream, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 14/39] windbg: send data and control packets, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 15/39] windbg: handler of parsing context, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 16/39] windbg: init DBGKD_ANY_WAIT_STATE_CHANGE,
Mikhail Abakumov <=
- [Qemu-devel] [PATCH v3 17/39] windbg: generate ExceptionStateChange and LoadSymbolsStateChange, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 18/39] windbg: implement windbg_process_control_packet, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 19/39] windbg: implement windbg_process_data_packet, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 20/39] windbg: implement windbg_process_manipulate_packet, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 21/39] windbg: implement kd_api_read_virtual_memory and kd_api_write_virtual_memory, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 22/39] windbg: some kernel structures, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 23/39] windbg: add helper functions, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 24/39] windbg: [de]serialization cpu context, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 25/39] windbg: [de]serialization cpu spec registers, Mikhail Abakumov, 2018/12/06
- [Qemu-devel] [PATCH v3 26/39] windbg: implement kd_api_get_context and kd_api_set_context, Mikhail Abakumov, 2018/12/06