{"id":818532,"url":"http://patchwork.ozlabs.org/api/patches/818532/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/150642385735.3900.11116061336460614526.stgit@Misha-PC.lan02.inno/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<150642385735.3900.11116061336460614526.stgit@Misha-PC.lan02.inno>","list_archive_url":null,"date":"2017-09-26T11:04:17","name":"[02/43] windbg: added windbg's KD header file","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"6db0c71d550af33a4e58bf6dda5c04b147f2d80f","submitter":{"id":71645,"url":"http://patchwork.ozlabs.org/api/people/71645/?format=json","name":"Mikhail Abakumov","email":"mikhail.abakumov@ispras.ru"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/150642385735.3900.11116061336460614526.stgit@Misha-PC.lan02.inno/mbox/","series":[{"id":5104,"url":"http://patchwork.ozlabs.org/api/series/5104/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=5104","date":"2017-09-26T11:04:06","name":"Windbg supporting","version":1,"mbox":"http://patchwork.ozlabs.org/series/5104/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/818532/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/818532/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y1dQV1vtXz9tXP\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 26 Sep 2017 21:05:06 +1000 (AEST)","from localhost ([::1]:46686 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dwnfk-00035P-DK\n\tfor incoming@patchwork.ozlabs.org; Tue, 26 Sep 2017 07:05:04 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:58678)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <mikhail.abakumov@ispras.ru>) id 1dwnf6-00031q-66\n\tfor qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:26 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <mikhail.abakumov@ispras.ru>) id 1dwnf3-0008Ba-JI\n\tfor qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:24 -0400","from mail.ispras.ru ([83.149.199.45]:51614)\n\tby eggs.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <mikhail.abakumov@ispras.ru>) id 1dwnf2-0008AM-MD\n\tfor qemu-devel@nongnu.org; Tue, 26 Sep 2017 07:04:21 -0400","from Misha-PC.lan02.inno (unknown [85.142.117.226])\n\tby mail.ispras.ru (Postfix) with ESMTPSA id D7180540070;\n\tTue, 26 Sep 2017 14:04:18 +0300 (MSK)"],"From":"Mihail Abakumov <mikhail.abakumov@ispras.ru>","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":"7bit","X-detected-operating-system":"by eggs.gnu.org: Error: Short read from API\n\tsocket.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":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"sw@weilnetz.de, lprosek@redhat.com, dovgaluk@ispras.ru,\n\trkagan@virtuozzo.com, pbonzini@redhat.com, den@openvz.org","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"},"content":"Header file from windbg's source code describing the main structures.\n\nSigned-off-by: Mihail Abakumov <mikhail.abakumov@ispras.ru>\nSigned-off-by: Pavel Dovgalyuk <dovgaluk@ispras.ru>\nSigned-off-by: Dmitriy Koltunov <koltunov@ispras.ru>\n---\n include/exec/windbgkd.h         |  955 +++++++++++++++++++++++++++++++++++++++\n include/exec/windbgstub-utils.h |    1 \n 2 files changed, 956 insertions(+)\n create mode 100755 include/exec/windbgkd.h","diff":"diff --git a/include/exec/windbgkd.h b/include/exec/windbgkd.h\nnew file mode 100755\nindex 0000000000..916fe5aebb\n--- /dev/null\n+++ b/include/exec/windbgkd.h\n@@ -0,0 +1,955 @@\n+/*\n+ * windbgkd.h\n+ *\n+ * Copyright (c) 2010-2017 Institute for System Programming\n+ *                         of the Russian Academy of Sciences.\n+ *\n+ * This work is licensed under the terms of the GNU GPL, version 2 or later.\n+ * See the COPYING file in the top-level directory.\n+ *\n+ */\n+\n+#ifndef WINDBGKD_H\n+#define WINDBGKD_H\n+\n+/*\n+ * Packet Size and Control Stream Size\n+ */\n+#define PACKET_MAX_SIZE                     4096\n+#define DBGKD_MAXSTREAM                     16\n+\n+/*\n+ * Magic Packet IDs\n+ */\n+#define INITIAL_PACKET_ID                   0x80800000\n+#define SYNC_PACKET_ID                      0x00000800\n+#define RESET_PACKET_ID                     0x0018359b\n+\n+/*\n+ * Magic Packet bytes\n+ */\n+#define BREAKIN_PACKET                      0x62626262\n+#define BREAKIN_PACKET_BYTE                 0x62\n+#define PACKET_LEADER                       0x30303030\n+#define PACKET_LEADER_BYTE                  0x30\n+#define CONTROL_PACKET_LEADER               0x69696969\n+#define CONTROL_PACKET_LEADER_BYTE          0x69\n+#define PACKET_TRAILING_BYTE                0xaa\n+\n+/*\n+ * Packet Types\n+ */\n+#define PACKET_TYPE_UNUSED                  0\n+#define PACKET_TYPE_KD_STATE_CHANGE32       1\n+#define PACKET_TYPE_KD_STATE_MANIPULATE     2\n+#define PACKET_TYPE_KD_DEBUG_IO             3\n+#define PACKET_TYPE_KD_ACKNOWLEDGE          4\n+#define PACKET_TYPE_KD_RESEND               5\n+#define PACKET_TYPE_KD_RESET                6\n+#define PACKET_TYPE_KD_STATE_CHANGE64       7\n+#define PACKET_TYPE_KD_POLL_BREAKIN         8\n+#define PACKET_TYPE_KD_TRACE_IO             9\n+#define PACKET_TYPE_KD_CONTROL_REQUEST      10\n+#define PACKET_TYPE_KD_FILE_IO              11\n+#define PACKET_TYPE_MAX                     12\n+\n+/*\n+ * Wait State Change Types\n+ */\n+#define DbgKdMinimumStateChange             0x00003030\n+#define DbgKdExceptionStateChange           0x00003030\n+#define DbgKdLoadSymbolsStateChange         0x00003031\n+#define DbgKdCommandStringStateChange       0x00003032\n+#define DbgKdMaximumStateChange             0x00003033\n+\n+/*\n+ * This is combined with the basic state change code\n+ * if the state is from an alternate source\n+ */\n+#define DbgKdAlternateStateChange           0x00010000\n+\n+/*\n+ * Manipulate Types\n+ */\n+#define DbgKdMinimumManipulate              0x00003130\n+#define DbgKdReadVirtualMemoryApi           0x00003130\n+#define DbgKdWriteVirtualMemoryApi          0x00003131\n+#define DbgKdGetContextApi                  0x00003132\n+#define DbgKdSetContextApi                  0x00003133\n+#define DbgKdWriteBreakPointApi             0x00003134\n+#define DbgKdRestoreBreakPointApi           0x00003135\n+#define DbgKdContinueApi                    0x00003136\n+#define DbgKdReadControlSpaceApi            0x00003137\n+#define DbgKdWriteControlSpaceApi           0x00003138\n+#define DbgKdReadIoSpaceApi                 0x00003139\n+#define DbgKdWriteIoSpaceApi                0x0000313a\n+#define DbgKdRebootApi                      0x0000313b\n+#define DbgKdContinueApi2                   0x0000313c\n+#define DbgKdReadPhysicalMemoryApi          0x0000313d\n+#define DbgKdWritePhysicalMemoryApi         0x0000313e\n+#define DbgKdQuerySpecialCallsApi           0x0000313f\n+#define DbgKdSetSpecialCallApi              0x00003140\n+#define DbgKdClearSpecialCallsApi           0x00003141\n+#define DbgKdSetInternalBreakPointApi       0x00003142\n+#define DbgKdGetInternalBreakPointApi       0x00003143\n+#define DbgKdReadIoSpaceExtendedApi         0x00003144\n+#define DbgKdWriteIoSpaceExtendedApi        0x00003145\n+#define DbgKdGetVersionApi                  0x00003146\n+#define DbgKdWriteBreakPointExApi           0x00003147\n+#define DbgKdRestoreBreakPointExApi         0x00003148\n+#define DbgKdCauseBugCheckApi               0x00003149\n+#define DbgKdSwitchProcessor                0x00003150\n+#define DbgKdPageInApi                      0x00003151\n+#define DbgKdReadMachineSpecificRegister    0x00003152\n+#define DbgKdWriteMachineSpecificRegister   0x00003153\n+#define OldVlm1                             0x00003154\n+#define OldVlm2                             0x00003155\n+#define DbgKdSearchMemoryApi                0x00003156\n+#define DbgKdGetBusDataApi                  0x00003157\n+#define DbgKdSetBusDataApi                  0x00003158\n+#define DbgKdCheckLowMemoryApi              0x00003159\n+#define DbgKdClearAllInternalBreakpointsApi 0x0000315a\n+#define DbgKdFillMemoryApi                  0x0000315b\n+#define DbgKdQueryMemoryApi                 0x0000315c\n+#define DbgKdSwitchPartition                0x0000315d\n+#define DbgKdMaximumManipulate              0x0000315e\n+\n+/*\n+ * Debug I/O Types\n+ */\n+#define DbgKdPrintStringApi                 0x00003230\n+#define DbgKdGetStringApi                   0x00003231\n+\n+/*\n+ * Trace I/O Types\n+ */\n+#define DbgKdPrintTraceApi                  0x00003330\n+\n+/*\n+ * Control Request Types\n+ */\n+#define DbgKdRequestHardwareBp              0x00004300\n+#define DbgKdReleaseHardwareBp              0x00004301\n+\n+/*\n+ * File I/O Types\n+ */\n+#define DbgKdCreateFileApi                 0x00003430\n+#define DbgKdReadFileApi                   0x00003431\n+#define DbgKdWriteFileApi                  0x00003432\n+#define DbgKdCloseFileApi                  0x00003433\n+\n+/*\n+ * Control Report Flags\n+ */\n+#define REPORT_INCLUDES_SEGS                0x0001\n+#define REPORT_STANDARD_CS                  0x0002\n+\n+/*\n+ * Protocol Versions\n+ */\n+#define DBGKD_64BIT_PROTOCOL_VERSION1       5\n+#define DBGKD_64BIT_PROTOCOL_VERSION2       6\n+\n+/*\n+ * Query Memory Address Spaces\n+ */\n+#define DBGKD_QUERY_MEMORY_VIRTUAL          0\n+#define DBGKD_QUERY_MEMORY_PROCESS          0\n+#define DBGKD_QUERY_MEMORY_SESSION          1\n+#define DBGKD_QUERY_MEMORY_KERNEL           2\n+\n+/*\n+ * Query Memory Flags\n+ */\n+#define DBGKD_QUERY_MEMORY_READ             0x01\n+#define DBGKD_QUERY_MEMORY_WRITE            0x02\n+#define DBGKD_QUERY_MEMORY_EXECUTE          0x04\n+#define DBGKD_QUERY_MEMORY_FIXED            0x08\n+\n+/*\n+ * Internal Breakpoint Flags\n+ */\n+#define DBGKD_INTERNAL_BP_FLAG_COUNTONLY    0x01\n+#define DBGKD_INTERNAL_BP_FLAG_INVALID      0x02\n+#define DBGKD_INTERNAL_BP_FLAG_SUSPENDED    0x04\n+#define DBGKD_INTERNAL_BP_FLAG_DYING        0x08\n+\n+/*\n+ * Fill Memory Flags\n+ */\n+#define DBGKD_FILL_MEMORY_VIRTUAL           0x01\n+#define DBGKD_FILL_MEMORY_PHYSICAL          0x02\n+\n+/*\n+ * Physical Memory Caching Flags\n+ */\n+#define DBGKD_CACHING_DEFAULT               0\n+#define DBGKD_CACHING_CACHED                1\n+#define DBGKD_CACHING_UNCACHED              2\n+#define DBGKD_CACHING_WRITE_COMBINED        3\n+\n+/*\n+ * Partition Switch Flags\n+ */\n+#define DBGKD_PARTITION_DEFAULT             0x00\n+#define DBGKD_PARTITION_ALTERNATE           0x01\n+\n+/*\n+ * AMD64 Control Space types\n+ */\n+#define AMD64_DEBUG_CONTROL_SPACE_KPCR      0\n+#define AMD64_DEBUG_CONTROL_SPACE_KPRCB     1\n+#define AMD64_DEBUG_CONTROL_SPACE_KSPECIAL  2\n+#define AMD64_DEBUG_CONTROL_SPACE_KTHREAD   3\n+\n+/*\n+ * Maximum supported number of breakpoints\n+ */\n+#define KD_BREAKPOINT_MAX 32\n+\n+typedef uint8_t boolean_t;\n+typedef int32_t ntstatus_t;\n+\n+/*\n+ * NTSTATUS\n+ */\n+#define NT_SUCCESS(status)       ((ntstatus_t) (status) >= 0)\n+#ifndef STATUS_SUCCESS\n+#define STATUS_SUCCESS           ((ntstatus_t) 0x00000000)\n+#endif\n+#ifndef DBG_CONTINUE\n+#define DBG_CONTINUE             ((ntstatus_t) 0x00010002)\n+#endif\n+#ifndef STATUS_NO_MORE_ENTRIES\n+#define STATUS_NO_MORE_ENTRIES   ((ntstatus_t) 0x8000001A)\n+#endif\n+#ifndef STATUS_UNSUCCESSFUL\n+#define STATUS_UNSUCCESSFUL      ((ntstatus_t) 0xC0000001)\n+#endif\n+#ifndef STATUS_INVALID_PARAMETER\n+#define STATUS_INVALID_PARAMETER ((ntstatus_t) 0xC000000D)\n+#endif\n+\n+/*\n+ * KD Packet Structure\n+ */\n+typedef struct _KD_PACKET\n+{\n+    uint32_t PacketLeader;\n+    uint16_t PacketType;\n+    uint16_t ByteCount;\n+    uint32_t PacketId;\n+    uint32_t Checksum;\n+} KD_PACKET, *PKD_PACKET;\n+\n+/*\n+ * KD Context\n+ */\n+typedef struct _KD_CONTEXT\n+{\n+    uint32_t KdpDefaultRetries;\n+    boolean_t KdpControlCPending;\n+} KD_CONTEXT, *PKD_CONTEXT;\n+\n+/*\n+ * Control Sets for Supported Architectures\n+ */\n+typedef struct _X86_DBGKD_CONTROL_SET\n+{\n+    uint32_t TraceFlag;\n+    uint32_t Dr7;\n+    uint32_t CurrentSymbolStart;\n+    uint32_t CurrentSymbolEnd;\n+} X86_DBGKD_CONTROL_SET, *PX86_DBGKD_CONTROL_SET;\n+\n+typedef struct _ALPHA_DBGKD_CONTROL_SET\n+{\n+    uint32_t __padding;\n+} ALPHA_DBGKD_CONTROL_SET, *PALPHA_DBGKD_CONTROL_SET;\n+\n+typedef struct _IA64_DBGKD_CONTROL_SET\n+{\n+    uint32_t Continue;\n+    uint64_t CurrentSymbolStart;\n+    uint64_t CurrentSymbolEnd;\n+} IA64_DBGKD_CONTROL_SET, *PIA64_DBGKD_CONTROL_SET;\n+\n+typedef struct _AMD64_DBGKD_CONTROL_SET\n+{\n+    uint32_t TraceFlag;\n+    uint64_t Dr7;\n+    uint64_t CurrentSymbolStart;\n+    uint64_t CurrentSymbolEnd;\n+} AMD64_DBGKD_CONTROL_SET, *PAMD64_DBGKD_CONTROL_SET;\n+\n+typedef struct _ARM_DBGKD_CONTROL_SET\n+{\n+    uint32_t Continue;\n+    uint32_t CurrentSymbolStart;\n+    uint32_t CurrentSymbolEnd;\n+} ARM_DBGKD_CONTROL_SET, *PARM_DBGKD_CONTROL_SET;\n+\n+typedef struct _DBGKD_ANY_CONTROL_SET\n+{\n+    union\n+    {\n+        X86_DBGKD_CONTROL_SET X86ControlSet;\n+        ALPHA_DBGKD_CONTROL_SET AlphaControlSet;\n+        IA64_DBGKD_CONTROL_SET IA64ControlSet;\n+        AMD64_DBGKD_CONTROL_SET Amd64ControlSet;\n+        ARM_DBGKD_CONTROL_SET ARMControlSet;\n+    };\n+} DBGKD_ANY_CONTROL_SET, *PDBGKD_ANY_CONTROL_SET;\n+\n+#if defined(TARGET_I386)\n+typedef X86_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET;\n+#elif defined(TARGET_X86_64)\n+typedef AMD64_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET;\n+#elif defined(TARGET_ARM)\n+typedef ARM_DBGKD_CONTROL_SET DBGKD_CONTROL_SET, *PDBGKD_CONTROL_SET;\n+#else\n+#error Unsupported Architecture\n+#endif\n+\n+/*\n+ * EXCEPTION_RECORD Structures\n+ */\n+typedef struct _DBGKM_EXCEPTION_RECORD32 {\n+    int32_t ExceptionCode;\n+    uint32_t ExceptionFlags;\n+    uint32_t ExceptionRecord;\n+    uint32_t ExceptionAddress;\n+    uint32_t NumberParameters;\n+    uint32_t ExceptionInformation[15];\n+} DBGKM_EXCEPTION_RECORD32, *PDBGKM_EXCEPTION_RECORD32;\n+\n+typedef struct _DBGKM_EXCEPTION_RECORD64 {\n+    int32_t ExceptionCode;\n+    uint32_t ExceptionFlags;\n+    uint64_t ExceptionRecord;\n+    uint64_t ExceptionAddress;\n+    uint32_t NumberParameters;\n+    uint32_t __unusedAligment;\n+    uint64_t ExceptionInformation[15];\n+} DBGKM_EXCEPTION_RECORD64, *PDBGKM_EXCEPTION_RECORD64;\n+\n+/*\n+ * DBGKM Structure for Exceptions\n+ */\n+typedef struct _DBGKM_EXCEPTION32\n+{\n+    DBGKM_EXCEPTION_RECORD32 ExceptionRecord;\n+    uint32_t FirstChance;\n+} DBGKM_EXCEPTION32, *PDBGKM_EXCEPTION32;\n+\n+typedef struct _DBGKM_EXCEPTION64\n+{\n+    DBGKM_EXCEPTION_RECORD64 ExceptionRecord;\n+    uint32_t FirstChance;\n+} DBGKM_EXCEPTION64, *PDBGKM_EXCEPTION64;\n+\n+/*\n+ * DBGKD Structure for State Change\n+ */\n+typedef struct _X86_DBGKD_CONTROL_REPORT\n+{\n+    uint32_t   Dr6;\n+    uint32_t   Dr7;\n+    uint16_t  InstructionCount;\n+    uint16_t  ReportFlags;\n+    uint8_t   InstructionStream[DBGKD_MAXSTREAM];\n+    uint16_t  SegCs;\n+    uint16_t  SegDs;\n+    uint16_t  SegEs;\n+    uint16_t  SegFs;\n+    uint32_t   EFlags;\n+} X86_DBGKD_CONTROL_REPORT, *PX86_DBGKD_CONTROL_REPORT;\n+\n+typedef struct _ALPHA_DBGKD_CONTROL_REPORT\n+{\n+    uint32_t InstructionCount;\n+    uint8_t InstructionStream[DBGKD_MAXSTREAM];\n+} ALPHA_DBGKD_CONTROL_REPORT, *PALPHA_DBGKD_CONTROL_REPORT;\n+\n+typedef struct _IA64_DBGKD_CONTROL_REPORT\n+{\n+    uint32_t InstructionCount;\n+    uint8_t InstructionStream[DBGKD_MAXSTREAM];\n+} IA64_DBGKD_CONTROL_REPORT, *PIA64_DBGKD_CONTROL_REPORT;\n+\n+typedef struct _AMD64_DBGKD_CONTROL_REPORT\n+{\n+    uint64_t Dr6;\n+    uint64_t Dr7;\n+    uint32_t EFlags;\n+    uint16_t InstructionCount;\n+    uint16_t ReportFlags;\n+    uint8_t InstructionStream[DBGKD_MAXSTREAM];\n+    uint16_t SegCs;\n+    uint16_t SegDs;\n+    uint16_t SegEs;\n+    uint16_t SegFs;\n+} AMD64_DBGKD_CONTROL_REPORT, *PAMD64_DBGKD_CONTROL_REPORT;\n+\n+typedef struct _ARM_DBGKD_CONTROL_REPORT\n+{\n+    uint32_t Cpsr;\n+    uint32_t InstructionCount;\n+    uint8_t InstructionStream[DBGKD_MAXSTREAM];\n+} ARM_DBGKD_CONTROL_REPORT, *PARM_DBGKD_CONTROL_REPORT;\n+\n+typedef struct _DBGKD_ANY_CONTROL_REPORT\n+{\n+    union\n+    {\n+        X86_DBGKD_CONTROL_REPORT X86ControlReport;\n+        ALPHA_DBGKD_CONTROL_REPORT AlphaControlReport;\n+        IA64_DBGKD_CONTROL_REPORT IA64ControlReport;\n+        AMD64_DBGKD_CONTROL_REPORT Amd64ControlReport;\n+        ARM_DBGKD_CONTROL_REPORT ARMControlReport;\n+    };\n+} DBGKD_ANY_CONTROL_REPORT, *PDBGKD_ANY_CONTROL_REPORT;\n+\n+#if defined(TARGET_I386)\n+typedef X86_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_REPORT;\n+#elif defined(TARGET_X86_64)\n+typedef AMD64_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_REPORT;\n+#elif defined(TARGET_ARM)\n+typedef ARM_DBGKD_CONTROL_REPORT DBGKD_CONTROL_REPORT, *PDBGKD_CONTROL_REPORT;\n+#else\n+#error Unsupported Architecture\n+#endif\n+\n+/*\n+ * DBGKD Structure for Debug I/O Type Print String\n+ */\n+typedef struct _DBGKD_PRINT_STRING\n+{\n+    uint32_t LengthOfString;\n+} DBGKD_PRINT_STRING, *PDBGKD_PRINT_STRING;\n+\n+/*\n+ * DBGKD Structure for Debug I/O Type Get String\n+ */\n+typedef struct _DBGKD_GET_STRING\n+{\n+    uint32_t LengthOfPromptString;\n+    uint32_t LengthOfStringRead;\n+} DBGKD_GET_STRING, *PDBGKD_GET_STRING;\n+\n+/*\n+ * DBGKD Structure for Debug I/O\n+ */\n+typedef struct _DBGKD_DEBUG_IO\n+{\n+    uint32_t ApiNumber;\n+    uint16_t ProcessorLevel;\n+    uint16_t Processor;\n+    union\n+    {\n+        DBGKD_PRINT_STRING PrintString;\n+        DBGKD_GET_STRING GetString;\n+    } u;\n+} DBGKD_DEBUG_IO, *PDBGKD_DEBUG_IO;\n+\n+/*\n+ * DBGkD Structure for Command String\n+ */\n+typedef struct _DBGKD_COMMAND_STRING\n+{\n+    uint32_t Flags;\n+    uint32_t Reserved1;\n+    uint64_t Reserved2[7];\n+} DBGKD_COMMAND_STRING, *PDBGKD_COMMAND_STRING;\n+\n+/*\n+ * DBGKD Structure for Load Symbols\n+ */\n+typedef struct _DBGKD_LOAD_SYMBOLS32\n+{\n+    uint32_t PathNameLength;\n+    uint32_t BaseOfDll;\n+    uint32_t ProcessId;\n+    uint32_t CheckSum;\n+    uint32_t SizeOfImage;\n+    boolean_t UnloadSymbols;\n+} DBGKD_LOAD_SYMBOLS32, *PDBGKD_LOAD_SYMBOLS32;\n+\n+typedef struct _DBGKD_LOAD_SYMBOLS64\n+{\n+    uint32_t PathNameLength;\n+    uint64_t BaseOfDll;\n+    uint64_t ProcessId;\n+    uint32_t CheckSum;\n+    uint32_t SizeOfImage;\n+    boolean_t UnloadSymbols;\n+} DBGKD_LOAD_SYMBOLS64, *PDBGKD_LOAD_SYMBOLS64;\n+\n+/*\n+ * DBGKD Structure for Wait State Change\n+ */\n+typedef struct _DBGKD_WAIT_STATE_CHANGE32\n+{\n+    uint32_t NewState;\n+    uint16_t ProcessorLevel;\n+    uint16_t Processor;\n+    uint32_t NumberProcessors;\n+    uint32_t Thread;\n+    uint32_t ProgramCounter;\n+    union\n+    {\n+        DBGKM_EXCEPTION32 Exception;\n+        DBGKD_LOAD_SYMBOLS32 LoadSymbols;\n+    } u;\n+} DBGKD_WAIT_STATE_CHANGE32, *PDBGKD_WAIT_STATE_CHANGE32;\n+\n+typedef struct _DBGKD_WAIT_STATE_CHANGE64\n+{\n+    uint32_t NewState;\n+    uint16_t ProcessorLevel;\n+    uint16_t Processor;\n+    uint32_t NumberProcessors;\n+    uint64_t Thread;\n+    uint64_t ProgramCounter;\n+    union\n+    {\n+        DBGKM_EXCEPTION64 Exception;\n+        DBGKD_LOAD_SYMBOLS64 LoadSymbols;\n+    } u;\n+} DBGKD_WAIT_STATE_CHANGE64, *PDBGKD_WAIT_STATE_CHANGE64;\n+\n+typedef struct _DBGKD_ANY_WAIT_STATE_CHANGE\n+{\n+    uint32_t NewState;\n+    uint16_t ProcessorLevel;\n+    uint16_t Processor;\n+    uint32_t NumberProcessors;\n+    uint64_t Thread;\n+    uint64_t ProgramCounter;\n+    union\n+    {\n+        DBGKM_EXCEPTION64 Exception;\n+        DBGKD_LOAD_SYMBOLS64 LoadSymbols;\n+        DBGKD_COMMAND_STRING CommandString;\n+    } u;\n+    union\n+    {\n+        DBGKD_CONTROL_REPORT ControlReport;\n+        DBGKD_ANY_CONTROL_REPORT AnyControlReport;\n+    };\n+} DBGKD_ANY_WAIT_STATE_CHANGE, *PDBGKD_ANY_WAIT_STATE_CHANGE;\n+\n+/*\n+ * DBGKD Manipulate Structures\n+ */\n+typedef struct _DBGKD_READ_MEMORY32\n+{\n+    uint32_t TargetBaseAddress;\n+    uint32_t TransferCount;\n+    uint32_t ActualBytesRead;\n+} DBGKD_READ_MEMORY32, *PDBGKD_READ_MEMORY32;\n+\n+typedef struct _DBGKD_READ_MEMORY64\n+{\n+    uint64_t TargetBaseAddress;\n+    uint32_t TransferCount;\n+    uint32_t ActualBytesRead;\n+} DBGKD_READ_MEMORY64, *PDBGKD_READ_MEMORY64;\n+\n+typedef struct _DBGKD_WRITE_MEMORY32\n+{\n+    uint32_t TargetBaseAddress;\n+    uint32_t TransferCount;\n+    uint32_t ActualBytesWritten;\n+} DBGKD_WRITE_MEMORY32, *PDBGKD_WRITE_MEMORY32;\n+\n+typedef struct _DBGKD_WRITE_MEMORY64\n+{\n+    uint64_t TargetBaseAddress;\n+    uint32_t TransferCount;\n+    uint32_t ActualBytesWritten;\n+} DBGKD_WRITE_MEMORY64, *PDBGKD_WRITE_MEMORY64;\n+\n+typedef struct _DBGKD_GET_CONTEXT\n+{\n+    uint32_t Unused;\n+} DBGKD_GET_CONTEXT, *PDBGKD_GET_CONTEXT;\n+\n+typedef struct _DBGKD_SET_CONTEXT\n+{\n+    uint32_t ContextFlags;\n+} DBGKD_SET_CONTEXT, *PDBGKD_SET_CONTEXT;\n+\n+typedef struct _DBGKD_WRITE_BREAKPOINT32\n+{\n+    uint32_t BreakPointAddress;\n+    uint32_t BreakPointHandle;\n+} DBGKD_WRITE_BREAKPOINT32, *PDBGKD_WRITE_BREAKPOINT32;\n+\n+typedef struct _DBGKD_WRITE_BREAKPOINT64\n+{\n+    uint64_t BreakPointAddress;\n+    uint32_t BreakPointHandle;\n+} DBGKD_WRITE_BREAKPOINT64, *PDBGKD_WRITE_BREAKPOINT64;\n+\n+typedef struct _DBGKD_RESTORE_BREAKPOINT\n+{\n+    uint32_t BreakPointHandle;\n+} DBGKD_RESTORE_BREAKPOINT, *PDBGKD_RESTORE_BREAKPOINT;\n+\n+typedef struct _DBGKD_CONTINUE\n+{\n+    ntstatus_t ContinueStatus;\n+} DBGKD_CONTINUE, *PDBGKD_CONTINUE;\n+\n+#pragma pack(push, 4)\n+typedef struct _DBGKD_CONTINUE2\n+{\n+    ntstatus_t ContinueStatus;\n+    union\n+    {\n+        DBGKD_CONTROL_SET ControlSet;\n+        DBGKD_ANY_CONTROL_SET AnyControlSet;\n+    };\n+} DBGKD_CONTINUE2, *PDBGKD_CONTINUE2;\n+#pragma pack(pop)\n+\n+typedef struct _DBGKD_READ_WRITE_IO32\n+{\n+    uint32_t IoAddress;\n+    uint32_t DataSize;\n+    uint32_t DataValue;\n+} DBGKD_READ_WRITE_IO32, *PDBGKD_READ_WRITE_IO32;\n+\n+typedef struct _DBGKD_READ_WRITE_IO64\n+{\n+    uint64_t IoAddress;\n+    uint32_t DataSize;\n+    uint32_t DataValue;\n+} DBGKD_READ_WRITE_IO64, *PDBGKD_READ_WRITE_IO64;\n+\n+typedef struct _DBGKD_READ_WRITE_IO_EXTENDED32\n+{\n+    uint32_t DataSize;\n+    uint32_t InterfaceType;\n+    uint32_t BusNumber;\n+    uint32_t AddressSpace;\n+    uint32_t IoAddress;\n+    uint32_t DataValue;\n+} DBGKD_READ_WRITE_IO_EXTENDED32, *PDBGKD_READ_WRITE_IO_EXTENDED32;\n+\n+typedef struct _DBGKD_READ_WRITE_IO_EXTENDED64\n+{\n+    uint32_t DataSize;\n+    uint32_t InterfaceType;\n+    uint32_t BusNumber;\n+    uint32_t AddressSpace;\n+    uint64_t IoAddress;\n+    uint32_t DataValue;\n+} DBGKD_READ_WRITE_IO_EXTENDED64, *PDBGKD_READ_WRITE_IO_EXTENDED64;\n+\n+typedef struct _DBGKD_READ_WRITE_MSR\n+{\n+    uint32_t Msr;\n+    uint32_t DataValueLow;\n+    uint32_t DataValueHigh;\n+} DBGKD_READ_WRITE_MSR, *PDBGKD_READ_WRITE_MSR;\n+\n+typedef struct _DBGKD_QUERY_SPECIAL_CALLS\n+{\n+    uint32_t NumberOfSpecialCalls;\n+} DBGKD_QUERY_SPECIAL_CALLS, *PDBGKD_QUERY_SPECIAL_CALLS;\n+\n+typedef struct _DBGKD_SET_SPECIAL_CALL32\n+{\n+    uint32_t SpecialCall;\n+} DBGKD_SET_SPECIAL_CALL32, *PDBGKD_SET_SPECIAL_CALL32;\n+\n+typedef struct _DBGKD_SET_SPECIAL_CALL64\n+{\n+    uint64_t SpecialCall;\n+} DBGKD_SET_SPECIAL_CALL64, *PDBGKD_SET_SPECIAL_CALL64;\n+\n+typedef struct _DBGKD_SET_INTERNAL_BREAKPOINT32\n+{\n+    uint32_t BreakpointAddress;\n+    uint32_t Flags;\n+} DBGKD_SET_INTERNAL_BREAKPOINT32, *PDBGKD_SET_INTERNAL_BREAKPOINT32;\n+\n+typedef struct _DBGKD_SET_INTERNAL_BREAKPOINT64\n+{\n+    uint64_t BreakpointAddress;\n+    uint32_t Flags;\n+} DBGKD_SET_INTERNAL_BREAKPOINT64, *PDBGKD_SET_INTERNAL_BREAKPOINT64;\n+\n+typedef struct _DBGKD_GET_INTERNAL_BREAKPOINT32\n+{\n+    uint32_t BreakpointAddress;\n+    uint32_t Flags;\n+    uint32_t Calls;\n+    uint32_t MaxCallsPerPeriod;\n+    uint32_t MinInstructions;\n+    uint32_t MaxInstructions;\n+    uint32_t TotalInstructions;\n+} DBGKD_GET_INTERNAL_BREAKPOINT32, *PDBGKD_GET_INTERNAL_BREAKPOINT32;\n+\n+typedef struct _DBGKD_GET_INTERNAL_BREAKPOINT64\n+{\n+    uint64_t BreakpointAddress;\n+    uint32_t Flags;\n+    uint32_t Calls;\n+    uint32_t MaxCallsPerPeriod;\n+    uint32_t MinInstructions;\n+    uint32_t MaxInstructions;\n+    uint32_t TotalInstructions;\n+} DBGKD_GET_INTERNAL_BREAKPOINT64, *PDBGKD_GET_INTERNAL_BREAKPOINT64;\n+\n+typedef struct _DBGKD_GET_VERSION32\n+{\n+    uint16_t MajorVersion;\n+    uint16_t MinorVersion;\n+    uint16_t ProtocolVersion;\n+    uint16_t Flags;\n+    uint32_t KernBase;\n+    uint32_t PsLoadedModuleList;\n+    uint16_t MachineType;\n+    uint16_t ThCallbackStack;\n+    uint16_t NextCallback;\n+    uint16_t FramePointer;\n+    uint32_t KiCallUserMode;\n+    uint32_t KeUserCallbackDispatcher;\n+    uint32_t BreakpointWithStatus;\n+    uint32_t DebuggerDataList;\n+} DBGKD_GET_VERSION32, *PDBGKD_GET_VERSION32;\n+\n+typedef struct _DBGKD_GET_VERSION64\n+{\n+    uint16_t MajorVersion;\n+    uint16_t MinorVersion;\n+    uint8_t ProtocolVersion;\n+    uint8_t KdSecondaryVersion;\n+    uint16_t Flags;\n+    uint16_t MachineType;\n+    uint8_t MaxPacketType;\n+    uint8_t MaxStateChange;\n+    uint8_t MaxManipulate;\n+    uint8_t Simulation;\n+    uint16_t Unused[1];\n+    uint64_t KernBase;\n+    uint64_t PsLoadedModuleList;\n+    uint64_t DebuggerDataList;\n+} DBGKD_GET_VERSION64, *PDBGKD_GET_VERSION64;\n+\n+typedef struct _DBGKD_BREAKPOINTEX\n+{\n+    uint32_t BreakPointCount;\n+    ntstatus_t ContinueStatus;\n+} DBGKD_BREAKPOINTEX, *PDBGKD_BREAKPOINTEX;\n+\n+typedef struct _DBGKD_SEARCH_MEMORY\n+{\n+    union\n+    {\n+        uint64_t SearchAddress;\n+        uint64_t FoundAddress;\n+    };\n+    uint64_t SearchLength;\n+    uint32_t PatternLength;\n+} DBGKD_SEARCH_MEMORY, *PDBGKD_SEARCH_MEMORY;\n+\n+typedef struct _DBGKD_GET_SET_BUS_DATA\n+{\n+    uint32_t BusDataType;\n+    uint32_t BusNumber;\n+    uint32_t SlotNumber;\n+    uint32_t Offset;\n+    uint32_t Length;\n+} DBGKD_GET_SET_BUS_DATA, *PDBGKD_GET_SET_BUS_DATA;\n+\n+typedef struct _DBGKD_FILL_MEMORY\n+{\n+    uint64_t Address;\n+    uint32_t Length;\n+    uint16_t Flags;\n+    uint16_t PatternLength;\n+} DBGKD_FILL_MEMORY, *PDBGKD_FILL_MEMORY;\n+\n+typedef struct _DBGKD_QUERY_MEMORY\n+{\n+    uint64_t Address;\n+    uint64_t Reserved;\n+    uint32_t AddressSpace;\n+    uint32_t Flags;\n+} DBGKD_QUERY_MEMORY, *PDBGKD_QUERY_MEMORY;\n+\n+typedef struct _DBGKD_SWITCH_PARTITION\n+{\n+    uint32_t Partition;\n+} DBGKD_SWITCH_PARTITION;\n+\n+/*\n+ * DBGKD Structure for Manipulate\n+ */\n+typedef struct _DBGKD_MANIPULATE_STATE32\n+{\n+    uint32_t ApiNumber;\n+    uint16_t ProcessorLevel;\n+    uint16_t Processor;\n+    ntstatus_t ReturnStatus;\n+    union\n+    {\n+        DBGKD_READ_MEMORY32 ReadMemory;\n+        DBGKD_WRITE_MEMORY32 WriteMemory;\n+        DBGKD_READ_MEMORY64 ReadMemory64;\n+        DBGKD_WRITE_MEMORY64 WriteMemory64;\n+        DBGKD_GET_CONTEXT GetContext;\n+        DBGKD_SET_CONTEXT SetContext;\n+        DBGKD_WRITE_BREAKPOINT32 WriteBreakPoint;\n+        DBGKD_RESTORE_BREAKPOINT RestoreBreakPoint;\n+        DBGKD_CONTINUE Continue;\n+        DBGKD_CONTINUE2 Continue2;\n+        DBGKD_READ_WRITE_IO32 ReadWriteIo;\n+        DBGKD_READ_WRITE_IO_EXTENDED32 ReadWriteIoExtended;\n+        DBGKD_QUERY_SPECIAL_CALLS QuerySpecialCalls;\n+        DBGKD_SET_SPECIAL_CALL32 SetSpecialCall;\n+        DBGKD_SET_INTERNAL_BREAKPOINT32 SetInternalBreakpoint;\n+        DBGKD_GET_INTERNAL_BREAKPOINT32 GetInternalBreakpoint;\n+        DBGKD_GET_VERSION32 GetVersion32;\n+        DBGKD_BREAKPOINTEX BreakPointEx;\n+        DBGKD_READ_WRITE_MSR ReadWriteMsr;\n+        DBGKD_SEARCH_MEMORY SearchMemory;\n+        DBGKD_GET_SET_BUS_DATA GetSetBusData;\n+        DBGKD_FILL_MEMORY FillMemory;\n+        DBGKD_QUERY_MEMORY QueryMemory;\n+        DBGKD_SWITCH_PARTITION SwitchPartition;\n+    } u;\n+} DBGKD_MANIPULATE_STATE32, *PDBGKD_MANIPULATE_STATE32;\n+\n+typedef struct _DBGKD_MANIPULATE_STATE64\n+{\n+    uint32_t ApiNumber;\n+    uint16_t ProcessorLevel;\n+    uint16_t Processor;\n+    ntstatus_t ReturnStatus;\n+    union\n+    {\n+        DBGKD_READ_MEMORY64 ReadMemory;\n+        DBGKD_WRITE_MEMORY64 WriteMemory;\n+        DBGKD_GET_CONTEXT GetContext;\n+        DBGKD_SET_CONTEXT SetContext;\n+        DBGKD_WRITE_BREAKPOINT64 WriteBreakPoint;\n+        DBGKD_RESTORE_BREAKPOINT RestoreBreakPoint;\n+        DBGKD_CONTINUE Continue;\n+        DBGKD_CONTINUE2 Continue2;\n+        DBGKD_READ_WRITE_IO64 ReadWriteIo;\n+        DBGKD_READ_WRITE_IO_EXTENDED64 ReadWriteIoExtended;\n+        DBGKD_QUERY_SPECIAL_CALLS QuerySpecialCalls;\n+        DBGKD_SET_SPECIAL_CALL64 SetSpecialCall;\n+        DBGKD_SET_INTERNAL_BREAKPOINT64 SetInternalBreakpoint;\n+        DBGKD_GET_INTERNAL_BREAKPOINT64 GetInternalBreakpoint;\n+        DBGKD_GET_VERSION64 GetVersion64;\n+        DBGKD_BREAKPOINTEX BreakPointEx;\n+        DBGKD_READ_WRITE_MSR ReadWriteMsr;\n+        DBGKD_SEARCH_MEMORY SearchMemory;\n+        DBGKD_GET_SET_BUS_DATA GetSetBusData;\n+        DBGKD_FILL_MEMORY FillMemory;\n+        DBGKD_QUERY_MEMORY QueryMemory;\n+        DBGKD_SWITCH_PARTITION SwitchPartition;\n+    } u;\n+} DBGKD_MANIPULATE_STATE64, *PDBGKD_MANIPULATE_STATE64;\n+\n+/*\n+ * File I/O Structure\n+ */\n+typedef struct _DBGKD_CREATE_FILE\n+{\n+    uint32_t DesiredAccess;\n+    uint32_t FileAttributes;\n+    uint32_t ShareAccess;\n+    uint32_t CreateDisposition;\n+    uint32_t CreateOptions;\n+    uint64_t Handle;\n+    uint64_t Length;\n+} DBGKD_CREATE_FILE, *PDBGKD_CREATE_FILE;\n+\n+typedef struct _DBGKD_READ_FILE\n+{\n+    uint64_t Handle;\n+    uint64_t Offset;\n+    uint32_t Length;\n+} DBGKD_READ_FILE, *PDBGKD_READ_FILE;\n+\n+typedef struct _DBGKD_WRITE_FILE\n+{\n+    uint64_t Handle;\n+    uint64_t Offset;\n+    uint32_t Length;\n+} DBGKD_WRITE_FILE, *PDBGKD_WRITE_FILE;\n+\n+typedef struct _DBGKD_CLOSE_FILE\n+{\n+    uint64_t Handle;\n+} DBGKD_CLOSE_FILE, *PDBGKD_CLOSE_FILE;\n+\n+typedef struct _DBGKD_FILE_IO\n+{\n+    uint32_t ApiNumber;\n+    uint32_t Status;\n+    union\n+    {\n+        uint64_t ReserveSpace[7];\n+        DBGKD_CREATE_FILE CreateFile;\n+        DBGKD_READ_FILE ReadFile;\n+        DBGKD_WRITE_FILE WriteFile;\n+        DBGKD_CLOSE_FILE CloseFile;\n+    } u;\n+} DBGKD_FILE_IO, *PDBGKD_FILE_IO;\n+\n+\n+/*\n+ * Control Request Structure\n+ */\n+typedef struct _DBGKD_REQUEST_BREAKPOINT\n+{\n+    uint32_t HardwareBreakPointNumber;\n+    uint32_t Available;\n+} DBGKD_REQUEST_BREAKPOINT, *PDBGKD_REQUEST_BREAKPOINT;\n+\n+typedef struct _DBGKD_RELEASE_BREAKPOINT\n+{\n+    uint32_t HardwareBreakPointNumber;\n+    uint32_t Released;\n+} DBGKD_RELEASE_BREAKPOINT, *PDBGKD_RELEASE_BREAKPOINT;\n+\n+typedef struct _DBGKD_CONTROL_REQUEST\n+{\n+    uint32_t ApiNumber;\n+    union\n+    {\n+        DBGKD_REQUEST_BREAKPOINT RequestBreakpoint;\n+        DBGKD_RELEASE_BREAKPOINT ReleaseBreakpoint;\n+    } u;\n+} DBGKD_CONTROL_REQUEST, *PDBGKD_CONTROL_REQUEST;\n+\n+/*\n+ * Trace I/O Structure\n+ */\n+typedef struct _DBGKD_PRINT_TRACE\n+{\n+    uint32_t LengthOfData;\n+} DBGKD_PRINT_TRACE, *PDBGKD_PRINT_TRACE;\n+\n+typedef struct _DBGKD_TRACE_IO\n+{\n+   uint32_t ApiNumber;\n+   uint16_t ProcessorLevel;\n+   uint16_t Processor;\n+   union\n+   {\n+       uint64_t ReserveSpace[7];\n+       DBGKD_PRINT_TRACE PrintTrace;\n+   } u;\n+} DBGKD_TRACE_IO, *PDBGKD_TRACE_IO;\n+\n+#endif\ndiff --git a/include/exec/windbgstub-utils.h b/include/exec/windbgstub-utils.h\nindex 67d190bf6c..2390597f1f 100755\n--- a/include/exec/windbgstub-utils.h\n+++ b/include/exec/windbgstub-utils.h\n@@ -14,5 +14,6 @@\n \n #include \"qemu/osdep.h\"\n #include \"exec/windbgstub.h\"\n+#include \"exec/windbgkd.h\"\n \n #endif\n","prefixes":["02/43"]}