MdePkg/UefiDebugLibDebugPortProtocol: Make it runtime safe

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1416

After ExitBootServices, some pointer would be invalid such as
the Protocol pointer and gBS. The function depend on those should
be prevent. So disable the related function while after
ExitBootServices.
Change the gBS to a internal one, because there will be a cycle
consume between UefiBootServicesTableLib and DebugLib due to the
library constructors.
Also remove the SMM support for this instance.

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Michael Turner <Michael.Turner@microsoft.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Signed-off-by: Zhichao Gao <zhichao.gao@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Aaron Antone
2019-04-08 10:48:00 +08:00
committed by Liming Gao
parent c0b2816d69
commit 2b5778c68b
3 changed files with 163 additions and 72 deletions

View File

@@ -3,7 +3,9 @@
#
# Debug Lib that sends messages to EFI_DEBUGPORT_PROTOCOL.Write.
#
# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2018, Microsoft Corporation
#
# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -17,8 +19,9 @@
FILE_GUID = 102287b4-6b12-4D41-91e1-ebee1f3aa614
MODULE_TYPE = UEFI_DRIVER
VERSION_STRING = 1.0
LIBRARY_CLASS = DebugLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
LIBRARY_CLASS = DebugLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
CONSTRUCTOR = DxeDebugLibConstructor
#
# VALID_ARCHITECTURES = IA32 X64 EBC
@@ -27,6 +30,7 @@
[Sources]
DebugLib.c
DebugLibConstructor.c
@@ -39,9 +43,11 @@
BaseLib
PcdLib
PrintLib
UefiBootServicesTableLib
DebugPrintErrorLevelLib
[Guids]
gEfiEventExitBootServicesGuid ## CONSUMES
[Protocols]
gEfiDebugPortProtocolGuid ## CONSUMES