Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/818532/?format=api
{ "id": 818532, "url": "http://patchwork.ozlabs.org/api/patches/818532/?format=api", "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=api", "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=api", "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=api", "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" ] }