https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dfb6996b4542fa88595e4…
commit dfb6996b4542fa88595e4bdbfdb0e2e06a2dc360
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Fri Mar 10 18:12:32 2023 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Fri Mar 10 20:56:21 2023 +0100
[NTOS:KDBG] Split KdbInitialize into KdbSymInit and KDBG initialization proper.
- KdbSymInit() in kdb_symbols.c only initializes symbols implementation
support.
- The rest of KdbInitialize gets moved into kdb_cli.c and initializes
the KDBG debugger itself.
- Move KdbDebugPrint to kdb_cli.c as well.
---
ntoskrnl/include/internal/kd.h | 6 +----
ntoskrnl/kd/kdio.c | 18 ---------------
ntoskrnl/kdbg/kdb.h | 13 +++++++++--
ntoskrnl/kdbg/kdb_cli.c | 47 ++++++++++++++++++++++++++++++++++++++
ntoskrnl/kdbg/kdb_symbols.c | 52 +++++++++++++++++-------------------------
5 files changed, 80 insertions(+), 56 deletions(-)
diff --git a/ntoskrnl/include/internal/kd.h b/ntoskrnl/include/internal/kd.h
index ef014a2c6a5..75ffd8be63f 100644
--- a/ntoskrnl/include/internal/kd.h
+++ b/ntoskrnl/include/internal/kd.h
@@ -78,11 +78,7 @@ KdpDebugLogInit(
_In_ ULONG BootPhase);
#ifdef KDBG
-VOID
-NTAPI
-KdpKdbgInit(
- _In_ struct _KD_DISPATCH_TABLE *DispatchTable,
- _In_ ULONG BootPhase);
+#define KdpKdbgInit KdbInitialize
#endif
diff --git a/ntoskrnl/kd/kdio.c b/ntoskrnl/kd/kdio.c
index 742121e08fb..9c8a486fad8 100644
--- a/ntoskrnl/kd/kdio.c
+++ b/ntoskrnl/kd/kdio.c
@@ -577,24 +577,6 @@ KdpScreenInit(
}
}
-#ifdef KDBG
-/* KDBG FUNCTIONS ************************************************************/
-
-/* NOTE: This may be moved completely into kdb_symbols.c */
-VOID NTAPI
-KdbInitialize(PKD_DISPATCH_TABLE DispatchTable, ULONG BootPhase);
-
-VOID
-NTAPI
-KdpKdbgInit(
- _In_ PKD_DISPATCH_TABLE DispatchTable,
- _In_ ULONG BootPhase)
-{
- /* Forward the call */
- KdbInitialize(DispatchTable, BootPhase);
-}
-#endif
-
/* GENERAL FUNCTIONS *********************************************************/
diff --git a/ntoskrnl/kdbg/kdb.h b/ntoskrnl/kdbg/kdb.h
index 8d1e9af2a47..11bc4cb452f 100644
--- a/ntoskrnl/kdbg/kdb.h
+++ b/ntoskrnl/kdbg/kdb.h
@@ -82,6 +82,12 @@ KdbpStackSwitchAndCall(
extern PCHAR KdbInitFileBuffer;
+VOID
+NTAPI
+KdbInitialize(
+ _In_ PKD_DISPATCH_TABLE DispatchTable,
+ _In_ ULONG BootPhase);
+
BOOLEAN
NTAPI
KdbRegisterCliCallback(
@@ -158,14 +164,17 @@ KdbpSymFindModule(
BOOLEAN
KdbSymPrintAddress(
IN PVOID Address,
- IN PCONTEXT Context
-);
+ IN PCONTEXT Context);
VOID
KdbSymProcessSymbols(
_Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry,
_In_ BOOLEAN Load);
+VOID
+KdbSymInit(
+ _In_ ULONG BootPhase);
+
/* from kdb.c */
extern PEPROCESS KdbCurrentProcess;
diff --git a/ntoskrnl/kdbg/kdb_cli.c b/ntoskrnl/kdbg/kdb_cli.c
index 114f4116838..c12f19554ef 100644
--- a/ntoskrnl/kdbg/kdb_cli.c
+++ b/ntoskrnl/kdbg/kdb_cli.c
@@ -3880,3 +3880,50 @@ KdbpCliInit(VOID)
ExFreePool(FileBuffer);
}
+
+
+static VOID
+NTAPI
+KdbDebugPrint(
+ PCH Message,
+ ULONG Length)
+{
+ /* Nothing here */
+}
+
+/**
+ * @brief Initializes the KDBG debugger.
+ *
+ * @param[in] DispatchTable
+ * Pointer to the KD dispatch table.
+ *
+ * @param[in] BootPhase
+ * Phase of initialization.
+ *
+ * @return None.
+ * @note Also known as "KdpKdbgInit".
+ **/
+VOID
+NTAPI
+KdbInitialize(
+ _In_ PKD_DISPATCH_TABLE DispatchTable,
+ _In_ ULONG BootPhase)
+{
+ if (BootPhase == 0)
+ {
+ /* Write out the functions that we support for now */
+ DispatchTable->KdpInitRoutine = KdbInitialize;
+ DispatchTable->KdpPrintRoutine = KdbDebugPrint;
+
+ /* Register as a Provider */
+ InsertTailList(&KdProviders, &DispatchTable->KdProvidersList);
+ }
+
+ if (BootPhase <= 1)
+ {
+ /* Initialize symbols support */
+ KdbSymInit(BootPhase);
+ }
+}
+
+/* EOF */
diff --git a/ntoskrnl/kdbg/kdb_symbols.c b/ntoskrnl/kdbg/kdb_symbols.c
index 06325b65fb6..46294733d89 100644
--- a/ntoskrnl/kdbg/kdb_symbols.c
+++ b/ntoskrnl/kdbg/kdb_symbols.c
@@ -330,31 +330,19 @@ KdbSymProcessSymbols(
KeSetEvent(&SymbolsToLoadEvent, IO_NO_INCREMENT, FALSE);
}
-VOID
-NTAPI
-KdbDebugPrint(
- PCH Message,
- ULONG Length)
-{
- /* Nothing here */
-}
-
-/*! \brief Initializes the KDB symbols implementation.
+/**
+ * @brief Initializes the KDB symbols implementation.
*
- * \param DispatchTable Pointer to the KD dispatch table
- * \param BootPhase Phase of initialization
- */
+ * @param[in] BootPhase
+ * Phase of initialization.
+ *
+ * @return None.
+ **/
VOID
-NTAPI
-KdbInitialize(
- _In_ PKD_DISPATCH_TABLE DispatchTable,
+KdbSymInit(
_In_ ULONG BootPhase)
{
- PCHAR p1, p2;
- SHORT Found = FALSE;
- CHAR YesNo;
-
DPRINT("KdbSymInit() BootPhase=%d\n", BootPhase);
LoadSymbols = FALSE;
@@ -367,19 +355,16 @@ KdbInitialize(
if (BootPhase == 0)
{
- /* Write out the functions that we support for now */
- DispatchTable->KdpInitRoutine = KdbInitialize;
- DispatchTable->KdpPrintRoutine = KdbDebugPrint;
-
- /* Register as a Provider */
- InsertTailList(&KdProviders, &DispatchTable->KdProvidersList);
+ PCHAR p1, p2;
+ SHORT Found = FALSE;
+ CHAR YesNo;
/* Perform actual initialization of symbol module */
//NtoskrnlModuleObject->PatchInformation = NULL;
//LdrHalModuleObject->PatchInformation = NULL;
/* Check the command line for /LOADSYMBOLS, /NOLOADSYMBOLS,
- * /LOADSYMBOLS={YES|NO}, /NOLOADSYMBOLS={YES|NO} */
+ * /LOADSYMBOLS={YES|NO}, /NOLOADSYMBOLS={YES|NO} */
ASSERT(KeLoaderBlock);
p1 = KeLoaderBlock->LoadOptions;
while ('\0' != *p1 && NULL != (p2 = strchr(p1, '/')))
@@ -425,13 +410,18 @@ KdbInitialize(
HANDLE Thread;
NTSTATUS Status;
KIRQL OldIrql;
+ PLIST_ENTRY ListEntry;
/* Launch our worker thread */
InitializeListHead(&SymbolsToLoad);
KeInitializeSpinLock(&SymbolsToLoadLock);
KeInitializeEvent(&SymbolsToLoadEvent, SynchronizationEvent, FALSE);
- Status = PsCreateSystemThread(&Thread, THREAD_ALL_ACCESS, NULL, NULL, NULL,
LoadSymbolsRoutine, NULL);
+ Status = PsCreateSystemThread(&Thread,
+ THREAD_ALL_ACCESS,
+ NULL, NULL, NULL,
+ LoadSymbolsRoutine,
+ NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed starting symbols loader thread: 0x%08x\n",
Status);
@@ -443,12 +433,12 @@ KdbInitialize(
KeAcquireSpinLock(&PsLoadedModuleSpinLock, &OldIrql);
- PLIST_ENTRY ListEntry = PsLoadedModuleList.Flink;
- while (ListEntry != &PsLoadedModuleList)
+ for (ListEntry = PsLoadedModuleList.Flink;
+ ListEntry != &PsLoadedModuleList;
+ ListEntry = ListEntry->Flink)
{
PLDR_DATA_TABLE_ENTRY LdrEntry = CONTAINING_RECORD(ListEntry,
LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
KdbSymProcessSymbols(LdrEntry, TRUE);
- ListEntry = ListEntry->Flink;
}
KeReleaseSpinLock(&PsLoadedModuleSpinLock, OldIrql);