On 2016/8/9 10:07, Andrew Fish wrote:
On Aug 8, 2016, at 6:21 PM, Zeng, Star <[email protected]> wrote:
Andrew,
Should MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib be used for your case
if there are really runtime status code reporting needed?
Star,
If the Library instance does not fully support DXE_RUNTIME_DRIVER, why is it
listed in the LIBRARY_CLASS as supported?
This kind of library can support DXE_RUNTIME_DRIVER at boot time, for
example UefiHiiLib, UefiHiiServicesLib, UefiBootServicesTableLib,
DxePcdLib and etc.
https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf#L25
LIBRARY_CLASS = ReportStatusCodeLib|DXE_CORE DXE_DRIVER
DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
SMM_CORE
Actually I tried to add the UefiRuntimeDriverLib and the build failed as
UefiRuntimeDriverLib was not supported for the DXE_CORE type. Maybe the bug is
this library instance lists DXE_RUNTIME_DRIVER, DXE_SAL_DRIVER and
DXE_SMM_DRIVER when it has special case code to support DXE_CORE? Maybe this
library is trying to do too many things?
What ReportStatusCodeLib would you recommend to link with RuntimeDxe driver:
https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
[LibraryClasses.common.DXE_CORE]
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
[LibraryClasses.common.DXE_RUNTIME_DRIVER]
ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeReportStatusCodeLib.inf
[LibraryClasses.common.UEFI_DRIVER]
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
[LibraryClasses.common.DXE_DRIVER]
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
[LibraryClasses.common.UEFI_APPLICATION]
ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
Thanks,
Star
Thanks,
Andrew Fish
Thanks,
Star
-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of Andrew
Fish
Sent: Tuesday, August 9, 2016 7:08 AM
To: edk2-devel <[email protected]>
Subject: [edk2] [MdeModulePkg] SetVirtualAddressMap() crashed due to
DxeReportStatusCodeLib assuming the state of the BootService Memory at runtime.
I was messing about with an ExitBootServices test that fills boot services
memory with 0xAFAFAFAFAFAFAFAF (It was Vincent's idea to use my Initials but it
has the handy property of being a non-cononical address and causes on GP fault
on X64) and SetVirtualAddressMap() started crashing.
It looks like this code is assuming the 1st call to ReportStatus code will not
happen at runtime. This is not the case for the RuntimeDxe driver.
https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c#L43
VOID
InternalGetReportStatusCode (
VOID
)
{
EFI_STATUS Status;
if (mReportStatusCodeLibStatusCodeProtocol != NULL) {
return;
}
//
// Check gBS just in case ReportStatusCode is called before gBS is initialized.
//
if (gBS != NULL && gBS->LocateProtocol != NULL) {
Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)
&mReportStatusCodeLibStatusCodeProtocol);
if (EFI_ERROR (Status)) {
mReportStatusCodeLibStatusCodeProtocol = NULL;
}
}
}
I'm guessing this seems to work due
to:https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c#L803
//
// Zero out the Boot Service Table
//
ZeroMem (gBS, sizeof (EFI_BOOT_SERVICES));
Thus if I'm looking at this code correctly it only looks like it works at
Runtime since it is depending on the value of a boot services memory buffer not
changing. This is not a valid assumption as that code is owned by the caller of
ExitBootServices, so it should be legal for my test to change the value.
I wanted to get a few more eyes on this prior to filling a bug?
Thanks,
Andrew Fish
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel