No, I don’t perform a remote debugging. I simply load HALMACPI.DLL as a
crash dump file on my working machine. The following is a sequence of my
actions:
- Run WinDbg
- Press Ctrl-S to set a local symbol files path and MS downstream server
- Enter “srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols”
to download symbols from the MS downstream server and store it locally
in “C:\11” folder (as a local symbol server)
- Press Ctrl-D to open a crash dump file
- Choose the HALMACPI.DLL file
- Enter “.reload /u” to unload all modules (just in case for experiment
purity)
- Delete a local symbol server directory in “C:\11” (just in case for
experiment purity)
- Enter “!sym noisy” to switch on the detailed symbol prompts
- Enter “.reload /f halmacpi.dll” to reload HALMACPI.DLL symbols only
And that’s what I saw in a WinDbg command window:
Loading Dump File [C:\11\halmacpi.dll]
DBGHELP: Symbol Search Path:
srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is:
srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
DBGHELP: SharedUserData - virtual symbol module
ModLoad: 80010000 8003c000 C:\11\halmacpi.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000
edi=00000000
eip=80036e7e esp=00000000 ebp=00000000 iopl=0 nv up di pl nz na
po nc
cs=0000 ss=0000 ds=0000 es=0000 fs=0000 gs=0000
efl=00000000
SYMSRV: halaacpi.dll from http://msdl.microsoft.com/download/symbols:
50243 bytes copied
DBGHELP: C:\11\symbols\halaacpi.dll\42435B352c000\halaacpi.dll - OK
DBGENG: C:\11\symbols\halaacpi.dll\42435B352c000\halaacpi.dll - Mapped
image memory
SYMSRV: halaacpi.pdb from http://msdl.microsoft.com/download/symbols:
41651 bytes copied
DBGHELP: halmacpi - public symbols
C:\11\symbols\halaacpi.pdb\36AC14DB1A0C4BC690CCAD40912790C91\halaacpi.pdb
halmacpi!HalpMcaInit+0x1d8:
80036e7e 4d dec ebp
You can clearly see that totally wrong symbols were loaded (obviously,
“dec ebp” is a kind of strange initial command)
Here I performed a symbol reloading action:
0:000> !sym noisy
noisy mode - symbol prompts on
0:000> .reload /f halmacpi.dll
SYMSRV: halaacpi.dll from http://msdl.microsoft.com/download/symbols:
50243 bytes copied
DBGHELP: C:\11\symbols\halaacpi.dll\42435B352c000\halaacpi.dll - OK
DBGENG: C:\11\symbols\halaacpi.dll\42435B352c000\halaacpi.dll - Mapped
image memory
SYMSRV: halaacpi.pdb from http://msdl.microsoft.com/download/symbols:
41651 bytes copied
DBGHELP: halmacpi - public symbols
C:\11\symbols\halaacpi.pdb\36AC14DB1A0C4BC690CCAD40912790C91\halaacpi.pdb
Why did WinDbg load a wrong symbol file and its respective DLL module
(HALAACPI.DLL)??? I always loaded different kernel modules in such a way
to receive their symbol files, including symbols for different flavors
of HAL, but I never had any problems.
But HALMPS.DLL symbols were perfectly loaded (from Windows Server 2003 R2):
Loading Dump File [C:\11\halmps.dll]
DBGHELP: Symbol Search Path:
srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is:
srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
DBGHELP: SharedUserData - virtual symbol module
ModLoad: 80010000 80040000 C:\11\halmps.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000
edi=00000000
eip=8003a404 esp=00000000 ebp=00000000 iopl=0 nv up di pl nz na
po nc
cs=0000 ss=0000 ds=0000 es=0000 fs=0000 gs=0000
efl=00000000
SYMSRV: C:\11\symbols\halaacpi.dll\42435B3B30000\halaacpi.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halaacpi.dll/42435B3B30000/halaacpi.dll
not found
SYMSRV: C:\11\symbols\halacpi.dll\42435B3B30000\halacpi.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halacpi.dll/42435B3B30000/halacpi.dll
not found
SYMSRV: C:\11\symbols\halapic.dll\42435B3B30000\halapic.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halapic.dll/42435B3B30000/halapic.dll
not found
SYMSRV: C:\11\symbols\halmacpi.dll\42435B3B30000\halmacpi.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halmacpi.dll/42435B3B30000/halmacpi.dll
not found
SYMSRV: halmps.dll from http://msdl.microsoft.com/download/symbols:
55215 bytes copied
DBGHELP: C:\11\symbols\halmps.dll\42435B3B30000\halmps.dll - OK
DBGENG: C:\11\symbols\halmps.dll\42435B3B30000\halmps.dll - Mapped
image memory
SYMSRV: halmps.pdb from http://msdl.microsoft.com/download/symbols:
42019 bytes copied
DBGHELP: halmps - public symbols
C:\11\symbols\halmps.pdb\ABED21B5A009406B88A681CBB40220951\halmps.pdb
halmps!HalInitSystem:
8003a404 8bff mov edi,edi
And at last, this is an output for HALMACPI.DLL module from Windows
Vista RTM 6000
Loading Dump File [C:\11\halmacpi.dll]
DBGHELP: Symbol Search Path:
srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is:
srv*C:\11\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
DBGHELP: SharedUserData - virtual symbol module
ModLoad: 80010000 80044000 C:\11\halmacpi.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000
edi=00000000
eip=80032b3c esp=00000000 ebp=00000000 iopl=0 nv up di pl nz na
po nc
cs=0000 ss=0000 ds=0000 es=0000 fs=0000 gs=0000
efl=00000000
SYMSRV: C:\11\symbols\halaacpi.dll\4549AC9A34000\halaacpi.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halaacpi.dll/4549AC9A34000/halaacpi.dll
not found
SYMSRV: C:\11\symbols\halacpi.dll\4549AC9A34000\halacpi.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halacpi.dll/4549AC9A34000/halacpi.dll
not found
SYMSRV: C:\11\symbols\halapic.dll\4549AC9A34000\halapic.dll not found
SYMSRV:
http://msdl.microsoft.com/download/symbols/halapic.dll/4549AC9A34000/halapic.dll
not found
SYMSRV: halmacpi.dll from http://msdl.microsoft.com/download/symbols:
80777 bytes copied
DBGHELP: C:\11\symbols\halmacpi.dll\4549AC9A34000\halmacpi.dll - OK
DBGENG: C:\11\symbols\halmacpi.dll\4549AC9A34000\halmacpi.dll - Mapped
image memory
SYMSRV: halmacpi.pdb from http://msdl.microsoft.com/download/symbols:
69163 bytes copied
DBGHELP: halmacpi - public symbols
C:\11\symbols\halmacpi.pdb\AE84FF5D9CEE4D64927E629F756036841\halmacpi.pdb
halmacpi!HalInitSystem:
80032b3c 8bff mov edi,edi
It was totally ok.
But now I have suspicion why WinDbg loads totally wrong symbols. You can
clearly see that first WinDbg checks HALAACPI.DLL, then HALACPI.DLL,
then HALAPIC.DLL and finally HALMACPI.DLL. So as I wrote earlier,
HALAACPI.DLL and HALMACPI.DLL from Windows Server 2003 R2 have the same
time stamps and image sizes, so I can suppose that WinDbg simply loads
the first appropriate HAL module which contains proper time stamp and
image size (in my case, it’s HALAACPI.DLL), and since WinDbg first
checks HALAACPI.DLL module, I receive symbols exactly for this module.
WBR,
Konstantin Manurin
System Programmer
You don’t have hyperthreading turned off, or have booted with the ONECPU
option? While we’re at it, if you don’t mind, disconnect WinDbg, delete
your local symbol cache and reboot the machine with an early breakpoint
set (/BREAK, HALBREAKPOINT or -d). Upon first entry to WinDbg, turn on
every option you can with .symopt, issue a .reload -f -n, issue a !dh -a
[ADDRESS OF HAL], issue and lml, and finally post a copy of the output.
I’ll take a look.
mm