My next suggestion is to use the -y and -Y flags to the build.exe command to
generate a report and review the PCD value used to see if the they are being
set to the expected value of 0xB000 and not 0x400.
The next step after that is to review the AutoGen.h files in the build output
directory for the modules that are getting the incorrect 0x400 values in the
OBJs to verify that the AutoGen.h has 0x400.
If you explicitly set the PCD value in your DSC file to different values, you
should see that value in the -Y report file and the AutoGen.h files. If not,
then something odd happening with build tools.
Mike
From: Duane Voth [mailto:[email protected]]
Sent: Thursday, April 11, 2013 7:49 AM
To: [email protected]
Subject: Re: [edk2] OVMF networking revisited
How is [it] possible [that AcpiTimerLibConstructor() runs in 32bit mode] ?
AFAIR you have an X64 build.
Laszlo, I'm just reporting what gdb is demanding: "set arch i386" for the
constructor (which displays 32bit flat 0xfffcxxxx addresses), and "set arch
i386:x86-64" for the hang location (which displays 64bit flat 0x3e55xxxx
addresses). Since OVMF is a boot rom it has to bring the cpu up from i8086 to
i386 to x86-64 modes and apparently various parts of the code run in different
modes.
find Build -type f -name '*.obj' -print0 \
| xargs -0 -r -- objdump -d -- >~/tmp/disasm
less ~/tmp/disasm
Then search for \$0x408, and scroll up for the function name. In my
build there are three functions with this constant:
- UnicodeStrToAsciiStr
- LibPatchPcdSetPtr
- EhcAsyncInterruptTransfer
None of which seem relevant.
Yes, that's what I'm finding as well. And looking at AcpiTimerLib.obj via
objdump tells me that the hang code is not from AcpiTimerLib at all.
Is there any chance you have pulled in the TscTimerLib from the PerformancePkg
into the X64 part of your build?
Michael, well, there is no TscTimerLib.obj in Build/OvmfX64/DEBUG_GCC46/X64
(and in fact no where in the Build directory at all), I've never built the
PerformancePkg.
Curiouser and curiouser ... even the .efi files, scanned with
find Build -type f -name '*.efi' -print0 | xargs -0 -r -- objdump -d -- | grep
'$0x408,'
return *only* mov $0x408,%edx where clearly the executing code includes
mov $0x408,%ecx ! Where is this bit of rogue code coming from??
What prevents you from setting DEBUG_VERBOSE
With DEBUG_VERBOSE on and -debugcon file:debug.log -global
isa-debugcon.iobase=0x402 added to the qemu command line, debug.log remains
empty. I've never seen any debug output from this flag nor via -debugcon. My
OVMF build line is:
$ build -D SOURCE_DEBUG_ENABLE -D FD_SIZE_2MB -D DEBUG_ON_SERIAL_PORT -p
OvmfPkg/OvmfPkgX64.dsc -a X64 -t GCC46
(when I add other debug code and rebuild, I do see the changes in gdb so I'm
not missing something obvious)
Yes it is very easy to rebuild OVMF and try it out with qemu+gdb which is why
I'm pushing to get debug with symbols working -- my other avenue (an In circuit
Test Probe on real hardware will be laborious).
Duane
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel