2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/kd64/kddata.c
5 * PURPOSE: Contains all global variables and settings for KD64
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES ******************************************************************/
12 #include "../mm/ARM3/miarm.h"
16 VOID NTAPI
RtlpBreakWithStatusInstruction(VOID
);
19 // Apply the KIPCR WDK workaround for x86 and AMD64
21 #if defined(_X86_) || defined(_AMD64_)
27 #define KPCR_SELF_PCR_OFFSET FIELD_OFFSET(KPCR, Self)
28 #define KPCR_CURRENT_PRCB_OFFSET FIELD_OFFSET(KPCR, Prcb)
29 #define KPCR_CONTAINED_PRCB_OFFSET FIELD_OFFSET(KPCR, PrcbData)
30 #define KPCR_INITIAL_STACK_OFFSET 0
31 #define KPCR_STACK_LIMIT_OFFSET 0
32 #define KPRCB_PCR_PAGE_OFFSET 0
34 #elif defined(_AMD64_)
36 #define KPCR_SELF_PCR_OFFSET FIELD_OFFSET(KPCR, Self)
37 #define KPCR_CURRENT_PRCB_OFFSET FIELD_OFFSET(KPCR, CurrentPrcb)
38 #define KPCR_CONTAINED_PRCB_OFFSET FIELD_OFFSET(KPCR, Prcb)
39 #define KPCR_INITIAL_STACK_OFFSET 0
40 #define KPCR_STACK_LIMIT_OFFSET 0
41 #define KPRCB_PCR_PAGE_OFFSET 0
45 #define KPCR_SELF_PCR_OFFSET 0
46 #define KPCR_CURRENT_PRCB_OFFSET FIELD_OFFSET(KPCR, Prcb)
47 #define KPCR_CONTAINED_PRCB_OFFSET 0
48 #define KPCR_INITIAL_STACK_OFFSET FIELD_OFFSET(KPCR, InitialStack)
49 #define KPCR_STACK_LIMIT_OFFSET FIELD_OFFSET(KPCR, StackLimit)
50 #define KPRCB_PCR_PAGE_OFFSET FIELD_OFFSET(KPRCB, PcrPage)
53 #error Unsupported Architecture
56 /* GLOBALS *******************************************************************/
61 KD_CONTEXT KdpContext
;
62 BOOLEAN KdpPortLocked
;
63 KSPIN_LOCK KdpDebuggerLock
;
64 BOOLEAN KdpControlCPressed
;
65 BOOLEAN KdpContextSent
;
68 // Debug Trap Handlers
70 PKDEBUG_ROUTINE KiDebugRoutine
= KdpStub
;
71 PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
;
74 // Debugger Configuration Settings
76 BOOLEAN KdBreakAfterSymbolLoad
;
77 BOOLEAN KdPitchDebugger
;
78 BOOLEAN _KdDebuggerNotPresent
;
79 BOOLEAN _KdDebuggerEnabled
;
80 BOOLEAN KdAutoEnableOnEvent
;
81 BOOLEAN KdBlockEnable
;
82 BOOLEAN KdIgnoreUmExceptions
;
83 BOOLEAN KdPreviouslyEnabled
;
84 BOOLEAN KdpDebuggerStructuresInitialized
;
85 BOOLEAN KdEnteredDebugger
;
87 LARGE_INTEGER KdPerformanceCounterRate
;
92 BREAKPOINT_ENTRY KdpBreakpointTable
[KD_BREAKPOINT_MAX
];
93 KD_BREAKPOINT_TYPE KdpBreakpointInstruction
= KD_BREAKPOINT_VALUE
;
94 BOOLEAN KdpOweBreakpoint
;
95 BOOLEAN BreakpointsSuspended
;
96 ULONG KdpNumInternalBreakpoints
;
101 ULONG KdpCurrentSymbolStart
, KdpCurrentSymbolEnd
;
106 ULONG TraceDataBuffer
[40];
107 ULONG TraceDataBufferPosition
= 1;
113 KTIMER KdpTimeSlipTimer
;
114 WORK_QUEUE_ITEM KdpTimeSlipWorkItem
;
115 LONG KdpTimeSlipPending
= 1;
116 PKEVENT KdpTimeSlipEvent
;
117 KSPIN_LOCK KdpTimeSlipEventLock
;
118 LARGE_INTEGER KdTimerStop
, KdTimerStart
, KdTimerDifference
;
123 CHAR KdpMessageBuffer
[0x1000];
124 CHAR KdpPathBuffer
[0x1000];
129 CHAR KdPrintDefaultCircularBuffer
[KD_DEFAULT_LOG_BUFFER_SIZE
];
130 PCHAR KdPrintWritePointer
= KdPrintDefaultCircularBuffer
;
131 ULONG KdPrintRolloverCount
;
132 PCHAR KdPrintCircularBuffer
= KdPrintDefaultCircularBuffer
;
133 ULONG KdPrintBufferSize
= sizeof(KdPrintDefaultCircularBuffer
);
134 ULONG KdPrintBufferChanges
= 0;
137 // Debug Filter Masks
139 ULONG Kd_WIN2000_Mask
= 1;
140 ULONG Kd_SYSTEM_Mask
;
145 ULONG Kd_CRASHDUMP_Mask
;
146 ULONG Kd_CDAUDIO_Mask
;
148 ULONG Kd_CLASSPNP_Mask
;
150 ULONG Kd_REDBOOK_Mask
;
151 ULONG Kd_STORPROP_Mask
;
152 ULONG Kd_SCSIPORT_Mask
;
153 ULONG Kd_SCSIMINIPORT_Mask
;
154 ULONG Kd_CONFIG_Mask
;
155 ULONG Kd_I8042PRT_Mask
;
156 ULONG Kd_SERMOUSE_Mask
;
157 ULONG Kd_LSERMOUS_Mask
;
158 ULONG Kd_KBDHID_Mask
;
159 ULONG Kd_MOUHID_Mask
;
160 ULONG Kd_KBDCLASS_Mask
;
161 ULONG Kd_MOUCLASS_Mask
;
162 ULONG Kd_TWOTRACK_Mask
;
163 ULONG Kd_WMILIB_Mask
;
166 ULONG Kd_HALIA64_Mask
;
168 ULONG Kd_SVCHOST_Mask
;
169 ULONG Kd_VIDEOPRT_Mask
;
171 ULONG Kd_DMSYNTH_Mask
;
172 ULONG Kd_NTOSPNP_Mask
;
173 ULONG Kd_FASTFAT_Mask
;
175 ULONG Kd_PNPMGR_Mask
;
176 ULONG Kd_NETAPI_Mask
;
177 ULONG Kd_SCSERVER_Mask
;
178 ULONG Kd_SCCLIENT_Mask
;
179 ULONG Kd_SERIAL_Mask
;
180 ULONG Kd_SERENUM_Mask
;
182 ULONG Kd_RPCPROXY_Mask
;
183 ULONG Kd_AUTOCHK_Mask
;
184 ULONG Kd_DCOMSS_Mask
;
185 ULONG Kd_UNIMODEM_Mask
;
187 ULONG Kd_FLTMGR_Mask
;
188 ULONG Kd_WMICORE_Mask
;
189 ULONG Kd_BURNENG_Mask
;
192 ULONG Kd_FUSION_Mask
;
193 ULONG Kd_IDLETASK_Mask
;
194 ULONG Kd_SOFTPCI_Mask
;
198 ULONG Kd_PCIIDE_Mask
;
199 ULONG Kd_FLOPPY_Mask
;
201 ULONG Kd_TERMSRV_Mask
;
202 ULONG Kd_W32TIME_Mask
;
203 ULONG Kd_PREFETCHER_Mask
;
204 ULONG Kd_RSFILTER_Mask
;
205 ULONG Kd_FCPORT_Mask
;
208 ULONG Kd_DMCONFIG_Mask
;
209 ULONG Kd_DMADMIN_Mask
;
210 ULONG Kd_WSOCKTRANSPORT_Mask
;
212 ULONG Kd_PNPMEM_Mask
;
213 ULONG Kd_PROCESSOR_Mask
;
214 ULONG Kd_DMSERVER_Mask
;
216 ULONG Kd_INFINIBAND_Mask
;
217 ULONG Kd_IHVDRIVER_Mask
;
218 ULONG Kd_IHVVIDEO_Mask
;
219 ULONG Kd_IHVAUDIO_Mask
;
220 ULONG Kd_IHVNETWORK_Mask
;
221 ULONG Kd_IHVSTREAMING_Mask
;
222 ULONG Kd_IHVBUS_Mask
;
224 ULONG Kd_RTLTHREADPOOL_Mask
;
226 ULONG Kd_TCPIP6_Mask
;
227 ULONG Kd_ISAPNP_Mask
;
229 ULONG Kd_STORPORT_Mask
;
230 ULONG Kd_STORMINIPORT_Mask
;
231 ULONG Kd_PRINTSPOOLER_Mask
;
232 ULONG Kd_VSSDYNDISK_Mask
;
233 ULONG Kd_VERIFIER_Mask
;
235 ULONG Kd_VDSBAS_Mask
;
236 ULONG Kd_VDSDYNDR_Mask
;
237 ULONG Kd_VDSUTIL_Mask
;
238 ULONG Kd_DFRGIFC_Mask
;
239 ULONG Kd_DEFAULT_Mask
;
243 ULONG Kd_ENDOFTABLE_Mask
;
246 // Debug Filter Component Table
248 PULONG KdComponentTable
[104] =
263 &Kd_SCSIMINIPORT_Mask
,
320 &Kd_WSOCKTRANSPORT_Mask
,
331 &Kd_IHVSTREAMING_Mask
,
334 &Kd_RTLTHREADPOOL_Mask
,
340 &Kd_STORMINIPORT_Mask
,
341 &Kd_PRINTSPOOLER_Mask
,
356 ULONG KdComponentTableSize
= sizeof(KdComponentTable
);
361 LIST_ENTRY KdpDebuggerDataListHead
;
362 KSPIN_LOCK KdpDataSpinLock
;
365 // Debugger Version and Data Block
367 DBGKD_GET_VERSION64 KdVersionBlock
=
371 DBGKD_64BIT_PROTOCOL_VERSION2
,
372 CURRENT_KD_SECONDARY_VERSION
,
374 DBGKD_VERS_FLAG_DATA
| DBGKD_VERS_FLAG_PTR64
,
376 DBGKD_VERS_FLAG_DATA
,
378 IMAGE_FILE_MACHINE_ARCHITECTURE
,
382 DBGKD_SIMULATION_NONE
,
388 KDDEBUGGER_DATA64 KdDebuggerDataBlock
=
392 {(ULONG_PTR
)RtlpBreakWithStatusInstruction
},
394 FIELD_OFFSET(KTHREAD
, CallbackStack
),
395 CBSTACK_CALLBACK_STACK
,
396 CBSTACK_FRAME_POINTER
,
398 {(ULONG_PTR
)KiCallUserMode
},
400 {(ULONG_PTR
)&PsLoadedModuleList
},
401 {(ULONG_PTR
)&PsActiveProcessHead
},
402 {(ULONG_PTR
)&PspCidTable
},
403 {(ULONG_PTR
)&ExpSystemResourcesList
},
404 {(ULONG_PTR
)ExpPagedPoolDescriptor
},
405 {(ULONG_PTR
)&ExpNumberOfPagedPools
},
406 {(ULONG_PTR
)&KeTimeIncrement
},
407 {(ULONG_PTR
)&KeBugcheckCallbackListHead
},
408 {(ULONG_PTR
)KiBugCheckData
},
409 {(ULONG_PTR
)&IopErrorLogListHead
},
410 {(ULONG_PTR
)&ObpRootDirectoryObject
},
411 {(ULONG_PTR
)&ObpTypeObjectType
},
412 {(ULONG_PTR
)&MmSystemCacheStart
},
413 {(ULONG_PTR
)&MmSystemCacheEnd
},
414 {(ULONG_PTR
)&MmSystemCacheWs
},
415 {(ULONG_PTR
)&MmPfnDatabase
},
416 {(ULONG_PTR
)MmSystemPtesStart
},
417 {(ULONG_PTR
)MmSystemPtesEnd
},
418 {(ULONG_PTR
)&MmSubsectionBase
},
419 {(ULONG_PTR
)&MmNumberOfPagingFiles
},
420 {(ULONG_PTR
)&MmLowestPhysicalPage
},
421 {(ULONG_PTR
)&MmHighestPhysicalPage
},
422 {(ULONG_PTR
)&MmNumberOfPhysicalPages
},
423 {(ULONG_PTR
)&MmMaximumNonPagedPoolInBytes
},
424 {(ULONG_PTR
)&MmNonPagedSystemStart
},
425 {(ULONG_PTR
)&MmNonPagedPoolStart
},
426 {(ULONG_PTR
)&MmNonPagedPoolEnd
},
427 {(ULONG_PTR
)&MmPagedPoolStart
},
428 {(ULONG_PTR
)&MmPagedPoolEnd
},
429 {(ULONG_PTR
)&MmPagedPoolInfo
},
431 {(ULONG_PTR
)&MmSizeOfPagedPoolInBytes
},
432 {(ULONG_PTR
)&MmTotalCommitLimit
},
433 {(ULONG_PTR
)&MmTotalCommittedPages
},
434 {(ULONG_PTR
)&MmSharedCommit
},
435 {(ULONG_PTR
)&MmDriverCommit
},
436 {(ULONG_PTR
)&MmProcessCommit
},
437 {(ULONG_PTR
)&MmPagedPoolCommit
},
439 {(ULONG_PTR
)&MmZeroedPageListHead
},
440 {(ULONG_PTR
)&MmFreePageListHead
},
441 {(ULONG_PTR
)&MmStandbyPageListHead
},
442 {(ULONG_PTR
)&MmModifiedPageListHead
},
443 {(ULONG_PTR
)&MmModifiedNoWritePageListHead
},
444 {(ULONG_PTR
)&MmAvailablePages
},
445 {(ULONG_PTR
)&MmResidentAvailablePages
},
446 {(ULONG_PTR
)&PoolTrackTable
},
447 {(ULONG_PTR
)&NonPagedPoolDescriptor
},
448 {(ULONG_PTR
)&MmHighestUserAddress
},
449 {(ULONG_PTR
)&MmSystemRangeStart
},
450 {(ULONG_PTR
)&MmUserProbeAddress
},
451 {(ULONG_PTR
)KdPrintDefaultCircularBuffer
},
452 {(ULONG_PTR
)KdPrintDefaultCircularBuffer
+ 1},
453 {(ULONG_PTR
)&KdPrintWritePointer
},
454 {(ULONG_PTR
)&KdPrintRolloverCount
},
455 {(ULONG_PTR
)&MmLoadedUserImageList
},
456 {(ULONG_PTR
)&NtBuildLab
},
458 {(ULONG_PTR
)KiProcessorBlock
},
459 {(ULONG_PTR
)&MmUnloadedDrivers
},
460 {(ULONG_PTR
)&MmLastUnloadedDrivers
},
461 {(ULONG_PTR
)&MmTriageActionTaken
},
462 {(ULONG_PTR
)&MmSpecialPoolTag
},
463 {(ULONG_PTR
)&KernelVerifier
},
464 {(ULONG_PTR
)&MmVerifierData
},
465 {(ULONG_PTR
)&MmAllocatedNonPagedPool
},
466 {(ULONG_PTR
)&MmPeakCommitment
},
467 {(ULONG_PTR
)&MmtotalCommitLimitMaximum
},
468 {(ULONG_PTR
)&CmNtCSDVersion
},
469 {(ULONG_PTR
)&MmPhysicalMemoryBlock
},
470 {(ULONG_PTR
)&MmSessionBase
},
471 {(ULONG_PTR
)&MmSessionSize
},
474 FIELD_OFFSET(KTHREAD
, NextProcessor
),
475 FIELD_OFFSET(KTHREAD
, Teb
),
476 FIELD_OFFSET(KTHREAD
, KernelStack
),
477 FIELD_OFFSET(KTHREAD
, InitialStack
),
478 FIELD_OFFSET(KTHREAD
, ApcState
.Process
),
479 FIELD_OFFSET(KTHREAD
, State
),
483 FIELD_OFFSET(EPROCESS
, Peb
),
484 FIELD_OFFSET(EPROCESS
, InheritedFromUniqueProcessId
),
485 FIELD_OFFSET(EPROCESS
, Pcb
.DirectoryTableBase
),
487 FIELD_OFFSET(KPRCB
, DpcRoutineActive
),
488 FIELD_OFFSET(KPRCB
, CurrentThread
),
489 FIELD_OFFSET(KPRCB
, MHz
),
490 FIELD_OFFSET(KPRCB
, CpuType
),
491 FIELD_OFFSET(KPRCB
, VendorString
),
492 FIELD_OFFSET(KPRCB
, ProcessorState
.ContextFrame
),
493 FIELD_OFFSET(KPRCB
, Number
),
495 {(ULONG_PTR
)KdPrintDefaultCircularBuffer
},
496 {(ULONG_PTR
)&KdPrintBufferSize
},
497 {(ULONG_PTR
)&KeLoaderBlock
},
499 KPCR_SELF_PCR_OFFSET
,
500 KPCR_CURRENT_PRCB_OFFSET
,
501 KPCR_CONTAINED_PRCB_OFFSET
,
504 KPCR_INITIAL_STACK_OFFSET
,
505 KPCR_STACK_LIMIT_OFFSET
,
506 KPRCB_PCR_PAGE_OFFSET
,
507 FIELD_OFFSET(KPRCB
, ProcessorState
.SpecialRegisters
),
510 // x86 GDT/LDT/TSS constants
522 #elif defined(_M_AMD64)
524 // AMD64 GDT/LDT/TSS constants
538 // No GDT/LDT/TSS on other architectures
551 {(ULONG_PTR
)&IopNumTriageDumpDataBlocks
},
552 {(ULONG_PTR
)IopTriageDumpDataBlocks
},