From b13b447355afb6cbb838bac5da520c73b71ad63b Mon Sep 17 00:00:00 2001 From: yshang1 Date: Tue, 22 Jan 2008 02:09:25 +0000 Subject: Runtime Library should not use the gRT directly, since it may be converted to virtual address by other library instance. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4604 6f19259b-4bc3-4df7-8a09-765794883524 --- .../SmmRuntimeDxeSupport.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'IntelFrameworkModulePkg/Library') diff --git a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c index b632a94a1a..f9537211d7 100644 --- a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c +++ b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c @@ -32,6 +32,9 @@ EFI_STATUS_CODE_DATA *mStatusCodeData; STATIC EFI_SMM_BASE_PROTOCOL *mSmmBase; +STATIC +EFI_RUNTIME_SERVICES *mRT; + STATIC BOOLEAN mHaveExitedBootServices = FALSE; @@ -56,8 +59,8 @@ InternalGetReportStatusCode ( return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport; } } - if (gRT->Hdr.Revision < 0x20000) { - return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)gRT)->ReportStatusCode; + if (mRT->Hdr.Revision < 0x20000) { + return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)mRT)->ReportStatusCode; } else if (!mHaveExitedBootServices) { Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol); if (!EFI_ERROR (Status) && StatusCodeProtocol != NULL) { @@ -84,13 +87,13 @@ ReportStatusCodeLibVirtualAddressChange ( ) { if (NULL != mReportStatusCode) { - gRT->ConvertPointer (0, (VOID **) &mReportStatusCode); + mRT->ConvertPointer (0, (VOID **) &mReportStatusCode); } if (NULL != mSmmBase) { - gRT->ConvertPointer (0, (VOID **) &mSmmBase); + mRT->ConvertPointer (0, (VOID **) &mSmmBase); } - gRT->ConvertPointer (0, (VOID **) &mStatusCodeData); - gRT->ConvertPointer (0, (VOID **) &gRT); + mRT->ConvertPointer (0, (VOID **) &mStatusCodeData); + mRT->ConvertPointer (0, (VOID **) &mRT); } /** @@ -149,6 +152,12 @@ ReportStatusCodeLibConstruct ( } } + // + // Library should not use the gRT directly, since it + // may be converted by other library instance. + // + mRT = gRT; + gBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData); ASSERT (NULL != mStatusCodeData); // -- cgit v1.2.3