System Loader Logging Facility
The system loader provides optional logging
and checking under the debug kernel. These optional facilities may be activated
selectively by setting bits in the _LdrDebugFlags flags double-word
as follows:
Note:
The flags described are those implemented in OS/2 Warp V3.0. Slightly different,
similar messages are generated for earlier releases of OS/2.
0x00000001
This will cause the Loader to
break into the debugger using an INT 3 instruction if any of the
following error conditions are detected:
0x00000002
This
will generate log entries when LDRGetPage exits with a non-zero return
code. LDRGetPage is called to demand load a page within a object
of a load module. The message logged is of the following form:
ldrGP bad cr2=nnnnnnnn rc=mmmmmmmm
cr2= is the page fault address and rc= is the LDRGetPage
return code.
0x00000004
This
generates log entries when LDRGetPage is called to demand load a
page within a object of a load module. The message logged is of the form:
ldrGP cr2=nnnnnnnn hMTE=hhhh bno=oo
name=pppppppppppppppp
cr2=
is the page fault address,
hMTE=
bno=
is page number
with in the module
name=
is
the module's full name taken from the SMTE.
0x00000018
This
switch causes log information to be generated when DLL modules are loaded
and initialised. The following messages are logged:
ldrDLM entry - slot ssss ptda pppppppp
ldrDLM name - slot ssss name nnnnnnnn
ldrDLM free - slot ssss
ldrDLM exit - slot ssss
tk SD has-init slot=ssss
tk SD no-init slot=ssss
tk SD pre-inc slot=ssss cnest=nnnn
tk IN pre-dec slot=ssss cnest=nnnn
tk LIn slot=ssss cnest=nnnn
slot
is the thread
slot in which the DLL is being processed,
ptda
is the address of the PTDA
for this slot
name
cnest
Nesting
counter for TKLibiStartDispatch
ldrDLM
entry
marks entry to w_loadmodule, the
DosLoadModule worker routine.
ldrDLM
name
marks the successful request for the DLL
initialisation mutex semaphore (ptda_DLMsem (PTDA +0x4ac (H/R:
+0x4a8))).
ldrDLM free
marks
the release of the mutex semaphore. Exit marks the exiting of w_loadmodule.
ldrDLM exit
marks
the exit from w_loadmodule.
tk SD
marks
events in TKLibiStartDispatch.
tk IN
and tk LIn
Mark events in TKLiniInitNextDLL
0x00000080
This
switch requests import initialisation be recorded. Messages of the following
format are generated:
lpi, Recording init hMTE=hhhh, flags1=ffffffff, name=nnnnnnnnn
lpi, Skipping init hMTE=hhhh, flags1=ffffffff, name=nnnnnnnnn
lpi, Processing imports slot=ssss, module=nnnnnnnnn
lrm, Recording init hMTE=hhhh, flags1=ffffffff, name=nnnnnnnn
lrm, Skipping init hMTE=hhhh, flags1=ffffffff, name=nnnnnnnnn
hMTE
flags1
name
is
the full module name taken from the SMTE.
module
is the full module name taken from the SMTE.
lpi, Recording init
Logs
the processing of system DLL imports from the system DLL names table in
EXE file loading.
lpi, Skipping init
Logs
system DLL names not imported in EXE file loading.
lpi,
Processing imports
Logs the processing of DLL
initialisation as the result of imports being present in an EXE module.
lrm, Recording init
Logs
imported DLL initialisation being recorded.
lrm,
Skipping init
Logs imported DLLs skipping initialisation.
0x00000100
Logs
when the loader cannot load an object at the compiler/linker designated
base address. The message logged appears as:
Cannot load nnnnnnnn at the requested base address
where nnnnnnnn is the module name.
0x00000800
Logs the processing of the DLL import tree.
The following messages appear:
lpi, Processing imports slot=ssss, module=nnnnnnnnn
ldr walking tree hMTE=hhhh, name=nnnnnnnn
ldr walking tree going down
ldr walking tree going up
lpi, Processing imports
marks the initiation
of the process for slot ssss and module nnnnnnnn.
ldr walking tree hMTE=hhhh, name=nnnnnnnn
marks
the processing of an imported DLL, whose handle is hhhh and
name is nnnnnnnn
ldr walking tree
going up
marks a backward progression through
the import tree.
ldr walking tree going down
marks a forward progression through the import
tree.
[Back: Virtual Memory Management System Heap Validation]
[Next: Example Loader Log]