From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424121449755.1600419858659; Tue, 26 Sep 2017 04:08:41 -0700 (PDT) Received: from localhost ([::1]:46702 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnj1-00069P-CI for importer@patchew.org; Tue, 26 Sep 2017 07:08:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58653) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnf2-0002yZ-Im for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnew-00088Z-OQ for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:20 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51600) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnew-00088E-8H for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:14 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 4B84D54006D; Tue, 26 Sep 2017 14:04:13 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:11 +0300 Message-ID: <150642385177.3900.1958854094941574053.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 01/43] windbg: added empty windbgstub files X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- Makefile.target | 5 +++++ include/exec/windbgstub-utils.h | 18 ++++++++++++++++++ include/exec/windbgstub.h | 17 +++++++++++++++++ windbgstub-utils.c | 12 ++++++++++++ windbgstub.c | 18 ++++++++++++++++++ 5 files changed, 70 insertions(+) create mode 100755 include/exec/windbgstub-utils.h create mode 100755 include/exec/windbgstub.h create mode 100755 windbgstub-utils.c create mode 100755 windbgstub.c diff --git a/Makefile.target b/Makefile.target index 7f42c45db8..0272b5e0ab 100644 --- a/Makefile.target +++ b/Makefile.target @@ -148,6 +148,11 @@ obj-y +=3D dump.o obj-y +=3D migration/ram.o LIBS :=3D $(libs_softmmu) $(LIBS) =20 +# WinDbg support +ifeq ($(TARGET_NAME), i386) +obj-y +=3D windbgstub.o windbgstub-utils.o +endif + # Hardware support ifeq ($(TARGET_NAME), sparc64) obj-y +=3D hw/sparc64/ diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h new file mode 100755 index 0000000000..67d190bf6c --- /dev/null +++ b/include/exec/windbgstub-utils.h @@ -0,0 +1,18 @@ +/* + * windbgstub-utils.h + * + * Copyright (c) 2010-2017 Institute for System Programming + * of the Russian Academy of Sciences. + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#ifndef WINDBGSTUB_UTILS_H +#define WINDBGSTUB_UTILS_H + +#include "qemu/osdep.h" +#include "exec/windbgstub.h" + +#endif diff --git a/include/exec/windbgstub.h b/include/exec/windbgstub.h new file mode 100755 index 0000000000..1a6e1cc6e5 --- /dev/null +++ b/include/exec/windbgstub.h @@ -0,0 +1,17 @@ +/* + * windbgstub.h + * + * Copyright (c) 2010-2017 Institute for System Programming + * of the Russian Academy of Sciences. + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#ifndef WINDBGSTUB_H +#define WINDBGSTUB_H + +int windbg_server_start(const char *device); + +#endif diff --git a/windbgstub-utils.c b/windbgstub-utils.c new file mode 100755 index 0000000000..dc5e505c63 --- /dev/null +++ b/windbgstub-utils.c @@ -0,0 +1,12 @@ +/* + * windbgstub-utils.c + * + * Copyright (c) 2010-2017 Institute for System Programming + * of the Russian Academy of Sciences. + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "exec/windbgstub-utils.h" diff --git a/windbgstub.c b/windbgstub.c new file mode 100755 index 0000000000..4951f59203 --- /dev/null +++ b/windbgstub.c @@ -0,0 +1,18 @@ +/* + * windbgstub.c + * + * Copyright (c) 2010-2017 Institute for System Programming + * of the Russian Academy of Sciences. + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "exec/windbgstub.h" + +int windbg_server_start(const char *device) +{ + return 0; +} From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506423966273796.1229625121977; Tue, 26 Sep 2017 04:06:06 -0700 (PDT) Received: from localhost ([::1]:46694 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngj-00046P-Bc for importer@patchew.org; Tue, 26 Sep 2017 07:06:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58678) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnf6-00031q-66 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnf3-0008Ba-JI for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:24 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51614) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnf2-0008AM-MD for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:21 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id D7180540070; Tue, 26 Sep 2017 14:04:18 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:17 +0300 Message-ID: <150642385735.3900.11116061336460614526.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Error: Short read from API socket.Bad response magic (0x00000000). X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 02/43] windbg: added windbg's KD header file X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Header file from windbg's source code describing the main structures. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgkd.h | 955 +++++++++++++++++++++++++++++++++++= ++++ include/exec/windbgstub-utils.h | 1=20 2 files changed, 956 insertions(+) create mode 100755 include/exec/windbgkd.h diff --git a/include/exec/windbgkd.h b/include/exec/windbgkd.h new file mode 100755 index 0000000000..916fe5aebb --- /dev/null +++ b/include/exec/windbgkd.h @@ -0,0 +1,955 @@ +/* + * windbgkd.h + * + * Copyright (c) 2010-2017 Institute for System Programming + * of the Russian Academy of Sciences. + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#ifndef WINDBGKD_H +#define WINDBGKD_H + +/* + * Packet Size and Control Stream Size + */ +#define PACKET_MAX_SIZE 4096 +#define DBGKD_MAXSTREAM 16 + +/* + * Magic Packet IDs + */ +#define INITIAL_PACKET_ID 0x80800000 +#define SYNC_PACKET_ID 0x00000800 +#define RESET_PACKET_ID 0x0018359b + +/* + * Magic Packet bytes + */ +#define BREAKIN_PACKET 0x62626262 +#define BREAKIN_PACKET_BYTE 0x62 +#define PACKET_LEADER 0x30303030 +#define PACKET_LEADER_BYTE 0x30 +#define CONTROL_PACKET_LEADER 0x69696969 +#define CONTROL_PACKET_LEADER_BYTE 0x69 +#define PACKET_TRAILING_BYTE 0xaa + +/* + * Packet Types + */ +#define PACKET_TYPE_UNUSED 0 +#define PACKET_TYPE_KD_STATE_CHANGE32 1 +#define PACKET_TYPE_KD_STATE_MANIPULATE 2 +#define PACKET_TYPE_KD_DEBUG_IO 3 +#define PACKET_TYPE_KD_ACKNOWLEDGE 4 +#define PACKET_TYPE_KD_RESEND 5 +#define PACKET_TYPE_KD_RESET 6 +#define PACKET_TYPE_KD_STATE_CHANGE64 7 +#define PACKET_TYPE_KD_POLL_BREAKIN 8 +#define PACKET_TYPE_KD_TRACE_IO 9 +#define PACKET_TYPE_KD_CONTROL_REQUEST 10 +#define PACKET_TYPE_KD_FILE_IO 11 +#define PACKET_TYPE_MAX 12 + +/* + * Wait State Change Types + */ +#define DbgKdMinimumStateChange 0x00003030 +#define DbgKdExceptionStateChange 0x00003030 +#define DbgKdLoadSymbolsStateChange 0x00003031 +#define DbgKdCommandStringStateChange 0x00003032 +#define DbgKdMaximumStateChange 0x00003033 + +/* + * This is combined with the basic state change code + * if the state is from an alternate source + */ +#define DbgKdAlternateStateChange 0x00010000 + +/* + * Manipulate Types + */ +#define DbgKdMinimumManipulate 0x00003130 +#define DbgKdReadVirtualMemoryApi 0x00003130 +#define DbgKdWriteVirtualMemoryApi 0x00003131 +#define DbgKdGetContextApi 0x00003132 +#define DbgKdSetContextApi 0x00003133 +#define DbgKdWriteBreakPointApi 0x00003134 +#define DbgKdRestoreBreakPointApi 0x00003135 +#define DbgKdContinueApi 0x00003136 +#define DbgKdReadControlSpaceApi 0x00003137 +#define DbgKdWriteControlSpaceApi 0x00003138 +#define DbgKdReadIoSpaceApi 0x00003139 +#define DbgKdWriteIoSpaceApi 0x0000313a +#define DbgKdRebootApi 0x0000313b +#define DbgKdContinueApi2 0x0000313c +#define DbgKdReadPhysicalMemoryApi 0x0000313d +#define DbgKdWritePhysicalMemoryApi 0x0000313e +#define DbgKdQuerySpecialCallsApi 0x0000313f +#define DbgKdSetSpecialCallApi 0x00003140 +#define DbgKdClearSpecialCallsApi 0x00003141 +#define DbgKdSetInternalBreakPointApi 0x00003142 +#define DbgKdGetInternalBreakPointApi 0x00003143 +#define DbgKdReadIoSpaceExtendedApi 0x00003144 +#define DbgKdWriteIoSpaceExtendedApi 0x00003145 +#define DbgKdGetVersionApi 0x00003146 +#define DbgKdWriteBreakPointExApi 0x00003147 +#define DbgKdRestoreBreakPointExApi 0x00003148 +#define DbgKdCauseBugCheckApi 0x00003149 +#define DbgKdSwitchProcessor 0x00003150 +#define DbgKdPageInApi 0x00003151 +#define DbgKdReadMachineSpecificRegister 0x00003152 +#define DbgKdWriteMachineSpecificRegister 0x00003153 +#define OldVlm1 0x00003154 +#define OldVlm2 0x00003155 +#define DbgKdSearchMemoryApi 0x00003156 +#define DbgKdGetBusDataApi 0x00003157 +#define DbgKdSetBusDataApi 0x00003158 +#define DbgKdCheckLowMemoryApi 0x00003159 +#define DbgKdClearAllInternalBreakpointsApi 0x0000315a +#define DbgKdFillMemoryApi 0x0000315b +#define DbgKdQueryMemoryApi 0x0000315c +#define DbgKdSwitchPartition 0x0000315d +#define DbgKdMaximumManipulate 0x0000315e + +/* + * Debug I/O Types + */ +#define DbgKdPrintStringApi 0x00003230 +#define DbgKdGetStringApi 0x00003231 + +/* + * Trace I/O Types + */ +#define DbgKdPrintTraceApi 0x00003330 + +/* + * Control Request Types + */ +#define DbgKdRequestHardwareBp 0x00004300 +#define DbgKdReleaseHardwareBp 0x00004301 + +/* + * File I/O Types + */ +#define DbgKdCreateFileApi 0x00003430 +#define DbgKdReadFileApi 0x00003431 +#define DbgKdWriteFileApi 0x00003432 +#define DbgKdCloseFileApi 0x00003433 + +/* + * Control Report Flags + */ +#define REPORT_INCLUDES_SEGS 0x0001 +#define REPORT_STANDARD_CS 0x0002 + +/* + * Protocol Versions + */ +#define DBGKD_64BIT_PROTOCOL_VERSION1 5 +#define DBGKD_64BIT_PROTOCOL_VERSION2 6 + +/* + * Query Memory Address Spaces + */ +#define DBGKD_QUERY_MEMORY_VIRTUAL 0 +#define DBGKD_QUERY_MEMORY_PROCESS 0 +#define DBGKD_QUERY_MEMORY_SESSION 1 +#define DBGKD_QUERY_MEMORY_KERNEL 2 + +/* + * Query Memory Flags + */ +#define DBGKD_QUERY_MEMORY_READ 0x01 +#define DBGKD_QUERY_MEMORY_WRITE 0x02 +#define DBGKD_QUERY_MEMORY_EXECUTE 0x04 +#define DBGKD_QUERY_MEMORY_FIXED 0x08 + +/* + * Internal Breakpoint Flags + */ +#define DBGKD_INTERNAL_BP_FLAG_COUNTONLY 0x01 +#define DBGKD_INTERNAL_BP_FLAG_INVALID 0x02 +#define DBGKD_INTERNAL_BP_FLAG_SUSPENDED 0x04 +#define DBGKD_INTERNAL_BP_FLAG_DYING 0x08 + +/* + * Fill Memory Flags + */ +#define DBGKD_FILL_MEMORY_VIRTUAL 0x01 +#define DBGKD_FILL_MEMORY_PHYSICAL 0x02 + +/* + * Physical Memory Caching Flags + */ +#define DBGKD_CACHING_DEFAULT 0 +#define DBGKD_CACHING_CACHED 1 +#define DBGKD_CACHING_UNCACHED 2 +#define DBGKD_CACHING_WRITE_COMBINED 3 + +/* + * Partition Switch Flags + */ +#define DBGKD_PARTITION_DEFAULT 0x00 +#define DBGKD_PARTITION_ALTERNATE 0x01 + +/* + * AMD64 Control Space types + */ +#define AMD64_DEBUG_CONTROL_SPACE_KPCR 0 +#define AMD64_DEBUG_CONTROL_SPACE_KPRCB 1 +#define AMD64_DEBUG_CONTROL_SPACE_KSPECIAL 2 +#define AMD64_DEBUG_CONTROL_SPACE_KTHREAD 3 + +/* + * Maximum supported number of breakpoints + */ +#define KD_BREAKPOINT_MAX 32 + +typedef uint8_t boolean_t; +typedef int32_t ntstatus_t; + +/* + * NTSTATUS + */ +#define NT_SUCCESS(status) ((ntstatus_t) (status) >=3D 0) +#ifndef STATUS_SUCCESS +#define STATUS_SUCCESS ((ntstatus_t) 0x00000000) +#endif +#ifndef DBG_CONTINUE +#define DBG_CONTINUE ((ntstatus_t) 0x00010002) +#endif +#ifndef STATUS_NO_MORE_ENTRIES +#define STATUS_NO_MORE_ENTRIES ((ntstatus_t) 0x8000001A) +#endif +#ifndef STATUS_UNSUCCESSFUL +#define STATUS_UNSUCCESSFUL ((ntstatus_t) 0xC0000001) +#endif +#ifndef STATUS_INVALID_PARAMETER +#define STATUS_INVALID_PARAMETER ((ntstatus_t) 0xC000000D) +#endif + +/* + * KD Packet Structure + */ +typedef struct _KD_PACKET +{ + uint32_t PacketLeader; + uint16_t PacketType; + uint16_t ByteCount; + uint32_t PacketId; + uint32_t Checksum; +} KD_PACKET, *PKD_PACKET; + +/* + * KD Context + */ +typedef struct _KD_CONTEXT +{ + uint32_t KdpDefaultRetries; + boolean_t KdpControlCPending; +} KD_CONTEXT, *PKD_CONTEXT; + +/* + * Control Sets for Supported Architectures + */ +typedef struct _X86_DBGKD_CONTROL_SET +{ + uint32_t TraceFlag; + uint32_t Dr7; + uint32_t CurrentSymbolStart; + uint32_t CurrentSymbolEnd; +} X86_DBGKD_CONTROL_SET, *PX86_DBGKD_CONTROL_SET; + +typedef struct _ALPHA_DBGKD_CONTROL_SET +{ + uint32_t __padding; +} ALPHA_DBGKD_CONTROL_SET, *PALPHA_DBGKD_CONTROL_SET; + +typedef struct _IA64_DBGKD_CONTROL_SET +{ + uint32_t Continue; + uint64_t CurrentSymbolStart; + uint64_t CurrentSymbolEnd; +} IA64_DBGKD_CONTROL_SET, *PIA64_DBGKD_CONTROL_SET; + +typedef struct _AMD64_DBGKD_CONTROL_SET +{ + uint32_t TraceFlag; + uint64_t Dr7; + uint64_t CurrentSymbolStart; + uint64_t CurrentSymbolEnd; +} AMD64_DBGKD_CONTROL_SET, *PAMD64_DBGKD_CONTROL_SET; + +typedef struct _ARM_DBGKD_CONTROL_SET +{ + uint32_t Continue; + uint32_t CurrentSymbolStart; + uint32_t CurrentSymbolEnd; +} ARM_DBGKD_CONTROL_SET, *PARM_DBGKD_CONTROL_SET; + +typedef struct _DBGKD_ANY_CONTROL_SET +{ + union + { + X86_DBGKD_CONTROL_SET X86ControlSet; + ALPHA_DBGKD_CONTROL_SET AlphaControlSet; + IA64_DBGKD_CONTROL_SET IA64ControlSet; + AMD64_DBGKD_CONTROL_SET Amd64ControlSet; + ARM_DBGKD_CONTROL_SET ARMControlSet; + }; +} DBGKD_ANY_CONTROL_SET, *PDBGKD_ANY_CONTROL_SET; + +#if defined(TARGET_I386) +typedef X86_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET; +#elif defined(TARGET_X86_64) +typedef AMD64_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET; +#elif defined(TARGET_ARM) +typedef ARM_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET; +#else +#error Unsupported Architecture +#endif + +/* + * EXCEPTION_RECORD Structures + */ +typedef struct _DBGKM_EXCEPTION_RECORD32 { + int32_t ExceptionCode; + uint32_t ExceptionFlags; + uint32_t ExceptionRecord; + uint32_t ExceptionAddress; + uint32_t NumberParameters; + uint32_t ExceptionInformation[15]; +} DBGKM_EXCEPTION_RECORD32, *PDBGKM_EXCEPTION_RECORD32; + +typedef struct _DBGKM_EXCEPTION_RECORD64 { + int32_t ExceptionCode; + uint32_t ExceptionFlags; + uint64_t ExceptionRecord; + uint64_t ExceptionAddress; + uint32_t NumberParameters; + uint32_t __unusedAligment; + uint64_t ExceptionInformation[15]; +} DBGKM_EXCEPTION_RECORD64, *PDBGKM_EXCEPTION_RECORD64; + +/* + * DBGKM Structure for Exceptions + */ +typedef struct _DBGKM_EXCEPTION32 +{ + DBGKM_EXCEPTION_RECORD32 ExceptionRecord; + uint32_t FirstChance; +} DBGKM_EXCEPTION32, *PDBGKM_EXCEPTION32; + +typedef struct _DBGKM_EXCEPTION64 +{ + DBGKM_EXCEPTION_RECORD64 ExceptionRecord; + uint32_t FirstChance; +} DBGKM_EXCEPTION64, *PDBGKM_EXCEPTION64; + +/* + * DBGKD Structure for State Change + */ +typedef struct _X86_DBGKD_CONTROL_REPORT +{ + uint32_t Dr6; + uint32_t Dr7; + uint16_t InstructionCount; + uint16_t ReportFlags; + uint8_t InstructionStream[DBGKD_MAXSTREAM]; + uint16_t SegCs; + uint16_t SegDs; + uint16_t SegEs; + uint16_t SegFs; + uint32_t EFlags; +} X86_DBGKD_CONTROL_REPORT, *PX86_DBGKD_CONTROL_REPORT; + +typedef struct _ALPHA_DBGKD_CONTROL_REPORT +{ + uint32_t InstructionCount; + uint8_t InstructionStream[DBGKD_MAXSTREAM]; +} ALPHA_DBGKD_CONTROL_REPORT, *PALPHA_DBGKD_CONTROL_REPORT; + +typedef struct _IA64_DBGKD_CONTROL_REPORT +{ + uint32_t InstructionCount; + uint8_t InstructionStream[DBGKD_MAXSTREAM]; +} IA64_DBGKD_CONTROL_REPORT, *PIA64_DBGKD_CONTROL_REPORT; + +typedef struct _AMD64_DBGKD_CONTROL_REPORT +{ + uint64_t Dr6; + uint64_t Dr7; + uint32_t EFlags; + uint16_t InstructionCount; + uint16_t ReportFlags; + uint8_t InstructionStream[DBGKD_MAXSTREAM]; + uint16_t SegCs; + uint16_t SegDs; + uint16_t SegEs; + uint16_t SegFs; +} AMD64_DBGKD_CONTROL_REPORT, *PAMD64_DBGKD_CONTROL_REPORT; + +typedef struct _ARM_DBGKD_CONTROL_REPORT +{ + uint32_t Cpsr; + uint32_t InstructionCount; + uint8_t InstructionStream[DBGKD_MAXSTREAM]; +} ARM_DBGKD_CONTROL_REPORT, *PARM_DBGKD_CONTROL_REPORT; + +typedef struct _DBGKD_ANY_CONTROL_REPORT +{ + union + { + X86_DBGKD_CONTROL_REPORT X86ControlReport; + ALPHA_DBGKD_CONTROL_REPORT AlphaControlReport; + IA64_DBGKD_CONTROL_REPORT IA64ControlReport; + AMD64_DBGKD_CONTROL_REPORT Amd64ControlReport; + ARM_DBGKD_CONTROL_REPORT ARMControlReport; + }; +} DBGKD_ANY_CONTROL_REPORT, *PDBGKD_ANY_CONTROL_REPORT; + +#if defined(TARGET_I386) +typedef X86_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_REP= ORT; +#elif defined(TARGET_X86_64) +typedef AMD64_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_R= EPORT; +#elif defined(TARGET_ARM) +typedef ARM_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_REP= ORT; +#else +#error Unsupported Architecture +#endif + +/* + * DBGKD Structure for Debug I/O Type Print String + */ +typedef struct _DBGKD_PRINT_STRING +{ + uint32_t LengthOfString; +} DBGKD_PRINT_STRING, *PDBGKD_PRINT_STRING; + +/* + * DBGKD Structure for Debug I/O Type Get String + */ +typedef struct _DBGKD_GET_STRING +{ + uint32_t LengthOfPromptString; + uint32_t LengthOfStringRead; +} DBGKD_GET_STRING, *PDBGKD_GET_STRING; + +/* + * DBGKD Structure for Debug I/O + */ +typedef struct _DBGKD_DEBUG_IO +{ + uint32_t ApiNumber; + uint16_t ProcessorLevel; + uint16_t Processor; + union + { + DBGKD_PRINT_STRING PrintString; + DBGKD_GET_STRING GetString; + } u; +} DBGKD_DEBUG_IO, *PDBGKD_DEBUG_IO; + +/* + * DBGkD Structure for Command String + */ +typedef struct _DBGKD_COMMAND_STRING +{ + uint32_t Flags; + uint32_t Reserved1; + uint64_t Reserved2[7]; +} DBGKD_COMMAND_STRING, *PDBGKD_COMMAND_STRING; + +/* + * DBGKD Structure for Load Symbols + */ +typedef struct _DBGKD_LOAD_SYMBOLS32 +{ + uint32_t PathNameLength; + uint32_t BaseOfDll; + uint32_t ProcessId; + uint32_t CheckSum; + uint32_t SizeOfImage; + boolean_t UnloadSymbols; +} DBGKD_LOAD_SYMBOLS32, *PDBGKD_LOAD_SYMBOLS32; + +typedef struct _DBGKD_LOAD_SYMBOLS64 +{ + uint32_t PathNameLength; + uint64_t BaseOfDll; + uint64_t ProcessId; + uint32_t CheckSum; + uint32_t SizeOfImage; + boolean_t UnloadSymbols; +} DBGKD_LOAD_SYMBOLS64, *PDBGKD_LOAD_SYMBOLS64; + +/* + * DBGKD Structure for Wait State Change + */ +typedef struct _DBGKD_WAIT_STATE_CHANGE32 +{ + uint32_t NewState; + uint16_t ProcessorLevel; + uint16_t Processor; + uint32_t NumberProcessors; + uint32_t Thread; + uint32_t ProgramCounter; + union + { + DBGKM_EXCEPTION32 Exception; + DBGKD_LOAD_SYMBOLS32 LoadSymbols; + } u; +} DBGKD_WAIT_STATE_CHANGE32, *PDBGKD_WAIT_STATE_CHANGE32; + +typedef struct _DBGKD_WAIT_STATE_CHANGE64 +{ + uint32_t NewState; + uint16_t ProcessorLevel; + uint16_t Processor; + uint32_t NumberProcessors; + uint64_t Thread; + uint64_t ProgramCounter; + union + { + DBGKM_EXCEPTION64 Exception; + DBGKD_LOAD_SYMBOLS64 LoadSymbols; + } u; +} DBGKD_WAIT_STATE_CHANGE64, *PDBGKD_WAIT_STATE_CHANGE64; + +typedef struct _DBGKD_ANY_WAIT_STATE_CHANGE +{ + uint32_t NewState; + uint16_t ProcessorLevel; + uint16_t Processor; + uint32_t NumberProcessors; + uint64_t Thread; + uint64_t ProgramCounter; + union + { + DBGKM_EXCEPTION64 Exception; + DBGKD_LOAD_SYMBOLS64 LoadSymbols; + DBGKD_COMMAND_STRING CommandString; + } u; + union + { + DBGKD_CONTROL_REPORT ControlReport; + DBGKD_ANY_CONTROL_REPORT AnyControlReport; + }; +} DBGKD_ANY_WAIT_STATE_CHANGE, *PDBGKD_ANY_WAIT_STATE_CHANGE; + +/* + * DBGKD Manipulate Structures + */ +typedef struct _DBGKD_READ_MEMORY32 +{ + uint32_t TargetBaseAddress; + uint32_t TransferCount; + uint32_t ActualBytesRead; +} DBGKD_READ_MEMORY32, *PDBGKD_READ_MEMORY32; + +typedef struct _DBGKD_READ_MEMORY64 +{ + uint64_t TargetBaseAddress; + uint32_t TransferCount; + uint32_t ActualBytesRead; +} DBGKD_READ_MEMORY64, *PDBGKD_READ_MEMORY64; + +typedef struct _DBGKD_WRITE_MEMORY32 +{ + uint32_t TargetBaseAddress; + uint32_t TransferCount; + uint32_t ActualBytesWritten; +} DBGKD_WRITE_MEMORY32, *PDBGKD_WRITE_MEMORY32; + +typedef struct _DBGKD_WRITE_MEMORY64 +{ + uint64_t TargetBaseAddress; + uint32_t TransferCount; + uint32_t ActualBytesWritten; +} DBGKD_WRITE_MEMORY64, *PDBGKD_WRITE_MEMORY64; + +typedef struct _DBGKD_GET_CONTEXT +{ + uint32_t Unused; +} DBGKD_GET_CONTEXT, *PDBGKD_GET_CONTEXT; + +typedef struct _DBGKD_SET_CONTEXT +{ + uint32_t ContextFlags; +} DBGKD_SET_CONTEXT, *PDBGKD_SET_CONTEXT; + +typedef struct _DBGKD_WRITE_BREAKPOINT32 +{ + uint32_t BreakPointAddress; + uint32_t BreakPointHandle; +} DBGKD_WRITE_BREAKPOINT32, *PDBGKD_WRITE_BREAKPOINT32; + +typedef struct _DBGKD_WRITE_BREAKPOINT64 +{ + uint64_t BreakPointAddress; + uint32_t BreakPointHandle; +} DBGKD_WRITE_BREAKPOINT64, *PDBGKD_WRITE_BREAKPOINT64; + +typedef struct _DBGKD_RESTORE_BREAKPOINT +{ + uint32_t BreakPointHandle; +} DBGKD_RESTORE_BREAKPOINT, *PDBGKD_RESTORE_BREAKPOINT; + +typedef struct _DBGKD_CONTINUE +{ + ntstatus_t ContinueStatus; +} DBGKD_CONTINUE, *PDBGKD_CONTINUE; + +#pragma pack(push, 4) +typedef struct _DBGKD_CONTINUE2 +{ + ntstatus_t ContinueStatus; + union + { + DBGKD_CONTROL_SET ControlSet; + DBGKD_ANY_CONTROL_SET AnyControlSet; + }; +} DBGKD_CONTINUE2, *PDBGKD_CONTINUE2; +#pragma pack(pop) + +typedef struct _DBGKD_READ_WRITE_IO32 +{ + uint32_t IoAddress; + uint32_t DataSize; + uint32_t DataValue; +} DBGKD_READ_WRITE_IO32, *PDBGKD_READ_WRITE_IO32; + +typedef struct _DBGKD_READ_WRITE_IO64 +{ + uint64_t IoAddress; + uint32_t DataSize; + uint32_t DataValue; +} DBGKD_READ_WRITE_IO64, *PDBGKD_READ_WRITE_IO64; + +typedef struct _DBGKD_READ_WRITE_IO_EXTENDED32 +{ + uint32_t DataSize; + uint32_t InterfaceType; + uint32_t BusNumber; + uint32_t AddressSpace; + uint32_t IoAddress; + uint32_t DataValue; +} DBGKD_READ_WRITE_IO_EXTENDED32, *PDBGKD_READ_WRITE_IO_EXTENDED32; + +typedef struct _DBGKD_READ_WRITE_IO_EXTENDED64 +{ + uint32_t DataSize; + uint32_t InterfaceType; + uint32_t BusNumber; + uint32_t AddressSpace; + uint64_t IoAddress; + uint32_t DataValue; +} DBGKD_READ_WRITE_IO_EXTENDED64, *PDBGKD_READ_WRITE_IO_EXTENDED64; + +typedef struct _DBGKD_READ_WRITE_MSR +{ + uint32_t Msr; + uint32_t DataValueLow; + uint32_t DataValueHigh; +} DBGKD_READ_WRITE_MSR, *PDBGKD_READ_WRITE_MSR; + +typedef struct _DBGKD_QUERY_SPECIAL_CALLS +{ + uint32_t NumberOfSpecialCalls; +} DBGKD_QUERY_SPECIAL_CALLS, *PDBGKD_QUERY_SPECIAL_CALLS; + +typedef struct _DBGKD_SET_SPECIAL_CALL32 +{ + uint32_t SpecialCall; +} DBGKD_SET_SPECIAL_CALL32, *PDBGKD_SET_SPECIAL_CALL32; + +typedef struct _DBGKD_SET_SPECIAL_CALL64 +{ + uint64_t SpecialCall; +} DBGKD_SET_SPECIAL_CALL64, *PDBGKD_SET_SPECIAL_CALL64; + +typedef struct _DBGKD_SET_INTERNAL_BREAKPOINT32 +{ + uint32_t BreakpointAddress; + uint32_t Flags; +} DBGKD_SET_INTERNAL_BREAKPOINT32, *PDBGKD_SET_INTERNAL_BREAKPOINT32; + +typedef struct _DBGKD_SET_INTERNAL_BREAKPOINT64 +{ + uint64_t BreakpointAddress; + uint32_t Flags; +} DBGKD_SET_INTERNAL_BREAKPOINT64, *PDBGKD_SET_INTERNAL_BREAKPOINT64; + +typedef struct _DBGKD_GET_INTERNAL_BREAKPOINT32 +{ + uint32_t BreakpointAddress; + uint32_t Flags; + uint32_t Calls; + uint32_t MaxCallsPerPeriod; + uint32_t MinInstructions; + uint32_t MaxInstructions; + uint32_t TotalInstructions; +} DBGKD_GET_INTERNAL_BREAKPOINT32, *PDBGKD_GET_INTERNAL_BREAKPOINT32; + +typedef struct _DBGKD_GET_INTERNAL_BREAKPOINT64 +{ + uint64_t BreakpointAddress; + uint32_t Flags; + uint32_t Calls; + uint32_t MaxCallsPerPeriod; + uint32_t MinInstructions; + uint32_t MaxInstructions; + uint32_t TotalInstructions; +} DBGKD_GET_INTERNAL_BREAKPOINT64, *PDBGKD_GET_INTERNAL_BREAKPOINT64; + +typedef struct _DBGKD_GET_VERSION32 +{ + uint16_t MajorVersion; + uint16_t MinorVersion; + uint16_t ProtocolVersion; + uint16_t Flags; + uint32_t KernBase; + uint32_t PsLoadedModuleList; + uint16_t MachineType; + uint16_t ThCallbackStack; + uint16_t NextCallback; + uint16_t FramePointer; + uint32_t KiCallUserMode; + uint32_t KeUserCallbackDispatcher; + uint32_t BreakpointWithStatus; + uint32_t DebuggerDataList; +} DBGKD_GET_VERSION32, *PDBGKD_GET_VERSION32; + +typedef struct _DBGKD_GET_VERSION64 +{ + uint16_t MajorVersion; + uint16_t MinorVersion; + uint8_t ProtocolVersion; + uint8_t KdSecondaryVersion; + uint16_t Flags; + uint16_t MachineType; + uint8_t MaxPacketType; + uint8_t MaxStateChange; + uint8_t MaxManipulate; + uint8_t Simulation; + uint16_t Unused[1]; + uint64_t KernBase; + uint64_t PsLoadedModuleList; + uint64_t DebuggerDataList; +} DBGKD_GET_VERSION64, *PDBGKD_GET_VERSION64; + +typedef struct _DBGKD_BREAKPOINTEX +{ + uint32_t BreakPointCount; + ntstatus_t ContinueStatus; +} DBGKD_BREAKPOINTEX, *PDBGKD_BREAKPOINTEX; + +typedef struct _DBGKD_SEARCH_MEMORY +{ + union + { + uint64_t SearchAddress; + uint64_t FoundAddress; + }; + uint64_t SearchLength; + uint32_t PatternLength; +} DBGKD_SEARCH_MEMORY, *PDBGKD_SEARCH_MEMORY; + +typedef struct _DBGKD_GET_SET_BUS_DATA +{ + uint32_t BusDataType; + uint32_t BusNumber; + uint32_t SlotNumber; + uint32_t Offset; + uint32_t Length; +} DBGKD_GET_SET_BUS_DATA, *PDBGKD_GET_SET_BUS_DATA; + +typedef struct _DBGKD_FILL_MEMORY +{ + uint64_t Address; + uint32_t Length; + uint16_t Flags; + uint16_t PatternLength; +} DBGKD_FILL_MEMORY, *PDBGKD_FILL_MEMORY; + +typedef struct _DBGKD_QUERY_MEMORY +{ + uint64_t Address; + uint64_t Reserved; + uint32_t AddressSpace; + uint32_t Flags; +} DBGKD_QUERY_MEMORY, *PDBGKD_QUERY_MEMORY; + +typedef struct _DBGKD_SWITCH_PARTITION +{ + uint32_t Partition; +} DBGKD_SWITCH_PARTITION; + +/* + * DBGKD Structure for Manipulate + */ +typedef struct _DBGKD_MANIPULATE_STATE32 +{ + uint32_t ApiNumber; + uint16_t ProcessorLevel; + uint16_t Processor; + ntstatus_t ReturnStatus; + union + { + DBGKD_READ_MEMORY32 ReadMemory; + DBGKD_WRITE_MEMORY32 WriteMemory; + DBGKD_READ_MEMORY64 ReadMemory64; + DBGKD_WRITE_MEMORY64 WriteMemory64; + DBGKD_GET_CONTEXT GetContext; + DBGKD_SET_CONTEXT SetContext; + DBGKD_WRITE_BREAKPOINT32 WriteBreakPoint; + DBGKD_RESTORE_BREAKPOINT RestoreBreakPoint; + DBGKD_CONTINUE Continue; + DBGKD_CONTINUE2 Continue2; + DBGKD_READ_WRITE_IO32 ReadWriteIo; + DBGKD_READ_WRITE_IO_EXTENDED32 ReadWriteIoExtended; + DBGKD_QUERY_SPECIAL_CALLS QuerySpecialCalls; + DBGKD_SET_SPECIAL_CALL32 SetSpecialCall; + DBGKD_SET_INTERNAL_BREAKPOINT32 SetInternalBreakpoint; + DBGKD_GET_INTERNAL_BREAKPOINT32 GetInternalBreakpoint; + DBGKD_GET_VERSION32 GetVersion32; + DBGKD_BREAKPOINTEX BreakPointEx; + DBGKD_READ_WRITE_MSR ReadWriteMsr; + DBGKD_SEARCH_MEMORY SearchMemory; + DBGKD_GET_SET_BUS_DATA GetSetBusData; + DBGKD_FILL_MEMORY FillMemory; + DBGKD_QUERY_MEMORY QueryMemory; + DBGKD_SWITCH_PARTITION SwitchPartition; + } u; +} DBGKD_MANIPULATE_STATE32, *PDBGKD_MANIPULATE_STATE32; + +typedef struct _DBGKD_MANIPULATE_STATE64 +{ + uint32_t ApiNumber; + uint16_t ProcessorLevel; + uint16_t Processor; + ntstatus_t ReturnStatus; + union + { + DBGKD_READ_MEMORY64 ReadMemory; + DBGKD_WRITE_MEMORY64 WriteMemory; + DBGKD_GET_CONTEXT GetContext; + DBGKD_SET_CONTEXT SetContext; + DBGKD_WRITE_BREAKPOINT64 WriteBreakPoint; + DBGKD_RESTORE_BREAKPOINT RestoreBreakPoint; + DBGKD_CONTINUE Continue; + DBGKD_CONTINUE2 Continue2; + DBGKD_READ_WRITE_IO64 ReadWriteIo; + DBGKD_READ_WRITE_IO_EXTENDED64 ReadWriteIoExtended; + DBGKD_QUERY_SPECIAL_CALLS QuerySpecialCalls; + DBGKD_SET_SPECIAL_CALL64 SetSpecialCall; + DBGKD_SET_INTERNAL_BREAKPOINT64 SetInternalBreakpoint; + DBGKD_GET_INTERNAL_BREAKPOINT64 GetInternalBreakpoint; + DBGKD_GET_VERSION64 GetVersion64; + DBGKD_BREAKPOINTEX BreakPointEx; + DBGKD_READ_WRITE_MSR ReadWriteMsr; + DBGKD_SEARCH_MEMORY SearchMemory; + DBGKD_GET_SET_BUS_DATA GetSetBusData; + DBGKD_FILL_MEMORY FillMemory; + DBGKD_QUERY_MEMORY QueryMemory; + DBGKD_SWITCH_PARTITION SwitchPartition; + } u; +} DBGKD_MANIPULATE_STATE64, *PDBGKD_MANIPULATE_STATE64; + +/* + * File I/O Structure + */ +typedef struct _DBGKD_CREATE_FILE +{ + uint32_t DesiredAccess; + uint32_t FileAttributes; + uint32_t ShareAccess; + uint32_t CreateDisposition; + uint32_t CreateOptions; + uint64_t Handle; + uint64_t Length; +} DBGKD_CREATE_FILE, *PDBGKD_CREATE_FILE; + +typedef struct _DBGKD_READ_FILE +{ + uint64_t Handle; + uint64_t Offset; + uint32_t Length; +} DBGKD_READ_FILE, *PDBGKD_READ_FILE; + +typedef struct _DBGKD_WRITE_FILE +{ + uint64_t Handle; + uint64_t Offset; + uint32_t Length; +} DBGKD_WRITE_FILE, *PDBGKD_WRITE_FILE; + +typedef struct _DBGKD_CLOSE_FILE +{ + uint64_t Handle; +} DBGKD_CLOSE_FILE, *PDBGKD_CLOSE_FILE; + +typedef struct _DBGKD_FILE_IO +{ + uint32_t ApiNumber; + uint32_t Status; + union + { + uint64_t ReserveSpace[7]; + DBGKD_CREATE_FILE CreateFile; + DBGKD_READ_FILE ReadFile; + DBGKD_WRITE_FILE WriteFile; + DBGKD_CLOSE_FILE CloseFile; + } u; +} DBGKD_FILE_IO, *PDBGKD_FILE_IO; + + +/* + * Control Request Structure + */ +typedef struct _DBGKD_REQUEST_BREAKPOINT +{ + uint32_t HardwareBreakPointNumber; + uint32_t Available; +} DBGKD_REQUEST_BREAKPOINT, *PDBGKD_REQUEST_BREAKPOINT; + +typedef struct _DBGKD_RELEASE_BREAKPOINT +{ + uint32_t HardwareBreakPointNumber; + uint32_t Released; +} DBGKD_RELEASE_BREAKPOINT, *PDBGKD_RELEASE_BREAKPOINT; + +typedef struct _DBGKD_CONTROL_REQUEST +{ + uint32_t ApiNumber; + union + { + DBGKD_REQUEST_BREAKPOINT RequestBreakpoint; + DBGKD_RELEASE_BREAKPOINT ReleaseBreakpoint; + } u; +} DBGKD_CONTROL_REQUEST, *PDBGKD_CONTROL_REQUEST; + +/* + * Trace I/O Structure + */ +typedef struct _DBGKD_PRINT_TRACE +{ + uint32_t LengthOfData; +} DBGKD_PRINT_TRACE, *PDBGKD_PRINT_TRACE; + +typedef struct _DBGKD_TRACE_IO +{ + uint32_t ApiNumber; + uint16_t ProcessorLevel; + uint16_t Processor; + union + { + uint64_t ReserveSpace[7]; + DBGKD_PRINT_TRACE PrintTrace; + } u; +} DBGKD_TRACE_IO, *PDBGKD_TRACE_IO; + +#endif diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 67d190bf6c..2390597f1f 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -14,5 +14,6 @@ =20 #include "qemu/osdep.h" #include "exec/windbgstub.h" +#include "exec/windbgkd.h" =20 #endif From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15064241468951016.5746445389309; Tue, 26 Sep 2017 04:09:06 -0700 (PDT) Received: from localhost ([::1]:46704 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnjX-0006cA-1r for importer@patchew.org; Tue, 26 Sep 2017 07:08:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58704) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfB-00036x-SU for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnf8-0008Dd-0w for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:29 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51636) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnf7-0008DI-OH for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:25 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id BEF01540072; Tue, 26 Sep 2017 14:04:24 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:23 +0300 Message-ID: <150642386298.3900.11943218198664925722.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 03/43] windbg: modified windbgkd.h X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added useful name arrays of some defines. Not used yet. Needs for the futur= e. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgkd.h | 75 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 75 insertions(+) diff --git a/include/exec/windbgkd.h b/include/exec/windbgkd.h index 916fe5aebb..9d0325da3a 100755 --- a/include/exec/windbgkd.h +++ b/include/exec/windbgkd.h @@ -952,4 +952,79 @@ typedef struct _DBGKD_TRACE_IO } u; } DBGKD_TRACE_IO, *PDBGKD_TRACE_IO; =20 +__attribute__ ((unused)) /* maybe unused */ +static const char *kd_api_names[] =3D { + "DbgKdReadVirtualMemoryApi", + "DbgKdWriteVirtualMemoryApi", + "DbgKdGetContextApi", + "DbgKdSetContextApi", + "DbgKdWriteBreakPointApi", + "DbgKdRestoreBreakPointApi", + "DbgKdContinueApi", + "DbgKdReadControlSpaceApi", + "DbgKdWriteControlSpaceApi", + "DbgKdReadIoSpaceApi", + "DbgKdWriteIoSpaceApi", + "DbgKdRebootApi", + "DbgKdContinueApi2", + "DbgKdReadPhysicalMemoryApi", + "DbgKdWritePhysicalMemoryApi", + "DbgKdQuerySpecialCallsApi", + "DbgKdSetSpecialCallApi", + "DbgKdClearSpecialCallsApi", + "DbgKdSetInternalBreakPointApi", + "DbgKdGetInternalBreakPointApi", + "DbgKdReadIoSpaceExtendedApi", + "DbgKdWriteIoSpaceExtendedApi", + "DbgKdGetVersionApi", + "DbgKdWriteBreakPointExApi", + "DbgKdRestoreBreakPointExApi", + "DbgKdCauseBugCheckApi", + "", + "", + "", + "", + "", + "", + "DbgKdSwitchProcessor", + "DbgKdPageInApi", + "DbgKdReadMachineSpecificRegister", + "DbgKdWriteMachineSpecificRegister", + "OldVlm1", + "OldVlm2", + "DbgKdSearchMemoryApi", + "DbgKdGetBusDataApi", + "DbgKdSetBusDataApi", + "DbgKdCheckLowMemoryApi", + "DbgKdClearAllInternalBreakpointsApi", + "DbgKdFillMemoryApi", + "DbgKdQueryMemoryApi", + "DbgKdSwitchPartition", + "DbgKdUnknownApi" +}; + +__attribute__ ((unused)) /* maybe unused */ +static const char *kd_packet_type_names[] =3D { + "PACKET_TYPE_UNUSED", + "PACKET_TYPE_KD_STATE_CHANGE32", + "PACKET_TYPE_KD_STATE_MANIPULATE", + "PACKET_TYPE_KD_DEBUG_IO", + "PACKET_TYPE_KD_ACKNOWLEDGE", + "PACKET_TYPE_KD_RESEND", + "PACKET_TYPE_KD_RESET", + "PACKET_TYPE_KD_STATE_CHANGE64", + "PACKET_TYPE_KD_POLL_BREAKIN", + "PACKET_TYPE_KD_TRACE_IO", + "PACKET_TYPE_KD_CONTROL_REQUEST", + "PACKET_TYPE_KD_FILE_IO", + "PACKET_TYPE_MAX" +}; + +#define KD_API_NAME(id) \ + (id >=3D DbgKdMinimumManipulate && id < DbgKdMaximumManipulate) ? \ + kd_api_names[id - DbgKdMinimumManipulate] : \ + kd_api_names[DbgKdMaximumManipulate - DbgKdMinimumManipulate] \ + +#define KD_PKT_TYPE_NAME(id) kd_packet_type_names[id] + #endif From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15064242770521001.9145022661079; Tue, 26 Sep 2017 04:11:17 -0700 (PDT) Received: from localhost ([::1]:46718 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnlh-0000Ae-4B for importer@patchew.org; Tue, 26 Sep 2017 07:11:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58724) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfF-00039O-2M for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfD-0008GH-L5 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:33 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51662) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfD-0008G0-Ay for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:31 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 6B42F540074; Tue, 26 Sep 2017 14:04:30 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:29 +0300 Message-ID: <150642386887.3900.11789274449160294712.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 04/43] windbg: added '-windbg' option X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 This option starts windbg server. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov Acked-by: Alistair Francis --- qemu-options.hx | 8 ++++++++ vl.c | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/qemu-options.hx b/qemu-options.hx index 9f6e2adfff..1c84eb56d9 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3544,6 +3544,14 @@ Shorthand for -gdb tcp::1234, i.e. open a gdbserver = on TCP port 1234 (@pxref{gdb_usage}). ETEXI =20 +DEF("windbg", HAS_ARG, QEMU_OPTION_windbg, \ + "-windbg wait for windbg connection\n", QEMU_ARCH_I386) +STEXI +@item -windbg +@findex -windbg +Wait for windbg connection. +ETEXI + DEF("d", HAS_ARG, QEMU_OPTION_d, \ "-d item1,... enable logging of specified items (use '-d help' for = a list of log items)\n", QEMU_ARCH_ALL) diff --git a/vl.c b/vl.c index 8e247cc2a2..d6378cf03f 100644 --- a/vl.c +++ b/vl.c @@ -80,6 +80,7 @@ int main(int argc, char **argv) #include "sysemu/sysemu.h" #include "sysemu/numa.h" #include "exec/gdbstub.h" +#include "exec/windbgstub.h" #include "qemu/timer.h" #include "chardev/char.h" #include "qemu/bitmap.h" @@ -2436,6 +2437,7 @@ struct device_config { DEV_VIRTCON, /* -virtioconsole */ DEV_DEBUGCON, /* -debugcon */ DEV_GDB, /* -gdb, -s */ + DEV_WINDBG, /* -windbg */ DEV_SCLP, /* s390 sclp */ } type; const char *cmdline; @@ -3445,6 +3447,9 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_gdb: add_device_config(DEV_GDB, optarg); break; + case QEMU_OPTION_windbg: + add_device_config(DEV_WINDBG, optarg); + break; case QEMU_OPTION_L: if (is_help_option(optarg)) { list_data_dirs =3D true; @@ -4586,6 +4591,9 @@ int main(int argc, char **argv, char **envp) exit(1); } =20 + if (foreach_device_config(DEV_WINDBG, windbg_server_start) < 0) { + exit(1); + } if (foreach_device_config(DEV_SERIAL, serial_parse) < 0) exit(1); if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0) From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506423986605225.8843011544069; Tue, 26 Sep 2017 04:06:26 -0700 (PDT) Received: from localhost ([::1]:46697 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngy-0004IO-TQ for importer@patchew.org; Tue, 26 Sep 2017 07:06:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58745) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfJ-0003C8-W8 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfI-0008Ik-Vt for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:37 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51694) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfI-0008IW-Nn for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:36 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id F3B09540080; Tue, 26 Sep 2017 14:04:35 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:34 +0300 Message-ID: <150642387446.3900.8629683985208127854.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 05/43] windbg: added helper features X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added some helper features for windbgstub. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 46 +++++++++++++++++++++++++++++++++++= ++++ include/exec/windbgstub.h | 3 +++ windbgstub.c | 1 + 3 files changed, 50 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 2390597f1f..65f336e4bf 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -13,7 +13,53 @@ #define WINDBGSTUB_UTILS_H =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" +#include "cpu.h" #include "exec/windbgstub.h" #include "exec/windbgkd.h" =20 +#ifndef TARGET_I386 +#error Unsupported Architecture +#endif +#ifdef TARGET_X86_64 /* Unimplemented yet */ +#error Unsupported Architecture +#endif + +#if (WINDBG_DEBUG_ON) + +# define WINDBG_DEBUG(...) do { \ + printf("Debug: " __VA_ARGS__); \ + printf("\n"); \ +} while (false) + +# define WINDBG_ERROR(...) do { \ + printf("Error: " __VA_ARGS__); \ + printf("\n"); \ +} while (false) + +#else + +# define WINDBG_DEBUG(...) +# define WINDBG_ERROR(...) error_report(WINDBG ": " __VA_ARGS__) + +#endif + +#define FMT_ADDR "addr:0x" TARGET_FMT_lx +#define FMT_ERR "Error:%d" + +#define UINT8_P(ptr) ((uint8_t *) (ptr)) +#define UINT32_P(ptr) ((uint32_t *) (ptr)) +#define FIELD_P(type, field, ptr) ((typeof_field(type, field) *) (ptr)) +#define PTR(var) UINT8_P(&var) + +#define M64_SIZE sizeof(DBGKD_MANIPULATE_STATE64) + +#define sizeof_field(type, field) sizeof(((type *) NULL)->field) + +#define READ_VMEM(cpu, addr, type) ({ \ + type _t; \ + cpu_memory_rw_debug(cpu, addr, PTR(_t), sizeof(type), 0); \ + _t; \ +}) + #endif diff --git a/include/exec/windbgstub.h b/include/exec/windbgstub.h index 1a6e1cc6e5..703fc26b8f 100755 --- a/include/exec/windbgstub.h +++ b/include/exec/windbgstub.h @@ -12,6 +12,9 @@ #ifndef WINDBGSTUB_H #define WINDBGSTUB_H =20 +#define WINDBG "windbg" +#define WINDBG_DEBUG_ON false + int windbg_server_start(const char *device); =20 #endif diff --git a/windbgstub.c b/windbgstub.c index 4951f59203..3830446988 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -11,6 +11,7 @@ =20 #include "qemu/osdep.h" #include "exec/windbgstub.h" +#include "exec/windbgstub-utils.h" =20 int windbg_server_start(const char *device) { From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15064241492791012.2481641142831; Tue, 26 Sep 2017 04:09:09 -0700 (PDT) Received: from localhost ([::1]:46705 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnjg-0006jL-Gc for importer@patchew.org; Tue, 26 Sep 2017 07:09:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58810) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfR-0003GX-Po for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfO-0008N8-H7 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:45 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51718) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfO-0008Ms-8t for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:42 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 89765540090; Tue, 26 Sep 2017 14:04:41 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:40 +0300 Message-ID: <150642388004.3900.5767850617613782105.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 06/43] windbg: added WindbgState X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added definition of the WindbgState struct and its initialization. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/windbgstub.c b/windbgstub.c index 3830446988..60a380c213 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -10,10 +10,36 @@ */ =20 #include "qemu/osdep.h" +#include "chardev/char.h" +#include "chardev/char-fe.h" #include "exec/windbgstub.h" #include "exec/windbgstub-utils.h" =20 +typedef struct WindbgState { + bool is_loaded; + + uint32_t ctrl_packet_id; + uint32_t data_packet_id; +} WindbgState; + +static WindbgState *windbg_state; + +static void windbg_exit(void) +{ + g_free(windbg_state); +} + int windbg_server_start(const char *device) { + if (windbg_state) { + WINDBG_ERROR("Multiple instances are not supported"); + exit(1); + } + + windbg_state =3D g_new0(WindbgState, 1); + windbg_state->ctrl_packet_id =3D RESET_PACKET_ID; + windbg_state->data_packet_id =3D INITIAL_PACKET_ID; + + atexit(windbg_exit); return 0; } From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424314262262.7698493541171; Tue, 26 Sep 2017 04:11:54 -0700 (PDT) Received: from localhost ([::1]:46721 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnmJ-0000iO-Fc for importer@patchew.org; Tue, 26 Sep 2017 07:11:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58899) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfa-0003NE-3b for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfU-0008WC-3J for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:54 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51734) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfT-0008Uz-S7 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:48 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 23F13540092; Tue, 26 Sep 2017 14:04:47 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:45 +0300 Message-ID: <150642388560.3900.1889412060549174598.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 07/43] windbg: added chardev X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added chardev for listening to windbg. Target device is a parameter in the = '-windbg' option. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov Acked-by: Alistair Francis --- windbgstub.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/windbgstub.c b/windbgstub.c index 60a380c213..378d1b911f 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -10,6 +10,7 @@ */ =20 #include "qemu/osdep.h" +#include "qapi/error.h" #include "chardev/char.h" #include "chardev/char-fe.h" #include "exec/windbgstub.h" @@ -18,12 +19,26 @@ typedef struct WindbgState { bool is_loaded; =20 + CharBackend chr; + uint32_t ctrl_packet_id; uint32_t data_packet_id; } WindbgState; =20 static WindbgState *windbg_state; =20 +static int windbg_chr_can_receive(void *opaque) +{ + return PACKET_MAX_SIZE; +} + +static void windbg_chr_receive(void *opaque, const uint8_t *buf, int size) +{ + if (windbg_state->is_loaded) { + /* T0D0: parse data */ + } +} + static void windbg_exit(void) { g_free(windbg_state); @@ -31,6 +46,8 @@ static void windbg_exit(void) =20 int windbg_server_start(const char *device) { + Chardev *chr =3D NULL; + if (windbg_state) { WINDBG_ERROR("Multiple instances are not supported"); exit(1); @@ -40,6 +57,15 @@ int windbg_server_start(const char *device) windbg_state->ctrl_packet_id =3D RESET_PACKET_ID; windbg_state->data_packet_id =3D INITIAL_PACKET_ID; =20 + chr =3D qemu_chr_new_noreplay(WINDBG, device); + if (!chr) { + return -1; + } + + qemu_chr_fe_init(&windbg_state->chr, chr, &error_abort); + qemu_chr_fe_set_handlers(&windbg_state->chr, windbg_chr_can_receive, + windbg_chr_receive, NULL, NULL, NULL, NULL, t= rue); + atexit(windbg_exit); return 0; } From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424468789613.3066665812069; Tue, 26 Sep 2017 04:14:28 -0700 (PDT) Received: from localhost ([::1]:46739 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnop-0003BW-TU for importer@patchew.org; Tue, 26 Sep 2017 07:14:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58966) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfd-0003Pr-4Z for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfZ-0000Cm-O0 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:57 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51760) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfZ-0000CS-Ey for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:53 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id B534C540096; Tue, 26 Sep 2017 14:04:52 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:51 +0300 Message-ID: <150642389121.3900.12320775067244184010.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 08/43] windbg: hook to wrmsr operation X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Inserted hook to wrmsr operation. Windows Kernel put address on KPCR struct= to fs/gs (x32/x64) register. Needs catch this moment and allow windbg serv= er handle packets. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 3 +++ include/exec/windbgstub.h | 1 + target/i386/misc_helper.c | 3 +++ windbgstub-utils.c | 8 ++++++++ windbgstub.c | 8 ++++++++ 5 files changed, 23 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 65f336e4bf..90fb766839 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -62,4 +62,7 @@ _t; \ }) =20 +bool windbg_on_load(void); +void windbg_on_exit(void); + #endif diff --git a/include/exec/windbgstub.h b/include/exec/windbgstub.h index 703fc26b8f..2dbf1b1f13 100755 --- a/include/exec/windbgstub.h +++ b/include/exec/windbgstub.h @@ -15,6 +15,7 @@ #define WINDBG "windbg" #define WINDBG_DEBUG_ON false =20 +void windbg_try_load(void); int windbg_server_start(const char *device); =20 #endif diff --git a/target/i386/misc_helper.c b/target/i386/misc_helper.c index 628f64aad5..ec1fcd2899 100644 --- a/target/i386/misc_helper.c +++ b/target/i386/misc_helper.c @@ -24,6 +24,7 @@ #include "exec/exec-all.h" #include "exec/cpu_ldst.h" #include "exec/address-spaces.h" +#include "exec/windbgstub.h" =20 void helper_outb(CPUX86State *env, uint32_t port, uint32_t data) { @@ -385,6 +386,8 @@ void helper_wrmsr(CPUX86State *env) /* XXX: exception? */ break; } + + windbg_try_load(); } =20 void helper_rdmsr(CPUX86State *env) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index dc5e505c63..b5fb6db3f2 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -10,3 +10,11 @@ */ =20 #include "exec/windbgstub-utils.h" + +bool windbg_on_load(void) +{ + return false; +} + +void windbg_on_exit(void) +{} diff --git a/windbgstub.c b/windbgstub.c index 378d1b911f..99c3ef9b14 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -39,8 +39,16 @@ static void windbg_chr_receive(void *opaque, const uint8= _t *buf, int size) } } =20 +void windbg_try_load(void) +{ + if (windbg_state && !windbg_state->is_loaded) { + windbg_state->is_loaded =3D windbg_on_load(); + } +} + static void windbg_exit(void) { + windbg_on_exit(); g_free(windbg_state); } =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424307838587.2786340618177; Tue, 26 Sep 2017 04:11:47 -0700 (PDT) Received: from localhost ([::1]:46720 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnmB-0000cO-VJ for importer@patchew.org; Tue, 26 Sep 2017 07:11:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfg-0003Tk-5y for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnff-0000Ly-96 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:00 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51786) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnff-0000Lp-2L for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:59 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 515F054009A; Tue, 26 Sep 2017 14:04:58 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:04:57 +0300 Message-ID: <150642389679.3900.2803313967054050497.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 09/43] windbg: handler of fs/gs register X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added handler of fs/gs register. It tries to find and check KPCR and versio= n address. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 5 +++ windbgstub-utils.c | 63 +++++++++++++++++++++++++++++++++++= +++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 90fb766839..f2402ebb34 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -62,6 +62,11 @@ _t; \ }) =20 +typedef struct InitedAddr { + target_ulong addr; + bool is_init; +} InitedAddr; + bool windbg_on_load(void); void windbg_on_exit(void); =20 diff --git a/windbgstub-utils.c b/windbgstub-utils.c index b5fb6db3f2..662096647e 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -11,10 +11,69 @@ =20 #include "exec/windbgstub-utils.h" =20 +#ifdef TARGET_X86_64 +# define OFFSET_SELF_PCR 0x18 +# define OFFSET_VERS 0x108 +#else +# define OFFSET_SELF_PCR 0x1C +# define OFFSET_VERS 0x34 +#endif + +typedef struct KDData { + InitedAddr KPCR; + InitedAddr version; +} KDData; + +static KDData *kd; + bool windbg_on_load(void) { - return false; + CPUState *cpu =3D qemu_get_cpu(0); + CPUArchState *env =3D cpu->env_ptr; + + if (!kd) { + kd =3D g_new0(KDData, 1); + } + + if (!kd->KPCR.is_init) { + + #ifdef TARGET_X86_64 + kd->KPCR.addr =3D env->segs[R_GS].base; + #else + kd->KPCR.addr =3D env->segs[R_FS].base; + #endif + + static target_ulong prev_KPCR; + if (!kd->KPCR.addr || prev_KPCR =3D=3D kd->KPCR.addr) { + return false; + } + prev_KPCR =3D kd->KPCR.addr; + + if (kd->KPCR.addr !=3D READ_VMEM(cpu, kd->KPCR.addr + OFFSET_SELF_= PCR, + target_ulong)) { + return false; + } + + kd->KPCR.is_init =3D true; + } + + if (!kd->version.is_init && kd->KPCR.is_init) { + kd->version.addr =3D READ_VMEM(cpu, kd->KPCR.addr + OFFSET_VERS, + target_ulong); + if (!kd->version.addr) { + return false; + } + kd->version.is_init =3D true; + } + + WINDBG_DEBUG("windbg_on_load: KPCR " FMT_ADDR, kd->KPCR.addr); + WINDBG_DEBUG("windbg_on_load: version " FMT_ADDR, kd->version.addr); + + return true; } =20 void windbg_on_exit(void) -{} +{ + g_free(kd); + kd =3D NULL; +} From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424623175707.480884035966; Tue, 26 Sep 2017 04:17:03 -0700 (PDT) Received: from localhost ([::1]:46753 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnrH-0005bA-A3 for importer@patchew.org; Tue, 26 Sep 2017 07:16:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59158) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfq-0003f5-KL for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfk-0000ON-R8 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:10 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51804) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfk-0000OB-K6 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:04 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id E452754009C; Tue, 26 Sep 2017 14:05:03 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:02 +0300 Message-ID: <150642390241.3900.9553276177858515734.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 10/43] windbg: structures for parsing data stream X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added structures for parsing data stream from windbg to packet. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 11 +++++++++++ windbgstub.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index f2402ebb34..63df5e339c 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -67,6 +67,17 @@ typedef struct InitedAddr { bool is_init; } InitedAddr; =20 +typedef struct PacketData { + union { + struct { + DBGKD_MANIPULATE_STATE64 m64; + uint8_t extra[PACKET_MAX_SIZE - sizeof(DBGKD_MANIPULATE_STATE6= 4)]; + }; + uint8_t buf[PACKET_MAX_SIZE]; + }; + uint16_t extra_size; +} PacketData; + bool windbg_on_load(void); void windbg_on_exit(void); =20 diff --git a/windbgstub.c b/windbgstub.c index 99c3ef9b14..32984d0f92 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -16,6 +16,36 @@ #include "exec/windbgstub.h" #include "exec/windbgstub-utils.h" =20 +typedef enum ParsingState { + STATE_LEADER, + STATE_PACKET_TYPE, + STATE_PACKET_BYTE_COUNT, + STATE_PACKET_ID, + STATE_PACKET_CHECKSUM, + STATE_PACKET_DATA, + STATE_TRAILING_BYTE, +} ParsingState; + +typedef enum ParsingResult { + RESULT_NONE, + RESULT_BREAKIN_BYTE, + RESULT_UNKNOWN_PACKET, + RESULT_CONTROL_PACKET, + RESULT_DATA_PACKET, + RESULT_ERROR, +} ParsingResult; + +typedef struct ParsingContext { + /* index in the current buffer, + which depends on the current state */ + int index; + ParsingState state; + ParsingResult result; + KD_PACKET packet; + PacketData data; + const char *name; +} ParsingContext; + typedef struct WindbgState { bool is_loaded; =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424612972236.81530115085638; Tue, 26 Sep 2017 04:16:52 -0700 (PDT) Received: from localhost ([::1]:46752 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnr5-0005RY-21 for importer@patchew.org; Tue, 26 Sep 2017 07:16:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59245) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwng0-0003mQ-4R for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfq-0000VE-GT for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:20 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51818) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfq-0000Tw-5t for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:10 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 71A5254009E; Tue, 26 Sep 2017 14:05:09 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:08 +0300 Message-ID: <150642390797.3900.15056414492991775809.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 11/43] windbg: parsing data stream X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added function of parsing data stream from windbg to packet. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/windbgstub.c b/windbgstub.c index 32984d0f92..7bc3585e53 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -57,6 +57,105 @@ typedef struct WindbgState { =20 static WindbgState *windbg_state; =20 +static void windbg_ctx_handler(ParsingContext *ctx) +{} + +static void windbg_read_byte(ParsingContext *ctx, uint8_t byte) +{ + switch (ctx->state) { + case STATE_LEADER: + ctx->result =3D RESULT_NONE; + if (byte =3D=3D PACKET_LEADER_BYTE || byte =3D=3D CONTROL_PACKET_L= EADER_BYTE) { + if (ctx->index > 0 && byte !=3D PTR(ctx->packet.PacketLeader)[= 0]) { + ctx->index =3D 0; + } + PTR(ctx->packet.PacketLeader)[ctx->index] =3D byte; + ++ctx->index; + if (ctx->index =3D=3D sizeof(ctx->packet.PacketLeader)) { + ctx->state =3D STATE_PACKET_TYPE; + ctx->index =3D 0; + } + } else if (byte =3D=3D BREAKIN_PACKET_BYTE) { + ctx->result =3D RESULT_BREAKIN_BYTE; + ctx->index =3D 0; + } else { + ctx->index =3D 0; + } + break; + + case STATE_PACKET_TYPE: + PTR(ctx->packet.PacketType)[ctx->index] =3D byte; + ++ctx->index; + if (ctx->index =3D=3D sizeof(ctx->packet.PacketType)) { + ctx->packet.PacketType =3D lduw_p(&ctx->packet.PacketType); + if (ctx->packet.PacketType >=3D PACKET_TYPE_MAX) { + ctx->state =3D STATE_LEADER; + ctx->result =3D RESULT_UNKNOWN_PACKET; + } else { + ctx->state =3D STATE_PACKET_BYTE_COUNT; + } + ctx->index =3D 0; + } + break; + + case STATE_PACKET_BYTE_COUNT: + PTR(ctx->packet.ByteCount)[ctx->index] =3D byte; + ++ctx->index; + if (ctx->index =3D=3D sizeof(ctx->packet.ByteCount)) { + ctx->packet.ByteCount =3D lduw_p(&ctx->packet.ByteCount); + ctx->state =3D STATE_PACKET_ID; + ctx->index =3D 0; + } + break; + + case STATE_PACKET_ID: + PTR(ctx->packet.PacketId)[ctx->index] =3D byte; + ++ctx->index; + if (ctx->index =3D=3D sizeof(ctx->packet.PacketId)) { + ctx->packet.PacketId =3D ldl_p(&ctx->packet.PacketId); + ctx->state =3D STATE_PACKET_CHECKSUM; + ctx->index =3D 0; + } + break; + + case STATE_PACKET_CHECKSUM: + PTR(ctx->packet.Checksum)[ctx->index] =3D byte; + ++ctx->index; + if (ctx->index =3D=3D sizeof(ctx->packet.Checksum)) { + ctx->packet.Checksum =3D ldl_p(&ctx->packet.Checksum); + if (ctx->packet.PacketLeader =3D=3D CONTROL_PACKET_LEADER) { + ctx->state =3D STATE_LEADER; + ctx->result =3D RESULT_CONTROL_PACKET; + } else if (ctx->packet.ByteCount > PACKET_MAX_SIZE) { + ctx->state =3D STATE_LEADER; + ctx->result =3D RESULT_ERROR; + } else { + ctx->state =3D STATE_PACKET_DATA; + } + ctx->index =3D 0; + } + break; + + case STATE_PACKET_DATA: + ctx->data.buf[ctx->index] =3D byte; + ++ctx->index; + if (ctx->index =3D=3D ctx->packet.ByteCount) { + ctx->state =3D STATE_TRAILING_BYTE; + ctx->index =3D 0; + } + break; + + case STATE_TRAILING_BYTE: + if (byte =3D=3D PACKET_TRAILING_BYTE) { + ctx->result =3D RESULT_DATA_PACKET; + } else { + ctx->result =3D RESULT_ERROR; + } + ctx->state =3D STATE_LEADER; + break; + } +} + static int windbg_chr_can_receive(void *opaque) { return PACKET_MAX_SIZE; @@ -64,8 +163,18 @@ static int windbg_chr_can_receive(void *opaque) =20 static void windbg_chr_receive(void *opaque, const uint8_t *buf, int size) { + static ParsingContext ctx =3D { + .state =3D STATE_LEADER, + .result =3D RESULT_NONE, + .name =3D "" + }; + if (windbg_state->is_loaded) { - /* T0D0: parse data */ + int i; + for (i =3D 0; i < size; i++) { + windbg_read_byte(&ctx, buf[i]); + windbg_ctx_handler(&ctx); + } } } =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424451767665.5114931395854; Tue, 26 Sep 2017 04:14:11 -0700 (PDT) Received: from localhost ([::1]:46736 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnoH-0002d9-8k for importer@patchew.org; Tue, 26 Sep 2017 07:13:53 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59232) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfz-0003l5-9s for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnfv-0000dT-V3 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:19 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51840) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnfv-0000cI-OC for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:15 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 0CC595400A0; Tue, 26 Sep 2017 14:05:15 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:13 +0300 Message-ID: <150642391353.3900.18119086556871785903.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 12/43] windbg: send data and control packets X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added functions for send data and control packets to windbg. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++= ++ 1 file changed, 56 insertions(+) diff --git a/windbgstub.c b/windbgstub.c index 7bc3585e53..2ebc161e33 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -57,6 +57,62 @@ typedef struct WindbgState { =20 static WindbgState *windbg_state; =20 +static uint32_t compute_checksum(uint8_t *data, uint16_t len) +{ + uint32_t checksum =3D 0; + while (len) { + --len; + checksum +=3D *data++; + } + return checksum; +} + +__attribute__ ((unused)) /* unused yet */ +static void windbg_send_data_packet(uint8_t *data, uint16_t byte_count, + uint16_t type) +{ + uint8_t trailing_byte =3D PACKET_TRAILING_BYTE; + + KD_PACKET packet =3D { + .PacketLeader =3D PACKET_LEADER, + .PacketType =3D type, + .ByteCount =3D byte_count, + .PacketId =3D windbg_state->data_packet_id, + .Checksum =3D compute_checksum(data, byte_count) + }; + + packet.PacketType =3D lduw_p(&packet.PacketType); + packet.ByteCount =3D lduw_p(&packet.ByteCount); + packet.PacketId =3D ldl_p(&packet.PacketId); + packet.Checksum =3D ldl_p(&packet.Checksum); + + qemu_chr_fe_write(&windbg_state->chr, PTR(packet), sizeof(packet)); + qemu_chr_fe_write(&windbg_state->chr, data, byte_count); + qemu_chr_fe_write(&windbg_state->chr, &trailing_byte, + sizeof(trailing_byte)); + + windbg_state->data_packet_id ^=3D 1; +} + +__attribute__ ((unused)) /* unused yet */ +static void windbg_send_control_packet(uint16_t type) +{ + KD_PACKET packet =3D { + .PacketLeader =3D CONTROL_PACKET_LEADER, + .PacketType =3D type, + .ByteCount =3D 0, + .PacketId =3D windbg_state->ctrl_packet_id, + .Checksum =3D 0 + }; + + packet.PacketType =3D lduw_p(&packet.PacketType); + packet.PacketId =3D ldl_p(&packet.PacketId); + + qemu_chr_fe_write(&windbg_state->chr, PTR(packet), sizeof(packet)); + + windbg_state->ctrl_packet_id ^=3D 1; +} + static void windbg_ctx_handler(ParsingContext *ctx) {} =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424460853807.6332849976279; Tue, 26 Sep 2017 04:14:20 -0700 (PDT) Received: from localhost ([::1]:46738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnog-00031x-2T for importer@patchew.org; Tue, 26 Sep 2017 07:14:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59280) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwng3-0003p8-03 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwng1-0000kG-PE for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:22 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51862) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwng1-0000jE-Bz for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:21 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 9A1305400A2; Tue, 26 Sep 2017 14:05:20 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:19 +0300 Message-ID: <150642391910.3900.15534301205964495556.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 13/43] windbg: handler of parsing context X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Implemented handler of parsing context. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/windbgstub.c b/windbgstub.c index 2ebc161e33..d22eea70aa 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -11,6 +11,7 @@ =20 #include "qemu/osdep.h" #include "qapi/error.h" +#include "sysemu/sysemu.h" #include "chardev/char.h" #include "chardev/char-fe.h" #include "exec/windbgstub.h" @@ -94,7 +95,6 @@ static void windbg_send_data_packet(uint8_t *data, uint16= _t byte_count, windbg_state->data_packet_id ^=3D 1; } =20 -__attribute__ ((unused)) /* unused yet */ static void windbg_send_control_packet(uint16_t type) { KD_PACKET packet =3D { @@ -113,9 +113,41 @@ static void windbg_send_control_packet(uint16_t type) windbg_state->ctrl_packet_id ^=3D 1; } =20 -static void windbg_ctx_handler(ParsingContext *ctx) +static void windbg_process_data_packet(ParsingContext *ctx) {} =20 +static void windbg_process_control_packet(ParsingContext *ctx) +{} + +static void windbg_ctx_handler(ParsingContext *ctx) +{ + switch (ctx->result) { + case RESULT_NONE: + break; + + case RESULT_BREAKIN_BYTE: + vm_stop(RUN_STATE_PAUSED); + break; + + case RESULT_CONTROL_PACKET: + windbg_process_control_packet(ctx); + break; + + case RESULT_DATA_PACKET: + windbg_process_data_packet(ctx); + break; + + case RESULT_UNKNOWN_PACKET: + case RESULT_ERROR: + windbg_state->ctrl_packet_id =3D 0; + windbg_send_control_packet(PACKET_TYPE_KD_RESEND); + break; + + default: + break; + } +} + static void windbg_read_byte(ParsingContext *ctx, uint8_t byte) { switch (ctx->state) { From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424598995521.1082588434667; Tue, 26 Sep 2017 04:16:38 -0700 (PDT) Received: from localhost ([::1]:46750 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnqh-00053r-LS for importer@patchew.org; Tue, 26 Sep 2017 07:16:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59334) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwng9-0003zt-3p for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwng7-0000of-JU for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:29 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51876) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwng6-0000oI-VR for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:27 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 45DCB5400A6; Tue, 26 Sep 2017 14:05:26 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:24 +0300 Message-ID: <150642392471.3900.18243723823459989509.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 14/43] windbg: init DBGKD_ANY_WAIT_STATE_CHANGE X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_6 Z_629925259 SPT_0 Added function for init DBGKD_ANY_WAIT_STATE_CHANGE. It is a header of 'sta= te change' packets. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 8 +++++ windbgstub-utils.c | 57 +++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 65 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 63df5e339c..cf2996d8cb 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -62,6 +62,14 @@ _t; \ }) =20 +#if TARGET_LONG_BITS =3D=3D 64 +# define sttul_p(p, v) stq_p(p, v) +# define ldtul_p(p) ldq_p(p) +#else +# define sttul_p(p, v) stl_p(p, v) +# define ldtul_p(p) ldl_p(p) +#endif + typedef struct InitedAddr { target_ulong addr; bool is_init; diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 662096647e..60f6705f7c 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -14,9 +14,13 @@ #ifdef TARGET_X86_64 # define OFFSET_SELF_PCR 0x18 # define OFFSET_VERS 0x108 +# define OFFSET_KPRCB 0x20 +# define OFFSET_KPRCB_CURRTHREAD 0x8 #else # define OFFSET_SELF_PCR 0x1C # define OFFSET_VERS 0x34 +# define OFFSET_KPRCB 0x20 +# define OFFSET_KPRCB_CURRTHREAD 0x4 #endif =20 typedef struct KDData { @@ -26,6 +30,59 @@ typedef struct KDData { =20 static KDData *kd; =20 +static void kd_breakpoint_remove_range(CPUState *cpu, target_ulong base, + target_ulong limit) +{} + +__attribute__ ((unused)) /* unused yet */ +static void kd_init_state_change(CPUState *cpu, + DBGKD_ANY_WAIT_STATE_CHANGE *sc) +{ + CPUArchState *env =3D cpu->env_ptr; + DBGKD_CONTROL_REPORT *cr =3D &sc->ControlReport; + int err =3D 0; + + /* T0D0: HEADER */ + + sc->Processor =3D 0; + + sc->NumberProcessors =3D 0; + CPUState *cpu_tmp; + CPU_FOREACH(cpu_tmp) { + sc->NumberProcessors++; + } + sc->NumberProcessors =3D ldl_p(&sc->NumberProcessors); + + target_ulong KPRCB =3D READ_VMEM(cpu, kd->KPCR.addr + + OFFSET_KPRCB, target_ulong); + sc->Thread =3D READ_VMEM(cpu, KPRCB + OFFSET_KPRCB_CURRTHREAD, + target_ulong); + sc->Thread =3D ldtul_p(&sc->Thread); + sc->ProgramCounter =3D ldtul_p(&env->eip); + + /* T0D0: CONTROL REPORT */ + + cr->Dr6 =3D ldtul_p(&env->dr[6]); + cr->Dr7 =3D ldtul_p(&env->dr[7]); + cr->ReportFlags =3D REPORT_INCLUDES_SEGS | REPORT_STANDARD_CS; + cr->ReportFlags =3D lduw_p(&cr->ReportFlags); + cr->SegCs =3D lduw_p(&env->segs[R_CS].selector); + cr->SegDs =3D lduw_p(&env->segs[R_DS].selector); + cr->SegEs =3D lduw_p(&env->segs[R_ES].selector); + cr->SegFs =3D lduw_p(&env->segs[R_FS].selector); + cr->EFlags =3D ldl_p(&env->eflags); + + err =3D cpu_memory_rw_debug(cpu, sc->ProgramCounter, + PTR(cr->InstructionStream[0]), + DBGKD_MAXSTREAM, 0); + if (!err) { + cr->InstructionCount =3D DBGKD_MAXSTREAM; + cr->InstructionCount =3D lduw_p(&cr->InstructionCount); + kd_breakpoint_remove_range(cpu, sc->ProgramCounter, + sc->ProgramCounter + DBGKD_MAXSTREAM); + } +} + bool windbg_on_load(void) { CPUState *cpu =3D qemu_get_cpu(0); From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150642479245258.68827094408448; Tue, 26 Sep 2017 04:19:52 -0700 (PDT) Received: from localhost ([::1]:46763 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnu3-00080r-Mz for importer@patchew.org; Tue, 26 Sep 2017 07:19:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59360) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngD-00044j-L8 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngC-0000qf-OG for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:33 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51896) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngC-0000qO-G9 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:32 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id CD8675400AC; Tue, 26 Sep 2017 14:05:31 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:30 +0300 Message-ID: <150642393032.3900.4598141276692628379.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 15/43] windbg: sized data buffer X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Defined useful sized data buffer. It contains pointer to data and size of t= his data. Also, defined some macroses for init and free. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index cf2996d8cb..791721d472 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -86,6 +86,21 @@ typedef struct PacketData { uint16_t extra_size; } PacketData; =20 +typedef struct SizedBuf { + uint8_t *data; + size_t size; +} SizedBuf; + +#define SBUF_INIT(buf, mem_ptr, len) do { \ + buf.data =3D mem_ptr; \ + buf.size =3D len; \ +} while (false) +#define SBUF_MALLOC(buf, size) SBUF_INIT(buf, g_malloc0(size), size) +#define SBUF_FREE(buf) do { \ + g_free(buf.data); \ + buf.data =3D NULL; \ + buf.size =3D 0; \ +} while (false) bool windbg_on_load(void); void windbg_on_exit(void); =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424789894118.77693487312558; Tue, 26 Sep 2017 04:19:49 -0700 (PDT) Received: from localhost ([::1]:46761 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwntt-0007ss-3E for importer@patchew.org; Tue, 26 Sep 2017 07:19:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59395) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngJ-00049T-46 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngI-0000t3-9J for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:39 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51926) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngI-0000sk-2K for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:38 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 56FEC5400B2; Tue, 26 Sep 2017 14:05:37 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:36 +0300 Message-ID: <150642393586.3900.6729085808427726742.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 16/43] windbg: generate ExceptionStateChange X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added function for generate ExceptionStateChange packet. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 3 +++ windbgstub-utils.c | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 791721d472..0b859cd6a8 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -101,6 +101,9 @@ typedef struct SizedBuf { buf.data =3D NULL; \ buf.size =3D 0; \ } while (false) + +SizedBuf kd_gen_exception_sc(CPUState *cpu); + bool windbg_on_load(void); void windbg_on_exit(void); =20 diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 60f6705f7c..48d09ff424 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -34,7 +34,6 @@ static void kd_breakpoint_remove_range(CPUState *cpu, tar= get_ulong base, target_ulong limit) {} =20 -__attribute__ ((unused)) /* unused yet */ static void kd_init_state_change(CPUState *cpu, DBGKD_ANY_WAIT_STATE_CHANGE *sc) { @@ -83,6 +82,26 @@ static void kd_init_state_change(CPUState *cpu, } } =20 +SizedBuf kd_gen_exception_sc(CPUState *cpu) +{ + CPUArchState *env =3D cpu->env_ptr; + SizedBuf buf; + SBUF_MALLOC(buf, sizeof(DBGKD_ANY_WAIT_STATE_CHANGE) + sizeof(int)); + + DBGKD_ANY_WAIT_STATE_CHANGE *sc =3D (DBGKD_ANY_WAIT_STATE_CHANGE *) bu= f.data; + kd_init_state_change(cpu, sc); + + sc->NewState =3D DbgKdExceptionStateChange; + sc->NewState =3D ldl_p(&sc->NewState); + + DBGKM_EXCEPTION_RECORD64 *exc =3D &sc->u.Exception.ExceptionRecord; + exc->ExceptionCode =3D 0x80000003; + exc->ExceptionCode =3D ldl_p(&exc->ExceptionCode); + exc->ExceptionAddress =3D ldtul_p(&env->eip); + + return buf; +} + bool windbg_on_load(void) { CPUState *cpu =3D qemu_get_cpu(0); From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424949731264.4124739995739; Tue, 26 Sep 2017 04:22:29 -0700 (PDT) Received: from localhost ([::1]:46779 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnwY-0001tR-0b for importer@patchew.org; Tue, 26 Sep 2017 07:22:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59443) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngT-0004GF-Ji for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngN-0000vn-T1 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:49 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51946) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngN-0000vX-LV for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:43 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id E64555400B4; Tue, 26 Sep 2017 14:05:42 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:41 +0300 Message-ID: <150642394142.3900.12304593439029454545.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 17/43] windbg: generate LoadSymbolsStateChange X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added function for generate LoadSymbolsStateChange packet. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 1 + windbgstub-utils.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 0b859cd6a8..25e8458b4e 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -103,6 +103,7 @@ typedef struct SizedBuf { } while (false) =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); +SizedBuf kd_gen_load_symbols_sc(CPUState *cpu); =20 bool windbg_on_load(void); void windbg_on_exit(void); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 48d09ff424..7d93f62d16 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -102,6 +102,22 @@ SizedBuf kd_gen_exception_sc(CPUState *cpu) return buf; } =20 +SizedBuf kd_gen_load_symbols_sc(CPUState *cpu) +{ + SizedBuf buf; + SBUF_MALLOC(buf, sizeof(DBGKD_ANY_WAIT_STATE_CHANGE)); + + DBGKD_ANY_WAIT_STATE_CHANGE *sc =3D (DBGKD_ANY_WAIT_STATE_CHANGE *) bu= f.data; + kd_init_state_change(cpu, sc); + + sc->NewState =3D DbgKdLoadSymbolsStateChange; + sc->NewState =3D ldl_p(&sc->NewState); + + sc->u.LoadSymbols.PathNameLength =3D 0; + + return buf; +} + bool windbg_on_load(void) { CPUState *cpu =3D qemu_get_cpu(0); From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424766030778.1780677903278; Tue, 26 Sep 2017 04:19:26 -0700 (PDT) Received: from localhost ([::1]:46759 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwntW-0007ad-5q for importer@patchew.org; Tue, 26 Sep 2017 07:19:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59458) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngX-0004JY-DU for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngT-0000y6-Ho for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:53 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51972) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngT-0000xk-9W for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:49 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 813945400B8; Tue, 26 Sep 2017 14:05:48 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:47 +0300 Message-ID: <150642394703.3900.4773733429269296011.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 18/43] windbg: windbg_vm_stop X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added function for stop vm. Also, ExceptionStateChange data is generated an= d sent here. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/windbgstub.c b/windbgstub.c index d22eea70aa..3a13d22349 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -68,7 +68,6 @@ static uint32_t compute_checksum(uint8_t *data, uint16_t = len) return checksum; } =20 -__attribute__ ((unused)) /* unused yet */ static void windbg_send_data_packet(uint8_t *data, uint16_t byte_count, uint16_t type) { @@ -113,6 +112,16 @@ static void windbg_send_control_packet(uint16_t type) windbg_state->ctrl_packet_id ^=3D 1; } =20 +static void windbg_vm_stop(void) +{ + CPUState *cpu =3D qemu_get_cpu(0); + vm_stop(RUN_STATE_PAUSED); + + SizedBuf buf =3D kd_gen_exception_sc(cpu); + windbg_send_data_packet(buf.data, buf.size, PACKET_TYPE_KD_STATE_CHANG= E64); + SBUF_FREE(buf); +} + static void windbg_process_data_packet(ParsingContext *ctx) {} =20 @@ -126,7 +135,7 @@ static void windbg_ctx_handler(ParsingContext *ctx) break; =20 case RESULT_BREAKIN_BYTE: - vm_stop(RUN_STATE_PAUSED); + windbg_vm_stop(); break; =20 case RESULT_CONTROL_PACKET: From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424956724816.907832610843; Tue, 26 Sep 2017 04:22:36 -0700 (PDT) Received: from localhost ([::1]:46780 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnwg-00021P-Pp for importer@patchew.org; Tue, 26 Sep 2017 07:22:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59492) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnga-0004Mi-Jf for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngY-00010F-Tj for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:56 -0400 Received: from mail.ispras.ru ([83.149.199.45]:51984) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngY-000104-Mt for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:05:54 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 0E1505400BC; Tue, 26 Sep 2017 14:05:54 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:52 +0300 Message-ID: <150642395256.3900.7797961982959292389.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 19/43] windbg: implemented windbg_process_control_packet X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/windbgstub.c b/windbgstub.c index 3a13d22349..b8053102dd 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -126,7 +126,31 @@ static void windbg_process_data_packet(ParsingContext = *ctx) {} =20 static void windbg_process_control_packet(ParsingContext *ctx) -{} +{ + switch (ctx->packet.PacketType) { + case PACKET_TYPE_KD_ACKNOWLEDGE: + break; + + case PACKET_TYPE_KD_RESET: + { + SizedBuf buf =3D kd_gen_load_symbols_sc(qemu_get_cpu(0)); + + windbg_send_data_packet(buf.data, buf.size, + PACKET_TYPE_KD_STATE_CHANGE64); + windbg_send_control_packet(ctx->packet.PacketType); + windbg_state->ctrl_packet_id =3D INITIAL_PACKET_ID; + SBUF_FREE(buf); + break; + } + default: + WINDBG_ERROR("Catched unsupported control packet 0x%x", + ctx->packet.PacketType); + + windbg_state->ctrl_packet_id =3D 0; + windbg_send_control_packet(PACKET_TYPE_KD_RESEND); + break; + } +} =20 static void windbg_ctx_handler(ParsingContext *ctx) { From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425120799930.2051428584066; Tue, 26 Sep 2017 04:25:20 -0700 (PDT) Received: from localhost ([::1]:46789 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnzM-0004GR-1s for importer@patchew.org; Tue, 26 Sep 2017 07:25:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59535) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngi-0004US-Bv for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnge-00013b-Hm for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:04 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52010) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnge-00013F-AL for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:00 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 977965400C0; Tue, 26 Sep 2017 14:05:59 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:05:58 +0300 Message-ID: <150642395807.3900.7896904473365407621.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 20/43] windbg: implemented windbg_process_data_packet X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/windbgstub.c b/windbgstub.c index b8053102dd..b9993c90d4 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -122,9 +122,27 @@ static void windbg_vm_stop(void) SBUF_FREE(buf); } =20 -static void windbg_process_data_packet(ParsingContext *ctx) +static void windbg_process_manipulate_packet(ParsingContext *ctx) {} =20 +static void windbg_process_data_packet(ParsingContext *ctx) +{ + switch (ctx->packet.PacketType) { + case PACKET_TYPE_KD_STATE_MANIPULATE: + windbg_send_control_packet(PACKET_TYPE_KD_ACKNOWLEDGE); + windbg_process_manipulate_packet(ctx); + break; + + default: + WINDBG_ERROR("Catched unsupported data packet 0x%x", + ctx->packet.PacketType); + + windbg_state->ctrl_packet_id =3D 0; + windbg_send_control_packet(PACKET_TYPE_KD_RESEND); + break; + } +} + static void windbg_process_control_packet(ParsingContext *ctx) { switch (ctx->packet.PacketType) { From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425115556745.4480881837342; Tue, 26 Sep 2017 04:25:15 -0700 (PDT) Received: from localhost ([::1]:46788 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnz9-00048J-Of for importer@patchew.org; Tue, 26 Sep 2017 07:25:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59567) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngo-0004ZU-2o for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngk-00015f-2d for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:10 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52040) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngj-00015V-RJ for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:06 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 2A9735400C9; Tue, 26 Sep 2017 14:06:05 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:03 +0300 Message-ID: <150642396368.3900.10377280585440026381.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 21/43] windbg: implemented windbg_process_manipulate_packet X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 ++ windbgstub-utils.c | 10 ++++++++++ windbgstub.c | 21 ++++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 25e8458b4e..ca21af7c91 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -102,6 +102,8 @@ typedef struct SizedBuf { buf.size =3D 0; \ } while (false) =20 +void kd_api_unsupported(CPUState *cpu, PacketData *pd); + SizedBuf kd_gen_exception_sc(CPUState *cpu); SizedBuf kd_gen_load_symbols_sc(CPUState *cpu); =20 diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 7d93f62d16..e7b381f829 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -30,6 +30,16 @@ typedef struct KDData { =20 static KDData *kd; =20 +void kd_api_unsupported(CPUState *cpu, PacketData *pd) +{ + WINDBG_ERROR("Catched unimplemented api %s", + KD_API_NAME(pd->m64.ApiNumber)); + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + pd->extra_size =3D 0; + + exit(1); +} + static void kd_breakpoint_remove_range(CPUState *cpu, target_ulong base, target_ulong limit) {} diff --git a/windbgstub.c b/windbgstub.c index b9993c90d4..50b4ef0dea 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -123,7 +123,26 @@ static void windbg_vm_stop(void) } =20 static void windbg_process_manipulate_packet(ParsingContext *ctx) -{} +{ + CPUState *cpu; + + ctx->data.extra_size =3D ctx->packet.ByteCount - M64_SIZE; + ctx->data.m64.ReturnStatus =3D STATUS_SUCCESS; + + cpu =3D qemu_get_cpu(ctx->data.m64.Processor); + + switch (ctx->data.m64.ApiNumber) { + + default: + kd_api_unsupported(cpu, &ctx->data); + break; + } + + ctx->data.m64.ReturnStatus =3D ldl_p(&ctx->data.m64.ReturnStatus); + + windbg_send_data_packet(ctx->data.buf, ctx->data.extra_size + M64_SIZE, + ctx->packet.PacketType); +} =20 static void windbg_process_data_packet(ParsingContext *ctx) { From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424935978792.167350438182; Tue, 26 Sep 2017 04:22:15 -0700 (PDT) Received: from localhost ([::1]:46776 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnwC-0001Ws-HN for importer@patchew.org; Tue, 26 Sep 2017 07:22:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59590) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngr-0004c7-8C for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngp-00017s-Ta for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:13 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52056) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngp-00017X-Gu for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:11 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id B8A355400CB; Tue, 26 Sep 2017 14:06:10 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:09 +0300 Message-ID: <150642396922.3900.13282234011521338171.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 22/43] windbg: implemented kd_api_read_virtual_memory and kd_api_read_virtual_memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 ++ windbgstub-utils.c | 47 +++++++++++++++++++++++++++++++++++= ++++ windbgstub.c | 8 +++++++ 3 files changed, 57 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index ca21af7c91..c1ff1cec57 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -102,6 +102,8 @@ typedef struct SizedBuf { buf.size =3D 0; \ } while (false) =20 +void kd_api_read_virtual_memory(CPUState *cpu, PacketData *pd); +void kd_api_write_virtual_memory(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index e7b381f829..1bde60a1e9 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -30,6 +30,53 @@ typedef struct KDData { =20 static KDData *kd; =20 +void kd_api_read_virtual_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; + uint32_t len; + target_ulong addr; + int err; + + len =3D MIN(ldl_p(&mem->TransferCount), PACKET_MAX_SIZE - M64_SIZE); + addr =3D ldtul_p(&mem->TargetBaseAddress); + err =3D cpu_memory_rw_debug(cpu, addr, pd->extra, len, 0); + + if (!err) { + pd->extra_size =3D len; + mem->ActualBytesRead =3D ldl_p(&len); + } else { + pd->extra_size =3D 0; + mem->ActualBytesRead =3D 0; + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + + WINDBG_DEBUG("read_virtual_memory: No physical page mapped: " FMT_= ADDR, + (target_ulong) mem->TargetBaseAddress); + } +} + +void kd_api_write_virtual_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_WRITE_MEMORY64 *mem =3D &pd->m64.u.WriteMemory; + uint32_t len; + target_ulong addr; + int err; + + len =3D MIN(ldl_p(&mem->TransferCount), pd->extra_size); + addr =3D ldtul_p(&mem->TargetBaseAddress); + err =3D cpu_memory_rw_debug(cpu, addr, pd->extra, len, 1); + + pd->extra_size =3D 0; + if (!err) { + mem->ActualBytesWritten =3D ldl_p(&len); + } else { + mem->ActualBytesWritten =3D 0; + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + + WINDBG_DEBUG("read_write_memory: No physical page mapped: " FMT_AD= DR, + (target_ulong) mem->TargetBaseAddress); + } +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 50b4ef0dea..327fe83f70 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -133,6 +133,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) =20 switch (ctx->data.m64.ApiNumber) { =20 + case DbgKdReadVirtualMemoryApi: + kd_api_read_virtual_memory(cpu, &ctx->data); + break; + + case DbgKdWriteVirtualMemoryApi: + kd_api_write_virtual_memory(cpu, &ctx->data); + break; + default: kd_api_unsupported(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425411318673.1645141716358; Tue, 26 Sep 2017 04:30:11 -0700 (PDT) Received: from localhost ([::1]:46809 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo3x-0000Jk-9w for importer@patchew.org; Tue, 26 Sep 2017 07:30:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59640) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngx-0004fJ-1R for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwngv-0001Ao-I2 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:19 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52072) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwngv-0001AO-5C for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:17 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 6E9135400CF; Tue, 26 Sep 2017 14:06:16 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:15 +0300 Message-ID: <150642397488.3900.828583173542559010.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 23/43] windbg: kernel's structures X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Defined Windows kernel's structures (CPU_CONTEXT and CPU_KSPECIAL_REGISTERS= ) for i386 and x64_86. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 247 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 247 insertions(+) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 1bde60a1e9..3c81ecefb8 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -23,6 +23,253 @@ # define OFFSET_KPRCB_CURRTHREAD 0x4 #endif =20 +/* + * Next code copied from winnt.h + */ +#ifdef TARGET_X86_64 + +#define CPU_CONTEXT_AMD64 0x100000 + +#define CPU_CONTEXT_CONTROL (CPU_CONTEXT_AMD64 | 0x1) +#define CPU_CONTEXT_INTEGER (CPU_CONTEXT_AMD64 | 0x2) +#define CPU_CONTEXT_SEGMENTS (CPU_CONTEXT_AMD64 | 0x4) +#define CPU_CONTEXT_FLOATING_POINT (CPU_CONTEXT_AMD64 | 0x8) +#define CPU_CONTEXT_DEBUG_REGISTERS (CPU_CONTEXT_AMD64 | 0x10) + +#define CPU_CONTEXT_FULL \ + (CPU_CONTEXT_CONTROL | CPU_CONTEXT_INTEGER | CPU_CONTEXT_FLOATING_POIN= T) +#define CPU_CONTEXT_ALL \ + (CPU_CONTEXT_FULL | CPU_CONTEXT_SEGMENTS | CPU_CONTEXT_DEBUG_REGISTERS) + +typedef struct _CPU_DESCRIPTOR { + uint16_t Pad[3]; + uint16_t Limit; + uint64_t Base; +} CPU_DESCRIPTOR, *PCPU_DESCRIPTOR; + +typedef struct _CPU_KSPECIAL_REGISTERS { + uint64_t Cr0; + uint64_t Cr2; + uint64_t Cr3; + uint64_t Cr4; + uint64_t KernelDr0; + uint64_t KernelDr1; + uint64_t KernelDr2; + uint64_t KernelDr3; + uint64_t KernelDr6; + uint64_t KernelDr7; + CPU_DESCRIPTOR Gdtr; + CPU_DESCRIPTOR Idtr; + uint16_t Tr; + uint16_t Ldtr; + uint32_t MxCsr; + uint64_t DebugControl; + uint64_t LastBranchToRip; + uint64_t LastBranchFromRip; + uint64_t LastExceptionToRip; + uint64_t LastExceptionFromRip; + uint64_t Cr8; + uint64_t MsrGsBase; + uint64_t MsrGsSwap; + uint64_t MsrStar; + uint64_t MsrLStar; + uint64_t MsrCStar; + uint64_t MsrSyscallMask; + uint64_t Xcr0; +} CPU_KSPECIAL_REGISTERS, *PCPU_KSPECIAL_REGISTERS; + +#pragma pack(push, 2) +typedef struct _CPU_M128A { + uint64_t Low; + int64_t High; +} CPU_M128A, *PCPU_M128A; +#pragma pack(pop) + +typedef struct _CPU_XMM_SAVE_AREA32 { + uint16_t ControlWord; + uint16_t StatusWord; + uint8_t TagWord; + uint8_t Reserved1; + uint16_t ErrorOpcode; + uint32_t ErrorOffset; + uint16_t ErrorSelector; + uint16_t Reserved2; + uint32_t DataOffset; + uint16_t DataSelector; + uint16_t Reserved3; + uint32_t MxCsr; + uint32_t MxCsr_Mask; + CPU_M128A FloatRegisters[8]; + CPU_M128A XmmRegisters[16]; + uint8_t Reserved4[96]; +} CPU_XMM_SAVE_AREA32, *PCPU_XMM_SAVE_AREA32; + +#pragma pack(push, 2) +typedef struct _CPU_CONTEXT { /* sizeof =3D 1232 */ + uint64_t P1Home; + uint64_t P2Home; + uint64_t P3Home; + uint64_t P4Home; + uint64_t P5Home; + uint64_t P6Home; + uint32_t ContextFlags; + uint32_t MxCsr; + uint16_t SegCs; + uint16_t SegDs; + uint16_t SegEs; + uint16_t SegFs; + uint16_t SegGs; + uint16_t SegSs; + uint32_t EFlags; + uint64_t Dr0; + uint64_t Dr1; + uint64_t Dr2; + uint64_t Dr3; + uint64_t Dr6; + uint64_t Dr7; + uint64_t Rax; + uint64_t Rcx; + uint64_t Rdx; + uint64_t Rbx; + uint64_t Rsp; + uint64_t Rbp; + uint64_t Rsi; + uint64_t Rdi; + uint64_t R8; + uint64_t R9; + uint64_t R10; + uint64_t R11; + uint64_t R12; + uint64_t R13; + uint64_t R14; + uint64_t R15; + uint64_t Rip; + union { + CPU_XMM_SAVE_AREA32 FltSave; + CPU_XMM_SAVE_AREA32 FloatSave; + struct { + CPU_M128A Header[2]; + CPU_M128A Legacy[8]; + CPU_M128A Xmm0; + CPU_M128A Xmm1; + CPU_M128A Xmm2; + CPU_M128A Xmm3; + CPU_M128A Xmm4; + CPU_M128A Xmm5; + CPU_M128A Xmm6; + CPU_M128A Xmm7; + CPU_M128A Xmm8; + CPU_M128A Xmm9; + CPU_M128A Xmm10; + CPU_M128A Xmm11; + CPU_M128A Xmm12; + CPU_M128A Xmm13; + CPU_M128A Xmm14; + CPU_M128A Xmm15; + }; + }; + CPU_M128A VectorRegister[26]; + uint64_t VectorControl; + uint64_t DebugControl; + uint64_t LastBranchToRip; + uint64_t LastBranchFromRip; + uint64_t LastExceptionToRip; + uint64_t LastExceptionFromRip; +} CPU_CONTEXT, *PCPU_CONTEXT; +#pragma pack(pop) + +#else + +#define SIZE_OF_X86_REG 80 +#define MAX_SUP_EXT 512 + +#define CPU_CONTEXT_i386 0x10000 + +#define CPU_CONTEXT_CONTROL (CPU_CONTEXT_i386 | 0x1) +#define CPU_CONTEXT_INTEGER (CPU_CONTEXT_i386 | 0x2) +#define CPU_CONTEXT_SEGMENTS (CPU_CONTEXT_i386 | 0x4) +#define CPU_CONTEXT_FLOATING_POINT (CPU_CONTEXT_i386 | 0x8) +#define CPU_CONTEXT_DEBUG_REGISTERS (CPU_CONTEXT_i386 | 0x10) +#define CPU_CONTEXT_EXTENDED_REGISTERS (CPU_CONTEXT_i386 | 0x20) + +#define CPU_CONTEXT_FULL \ + (CPU_CONTEXT_CONTROL | CPU_CONTEXT_INTEGER | CPU_CONTEXT_SEGMENTS) +#define CPU_CONTEXT_ALL \ + (CPU_CONTEXT_FULL | CPU_CONTEXT_FLOATING_POINT | \ + CPU_CONTEXT_DEBUG_REGISTERS | CPU_CONTEXT_EXTENDED_REGISTERS) + +typedef struct _CPU_DESCRIPTOR { + uint16_t Pad; + uint16_t Limit; + uint32_t Base; +} CPU_DESCRIPTOR, *PCPU_DESCRIPTOR; + +typedef struct _CPU_KSPECIAL_REGISTERS { + uint32_t Cr0; + uint32_t Cr2; + uint32_t Cr3; + uint32_t Cr4; + uint32_t KernelDr0; + uint32_t KernelDr1; + uint32_t KernelDr2; + uint32_t KernelDr3; + uint32_t KernelDr6; + uint32_t KernelDr7; + CPU_DESCRIPTOR Gdtr; + CPU_DESCRIPTOR Idtr; + uint16_t Tr; + uint16_t Ldtr; + uint32_t Reserved[6]; +} CPU_KSPECIAL_REGISTERS, *PCPU_KSPECIAL_REGISTERS; + +typedef struct _CPU_FLOATING_SAVE_AREA { + uint32_t ControlWord; + uint32_t StatusWord; + uint32_t TagWord; + uint32_t ErrorOffset; + uint32_t ErrorSelector; + uint32_t DataOffset; + uint32_t DataSelector; + uint8_t RegisterArea[SIZE_OF_X86_REG]; + uint32_t Cr0NpxState; +} CPU_FLOATING_SAVE_AREA, *PCPU_FLOATING_SAVE_AREA; + +typedef struct _CPU_CONTEXT { /* sizeof =3D 716 */ + uint32_t ContextFlags; + uint32_t Dr0; + uint32_t Dr1; + uint32_t Dr2; + uint32_t Dr3; + uint32_t Dr6; + uint32_t Dr7; + CPU_FLOATING_SAVE_AREA FloatSave; + uint32_t SegGs; + uint32_t SegFs; + uint32_t SegEs; + uint32_t SegDs; + + uint32_t Edi; + uint32_t Esi; + uint32_t Ebx; + uint32_t Edx; + uint32_t Ecx; + uint32_t Eax; + uint32_t Ebp; + uint32_t Eip; + uint32_t SegCs; + uint32_t EFlags; + uint32_t Esp; + uint32_t SegSs; + uint8_t ExtendedRegisters[MAX_SUP_EXT]; +} CPU_CONTEXT, *PCPU_CONTEXT; + +typedef struct _CPU_KPROCESSOR_STATE { + CPU_CONTEXT ContextFrame; + CPU_KSPECIAL_REGISTERS SpecialRegisters; +} CPU_KPROCESSOR_STATE, *PCPU_KPROCESSOR_STATE; + +#endif + typedef struct KDData { InitedAddr KPCR; InitedAddr version; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424128794948.4759690082686; Tue, 26 Sep 2017 04:08:48 -0700 (PDT) Received: from localhost ([::1]:46703 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnjC-0006Lu-TZ for importer@patchew.org; Tue, 26 Sep 2017 07:08:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59682) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnh4-0004mt-2s for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnh0-0001DJ-UT for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:26 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52094) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnh0-0001D4-Mm for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:22 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 0BC2D5400D3; Tue, 26 Sep 2017 14:06:22 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:20 +0300 Message-ID: <150642398052.3900.12516273863992631402.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 24/43] windbg: implemented kd_api_get_context and kd_api_set_context X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 ++ windbgstub-utils.c | 37 +++++++++++++++++++++++++++++++++++= ++ windbgstub.c | 8 ++++++++ 3 files changed, 47 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index c1ff1cec57..0b683f95ac 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -104,6 +104,8 @@ typedef struct SizedBuf { =20 void kd_api_read_virtual_memory(CPUState *cpu, PacketData *pd); void kd_api_write_virtual_memory(CPUState *cpu, PacketData *pd); +void kd_api_get_context(CPUState *cpu, PacketData *pd); +void kd_api_set_context(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 3c81ecefb8..b15d84c8d0 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -277,6 +277,18 @@ typedef struct KDData { =20 static KDData *kd; =20 +static int windbg_read_context(CPUState *cpu, uint8_t *buf, int len, + int offset) +{ + return 0; +} + +static int windbg_write_context(CPUState *cpu, uint8_t *buf, int len, + int offset) +{ + return 0; +} + void kd_api_read_virtual_memory(CPUState *cpu, PacketData *pd) { DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; @@ -324,6 +336,31 @@ void kd_api_write_virtual_memory(CPUState *cpu, Packet= Data *pd) } } =20 +void kd_api_get_context(CPUState *cpu, PacketData *pd) +{ + int err; + + pd->extra_size =3D sizeof(CPU_CONTEXT); + err =3D windbg_read_context(cpu, pd->extra, pd->extra_size, 0); + + if (err) { + pd->extra_size =3D 0; + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + } +} + +void kd_api_set_context(CPUState *cpu, PacketData *pd) +{ + int err; + + err =3D windbg_write_context(cpu, pd->extra, pd->extra_size, 0); + pd->extra_size =3D 0; + + if (err) { + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + } +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 327fe83f70..23930d195e 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -141,6 +141,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_write_virtual_memory(cpu, &ctx->data); break; =20 + case DbgKdGetContextApi: + kd_api_get_context(cpu, &ctx->data); + break; + + case DbgKdSetContextApi: + kd_api_set_context(cpu, &ctx->data); + break; + default: kd_api_unsupported(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424304307913.8893600277812; Tue, 26 Sep 2017 04:11:44 -0700 (PDT) Received: from localhost ([::1]:46719 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnlv-0000Li-AD for importer@patchew.org; Tue, 26 Sep 2017 07:11:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59714) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnh7-0004qe-Rc for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnh6-0001Ff-Mw for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:29 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52116) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnh6-0001FR-Au for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:28 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 99DF85400D7; Tue, 26 Sep 2017 14:06:27 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:26 +0300 Message-ID: <150642398608.3900.11026705123393046138.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 25/43] windbg: implemented kd_api_read_control_space and kd_api_write_control_space X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 + windbgstub-utils.c | 81 +++++++++++++++++++++++++++++++++++= ++++ windbgstub.c | 8 ++++ 3 files changed, 91 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 0b683f95ac..e368b2e85d 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -106,6 +106,8 @@ void kd_api_read_virtual_memory(CPUState *cpu, PacketDa= ta *pd); void kd_api_write_virtual_memory(CPUState *cpu, PacketData *pd); void kd_api_get_context(CPUState *cpu, PacketData *pd); void kd_api_set_context(CPUState *cpu, PacketData *pd); +void kd_api_read_control_space(CPUState *cpu, PacketData *pd); +void kd_api_write_control_space(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index b15d84c8d0..c3ae2ddf5b 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -289,6 +289,18 @@ static int windbg_write_context(CPUState *cpu, uint8_t= *buf, int len, return 0; } =20 +static int windbg_read_ks_regs(CPUState *cpu, uint8_t *buf, int len, + int offset) +{ + return 0; +} + +static int windbg_write_ks_regs(CPUState *cpu, uint8_t *buf, int len, + int offset) +{ + return 0; +} + void kd_api_read_virtual_memory(CPUState *cpu, PacketData *pd) { DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; @@ -361,6 +373,75 @@ void kd_api_set_context(CPUState *cpu, PacketData *pd) } } =20 +void kd_api_read_control_space(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; + uint32_t len; + target_ulong addr; + int err =3D -1; + + len =3D MIN(ldl_p(&mem->TransferCount), PACKET_MAX_SIZE - M64_SIZE); + addr =3D ldtul_p(&mem->TargetBaseAddress); + + if (addr < sizeof(CPU_KPROCESSOR_STATE)) { + len =3D MIN(len, sizeof(CPU_KPROCESSOR_STATE) - addr); + + uint32_t from_context =3D MAX(0, (int) (sizeof(CPU_CONTEXT) - addr= )); + uint32_t from_ks_regs =3D len - from_context; + + if (from_context > 0) { + err =3D windbg_read_context(cpu, pd->extra, from_context, addr= ); + } + if (from_ks_regs > 0) { + err =3D windbg_read_ks_regs(cpu, pd->extra + from_context, + from_ks_regs, addr - + sizeof(CPU_CONTEXT) + from_context); + } + } + + if (!err) { + pd->extra_size =3D len; + mem->ActualBytesRead =3D ldl_p(&len); + } else { + pd->extra_size =3D mem->ActualBytesRead =3D 0; + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + } +} + +void kd_api_write_control_space(CPUState *cpu, PacketData *pd) +{ + DBGKD_WRITE_MEMORY64 *mem =3D &pd->m64.u.WriteMemory; + uint32_t len; + target_ulong addr; + int err =3D -1; + + len =3D MIN(ldl_p(&mem->TransferCount), pd->extra_size); + addr =3D ldtul_p(&mem->TargetBaseAddress); + + if (addr < sizeof(CPU_KPROCESSOR_STATE)) { + len =3D MIN(len, sizeof(CPU_KPROCESSOR_STATE) - addr); + + uint32_t to_context =3D MAX(0, (int) (sizeof(CPU_CONTEXT) - addr)); + uint32_t to_ks_regs =3D len - to_context; + + if (to_context > 0) { + err =3D windbg_write_context(cpu, pd->extra, to_context, addr); + } + if (to_ks_regs > 0) { + err =3D windbg_write_ks_regs(cpu, pd->extra + to_context, to_k= s_regs, + addr - sizeof(CPU_CONTEXT) + to_con= text); + } + } + + pd->extra_size =3D 0; + if (!err) { + mem->ActualBytesWritten =3D ldl_p(&len); + } else { + mem->ActualBytesWritten =3D 0; + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + } +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 23930d195e..24d0031167 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -149,6 +149,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_set_context(cpu, &ctx->data); break; =20 + case DbgKdReadControlSpaceApi: + kd_api_read_control_space(cpu, &ctx->data); + break; + + case DbgKdWriteControlSpaceApi: + kd_api_write_control_space(cpu, &ctx->data); + break; + default: kd_api_unsupported(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425090725618.121243816726; Tue, 26 Sep 2017 04:24:50 -0700 (PDT) Received: from localhost ([::1]:46786 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnyp-0003nw-W1 for importer@patchew.org; Tue, 26 Sep 2017 07:24:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59749) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhG-00052b-EZ for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhC-0001He-C6 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:38 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52136) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhC-0001HS-08 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:34 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 3E6805400D9; Tue, 26 Sep 2017 14:06:33 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:31 +0300 Message-ID: <150642399172.3900.299369975046339119.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 26/43] windbg: implemented windbg_read_context X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index c3ae2ddf5b..23bf4be9f0 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -280,7 +280,95 @@ static KDData *kd; static int windbg_read_context(CPUState *cpu, uint8_t *buf, int len, int offset) { - return 0; + const bool new_mem =3D (len !=3D sizeof(CPU_CONTEXT) || offset !=3D 0); + CPUArchState *env =3D cpu->env_ptr; + CPU_CONTEXT *cc; + int err =3D 0; + + if (new_mem) { + cc =3D g_new(CPU_CONTEXT, 1); + } else { + cc =3D (CPU_CONTEXT *) buf; + } + + memset(cc, 0, len); + + cc->ContextFlags =3D CPU_CONTEXT_ALL; + + if (cc->ContextFlags & CPU_CONTEXT_SEGMENTS) { + cc->SegCs =3D lduw_p(&env->segs[R_CS].selector); + cc->SegDs =3D lduw_p(&env->segs[R_DS].selector); + cc->SegEs =3D lduw_p(&env->segs[R_ES].selector); + cc->SegFs =3D lduw_p(&env->segs[R_FS].selector); + cc->SegGs =3D lduw_p(&env->segs[R_GS].selector); + cc->SegSs =3D lduw_p(&env->segs[R_SS].selector); + } + + if (cc->ContextFlags & CPU_CONTEXT_DEBUG_REGISTERS) { + cc->Dr0 =3D ldtul_p(&env->dr[0]); + cc->Dr1 =3D ldtul_p(&env->dr[1]); + cc->Dr2 =3D ldtul_p(&env->dr[2]); + cc->Dr3 =3D ldtul_p(&env->dr[3]); + cc->Dr6 =3D ldtul_p(&env->dr[6]); + cc->Dr7 =3D ldtul_p(&env->dr[7]); + } + + if (cc->ContextFlags & CPU_CONTEXT_INTEGER) { + cc->Edi =3D ldl_p(&env->regs[R_EDI]); + cc->Esi =3D ldl_p(&env->regs[R_ESI]); + cc->Ebx =3D ldl_p(&env->regs[R_EBX]); + cc->Edx =3D ldl_p(&env->regs[R_EDX]); + cc->Ecx =3D ldl_p(&env->regs[R_ECX]); + cc->Eax =3D ldl_p(&env->regs[R_EAX]); + cc->Ebp =3D ldl_p(&env->regs[R_EBP]); + cc->Esp =3D ldl_p(&env->regs[R_ESP]); + + cc->Eip =3D ldl_p(&env->eip); + cc->EFlags =3D ldl_p(&env->eflags); + } + + if (cc->ContextFlags & CPU_CONTEXT_FLOATING_POINT) { + uint32_t swd =3D 0, twd =3D 0; + swd =3D env->fpus & ~(7 << 11); + swd |=3D (env->fpstt & 7) << 11; + int i; + for (i =3D 0; i < 8; ++i) { + twd |=3D (!env->fptags[i]) << i; + } + + cc->FloatSave.ControlWord =3D ldl_p(&env->fpuc); + cc->FloatSave.StatusWord =3D ldl_p(&swd); + cc->FloatSave.TagWord =3D ldl_p(&twd); + cc->FloatSave.ErrorOffset =3D ldl_p(PTR(env->fpip)); + cc->FloatSave.ErrorSelector =3D ldl_p(PTR(env->fpip) + 32); + cc->FloatSave.DataOffset =3D ldl_p(PTR(env->fpdp)); + cc->FloatSave.DataSelector =3D ldl_p(PTR(env->fpdp) + 32); + cc->FloatSave.Cr0NpxState =3D ldl_p(&env->xcr0); + + for (i =3D 0; i < 8; ++i) { + memcpy(PTR(cc->FloatSave.RegisterArea[i * 10]), + PTR(env->fpregs[i]), 10); + } + } + + if (cc->ContextFlags & CPU_CONTEXT_EXTENDED_REGISTERS) { + uint8_t *ptr =3D cc->ExtendedRegisters + 160; + int i; + for (i =3D 0; i < 8; ++i, ptr +=3D 16) { + stq_p(ptr, env->xmm_regs[i].ZMM_Q(0)); + stq_p(ptr + 8, env->xmm_regs[i].ZMM_Q(1)); + } + + stl_p(cc->ExtendedRegisters + 24, env->mxcsr); + } + + cc->ContextFlags =3D ldl_p(&cc->ContextFlags); + + if (new_mem) { + memcpy(buf, (uint8_t *) cc + offset, len); + g_free(cc); + } + return err; } =20 static int windbg_write_context(CPUState *cpu, uint8_t *buf, int len, From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424770457290.3452715616004; Tue, 26 Sep 2017 04:19:30 -0700 (PDT) Received: from localhost ([::1]:46760 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwntc-0007gc-In for importer@patchew.org; Tue, 26 Sep 2017 07:19:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59782) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhM-00058p-TA for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhI-0001Jf-Gb for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:44 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52166) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhI-0001JK-44 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:40 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id EAB2D5400DB; Tue, 26 Sep 2017 14:06:38 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:37 +0300 Message-ID: <150642399737.3900.1716001759435650556.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 27/43] windbg: implemented windbg_write_context X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 207 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 207 insertions(+) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 23bf4be9f0..73ff98dfbc 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -277,6 +277,12 @@ typedef struct KDData { =20 static KDData *kd; =20 +static void windbg_set_dr(CPUState *cpu, int index, target_ulong value) +{} + +static void windbg_set_sr(CPUState *cpu, int sr, uint16_t selector) +{} + static int windbg_read_context(CPUState *cpu, uint8_t *buf, int len, int offset) { @@ -374,7 +380,208 @@ static int windbg_read_context(CPUState *cpu, uint8_t= *buf, int len, static int windbg_write_context(CPUState *cpu, uint8_t *buf, int len, int offset) { + #ifdef TARGET_X86_64 /*Unimplemented yet */ + return 0; + #else + + CPUArchState *env =3D cpu->env_ptr; + int mem_size, i, tmp; + uint8_t *mem_ptr =3D buf; + + while (len > 0 && offset < sizeof(CPU_CONTEXT)) { + mem_size =3D 1; + switch (offset) { + + case offsetof(CPU_CONTEXT, ContextFlags): + mem_size =3D sizeof_field(CPU_CONTEXT, ContextFlags); + break; + + case offsetof(CPU_CONTEXT, Dr0): + mem_size =3D sizeof_field(CPU_CONTEXT, Dr0); + windbg_set_dr(cpu, 0, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, Dr1): + mem_size =3D sizeof_field(CPU_CONTEXT, Dr1); + windbg_set_dr(cpu, 1, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, Dr2): + mem_size =3D sizeof_field(CPU_CONTEXT, Dr2); + windbg_set_dr(cpu, 2, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, Dr3): + mem_size =3D sizeof_field(CPU_CONTEXT, Dr3); + windbg_set_dr(cpu, 3, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, Dr6): + mem_size =3D sizeof_field(CPU_CONTEXT, Dr6); + windbg_set_dr(cpu, 6, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, Dr7): + mem_size =3D sizeof_field(CPU_CONTEXT, Dr7); + windbg_set_dr(cpu, 7, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, FloatSave.ControlWord): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.ControlWord); + cpu_set_fpuc(env, ldl_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, FloatSave.StatusWord): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.StatusWord); + tmp =3D ldl_p(buf + offset); + env->fpstt =3D (tmp >> 11) & 7; + env->fpus =3D tmp & ~0x3800; + break; + + case offsetof(CPU_CONTEXT, FloatSave.TagWord): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.TagWord); + tmp =3D ldl_p(buf + offset); + for (i =3D 0; i < 8; ++i) { + env->fptags[i] =3D !((tmp >> i) & 1); + } + break; + + case offsetof(CPU_CONTEXT, FloatSave.ErrorOffset): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.ErrorOffset); + UINT32_P(&env->fpip)[0] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, FloatSave.ErrorSelector): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.ErrorSelector= ); + UINT32_P(&env->fpip)[1] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, FloatSave.DataOffset): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.DataOffset); + UINT32_P(&env->fpdp)[0] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, FloatSave.DataSelector): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.DataSelector); + UINT32_P(&env->fpdp)[1] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, FloatSave.RegisterArea): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.RegisterArea); + for (i =3D 0; i < 8; ++i) { + memcpy(PTR(env->fpregs[i]), mem_ptr + i * 10, 10); + } + break; + + case offsetof(CPU_CONTEXT, FloatSave.Cr0NpxState): + mem_size =3D sizeof_field(CPU_CONTEXT, FloatSave.Cr0NpxState); + env->xcr0 =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, SegGs): + mem_size =3D sizeof_field(CPU_CONTEXT, SegGs); + windbg_set_sr(cpu, R_GS, lduw_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, SegFs): + mem_size =3D sizeof_field(CPU_CONTEXT, SegFs); + windbg_set_sr(cpu, R_FS, lduw_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, SegEs): + mem_size =3D sizeof_field(CPU_CONTEXT, SegEs); + windbg_set_sr(cpu, R_ES, lduw_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, SegDs): + mem_size =3D sizeof_field(CPU_CONTEXT, SegDs); + windbg_set_sr(cpu, R_DS, lduw_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, Edi): + mem_size =3D sizeof_field(CPU_CONTEXT, Edi); + env->regs[R_EDI] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Esi): + mem_size =3D sizeof_field(CPU_CONTEXT, Esi); + env->regs[R_ESI] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Ebx): + mem_size =3D sizeof_field(CPU_CONTEXT, Ebx); + env->regs[R_EBX] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Edx): + mem_size =3D sizeof_field(CPU_CONTEXT, Edx); + env->regs[R_EDX] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Ecx): + mem_size =3D sizeof_field(CPU_CONTEXT, Ecx); + env->regs[R_ECX] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Eax): + mem_size =3D sizeof_field(CPU_CONTEXT, Eax); + env->regs[R_EAX] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Ebp): + mem_size =3D sizeof_field(CPU_CONTEXT, Ebp); + env->regs[R_EBP] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Eip): + mem_size =3D sizeof_field(CPU_CONTEXT, Eip); + env->eip =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, SegCs): + mem_size =3D sizeof_field(CPU_CONTEXT, SegCs); + windbg_set_sr(cpu, R_CS, lduw_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, EFlags): + mem_size =3D sizeof_field(CPU_CONTEXT, EFlags); + env->eflags =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, Esp): + mem_size =3D sizeof_field(CPU_CONTEXT, Esp); + env->regs[R_ESP] =3D ldl_p(buf + offset); + break; + + case offsetof(CPU_CONTEXT, SegSs): + mem_size =3D sizeof_field(CPU_CONTEXT, SegSs); + windbg_set_sr(cpu, R_SS, lduw_p(buf + offset)); + break; + + case offsetof(CPU_CONTEXT, ExtendedRegisters): + mem_size =3D sizeof_field(CPU_CONTEXT, ExtendedRegisters); + + uint8_t *ptr =3D mem_ptr + 160; + for (i =3D 0; i < 8; ++i, ptr +=3D 16) { + env->xmm_regs[i].ZMM_Q(0) =3D ldl_p(ptr); + env->xmm_regs[i].ZMM_Q(1) =3D ldl_p(ptr + 8); + } + + cpu_set_mxcsr(env, ldl_p(mem_ptr + 24)); + break; + + default: + WINDBG_ERROR("write_context: Unknown offset %d", offset); + return -1; + } + + mem_ptr +=3D mem_size; + offset +=3D mem_size; + len -=3D mem_size; + } + return 0; + #endif } =20 static int windbg_read_ks_regs(CPUState *cpu, uint8_t *buf, int len, From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150642525709422.613009991542754; Tue, 26 Sep 2017 04:27:37 -0700 (PDT) Received: from localhost ([::1]:46799 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo1N-00068D-0o for importer@patchew.org; Tue, 26 Sep 2017 07:27:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59813) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhQ-0005AS-4U for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhN-0001LY-TI for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:48 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52194) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhN-0001LJ-Mh for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:45 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 09D7F5400DD; Tue, 26 Sep 2017 14:06:45 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:43 +0300 Message-ID: <150642400352.3900.13935192906711901682.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 28/43] windbg: implemented windbg_read_ks_regs X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 73ff98dfbc..537ba9e2aa 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -587,6 +587,44 @@ static int windbg_write_context(CPUState *cpu, uint8_t= *buf, int len, static int windbg_read_ks_regs(CPUState *cpu, uint8_t *buf, int len, int offset) { + CPUArchState *env =3D cpu->env_ptr; + const bool new_mem =3D (len !=3D sizeof(CPU_KSPECIAL_REGISTERS) + || offset !=3D 0); + CPU_KSPECIAL_REGISTERS *ckr; + if (new_mem) { + ckr =3D g_new(CPU_KSPECIAL_REGISTERS, 1); + } else { + ckr =3D (CPU_KSPECIAL_REGISTERS *) buf; + } + + memset(ckr, 0, len); + + ckr->Cr0 =3D ldl_p(&env->cr[0]); + ckr->Cr2 =3D ldl_p(&env->cr[2]); + ckr->Cr3 =3D ldl_p(&env->cr[3]); + ckr->Cr4 =3D ldl_p(&env->cr[4]); + + ckr->KernelDr0 =3D ldtul_p(&env->dr[0]); + ckr->KernelDr1 =3D ldtul_p(&env->dr[1]); + ckr->KernelDr2 =3D ldtul_p(&env->dr[2]); + ckr->KernelDr3 =3D ldtul_p(&env->dr[3]); + ckr->KernelDr6 =3D ldtul_p(&env->dr[6]); + ckr->KernelDr7 =3D ldtul_p(&env->dr[7]); + + ckr->Gdtr.Pad =3D lduw_p(&env->gdt.selector); + ckr->Idtr.Pad =3D lduw_p(&env->idt.selector); + + ckr->Gdtr.Limit =3D lduw_p(&env->gdt.limit); + ckr->Gdtr.Base =3D ldtul_p(&env->gdt.base); + ckr->Idtr.Limit =3D lduw_p(&env->idt.limit); + ckr->Idtr.Base =3D ldtul_p(&env->idt.base); + ckr->Tr =3D lduw_p(&env->tr.selector); + ckr->Ldtr =3D lduw_p(&env->ldt.selector); + + if (new_mem) { + memcpy(buf, (uint8_t *) ckr + offset, len); + g_free(ckr); + } return 0; } =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425407245311.3268030913829; Tue, 26 Sep 2017 04:30:07 -0700 (PDT) Received: from localhost ([::1]:46808 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo3v-0000HT-8L for importer@patchew.org; Tue, 26 Sep 2017 07:30:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59862) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhU-0005ER-Q2 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhT-0001Nv-L4 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:52 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52214) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhT-0001Nf-8q for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:51 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 92BFE5400DF; Tue, 26 Sep 2017 14:06:50 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:49 +0300 Message-ID: <150642400909.3900.15038274924629003575.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 29/43] windbg: implemented windbg_write_ks_regs X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 117 insertions(+) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 537ba9e2aa..f788df2736 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -631,7 +631,124 @@ static int windbg_read_ks_regs(CPUState *cpu, uint8_t= *buf, int len, static int windbg_write_ks_regs(CPUState *cpu, uint8_t *buf, int len, int offset) { + #ifdef TARGET_X86_64 /* Unimplemented yet */ return 0; + #else + + CPUArchState *env =3D cpu->env_ptr; + int mem_size; + uint8_t *mem_ptr =3D buf; + while (len > 0 && offset < sizeof(CPU_KSPECIAL_REGISTERS)) { + mem_size =3D 1; + switch (offset) { + + case offsetof(CPU_KSPECIAL_REGISTERS, Cr0): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Cr0); + cpu_x86_update_cr0(env, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Cr2): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Cr2); + env->cr[2] =3D ldtul_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Cr3): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Cr3); + cpu_x86_update_cr3(env, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Cr4): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Cr4); + cpu_x86_update_cr4(env, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, KernelDr0): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, KernelDr0); + windbg_set_dr(cpu, 0, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, KernelDr1): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, KernelDr1); + windbg_set_dr(cpu, 1, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, KernelDr2): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, KernelDr2); + windbg_set_dr(cpu, 2, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, KernelDr3): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, KernelDr3); + windbg_set_dr(cpu, 3, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, KernelDr6): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, KernelDr6); + windbg_set_dr(cpu, 6, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, KernelDr7): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, KernelDr7); + windbg_set_dr(cpu, 7, ldtul_p(buf + offset)); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Gdtr.Pad): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Gdtr.Pad); + env->gdt.selector =3D lduw_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Gdtr.Limit): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Gdtr.Limit); + env->gdt.limit =3D lduw_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Gdtr.Base): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Gdtr.Base); + env->gdt.base =3D ldtul_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Idtr.Pad): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Idtr.Pad); + env->idt.selector =3D lduw_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Idtr.Limit): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Idtr.Limit); + env->idt.limit =3D lduw_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Idtr.Base): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Idtr.Base); + env->idt.base =3D ldtul_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Tr): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Tr); + env->tr.selector =3D lduw_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Ldtr): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Ldtr); + env->ldt.selector =3D lduw_p(buf + offset); + break; + + case offsetof(CPU_KSPECIAL_REGISTERS, Reserved): + mem_size =3D sizeof_field(CPU_KSPECIAL_REGISTERS, Reserved); + break; + + default: + WINDBG_ERROR("write_context: Unknown offset %d", offset); + return -1; + } + + mem_ptr +=3D mem_size; + offset +=3D mem_size; + len -=3D mem_size; + } + + return 0; + + #endif } =20 void kd_api_read_virtual_memory(CPUState *cpu, PacketData *pd) From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150642556787030.63205081457852; Tue, 26 Sep 2017 04:32:47 -0700 (PDT) Received: from localhost ([::1]:46827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo6W-0002ie-0T for importer@patchew.org; Tue, 26 Sep 2017 07:32:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59923) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhe-0005LJ-Lu for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhZ-0001R8-4X for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:02 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52232) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhY-0001Qt-T2 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:06:57 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 2EEC75400E7; Tue, 26 Sep 2017 14:06:56 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:06:54 +0300 Message-ID: <150642401464.3900.4498315263812458770.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 30/43] windbg: implemented windbg_set_sr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index f788df2736..238db03714 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -281,7 +281,22 @@ static void windbg_set_dr(CPUState *cpu, int index, ta= rget_ulong value) {} =20 static void windbg_set_sr(CPUState *cpu, int sr, uint16_t selector) -{} +{ + CPUArchState *env =3D cpu->env_ptr; + + if (selector !=3D env->segs[sr].selector && + (!(env->cr[0] & CR0_PE_MASK) || (env->eflags & VM_MASK))) { + unsigned int limit, flags; + target_ulong base; + + int dpl =3D (env->eflags & VM_MASK) ? 3 : 0; + base =3D selector << 4; + limit =3D 0xffff; + flags =3D DESC_P_MASK | DESC_S_MASK | DESC_W_MASK | + DESC_A_MASK | (dpl << DESC_DPL_SHIFT); + cpu_x86_load_seg_cache(env, sr, selector, base, limit, flags); + } +} =20 static int windbg_read_context(CPUState *cpu, uint8_t *buf, int len, int offset) From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150642557103694.93666659322014; Tue, 26 Sep 2017 04:32:51 -0700 (PDT) Received: from localhost ([::1]:46828 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo6Z-0002l4-F3 for importer@patchew.org; Tue, 26 Sep 2017 07:32:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59940) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhf-0005MK-No for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhe-0001TS-Ot for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:03 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52252) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhe-0001TA-H2 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:02 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id C73BB5400EB; Tue, 26 Sep 2017 14:07:01 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:00 +0300 Message-ID: <150642402028.3900.4958813484847164692.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 31/43] windbg: implemented windbg_set_dr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Defined useful macroses for breakpoints. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++= +- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 238db03714..58c4c98f04 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -11,6 +11,21 @@ =20 #include "exec/windbgstub-utils.h" =20 +#define IS_LOCAL_BP_ENABLED(dr7, index) (((dr7) >> ((index) * 2)) & 1) + +#define IS_GLOBAL_BP_ENABLED(dr7, index) (((dr7) >> ((index) * 2)) & 2) + +#define IS_BP_ENABLED(dr7, index) \ + (IS_LOCAL_BP_ENABLED(dr7, index) | IS_GLOBAL_BP_ENABLED(dr7, index)) + +#define BP_TYPE(dr7, index) \ + ((int) ((dr7) >> (DR7_TYPE_SHIFT + ((index) * 4))) & 3) + +#define BP_LEN(dr7, index) ({ \ + int _len =3D (((dr7) >> (DR7_LEN_SHIFT + ((index) * 4))) & 3); \ + (_len =3D=3D 2) ? 8 : _len + 1; \ +}) + #ifdef TARGET_X86_64 # define OFFSET_SELF_PCR 0x18 # define OFFSET_VERS 0x108 @@ -277,9 +292,42 @@ typedef struct KDData { =20 static KDData *kd; =20 -static void windbg_set_dr(CPUState *cpu, int index, target_ulong value) +static int windbg_hw_breakpoint_insert(CPUState *cpu, int index) +{ + return 0; +} + +static int windbg_hw_breakpoint_remove(CPUState *cpu, int index) +{ + return 0; +} + +static void windbg_set_dr7(CPUState *cpu, target_ulong new_dr7) {} =20 +static void windbg_set_dr(CPUState *cpu, int index, target_ulong value) +{ + CPUArchState *env =3D cpu->env_ptr; + + switch (index) { + case 0 ... 3: + if (IS_BP_ENABLED(env->dr[7], index) && env->dr[index] !=3D value)= { + windbg_hw_breakpoint_remove(cpu, index); + env->dr[index] =3D value; + windbg_hw_breakpoint_insert(cpu, index); + } else { + env->dr[index] =3D value; + } + return; + case 6: + env->dr[6] =3D value | DR6_FIXED_1; + return; + case 7: + windbg_set_dr7(cpu, value); + return; + } +} + static void windbg_set_sr(CPUState *cpu, int sr, uint16_t selector) { CPUArchState *env =3D cpu->env_ptr; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425735783462.38333022767085; Tue, 26 Sep 2017 04:35:35 -0700 (PDT) Received: from localhost ([::1]:46836 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo9A-0004yK-4i for importer@patchew.org; Tue, 26 Sep 2017 07:35:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59994) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhn-0005UM-El for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhk-0001Vc-Ar for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:11 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52276) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhk-0001VT-2y for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:08 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 6D7845400EF; Tue, 26 Sep 2017 14:07:07 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:06 +0300 Message-ID: <150642402591.3900.544237580736904991.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 32/43] windbg: implemented windbg_set_dr7 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 58c4c98f04..e33789725e 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -303,7 +303,32 @@ static int windbg_hw_breakpoint_remove(CPUState *cpu, = int index) } =20 static void windbg_set_dr7(CPUState *cpu, target_ulong new_dr7) -{} +{ + CPUArchState *env =3D cpu->env_ptr; + target_ulong old_dr7 =3D env->dr[7]; + int iobpt =3D 0; + int i; + + new_dr7 |=3D DR7_FIXED_1; + if (new_dr7 =3D=3D old_dr7) { + return; + } + + for (i =3D 0; i < DR7_MAX_BP; i++) { + if (IS_BP_ENABLED(old_dr7, i) && !IS_BP_ENABLED(new_dr7, i)) { + windbg_hw_breakpoint_remove(cpu, i); + } + } + + env->dr[7] =3D new_dr7; + for (i =3D 0; i < DR7_MAX_BP; i++) { + if (IS_BP_ENABLED(env->dr[7], i)) { + iobpt |=3D windbg_hw_breakpoint_insert(cpu, i); + } + } + + env->hflags =3D (env->hflags & ~HF_IOBPT_MASK) | iobpt; +} =20 static void windbg_set_dr(CPUState *cpu, int index, target_ulong value) { From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425733871217.6448815454778; Tue, 26 Sep 2017 04:35:33 -0700 (PDT) Received: from localhost ([::1]:46837 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo9B-0004zw-4z for importer@patchew.org; Tue, 26 Sep 2017 07:35:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60059) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhv-0005ce-Ou for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhp-0001Xh-Sq for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:19 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52292) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhp-0001XR-LX for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:13 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 039685400F1; Tue, 26 Sep 2017 14:07:13 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:11 +0300 Message-ID: <150642403148.3900.7920017116044093005.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 33/43] windbg: implemented windbg_hw_breakpoint_insert and windbg_hw_breakpoint_remove X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- windbgstub-utils.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 60 insertions(+) diff --git a/windbgstub-utils.c b/windbgstub-utils.c index e33789725e..05caf98c0c 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -294,11 +294,71 @@ static KDData *kd; =20 static int windbg_hw_breakpoint_insert(CPUState *cpu, int index) { + CPUArchState *env =3D cpu->env_ptr; + + if (!IS_BP_ENABLED(env->dr[7], index)) { + return 0; + } + + target_ulong addr =3D env->dr[index]; + int type =3D BP_TYPE(env->dr[7], index); + int len =3D BP_LEN(env->dr[7], index); + int err =3D 0; + + switch (type) { + case DR7_TYPE_DATA_WR: + err =3D cpu_watchpoint_insert(cpu, addr, len, BP_MEM_WRITE | BP_GD= B, + &env->cpu_watchpoint[index]); + break; + case DR7_TYPE_DATA_RW: + err =3D cpu_watchpoint_insert(cpu, addr, len, BP_MEM_ACCESS | BP_G= DB, + &env->cpu_watchpoint[index]); + break; + case DR7_TYPE_BP_INST: + err =3D cpu_breakpoint_insert(cpu, addr, BP_GDB, + &env->cpu_breakpoint[index]); + break; + case DR7_TYPE_IO_RW: + return HF_IOBPT_MASK; + default: + return 0; + } + + if (!err) { + WINDBG_DEBUG("hw_breakpoint_insert: index(%d), " FMT_ADDR, + index, addr); + } else { + env->cpu_breakpoint[index] =3D NULL; + WINDBG_ERROR("hw_breakpoint_insert: index(%d), " FMT_ADDR ", " FMT= _ERR, + index, addr, err); + } return 0; } =20 static int windbg_hw_breakpoint_remove(CPUState *cpu, int index) { + CPUArchState *env =3D cpu->env_ptr; + int type =3D BP_TYPE(env->dr[7], index); + + switch (type) { + case DR7_TYPE_BP_INST: + if (env->cpu_breakpoint[index]) { + cpu_breakpoint_remove_by_ref(cpu, env->cpu_breakpoint[index]); + } + break; + case DR7_TYPE_DATA_WR: + case DR7_TYPE_DATA_RW: + if (env->cpu_watchpoint[index]) { + cpu_watchpoint_remove_by_ref(cpu, env->cpu_watchpoint[index]); + } + break; + default: + return 0; + } + + env->cpu_breakpoint[index] =3D NULL; + WINDBG_DEBUG("hw_breakpoint_remove: index(%d), " FMT_ADDR, + index, env->dr[index]); return 0; } =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425904260508.1050452856733; Tue, 26 Sep 2017 04:38:24 -0700 (PDT) Received: from localhost ([::1]:46858 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwoBk-0007ah-HW for importer@patchew.org; Tue, 26 Sep 2017 07:38:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60084) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhz-0005jE-0C for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnhv-0001a3-JO for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:22 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52306) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnhv-0001ZY-6m for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:19 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 84C895400FD; Tue, 26 Sep 2017 14:07:18 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:17 +0300 Message-ID: <150642403705.3900.11372246446054638606.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 34/43] windbg: implemented kd_api_write_breakpoint and kd_api_restore_breakpoint X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added supporting of windbg breakpoints. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 + windbgstub-utils.c | 77 +++++++++++++++++++++++++++++++++++= +++- windbgstub.c | 11 ++++++ 3 files changed, 89 insertions(+), 1 deletion(-) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index e368b2e85d..3d062ab9bb 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -106,6 +106,8 @@ void kd_api_read_virtual_memory(CPUState *cpu, PacketDa= ta *pd); void kd_api_write_virtual_memory(CPUState *cpu, PacketData *pd); void kd_api_get_context(CPUState *cpu, PacketData *pd); void kd_api_set_context(CPUState *cpu, PacketData *pd); +void kd_api_write_breakpoint(CPUState *cpu, PacketData *pd); +void kd_api_restore_breakpoint(CPUState *cpu, PacketData *pd); void kd_api_read_control_space(CPUState *cpu, PacketData *pd); void kd_api_write_control_space(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 05caf98c0c..c5d24c5d8e 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -288,6 +288,8 @@ typedef struct _CPU_KPROCESSOR_STATE { typedef struct KDData { InitedAddr KPCR; InitedAddr version; + + InitedAddr bps[KD_BREAKPOINT_MAX]; } KDData; =20 static KDData *kd; @@ -971,6 +973,62 @@ void kd_api_set_context(CPUState *cpu, PacketData *pd) } } =20 +void kd_api_write_breakpoint(CPUState *cpu, PacketData *pd) +{ + DBGKD_WRITE_BREAKPOINT64 *m64c =3D &pd->m64.u.WriteBreakPoint; + target_ulong addr =3D ldtul_p(&m64c->BreakPointAddress); + int i =3D 0, err =3D 0; + + for (; i < KD_BREAKPOINT_MAX; ++i) { + if (!kd->bps[i].is_init) { + err =3D cpu_breakpoint_insert(cpu, addr, BP_GDB, NULL); + if (!err) { + kd->bps[i].addr =3D addr; + kd->bps[i].is_init =3D true; + WINDBG_DEBUG("write_breakpoint: " FMT_ADDR, addr); + break; + } else { + WINDBG_ERROR("write_breakpoint: " FMT_ADDR ", " FMT_ERR, + addr, err); + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + return; + } + } else if (addr =3D=3D kd->bps[i].addr) { + break; + } + } + + if (!err) { + m64c->BreakPointHandle =3D i + 1; + pd->m64.ReturnStatus =3D STATUS_SUCCESS; + } else { + WINDBG_ERROR("write_breakpoint: All breakpoints occupied"); + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + } +} + +void kd_api_restore_breakpoint(CPUState *cpu, PacketData *pd) +{ + DBGKD_RESTORE_BREAKPOINT *m64c =3D &pd->m64.u.RestoreBreakPoint; + uint8_t index =3D ldtul_p(&m64c->BreakPointHandle) - 1; + int err =3D -1; + + if (kd->bps[index].is_init) { + err =3D cpu_breakpoint_remove(cpu, kd->bps[index].addr, BP_GDB); + if (!err) { + WINDBG_DEBUG("restore_breakpoint: " FMT_ADDR ", index(%d)", + kd->bps[index].addr, index); + } else { + WINDBG_ERROR("restore_breakpoint: " FMT_ADDR ", index(%d), " + FMT_ERR, kd->bps[index].addr, index, err); + } + kd->bps[index].is_init =3D false; + pd->m64.ReturnStatus =3D STATUS_SUCCESS; + } else { + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + } +} + void kd_api_read_control_space(CPUState *cpu, PacketData *pd) { DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; @@ -1052,7 +1110,24 @@ void kd_api_unsupported(CPUState *cpu, PacketData *p= d) =20 static void kd_breakpoint_remove_range(CPUState *cpu, target_ulong base, target_ulong limit) -{} +{ + int i =3D 0, err =3D 0; + for (; i < KD_BREAKPOINT_MAX; ++i) { + if (kd->bps[i].is_init && kd->bps[i].addr >=3D base && + kd->bps[i].addr < limit) { + err =3D cpu_breakpoint_remove(cpu, kd->bps[i].addr, BP_GDB); + if (!err) { + WINDBG_DEBUG("breakpoint_remove_range: " FMT_ADDR + ", index(%d)", kd->bps[i].addr, i); + } else { + WINDBG_ERROR("breakpoint_remove_range: " FMT_ADDR + ", index(%d), " FMT_ERR, + kd->bps[i].addr, i, err); + } + kd->bps[i].is_init =3D false; + } + } +} =20 static void kd_init_state_change(CPUState *cpu, DBGKD_ANY_WAIT_STATE_CHANGE *sc) diff --git a/windbgstub.c b/windbgstub.c index 24d0031167..f8e80c60ab 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -149,6 +149,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_set_context(cpu, &ctx->data); break; =20 + case DbgKdWriteBreakPointApi: + kd_api_write_breakpoint(cpu, &ctx->data); + break; + + case DbgKdRestoreBreakPointApi: + kd_api_restore_breakpoint(cpu, &ctx->data); + break; + case DbgKdReadControlSpaceApi: kd_api_read_control_space(cpu, &ctx->data); break; @@ -157,6 +165,9 @@ static void windbg_process_manipulate_packet(ParsingCon= text *ctx) kd_api_write_control_space(cpu, &ctx->data); break; =20 + case DbgKdClearAllInternalBreakpointsApi: + return; + default: kd_api_unsupported(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506426038866103.58966088650266; Tue, 26 Sep 2017 04:40:38 -0700 (PDT) Received: from localhost ([::1]:46879 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwoE5-00016M-4U for importer@patchew.org; Tue, 26 Sep 2017 07:40:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60168) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwni7-0005py-C5 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwni1-0001cY-Cf for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:31 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52330) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwni1-0001c4-1c for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:25 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 237B55400FF; Tue, 26 Sep 2017 14:07:24 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:22 +0300 Message-ID: <150642404260.3900.15791385339764676289.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 35/43] windbg: debug exception subscribing X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Added handler registration of gdb debug exception. Its exception also can b= e used for windbg. Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- cpus.c | 18 +++++++++++++++++- gdbstub.c | 4 ++++ include/sysemu/sysemu.h | 2 ++ windbgstub.c | 16 ++++++++++++---- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/cpus.c b/cpus.c index 9bed61eefc..212553b7e3 100644 --- a/cpus.c +++ b/cpus.c @@ -77,6 +77,8 @@ int64_t max_advance; static QEMUTimer *throttle_timer; static unsigned int throttle_percentage; =20 +static void (*excp_debug_handler)(CPUState *cpu); + #define CPU_THROTTLE_PCT_MIN 1 #define CPU_THROTTLE_PCT_MAX 99 #define CPU_THROTTLE_TIMESLICE_NS 10000000 @@ -960,9 +962,23 @@ static bool cpu_can_run(CPUState *cpu) return true; } =20 +bool register_excp_debug_handler(void (*handler)(CPUState *cpu)) +{ + if (excp_debug_handler =3D=3D NULL) { + excp_debug_handler =3D handler; + return true; + } else { + error_report("ERROR: Something debugger already using"); + return false; + } +} + static void cpu_handle_guest_debug(CPUState *cpu) { - gdb_set_stop_cpu(cpu); + if (excp_debug_handler !=3D NULL) { + excp_debug_handler(cpu); + } + qemu_system_debug_request(); cpu->stopped =3D true; } diff --git a/gdbstub.c b/gdbstub.c index 2a94030d3b..8c76f54117 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2006,6 +2006,10 @@ int gdbserver_start(const char *device) s->mon_chr =3D mon_chr; s->current_syscall_cb =3D NULL; =20 + if (!register_excp_debug_handler(gdb_set_stop_cpu)) { + exit(1); + } + return 0; } =20 diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index b21369672a..34588c99b4 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -193,6 +193,8 @@ QemuOpts *qemu_get_machine_opts(void); =20 bool defaults_enabled(void); =20 +bool register_excp_debug_handler(void (*handler)(CPUState *cpu)); + extern QemuOptsList qemu_legacy_drive_opts; extern QemuOptsList qemu_common_drive_opts; extern QemuOptsList qemu_drive_opts; diff --git a/windbgstub.c b/windbgstub.c index f8e80c60ab..54564962a5 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -112,16 +112,20 @@ static void windbg_send_control_packet(uint16_t type) windbg_state->ctrl_packet_id ^=3D 1; } =20 -static void windbg_vm_stop(void) +static void windbg_bp_handler(CPUState *cpu) { - CPUState *cpu =3D qemu_get_cpu(0); - vm_stop(RUN_STATE_PAUSED); - SizedBuf buf =3D kd_gen_exception_sc(cpu); windbg_send_data_packet(buf.data, buf.size, PACKET_TYPE_KD_STATE_CHANG= E64); SBUF_FREE(buf); } =20 +static void windbg_vm_stop(void) +{ + CPUState *cpu =3D qemu_get_cpu(0); + vm_stop(RUN_STATE_PAUSED); + windbg_bp_handler(cpu); +} + static void windbg_process_manipulate_packet(ParsingContext *ctx) { CPUState *cpu; @@ -406,6 +410,10 @@ int windbg_server_start(const char *device) qemu_chr_fe_set_handlers(&windbg_state->chr, windbg_chr_can_receive, windbg_chr_receive, NULL, NULL, NULL, NULL, t= rue); =20 + if (!register_excp_debug_handler(windbg_bp_handler)) { + exit(1); + } + atexit(windbg_exit); return 0; } From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425447279950.5369717499177; Tue, 26 Sep 2017 04:30:47 -0700 (PDT) Received: from localhost ([::1]:46812 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo4Q-0000rb-QW for importer@patchew.org; Tue, 26 Sep 2017 07:30:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60199) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniD-0005tv-6c for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwni7-0001eZ-Bt for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:37 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52348) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwni7-0001eD-3r for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:31 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 5FACE540105; Tue, 26 Sep 2017 14:07:30 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:28 +0300 Message-ID: <150642404847.3900.17671292421528132408.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 36/43] windbg: implemented kd_api_continue X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 1 + windbgstub-utils.c | 15 +++++++++++++++ windbgstub.c | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 3d062ab9bb..f6a60292a2 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -108,6 +108,7 @@ void kd_api_get_context(CPUState *cpu, PacketData *pd); void kd_api_set_context(CPUState *cpu, PacketData *pd); void kd_api_write_breakpoint(CPUState *cpu, PacketData *pd); void kd_api_restore_breakpoint(CPUState *cpu, PacketData *pd); +void kd_api_continue(CPUState *cpu, PacketData *pd); void kd_api_read_control_space(CPUState *cpu, PacketData *pd); void kd_api_write_control_space(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index c5d24c5d8e..8d5136f310 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -10,6 +10,7 @@ */ =20 #include "exec/windbgstub-utils.h" +#include "sysemu/sysemu.h" =20 #define IS_LOCAL_BP_ENABLED(dr7, index) (((dr7) >> ((index) * 2)) & 1) =20 @@ -1029,6 +1030,20 @@ void kd_api_restore_breakpoint(CPUState *cpu, Packet= Data *pd) } } =20 +void kd_api_continue(CPUState *cpu, PacketData *pd) +{ + uint32_t status =3D ldl_p(&pd->m64.u.Continue2.ContinueStatus); + uint32_t trace =3D ldl_p(&pd->m64.u.Continue2.ControlSet.TraceFlag); + int ssFlag =3D trace ? SSTEP_ENABLE | SSTEP_NOIRQ | SSTEP_NOTIMER : 0; + + if (NT_SUCCESS(status)) { + cpu_single_step(cpu, ssFlag); + if (!runstate_needs_reset()) { + vm_start(); + } + } +} + void kd_api_read_control_space(CPUState *cpu, PacketData *pd) { DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; diff --git a/windbgstub.c b/windbgstub.c index 54564962a5..19a4f0184b 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -161,6 +161,11 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_restore_breakpoint(cpu, &ctx->data); break; =20 + case DbgKdContinueApi: + case DbgKdContinueApi2: + kd_api_continue(cpu, &ctx->data); + return; + case DbgKdReadControlSpaceApi: kd_api_read_control_space(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506424941977539.7376989095786; Tue, 26 Sep 2017 04:22:21 -0700 (PDT) Received: from localhost ([::1]:46777 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnwO-0001mU-59 for importer@patchew.org; Tue, 26 Sep 2017 07:22:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60226) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniH-0005xF-6M for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwniD-0001gO-23 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:41 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52368) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniC-0001g5-MO for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:36 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 044D1540109; Tue, 26 Sep 2017 14:07:36 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:34 +0300 Message-ID: <150642405450.3900.12154700716266164817.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 37/43] windbg: implemented kd_api_read_io_space and kd_api_write_io_space X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 + windbgstub-utils.c | 57 +++++++++++++++++++++++++++++++++++= ++++ windbgstub.c | 8 +++++ 3 files changed, 67 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index f6a60292a2..07e11c0494 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -111,6 +111,8 @@ void kd_api_restore_breakpoint(CPUState *cpu, PacketDat= a *pd); void kd_api_continue(CPUState *cpu, PacketData *pd); void kd_api_read_control_space(CPUState *cpu, PacketData *pd); void kd_api_write_control_space(CPUState *cpu, PacketData *pd); +void kd_api_read_io_space(CPUState *cpu, PacketData *pd); +void kd_api_write_io_space(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 8d5136f310..6bf9868e51 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -11,6 +11,7 @@ =20 #include "exec/windbgstub-utils.h" #include "sysemu/sysemu.h" +#include "exec/address-spaces.h" =20 #define IS_LOCAL_BP_ENABLED(dr7, index) (((dr7) >> ((index) * 2)) & 1) =20 @@ -1113,6 +1114,62 @@ void kd_api_write_control_space(CPUState *cpu, Packe= tData *pd) } } =20 +void kd_api_read_io_space(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_WRITE_IO64 *io =3D &pd->m64.u.ReadWriteIo; + CPUArchState *env =3D cpu->env_ptr; + target_ulong addr =3D ldtul_p(&io->IoAddress); + + switch (io->DataSize) { + case 1: + io->DataValue =3D address_space_ldub(&address_space_io, addr, + cpu_get_mem_attrs(env), NULL); + break; + case 2: + io->DataValue =3D address_space_lduw(&address_space_io, addr, + cpu_get_mem_attrs(env), NULL); + break; + case 4: + io->DataValue =3D address_space_ldl(&address_space_io, addr, + cpu_get_mem_attrs(env), NULL); + break; + default: + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + return; + } + + pd->m64.ReturnStatus =3D STATUS_SUCCESS; +} + +void kd_api_write_io_space(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_WRITE_IO64 *io =3D &pd->m64.u.ReadWriteIo; + CPUArchState *env =3D cpu->env_ptr; + + target_ulong addr =3D ldtul_p(&io->IoAddress); + uint32_t value =3D ldl_p(&io->DataValue); + + switch (io->DataSize) { + case 1: + address_space_stb(&address_space_io, addr, value, + cpu_get_mem_attrs(env), NULL); + break; + case 2: + address_space_stw(&address_space_io, addr, value, + cpu_get_mem_attrs(env), NULL); + break; + case 4: + address_space_stl(&address_space_io, addr, value, + cpu_get_mem_attrs(env), NULL); + break; + default: + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + return; + } + + pd->m64.ReturnStatus =3D STATUS_SUCCESS; +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 19a4f0184b..0363d9a5c8 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -161,6 +161,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_restore_breakpoint(cpu, &ctx->data); break; =20 + case DbgKdReadIoSpaceApi: + kd_api_read_io_space(cpu, &ctx->data); + break; + + case DbgKdWriteIoSpaceApi: + kd_api_write_io_space(cpu, &ctx->data); + break; + case DbgKdContinueApi: case DbgKdContinueApi2: kd_api_continue(cpu, &ctx->data); From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425668163995.1797106758523; Tue, 26 Sep 2017 04:34:28 -0700 (PDT) Received: from localhost ([::1]:46833 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo88-00041E-Eu for importer@patchew.org; Tue, 26 Sep 2017 07:34:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniK-00060J-DR for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwniI-0001iN-GY for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:44 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52396) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniI-0001hx-8w for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:42 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 9AA9C54010B; Tue, 26 Sep 2017 14:07:41 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:40 +0300 Message-ID: <150642406010.3900.1199547239226671745.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 38/43] windbg: implemented kd_api_read_physical_memory and kd_api_write_physical_memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2 ++ windbgstub-utils.c | 28 ++++++++++++++++++++++++++++ windbgstub.c | 8 ++++++++ 3 files changed, 38 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 07e11c0494..d390bc1dfe 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -113,6 +113,8 @@ void kd_api_read_control_space(CPUState *cpu, PacketDat= a *pd); void kd_api_write_control_space(CPUState *cpu, PacketData *pd); void kd_api_read_io_space(CPUState *cpu, PacketData *pd); void kd_api_write_io_space(CPUState *cpu, PacketData *pd); +void kd_api_read_physical_memory(CPUState *cpu, PacketData *pd); +void kd_api_write_physical_memory(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 6bf9868e51..1fba54f9d9 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -1170,6 +1170,34 @@ void kd_api_write_io_space(CPUState *cpu, PacketData= *pd) pd->m64.ReturnStatus =3D STATUS_SUCCESS; } =20 +void kd_api_read_physical_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_MEMORY64 *mem =3D &pd->m64.u.ReadMemory; + uint32_t len; + target_ulong addr; + + len =3D MIN(ldl_p(&mem->TransferCount), PACKET_MAX_SIZE - M64_SIZE); + addr =3D ldtul_p(&mem->TargetBaseAddress); + + cpu_physical_memory_rw(addr, pd->extra, len, 0); + pd->extra_size =3D len; + mem->ActualBytesRead =3D ldl_p(&len); +} + +void kd_api_write_physical_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_WRITE_MEMORY64 *mem =3D &pd->m64.u.WriteMemory; + uint32_t len; + target_ulong addr; + + len =3D MIN(ldl_p(&mem->TransferCount), pd->extra_size); + addr =3D ldtul_p(&mem->TargetBaseAddress); + + cpu_physical_memory_rw(addr, pd->extra, len, 1); + pd->extra_size =3D 0; + mem->ActualBytesWritten =3D ldl_p(&len); +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 0363d9a5c8..118e9dd697 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -182,6 +182,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_write_control_space(cpu, &ctx->data); break; =20 + case DbgKdReadPhysicalMemoryApi: + kd_api_read_physical_memory(cpu, &ctx->data); + break; + + case DbgKdWritePhysicalMemoryApi: + kd_api_write_physical_memory(cpu, &ctx->data); + break; + case DbgKdClearAllInternalBreakpointsApi: return; =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425112568837.4990730868112; Tue, 26 Sep 2017 04:25:12 -0700 (PDT) Received: from localhost ([::1]:46787 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnz1-0003zV-Ou for importer@patchew.org; Tue, 26 Sep 2017 07:24:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60335) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniS-00069a-US for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwniO-0001lE-WD for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:52 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52416) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniO-0001kx-OQ for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:48 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 1F25B54010D; Tue, 26 Sep 2017 14:07:48 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:45 +0300 Message-ID: <150642406568.3900.18393117019157434726.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 39/43] windbg: implemented kd_api_get_version X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 1 + windbgstub-utils.c | 23 +++++++++++++++++++++++ windbgstub.c | 4 ++++ 3 files changed, 28 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index d390bc1dfe..e76bf1ad6f 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -115,6 +115,7 @@ void kd_api_read_io_space(CPUState *cpu, PacketData *pd= ); void kd_api_write_io_space(CPUState *cpu, PacketData *pd); void kd_api_read_physical_memory(CPUState *cpu, PacketData *pd); void kd_api_write_physical_memory(CPUState *cpu, PacketData *pd); +void kd_api_get_version(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 1fba54f9d9..171097eba2 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -1198,6 +1198,29 @@ void kd_api_write_physical_memory(CPUState *cpu, Pac= ketData *pd) mem->ActualBytesWritten =3D ldl_p(&len); } =20 +void kd_api_get_version(CPUState *cpu, PacketData *pd) +{ + DBGKD_GET_VERSION64 *version; + int err =3D cpu_memory_rw_debug(cpu, kd->version.addr, + PTR(pd->m64) + 0x10, + M64_SIZE - 0x10, 0); + if (!err) { + version =3D (DBGKD_GET_VERSION64 *) (PTR(pd->m64) + 0x10); + + version->MajorVersion =3D lduw_p(&version->MajorVersion); + version->MinorVersion =3D lduw_p(&version->MinorVersion); + version->Flags =3D lduw_p(&version->Flags); + version->MachineType =3D lduw_p(&version->MachineType); + version->Unused[0] =3D lduw_p(version->Unused); + version->KernBase =3D ldq_p(&version->KernBase); + version->PsLoadedModuleList =3D ldq_p(&version->PsLoadedModuleList= ); + version->DebuggerDataList =3D ldq_p(&version->DebuggerDataList); + } else { + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + WINDBG_ERROR("get_version: " FMT_ERR, err); + } +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 118e9dd697..b37393d93c 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -190,6 +190,10 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_write_physical_memory(cpu, &ctx->data); break; =20 + case DbgKdGetVersionApi: + kd_api_get_version(cpu, &ctx->data); + break; + case DbgKdClearAllInternalBreakpointsApi: return; =20 From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506426125745388.723470030268; Tue, 26 Sep 2017 04:42:05 -0700 (PDT) Received: from localhost ([::1]:46916 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwoFY-0002L7-UI for importer@patchew.org; Tue, 26 Sep 2017 07:42:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60413) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnib-0006EC-E5 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwniU-0001o1-PH for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:01 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52432) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwniU-0001nb-DA for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:07:54 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id B4D5A540111; Tue, 26 Sep 2017 14:07:53 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:52 +0300 Message-ID: <150642407216.3900.10726526729124062497.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 40/43] windbg: implemented kd_api_read_msr and kd_api_write_msr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 2=20 windbgstub-utils.c | 319 +++++++++++++++++++++++++++++++++++= ++++ windbgstub.c | 8 + 3 files changed, 329 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index e76bf1ad6f..23cafb1a89 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -116,6 +116,8 @@ void kd_api_write_io_space(CPUState *cpu, PacketData *p= d); void kd_api_read_physical_memory(CPUState *cpu, PacketData *pd); void kd_api_write_physical_memory(CPUState *cpu, PacketData *pd); void kd_api_get_version(CPUState *cpu, PacketData *pd); +void kd_api_read_msr(CPUState *cpu, PacketData *pd); +void kd_api_write_msr(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 171097eba2..26bdb1f6ea 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -1221,6 +1221,325 @@ void kd_api_get_version(CPUState *cpu, PacketData *= pd) } } =20 +void kd_api_read_msr(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_WRITE_MSR *m64c =3D &pd->m64.u.ReadWriteMsr; + CPUArchState *env =3D cpu->env_ptr; + + uint64_t val; + + cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 0, 0); + + switch ((uint32_t)env->regs[R_ECX]) { + case MSR_IA32_SYSENTER_CS: + val =3D env->sysenter_cs; + break; + case MSR_IA32_SYSENTER_ESP: + val =3D env->sysenter_esp; + break; + case MSR_IA32_SYSENTER_EIP: + val =3D env->sysenter_eip; + break; + case MSR_IA32_APICBASE: + val =3D cpu_get_apic_base(x86_env_get_cpu(env)->apic_state); + break; + case MSR_EFER: + val =3D env->efer; + break; + case MSR_STAR: + val =3D env->star; + break; + case MSR_PAT: + val =3D env->pat; + break; + case MSR_VM_HSAVE_PA: + val =3D env->vm_hsave; + break; + case MSR_IA32_PERF_STATUS: + /* tsc_increment_by_tick */ + val =3D 1000ULL; + /* CPU multiplier */ + val |=3D (((uint64_t)4ULL) << 40); + break; +#ifdef TARGET_X86_64 + case MSR_LSTAR: + val =3D env->lstar; + break; + case MSR_CSTAR: + val =3D env->cstar; + break; + case MSR_FMASK: + val =3D env->fmask; + break; + case MSR_FSBASE: + val =3D env->segs[R_FS].base; + break; + case MSR_GSBASE: + val =3D env->segs[R_GS].base; + break; + case MSR_KERNELGSBASE: + val =3D env->kernelgsbase; + break; + case MSR_TSC_AUX: + val =3D env->tsc_aux; + break; +#endif + case MSR_MTRRphysBase(0): + case MSR_MTRRphysBase(1): + case MSR_MTRRphysBase(2): + case MSR_MTRRphysBase(3): + case MSR_MTRRphysBase(4): + case MSR_MTRRphysBase(5): + case MSR_MTRRphysBase(6): + case MSR_MTRRphysBase(7): + val =3D env->mtrr_var[((uint32_t)env->regs[R_ECX] - + MSR_MTRRphysBase(0)) / 2].base; + break; + case MSR_MTRRphysMask(0): + case MSR_MTRRphysMask(1): + case MSR_MTRRphysMask(2): + case MSR_MTRRphysMask(3): + case MSR_MTRRphysMask(4): + case MSR_MTRRphysMask(5): + case MSR_MTRRphysMask(6): + case MSR_MTRRphysMask(7): + val =3D env->mtrr_var[((uint32_t)env->regs[R_ECX] - + MSR_MTRRphysMask(0)) / 2].mask; + break; + case MSR_MTRRfix64K_00000: + val =3D env->mtrr_fixed[0]; + break; + case MSR_MTRRfix16K_80000: + case MSR_MTRRfix16K_A0000: + val =3D env->mtrr_fixed[(uint32_t)env->regs[R_ECX] - + MSR_MTRRfix16K_80000 + 1]; + break; + case MSR_MTRRfix4K_C0000: + case MSR_MTRRfix4K_C8000: + case MSR_MTRRfix4K_D0000: + case MSR_MTRRfix4K_D8000: + case MSR_MTRRfix4K_E0000: + case MSR_MTRRfix4K_E8000: + case MSR_MTRRfix4K_F0000: + case MSR_MTRRfix4K_F8000: + val =3D env->mtrr_fixed[(uint32_t)env->regs[R_ECX] - + MSR_MTRRfix4K_C0000 + 3]; + break; + case MSR_MTRRdefType: + val =3D env->mtrr_deftype; + break; + case MSR_MTRRcap: + if (env->features[FEAT_1_EDX] & CPUID_MTRR) { + val =3D MSR_MTRRcap_VCNT | MSR_MTRRcap_FIXRANGE_SUPPORT | + MSR_MTRRcap_WC_SUPPORTED; + } else { + /* XXX: exception? */ + val =3D 0; + } + break; + case MSR_MCG_CAP: + val =3D env->mcg_cap; + break; + case MSR_MCG_CTL: + if (env->mcg_cap & MCG_CTL_P) { + val =3D env->mcg_ctl; + } else { + val =3D 0; + } + break; + case MSR_MCG_STATUS: + val =3D env->mcg_status; + break; + case MSR_IA32_MISC_ENABLE: + val =3D env->msr_ia32_misc_enable; + break; + case MSR_IA32_BNDCFGS: + val =3D env->msr_bndcfgs; + break; + default: + if ((uint32_t)env->regs[R_ECX] >=3D MSR_MC0_CTL + && (uint32_t)env->regs[R_ECX] < MSR_MC0_CTL + + (4 * env->mcg_cap & 0xff)) { + uint32_t offset =3D (uint32_t)env->regs[R_ECX] - MSR_MC0_CTL; + val =3D env->mce_banks[offset]; + break; + } + /* XXX: exception? */ + val =3D 0; + break; + } + + val =3D ldq_p(&val); + m64c->DataValueLow =3D UINT32_P(val)[0]; + m64c->DataValueHigh =3D UINT32_P(val)[1]; + pd->m64.ReturnStatus =3D STATUS_SUCCESS; +} + +void kd_api_write_msr(CPUState *cpu, PacketData *pd) +{ + DBGKD_READ_WRITE_MSR *m64c =3D &pd->m64.u.ReadWriteMsr; + CPUArchState *env =3D cpu->env_ptr; + + uint64_t val; + + cpu_svm_check_intercept_param(env, SVM_EXIT_MSR, 1, 0); + + val =3D m64c->DataValueLow | ((uint64_t) m64c->DataValueHigh) << 32; + val =3D ldq_p(&val); + + switch ((uint32_t)env->regs[R_ECX]) { + case MSR_IA32_SYSENTER_CS: + env->sysenter_cs =3D val & 0xffff; + break; + case MSR_IA32_SYSENTER_ESP: + env->sysenter_esp =3D val; + break; + case MSR_IA32_SYSENTER_EIP: + env->sysenter_eip =3D val; + break; + case MSR_IA32_APICBASE: + cpu_set_apic_base(x86_env_get_cpu(env)->apic_state, val); + break; + case MSR_EFER: + { + uint64_t update_mask; + + update_mask =3D 0; + if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_SYSCALL) { + update_mask |=3D MSR_EFER_SCE; + } + if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { + update_mask |=3D MSR_EFER_LME; + } + if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_FFXSR) { + update_mask |=3D MSR_EFER_FFXSR; + } + if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_NX) { + update_mask |=3D MSR_EFER_NXE; + } + if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { + update_mask |=3D MSR_EFER_SVME; + } + if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_FFXSR) { + update_mask |=3D MSR_EFER_FFXSR; + } + cpu_load_efer(env, (env->efer & ~update_mask) | + (val & update_mask)); + } + break; + case MSR_STAR: + env->star =3D val; + break; + case MSR_PAT: + env->pat =3D val; + break; + case MSR_VM_HSAVE_PA: + env->vm_hsave =3D val; + break; +#ifdef TARGET_X86_64 + case MSR_LSTAR: + env->lstar =3D val; + break; + case MSR_CSTAR: + env->cstar =3D val; + break; + case MSR_FMASK: + env->fmask =3D val; + break; + case MSR_FSBASE: + env->segs[R_FS].base =3D val; + break; + case MSR_GSBASE: + env->segs[R_GS].base =3D val; + break; + case MSR_KERNELGSBASE: + env->kernelgsbase =3D val; + break; +#endif + case MSR_MTRRphysBase(0): + case MSR_MTRRphysBase(1): + case MSR_MTRRphysBase(2): + case MSR_MTRRphysBase(3): + case MSR_MTRRphysBase(4): + case MSR_MTRRphysBase(5): + case MSR_MTRRphysBase(6): + case MSR_MTRRphysBase(7): + env->mtrr_var[((uint32_t)env->regs[R_ECX] - + MSR_MTRRphysBase(0)) / 2].base =3D val; + break; + case MSR_MTRRphysMask(0): + case MSR_MTRRphysMask(1): + case MSR_MTRRphysMask(2): + case MSR_MTRRphysMask(3): + case MSR_MTRRphysMask(4): + case MSR_MTRRphysMask(5): + case MSR_MTRRphysMask(6): + case MSR_MTRRphysMask(7): + env->mtrr_var[((uint32_t)env->regs[R_ECX] - + MSR_MTRRphysMask(0)) / 2].mask =3D val; + break; + case MSR_MTRRfix64K_00000: + env->mtrr_fixed[(uint32_t)env->regs[R_ECX] - + MSR_MTRRfix64K_00000] =3D val; + break; + case MSR_MTRRfix16K_80000: + case MSR_MTRRfix16K_A0000: + env->mtrr_fixed[(uint32_t)env->regs[R_ECX] - + MSR_MTRRfix16K_80000 + 1] =3D val; + break; + case MSR_MTRRfix4K_C0000: + case MSR_MTRRfix4K_C8000: + case MSR_MTRRfix4K_D0000: + case MSR_MTRRfix4K_D8000: + case MSR_MTRRfix4K_E0000: + case MSR_MTRRfix4K_E8000: + case MSR_MTRRfix4K_F0000: + case MSR_MTRRfix4K_F8000: + env->mtrr_fixed[(uint32_t)env->regs[R_ECX] - + MSR_MTRRfix4K_C0000 + 3] =3D val; + break; + case MSR_MTRRdefType: + env->mtrr_deftype =3D val; + break; + case MSR_MCG_STATUS: + env->mcg_status =3D val; + break; + case MSR_MCG_CTL: + if ((env->mcg_cap & MCG_CTL_P) + && (val =3D=3D 0 || val =3D=3D ~(uint64_t)0)) { + env->mcg_ctl =3D val; + } + break; + case MSR_TSC_AUX: + env->tsc_aux =3D val; + break; + case MSR_IA32_MISC_ENABLE: + env->msr_ia32_misc_enable =3D val; + break; + case MSR_IA32_BNDCFGS: + /* FIXME: #GP if reserved bits are set. */ + /* FIXME: Extend highest implemented bit of linear address. */ + env->msr_bndcfgs =3D val; + cpu_sync_bndcs_hflags(env); + break; + default: + if ((uint32_t)env->regs[R_ECX] >=3D MSR_MC0_CTL + && (uint32_t)env->regs[R_ECX] < MSR_MC0_CTL + + (4 * env->mcg_cap & 0xff)) { + uint32_t offset =3D (uint32_t)env->regs[R_ECX] - MSR_MC0_CTL; + if ((offset & 0x3) !=3D 0 + || (val =3D=3D 0 || val =3D=3D ~(uint64_t)0)) { + env->mce_banks[offset] =3D val; + } + break; + } + /* XXX: exception? */ + break; + } + + pd->m64.ReturnStatus =3D STATUS_SUCCESS; +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index b37393d93c..1ec4932ddc 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -190,6 +190,14 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_write_physical_memory(cpu, &ctx->data); break; =20 + case DbgKdReadMachineSpecificRegister: + kd_api_read_msr(cpu, &ctx->data); + break; + + case DbgKdWriteMachineSpecificRegister: + kd_api_write_msr(cpu, &ctx->data); + break; + case DbgKdGetVersionApi: kd_api_get_version(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425830887653.1463455231216; Tue, 26 Sep 2017 04:37:10 -0700 (PDT) Received: from localhost ([::1]:46855 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwoAi-0006SK-52 for importer@patchew.org; Tue, 26 Sep 2017 07:37:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60446) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnie-0006Go-9F for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnia-0001rX-AH for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:04 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52456) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnia-0001rI-2U for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:00 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 5C9D7540113; Tue, 26 Sep 2017 14:07:59 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:07:58 +0300 Message-ID: <150642407781.3900.3667954520393080307.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 41/43] windbg: implemented kd_api_search_memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 1 + windbgstub-utils.c | 30 ++++++++++++++++++++++++++++++ windbgstub.c | 4 ++++ 3 files changed, 35 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index 23cafb1a89..ba001ddb42 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -118,6 +118,7 @@ void kd_api_write_physical_memory(CPUState *cpu, Packet= Data *pd); void kd_api_get_version(CPUState *cpu, PacketData *pd); void kd_api_read_msr(CPUState *cpu, PacketData *pd); void kd_api_write_msr(CPUState *cpu, PacketData *pd); +void kd_api_search_memory(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 26bdb1f6ea..2d3fbcc41c 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -1540,6 +1540,36 @@ void kd_api_write_msr(CPUState *cpu, PacketData *pd) pd->m64.ReturnStatus =3D STATUS_SUCCESS; } =20 +void kd_api_search_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_SEARCH_MEMORY *m64c =3D &pd->m64.u.SearchMemory; + int s_len =3D MAX(1, ldq_p(&m64c->SearchLength)); + int p_len =3D MIN(ldl_p(&m64c->PatternLength), pd->extra_size); + target_ulong addr =3D ldq_p(&m64c->SearchAddress); + + uint8_t mem[s_len - 1 + p_len]; + + int err =3D cpu_memory_rw_debug(cpu, addr, mem, sizeof(mem), 0); + if (!err) { + int i; + pd->m64.ReturnStatus =3D STATUS_NO_MORE_ENTRIES; + for (i =3D 0; i < s_len; ++i) { + if (memcmp(mem + i, pd->extra, p_len) =3D=3D 0) { + m64c->FoundAddress =3D addr + i; + m64c->FoundAddress =3D ldq_p(&m64c->FoundAddress); + pd->m64.ReturnStatus =3D STATUS_SUCCESS; + break; + } + } + } else { + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + WINDBG_DEBUG("search_memory: No physical page mapped: " FMT_ADDR, + addr); + } + + pd->extra_size =3D 0; +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 1ec4932ddc..7cff6bc514 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -205,6 +205,10 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) case DbgKdClearAllInternalBreakpointsApi: return; =20 + case DbgKdSearchMemoryApi: + kd_api_search_memory(cpu, &ctx->data); + break; + default: kd_api_unsupported(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425264484299.73576208440954; Tue, 26 Sep 2017 04:27:44 -0700 (PDT) Received: from localhost ([::1]:46800 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwo1X-0006Hp-LF for importer@patchew.org; Tue, 26 Sep 2017 07:27:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60510) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnim-0006OR-56 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnig-0001us-GH for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:12 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52480) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnig-0001uW-84 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:06 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 729CF540115; Tue, 26 Sep 2017 14:08:05 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:08:03 +0300 Message-ID: <150642408350.3900.16985989168069353852.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 42/43] windbg: implemented kd_api_fill_memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 1 + windbgstub-utils.c | 36 ++++++++++++++++++++++++++++++++++++ windbgstub.c | 4 ++++ 3 files changed, 41 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index ba001ddb42..d1a10c862e 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -119,6 +119,7 @@ void kd_api_get_version(CPUState *cpu, PacketData *pd); void kd_api_read_msr(CPUState *cpu, PacketData *pd); void kd_api_write_msr(CPUState *cpu, PacketData *pd); void kd_api_search_memory(CPUState *cpu, PacketData *pd); +void kd_api_fill_memory(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 2d3fbcc41c..3832e0b116 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -1570,6 +1570,42 @@ void kd_api_search_memory(CPUState *cpu, PacketData = *pd) pd->extra_size =3D 0; } =20 +void kd_api_fill_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_FILL_MEMORY *m64c =3D &pd->m64.u.FillMemory; + + uint32_t len =3D ldl_p(&m64c->Length); + target_ulong addr =3D ldq_p(&m64c->Address); + uint16_t pattern =3D ldl_p(&m64c->PatternLength); + uint16_t flags =3D ldl_p(&m64c->Flags); + + uint8_t mem[len]; + int i, err; + for (i =3D 0; i < len; ++i) { + mem[i] =3D pd->extra[i % pattern]; + } + + switch (flags) { + case DBGKD_FILL_MEMORY_VIRTUAL: + err =3D cpu_memory_rw_debug(cpu, addr, mem, len, 1); + if (err) { + pd->m64.ReturnStatus =3D STATUS_UNSUCCESSFUL; + WINDBG_DEBUG("fill_memory: No physical page mapped: " FMT_ADDR, + addr); + } + break; + + case DBGKD_FILL_MEMORY_PHYSICAL: + cpu_physical_memory_rw(addr, mem, len, 1); + break; + + default: + break; + } + + pd->extra_size =3D 0; +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index 7cff6bc514..b01ddcf009 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -209,6 +209,10 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_search_memory(cpu, &ctx->data); break; =20 + case DbgKdFillMemoryApi: + kd_api_fill_memory(cpu, &ctx->data); + break; + default: kd_api_unsupported(cpu, &ctx->data); break; From nobody Mon Apr 29 08:02:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506425979495334.8391141497236; Tue, 26 Sep 2017 04:39:39 -0700 (PDT) Received: from localhost ([::1]:46869 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwoDA-0000NC-O7 for importer@patchew.org; Tue, 26 Sep 2017 07:39:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60544) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnir-0006TT-R6 for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwnim-0001wx-0n for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:17 -0400 Received: from mail.ispras.ru ([83.149.199.45]:52500) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwnil-0001wo-Pg for qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:08:11 -0400 Received: from Misha-PC.lan02.inno (unknown [85.142.117.226]) by mail.ispras.ru (Postfix) with ESMTPSA id 23446540117; Tue, 26 Sep 2017 14:08:11 +0300 (MSK) From: Mihail Abakumov To: qemu-devel@nongnu.org Date: Tue, 26 Sep 2017 14:08:09 +0300 Message-ID: <150642408958.3900.8830840266347440753.stgit@Misha-PC.lan02.inno> In-Reply-To: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> References: <150642384156.3900.3326424823772221077.stgit@Misha-PC.lan02.inno> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 83.149.199.45 Subject: [Qemu-devel] [PATCH 43/43] windbg: implemented kd_api_query_memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru, rkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Mihail Abakumov Signed-off-by: Pavel Dovgalyuk Signed-off-by: Dmitriy Koltunov --- include/exec/windbgstub-utils.h | 1 + windbgstub-utils.c | 14 ++++++++++++++ windbgstub.c | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-util= s.h index d1a10c862e..d44ae1918b 100755 --- a/include/exec/windbgstub-utils.h +++ b/include/exec/windbgstub-utils.h @@ -121,6 +121,7 @@ void kd_api_write_msr(CPUState *cpu, PacketData *pd); void kd_api_search_memory(CPUState *cpu, PacketData *pd); void kd_api_fill_memory(CPUState *cpu, PacketData *pd); void kd_api_unsupported(CPUState *cpu, PacketData *pd); +void kd_api_query_memory(CPUState *cpu, PacketData *pd); =20 SizedBuf kd_gen_exception_sc(CPUState *cpu); SizedBuf kd_gen_load_symbols_sc(CPUState *cpu); diff --git a/windbgstub-utils.c b/windbgstub-utils.c index 3832e0b116..3f5299c3f4 100755 --- a/windbgstub-utils.c +++ b/windbgstub-utils.c @@ -1606,6 +1606,20 @@ void kd_api_fill_memory(CPUState *cpu, PacketData *p= d) pd->extra_size =3D 0; } =20 +void kd_api_query_memory(CPUState *cpu, PacketData *pd) +{ + DBGKD_QUERY_MEMORY *mem =3D &pd->m64.u.QueryMemory; + + if (ldl_p(&mem->AddressSpace) =3D=3D DBGKD_QUERY_MEMORY_VIRTUAL) { + mem->AddressSpace =3D DBGKD_QUERY_MEMORY_PROCESS; + mem->Flags =3D DBGKD_QUERY_MEMORY_READ | + DBGKD_QUERY_MEMORY_WRITE | + DBGKD_QUERY_MEMORY_EXECUTE; + mem->AddressSpace =3D ldl_p(&mem->AddressSpace); + mem->Flags =3D ldl_p(&mem->Flags); + } +} + void kd_api_unsupported(CPUState *cpu, PacketData *pd) { WINDBG_ERROR("Catched unimplemented api %s", diff --git a/windbgstub.c b/windbgstub.c index b01ddcf009..338bc00859 100755 --- a/windbgstub.c +++ b/windbgstub.c @@ -213,6 +213,10 @@ static void windbg_process_manipulate_packet(ParsingCo= ntext *ctx) kd_api_fill_memory(cpu, &ctx->data); break; =20 + case DbgKdQueryMemoryApi: + kd_api_query_memory(cpu, &ctx->data); + break; + default: kd_api_unsupported(cpu, &ctx->data); break;