public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Gao, Liming" <liming.gao@intel.com>
To: "Zeng, Star" <star.zeng@intel.com>,
	"Chen, Chen A" <chen.a.chen@intel.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Dong, Eric" <eric.dong@intel.com>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>
Subject: Re: [PATCH V2 2/4] MdeModulePkg: Removing ipf which is no longer supported from edk2.
Date: Tue, 10 Jul 2018 07:08:26 +0000	[thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E2B93C2@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BB7D4F2@shsmsx102.ccr.corp.intel.com>

You can run BaseTools\Scripts\PatchCheck.py to check those style issues. 

>-----Original Message-----
>From: Zeng, Star
>Sent: Monday, July 09, 2018 5:45 PM
>To: Chen, Chen A <chen.a.chen@intel.com>; edk2-devel@lists.01.org
>Cc: Dong, Eric <eric.dong@intel.com>; Kinney, Michael D
><michael.d.kinney@intel.com>; Gao, Liming <liming.gao@intel.com>; Zeng,
>Star <star.zeng@intel.com>
>Subject: RE: [PATCH V2 2/4] MdeModulePkg: Removing ipf which is no longer
>supported from edk2.
>
>Please do not add trailing space at the end of line.
>For example the change in RegularExpressionDxe.inf:
>-  MSFT:DEBUG_*_IA32_CC_FLAGS   == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm
>-  MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF
>-  MSFT:DEBUG_*_X64_CC_FLAGS    == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X
>-  MSFT:RELEASE_*_X64_CC_FLAGS  == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X
>-  MSFT:DEBUG_*_IPF_CC_FLAGS    == /nologo /c /WX /GS- /W4 /EHs-c- /GR-
>/Gy /Os /FIAutoGen.h /QIPF_fr32 /Zi /X
>-  MSFT:RELEASE_*_IPF_CC_FLAGS  == /nologo /c /WX /GS- /W4 /EHs-c- /GR-
>/Gy /Os /FIAutoGen.h /QIPF_fr32 /X
>+  MSFT:DEBUG_*_IA32_CC_FLAGS   == /nologo /c /WX /GS- /W4 /Gs32768
>/D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm
>+  MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768
>/D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF
>+  MSFT:DEBUG_*_X64_CC_FLAGS    == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X
>+  MSFT:RELEASE_*_X64_CC_FLAGS  == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X
>
>
>Please double confirm other changes for same case, Reviewed-by: Star Zeng
><star.zeng@intel.com> with them corrected.
>
>
>Thanks,
>Star
>-----Original Message-----
>From: Chen, Chen A
>Sent: Monday, July 9, 2018 2:03 PM
>To: edk2-devel@lists.01.org
>Cc: Chen, Chen A <chen.a.chen@intel.com>; Zeng, Star
><star.zeng@intel.com>; Dong, Eric <eric.dong@intel.com>; Kinney, Michael D
><michael.d.kinney@intel.com>
>Subject: [PATCH V2 2/4] MdeModulePkg: Removing ipf which is no longer
>supported from edk2.
>
>Removing rules for Ipf sources file:
>* Remove the source file which path with "ipf" and also listed in
>  [Sources.IPF] section of INF file.
>* Remove the source file which listed in [Components.IPF] section
>  of DSC file and not listed in any other [Components] section.
>* Remove the embedded Ipf code for MDE_CPU_IPF.
>
>Removing rules for Inf file:
>* Remove IPF from VALID_ARCHITECTURES comments.
>* Remove DXE_SAL_DRIVER from LIBRARY_CLASS in [Defines] section.
>* Remove the INF which only listed in [Components.IPF] section in DSC.
>* Remove statements from [BuildOptions] that provide IPF specific flags.
>* Remove any IPF sepcific sections.
>
>Removing rules for Dec file:
>* Remove [Includes.IPF] section from Dec.
>
>Removing rules for Dsc file:
>* Remove IPF from SUPPORTED_ARCHITECTURES in [Defines] section of DSC.
>* Remove any IPF specific sections.
>* Remove statements from [BuildOptions] that provide IPF specific flags.
>
>Cc: Star Zeng <star.zeng@intel.com>
>Cc: Eric Dong <eric.dong@intel.com>
>Cc: Michael D Kinney <michael.d.kinney@intel.com>
>Contributed-under: TianoCore Contribution Agreement 1.1
>Signed-off-by: Chen A Chen <chen.a.chen@intel.com>
>---
> .../BootManagerMenuApp/BootManagerMenuApp.inf      |    2 +-
> MdeModulePkg/Application/HelloWorld/HelloWorld.inf |    4 +-
> .../MemoryProfileInfo/MemoryProfileInfo.inf        |    4 +-
> MdeModulePkg/Application/UiApp/UiApp.inf           |    2 +-
> .../Application/VariableInfo/VariableInfo.inf      |    4 +-
> .../Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf  |    2 +-
> MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf       |    4 +-
> MdeModulePkg/Bus/I2c/I2cDxe/I2cBusDxe.inf          |    4 +-
> MdeModulePkg/Bus/I2c/I2cDxe/I2cDxe.inf             |    4 +-
> MdeModulePkg/Bus/I2c/I2cDxe/I2cHostDxe.inf         |    4 +-
> MdeModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf       |    2 +-
> .../Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf      |    4 +-
> MdeModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf   |    4 +-
> MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf           |    2 +-
> MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf           |    2 +-
> MdeModulePkg/Bus/Pci/IdeBusPei/IdeBusPei.inf       |    4 +-
> .../IncompatiblePciDeviceSupportDxe.inf            |    2 +-
> .../Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf        |    2 +-
> MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf       |    2 +-
> .../Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf    |    4 +-
> .../Pci/SataControllerDxe/SataControllerDxe.inf    |    2 +-
> .../Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.inf        |    4 +-
> .../Bus/Pci/SdMmcPciHcPei/SdMmcPciHcPei.inf        |    2 +-
> MdeModulePkg/Bus/Pci/UfsPciHcDxe/UfsPciHcDxe.inf   |    2 +-
> MdeModulePkg/Bus/Pci/UfsPciHcPei/UfsPciHcPei.inf   |    2 +-
> MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf           |    2 +-
> MdeModulePkg/Bus/Pci/UhciPei/UhciPei.inf           |    4 +-
> MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf           |    2 +-
> MdeModulePkg/Bus/Pci/XhciPei/XhciPei.inf           |    4 +-
> MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf    |    2 +-
> MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf  |    2 +-
> .../Bus/Sd/EmmcBlockIoPei/EmmcBlockIoPei.inf       |    4 +-
> MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf            |    4 +-
> MdeModulePkg/Bus/Sd/SdBlockIoPei/SdBlockIoPei.inf  |    4 +-
> MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf                |    4 +-
> .../Bus/Ufs/UfsBlockIoPei/UfsBlockIoPei.inf        |    4 +-
> .../Bus/Ufs/UfsPassThruDxe/UfsPassThruDxe.inf      |    2 +-
> MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf       |    4 +-
> MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf       |    2 +-
> MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf       |    2 +-
> MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf         |    2 +-
> .../Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf    |    2 +-
> .../UsbMouseAbsolutePointerDxe.inf                 |    2 +-
> MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf   |    2 +-
> MdeModulePkg/Core/Dxe/DxeMain.inf                  |    2 +-
> MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf            |    5 +-
> MdeModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c     |   85 --
> MdeModulePkg/Core/Pei/PeiMain.inf                  |    2 +-
> MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf        |    2 +-
> MdeModulePkg/Include/Guid/VariableFormat.h         |    7 +-
> .../BasePlatformHookLibNull.inf                    |    4 +-
> .../BaseResetSystemLibNull.inf                     |    4 +-
> MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf   |    4 +-
> MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf   |    2 +-
> .../BootMaintenanceManagerUiLib.inf                |    2 +-
> .../Library/BootManagerUiLib/BootManagerUiLib.inf  |    2 +-
> .../CpuExceptionHandlerLibNull.inf                 |    4 +-
> .../CustomizedDisplayLib/CustomizedDisplayLib.inf  |    2 +-
> .../DebugAgentLibNull/DebugAgentLibNull.inf        |    4 +-
> .../DeviceManagerUiLib/DeviceManagerUiLib.inf      |    2 +-
> .../DisplayUpdateProgressLibGraphics.inf           |    2 +-
> .../DisplayUpdateProgressLibText.inf               |    2 +-
> .../Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf     |    2 +-
> .../DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf      |    2 +-
> .../DxeCapsuleLibNull/DxeCapsuleLibNull.inf        |    4 +-
> .../DxeCoreMemoryAllocationLib.inf                 |    4 +-
> .../DxeCoreMemoryAllocationProfileLib.inf          |    4 +-
> .../DxeCorePerformanceLib.inf                      |    2 +-
> .../DxeCrc32GuidedSectionExtractLib.inf            |    4 +-
> .../DxeDebugPrintErrorLevelLib.inf                 |    4 +-
> MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf       |    6 +-
> .../DxeFileExplorerProtocol.inf                    |    2 +-
> MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf     |    4 +-
> MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf     |    6 +-
> MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf       |    4 +-
> .../DxePerformanceLib/DxePerformanceLib.inf        |    4 +-
> .../DxePrintLibPrint2Protocol.inf                  |    4 +-
> .../DxeReportStatusCodeLib.inf                     |    6 +-
> .../DxeResetSystemLib/DxeResetSystemLib.inf        |    2 +-
> .../DxeSecurityManagementLib.inf                   |    4 +-
> MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf   |    4 +-
> MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf   |    4 +-
> .../Library/FileExplorerLib/FileExplorerLib.inf    |    2 +-
> .../FmpAuthenticationLibNull.inf                   |    4 +-
> .../LzmaCustomDecompressLib.inf                    |    4 +-
> .../OemHookStatusCodeLibNull.inf                   |    2 +-
> .../PciHostBridgeLibNull/PciHostBridgeLibNull.inf  |    4 +-
> .../PeiCrc32GuidedSectionExtractLib.inf            |    2 +-
> .../PeiDxeDebugLibReportStatusCode.inf             |    4 +-
> .../PeiPerformanceLib/PeiPerformanceLib.inf        |    2 +-
> .../PeiRecoveryLibNull/PeiRecoveryLibNull.inf      |    2 +-
> .../PeiReportStatusCodeLib.inf                     |    2 +-
> .../PeiResetSystemLib/PeiResetSystemLib.inf        |    2 +-
> MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf |    2 +-
> .../PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf    |    6 +-
> .../PlatformHookLibSerialPortPpi.inf               |    6 +-
> .../PlatformVarCleanupLib.inf                      |    4 +-
> .../RuntimeDxeReportStatusCodeLib.inf              |    4 +-
> .../TpmMeasurementLibNull.inf                      |    6 +-
> .../UefiBootManagerLib/UefiBootManagerLib.inf      |    2 +-
> MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf     |    6 +-
> .../UefiHiiServicesLib/UefiHiiServicesLib.inf      |    4 +-
> .../UefiMemoryAllocationProfileLib.inf             |    6 +-
> MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf   |    4 +-
> MdeModulePkg/Logo/Logo.inf                         |    4 +-
> MdeModulePkg/MdeModulePkg.dsc                      |   10 +-
> .../Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf       |    2 +-
> .../Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf   |    2 +-
> .../BootGraphicsResourceTableDxe.inf               |    2 +-
> .../FirmwarePerformanceDxe.inf                     |    2 +-
> .../FirmwarePerformancePei.inf                     |    2 +-
> .../Acpi/S3SaveStateDxe/S3SaveStateDxe.inf         |    2 +-
> .../Acpi/SmmS3SaveState/SmmS3SaveState.inf         |    2 +-
> MdeModulePkg/Universal/BdsDxe/BdsDxe.inf           |    2 +-
> .../BootManagerPolicyDxe/BootManagerPolicyDxe.inf  |    2 +-
> MdeModulePkg/Universal/CapsulePei/CapsulePei.inf   |    2 +-
> .../CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf        |    6 +-
> .../Console/ConPlatformDxe/ConPlatformDxe.inf      |    2 +-
> .../Console/ConSplitterDxe/ConSplitterDxe.inf      |    2 +-
> .../GraphicsConsoleDxe/GraphicsConsoleDxe.inf      |    2 +-
> .../Universal/Console/TerminalDxe/TerminalDxe.inf  |    4 +-
> .../Universal/DebugPortDxe/DebugPortDxe.inf        |    4 +-
> .../Universal/DebugSupportDxe/DebugSupportDxe.inf  |   10 +-
> .../Universal/DebugSupportDxe/Ipf/AsmFuncs.s       | 1382 --------------------
> .../Universal/DebugSupportDxe/Ipf/Common.i         |   29 -
> .../Universal/DebugSupportDxe/Ipf/Ds64Macros.i     |   78 --
> .../Universal/DebugSupportDxe/Ipf/PlDebugSupport.c |  467 -------
> .../Universal/DebugSupportDxe/Ipf/PlDebugSupport.h |  324 -----
> .../Universal/DevicePathDxe/DevicePathDxe.inf      |    2 +-
> .../Universal/Disk/CdExpressPei/CdExpressPei.inf   |    2 +-
> .../Universal/Disk/DiskIoDxe/DiskIoDxe.inf         |    2 +-
> .../Universal/Disk/PartitionDxe/PartitionDxe.inf   |    2 +-
> MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf      |    3 +-
> .../UnicodeCollation/EnglishDxe/EnglishDxe.inf     |    2 +-
> .../DisplayEngineDxe/DisplayEngineDxe.inf          |    2 +-
> .../DriverHealthManagerDxe.inf                     |    2 +-
> .../Universal/DriverSampleDxe/DriverSampleDxe.inf  |    2 +-
> MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf      |    7 +-
> .../Universal/EbcDxe/EbcDebuggerConfig.inf         |    4 +-
> MdeModulePkg/Universal/EbcDxe/EbcDxe.inf           |    7 +-
> MdeModulePkg/Universal/EbcDxe/Ipf/EbcLowLevel.s    |  206 ---
> MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.c     |  884 -------------
> MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.h     |   41 -
> MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf         |    2 +-
> .../FaultTolerantWriteDxe.inf                      |    2 +-
> .../FaultTolerantWritePei.inf                      |    4 +-
> .../Universal/FileExplorerDxe/FileExplorerDxe.inf  |    2 +-
> .../Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf    |    2 +-
> .../HiiResourcesSampleDxe.inf                      |    2 +-
> .../LegacyRegion2Dxe/LegacyRegion2Dxe.inf          |    2 +-
> .../Universal/LoadFileOnFv2/LoadFileOnFv2.inf      |    4 +-
> .../GenericMemoryTestDxe/GenericMemoryTestDxe.inf  |    4 +-
> .../NullMemoryTestDxe/NullMemoryTestDxe.inf        |    2 +-
> MdeModulePkg/Universal/Metronome/Metronome.inf     |    2 +-
> .../MonotonicCounterRuntimeDxe.inf                 |    4 +-
> MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf   |    2 +-
> .../Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf        |    2 +-
> MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf   |    4 +-
> .../Universal/Network/IScsiDxe/IScsiDxe.inf        |    2 +-
> MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf   |    2 +-
> MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf   |    2 +-
> .../Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf      |    2 +-
> MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf   |    2 +-
> MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf |    2 +-
> MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf |    2 +-
> .../Network/UefiPxeBcDxe/UefiPxeBcDxe.inf          |    2 +-
> .../Network/VlanConfigDxe/VlanConfigDxe.inf        |    4 +-
> MdeModulePkg/Universal/PCD/Dxe/Pcd.inf             |    2 +-
> MdeModulePkg/Universal/PCD/Pei/Pcd.inf             |    2 +-
> .../PcatSingleSegmentPciCfg2Pei.inf                |    4 +-
> .../PlatformDriOverrideDxe.inf                     |    2 +-
> MdeModulePkg/Universal/PrintDxe/PrintDxe.inf       |    4 +-
> .../PropertiesTableAttributesDxe.inf               |    4 +-
> .../RegularExpressionDxe/RegularExpressionDxe.inf  |   11 +-
> .../Pei/ReportStatusCodeRouterPei.inf              |    4 +-
> .../ReportStatusCodeRouterRuntimeDxe.inf           |    2 +-
> .../SectionExtractionPei/SectionExtractionPei.inf  |    2 +-
> .../Universal/SecurityStubDxe/SecurityStubDxe.inf  |    4 +-
> .../Universal/SetupBrowserDxe/SetupBrowserDxe.inf  |    2 +-
> MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf     |    2 +-
> .../SmbiosMeasurementDxe/SmbiosMeasurementDxe.inf  |    2 +-
> .../StatusCodeHandler/Pei/StatusCodeHandlerPei.inf |    2 +-
> .../RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf     |    2 +-
> .../Universal/TimestampDxe/TimestampDxe.inf        |    2 +-
> .../Universal/Variable/Pei/VariablePei.inf         |    4 +-
> .../Universal/WatchdogTimerDxe/WatchdogTimer.inf   |    2 +-
> 186 files changed, 263 insertions(+), 3789 deletions(-)
> delete mode 100644 MdeModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c
> delete mode 100644
>MdeModulePkg/Universal/DebugSupportDxe/Ipf/AsmFuncs.s
> delete mode 100644
>MdeModulePkg/Universal/DebugSupportDxe/Ipf/Common.i
> delete mode 100644
>MdeModulePkg/Universal/DebugSupportDxe/Ipf/Ds64Macros.i
> delete mode 100644
>MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.c
> delete mode 100644
>MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.h
> delete mode 100644 MdeModulePkg/Universal/EbcDxe/Ipf/EbcLowLevel.s
> delete mode 100644 MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.c
> delete mode 100644 MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.h
>
>diff --git
>a/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuA
>pp.inf
>b/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuA
>pp.inf
>index 3dc1bab9a0..b10da3742e 100644
>---
>a/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuA
>pp.inf
>+++
>b/MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuA
>pp.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Application/HelloWorld/HelloWorld.inf
>b/MdeModulePkg/Application/HelloWorld/HelloWorld.inf
>index 1cfed2d85c..d5cd9d4855 100644
>--- a/MdeModulePkg/Application/HelloWorld/HelloWorld.inf
>+++ b/MdeModulePkg/Application/HelloWorld/HelloWorld.inf
>@@ -6,7 +6,7 @@
> #
> #  It demos how to use EDKII PCD mechanism to make code more flexible.
> #
>-#  Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -35,7 +35,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
>b/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
>index 4bb7a9df1d..96b9dac0c7 100644
>--- a/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
>+++
>b/MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
>@@ -4,7 +4,7 @@
> #  Note that if the feature is not enabled by setting
>PcdMemoryProfilePropertyMask,
> #  the application will not display memory profile information.
> #
>-#  Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution. The full text of the license may be
>found at
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Application/UiApp/UiApp.inf
>b/MdeModulePkg/Application/UiApp/UiApp.inf
>index 417f1a3ec9..66372befbf 100644
>--- a/MdeModulePkg/Application/UiApp/UiApp.inf
>+++ b/MdeModulePkg/Application/UiApp/UiApp.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Application/VariableInfo/VariableInfo.inf
>b/MdeModulePkg/Application/VariableInfo/VariableInfo.inf
>index 484ad32a4e..762e776e2d 100644
>--- a/MdeModulePkg/Application/VariableInfo/VariableInfo.inf
>+++ b/MdeModulePkg/Application/VariableInfo/VariableInfo.inf
>@@ -6,7 +6,7 @@
> #  Note that if Variable Dxe/Smm driver doesn't enable the feature by setting
>PcdVariableCollectStatistics
> #  as TRUE, the application will not display variable statistical information.
> #
>-#  Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution. The full text of the license may be
>found at
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
>b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
>index 74e62649ce..1c8d144bbd 100644
>--- a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
>+++ b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gAtaAtapiPassThruDriverBinding
> #  COMPONENT_NAME                =  gAtaAtapiPassThruComponentName
>diff --git a/MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
>b/MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
>index 4aab75bab7..446c2f9dee 100644
>--- a/MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
>+++ b/MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
>@@ -5,7 +5,7 @@
> #  in UEFI spec 2.2. It installs Block IO and Disk Info protocol for each ATA
>device
> #  it enumerates and identifies successfully.
> #
>-#  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gAtaBusDriverBinding
> #  COMPONENT_NAME                =  gAtaBusComponentName
>diff --git a/MdeModulePkg/Bus/I2c/I2cDxe/I2cBusDxe.inf
>b/MdeModulePkg/Bus/I2c/I2cDxe/I2cBusDxe.inf
>index 4dbe2f5e68..bce3b521e3 100644
>--- a/MdeModulePkg/Bus/I2c/I2cDxe/I2cBusDxe.inf
>+++ b/MdeModulePkg/Bus/I2c/I2cDxe/I2cBusDxe.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  This driver enumerates I2C devices on I2C bus and produce I2C IO Protocol
>on I2C devices.
> #
>-#  Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git a/MdeModulePkg/Bus/I2c/I2cDxe/I2cDxe.inf
>b/MdeModulePkg/Bus/I2c/I2cDxe/I2cDxe.inf
>index 5cd53b2fc4..feab323360 100644
>--- a/MdeModulePkg/Bus/I2c/I2cDxe/I2cDxe.inf
>+++ b/MdeModulePkg/Bus/I2c/I2cDxe/I2cDxe.inf
>@@ -4,7 +4,7 @@
> #  This driver produce I2C Host Protocol on I2C controller handle, enumerate
>I2C
> #  devices on I2C bus and produce I2C IO Protocol on I2C devices.
> #
>-#  Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git a/MdeModulePkg/Bus/I2c/I2cDxe/I2cHostDxe.inf
>b/MdeModulePkg/Bus/I2c/I2cDxe/I2cHostDxe.inf
>index 2fb1085c6d..c40bf7d909 100644
>--- a/MdeModulePkg/Bus/I2c/I2cDxe/I2cHostDxe.inf
>+++ b/MdeModulePkg/Bus/I2c/I2cDxe/I2cHostDxe.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  This driver produce I2C Host Protocol on I2C controller handle.
> #
>-#  Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git a/MdeModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
>b/MdeModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
>index b257e99dba..464720b1f9 100644
>--- a/MdeModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
>+++ b/MdeModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gIsaBusDriverBinding
> #  COMPONENT_NAME                =  gIsaBusComponentName
>diff --git a/MdeModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf
>b/MdeModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf
>index a0172eabf8..8b6847eeac 100644
>--- a/MdeModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf
>+++ b/MdeModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2KeyboardDxe.inf
>@@ -4,7 +4,7 @@
> # Ps2 Keyboard Driver for UEFI. The keyboard type implemented follows IBM
> # compatible PS2 protocol using Scan Code Set 1.
> #
>-# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions of the BSD
>License
>@@ -27,7 +27,7 @@
>   ENTRY_POINT                    = InitializePs2Keyboard
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #  DRIVER_BINDING                = gKeyboardControllerDriver;
> #  COMPONENT_NAME                = gPs2KeyboardComponentName;
> #  COMPONENT_NAME2               = gPs2KeyboardComponentName2;
>diff --git a/MdeModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
>b/MdeModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
>index 2c7688a051..a631aaad2e 100644
>--- a/MdeModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
>+++ b/MdeModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
>@@ -3,7 +3,7 @@
> #
> # This dirver provides support for PS2 based mice.
> #
>-# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
>   ENTRY_POINT                    = InitializePs2Mouse
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #  DRIVER_BINDING                = gPS2MouseDriver;
> #  COMPONENT_NAME                = gPs2MouseComponentName;
> #  COMPONENT_NAME2               = gPs2MouseComponentName2;
>diff --git a/MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
>b/MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
>index bc6bd4ce29..d1db212002 100644
>--- a/MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  gEhciDriverBinding
> #  COMPONENT_NAME                =  gEhciComponentName
>diff --git a/MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
>b/MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
>index 74c13db1c1..4fa3213479 100644
>--- a/MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
>+++ b/MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Pci/IdeBusPei/IdeBusPei.inf
>b/MdeModulePkg/Bus/Pci/IdeBusPei/IdeBusPei.inf
>index 8bcef7bc6a..3686b43af4 100644
>--- a/MdeModulePkg/Bus/Pci/IdeBusPei/IdeBusPei.inf
>+++ b/MdeModulePkg/Bus/Pci/IdeBusPei/IdeBusPei.inf
>@@ -4,7 +4,7 @@
> # for Atapi CD ROM device.
> #
> # This module discovers CDROM devices in Legacy and native mode and
>installs block IO ppis for them.
>-# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatibleP
>ciDeviceSupportDxe.inf
>b/MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatibleP
>ciDeviceSupportDxe.inf
>index fa3e012cc7..6bc5f9fcbf 100644
>---
>a/MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatibleP
>ciDeviceSupportDxe.inf
>+++
>b/MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatibleP
>ciDeviceSupportDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
>b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
>index bfb783205c..aca625b3b0 100644
>--- a/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gNvmExpressDriverBinding
> #  COMPONENT_NAME                =  gNvmExpressComponentName
>diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
>b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
>index a21dd2b5ed..82233e0c7b 100644
>--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  gPciBusDriverBinding
> #  COMPONENT_NAME                =  gPciBusComponentName
>diff --git a/MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
>b/MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
>index 03fddfe75e..461f2bf5d4 100644
>--- a/MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
>@@ -3,7 +3,7 @@
> #
> # Produces the Serial I/O protocol for standard UARTS using Super I/O or PCI
>I/O.
> #
>-# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions of the BSD
>License
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gSerialControllerDriver
> #  COMPONENT_NAME                =  gPciSioSerialComponentName
>diff --git a/MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
>b/MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
>index 4fcb9678aa..51d95da346 100644
>--- a/MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  gSataControllerDriverBinding
> #  COMPONENT_NAME                =  gSataControllerComponentName
>diff --git a/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.inf
>b/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.inf
>index 154ce45d82..b0425e9886 100644
>--- a/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/SdMmcPciHcDxe/SdMmcPciHcDxe.inf
>@@ -5,7 +5,7 @@
> #  It will produce EFI_SD_MMC_PASS_THRU_PROTOCOL to allow sending
>SD/MMC/eMMC cmds
> #  to specified devices from upper layer.
> #
>-#  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gSdMmcPciHcDxeDriverBinding
> #  COMPONENT_NAME                =  gSdMmcPciHcDxeComponentName
>diff --git a/MdeModulePkg/Bus/Pci/SdMmcPciHcPei/SdMmcPciHcPei.inf
>b/MdeModulePkg/Bus/Pci/SdMmcPciHcPei/SdMmcPciHcPei.inf
>index 51675f5bfb..261fc1191a 100644
>--- a/MdeModulePkg/Bus/Pci/SdMmcPciHcPei/SdMmcPciHcPei.inf
>+++ b/MdeModulePkg/Bus/Pci/SdMmcPciHcPei/SdMmcPciHcPei.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Pci/UfsPciHcDxe/UfsPciHcDxe.inf
>b/MdeModulePkg/Bus/Pci/UfsPciHcDxe/UfsPciHcDxe.inf
>index 525235635a..aa9c11f51b 100644
>--- a/MdeModulePkg/Bus/Pci/UfsPciHcDxe/UfsPciHcDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/UfsPciHcDxe/UfsPciHcDxe.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gUfsHcDriverBinding
> #  COMPONENT_NAME                =  gUfsHcComponentName
>diff --git a/MdeModulePkg/Bus/Pci/UfsPciHcPei/UfsPciHcPei.inf
>b/MdeModulePkg/Bus/Pci/UfsPciHcPei/UfsPciHcPei.inf
>index 3535da17f0..75029183ab 100644
>--- a/MdeModulePkg/Bus/Pci/UfsPciHcPei/UfsPciHcPei.inf
>+++ b/MdeModulePkg/Bus/Pci/UfsPciHcPei/UfsPciHcPei.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
>b/MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
>index 5dccd3b22e..e6eb351ead 100644
>--- a/MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  gUhciDriverBinding
> #  COMPONENT_NAME                =  gUhciComponentName
>diff --git a/MdeModulePkg/Bus/Pci/UhciPei/UhciPei.inf
>b/MdeModulePkg/Bus/Pci/UhciPei/UhciPei.inf
>index 95ddea2162..1995d73984 100644
>--- a/MdeModulePkg/Bus/Pci/UhciPei/UhciPei.inf
>+++ b/MdeModulePkg/Bus/Pci/UhciPei/UhciPei.inf
>@@ -4,7 +4,7 @@
> # It produces gPeiUsbHostControllerPpiGuid based on
>gPeiUsbControllerPpiGuid which is used
> # to enable recovery function from USB Drivers.
> #
>-# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
>b/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
>index 9bdabd10bc..4f9025b724 100644
>--- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
>+++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  gXhciDriverBinding
> #  COMPONENT_NAME                =  gXhciComponentName
>diff --git a/MdeModulePkg/Bus/Pci/XhciPei/XhciPei.inf
>b/MdeModulePkg/Bus/Pci/XhciPei/XhciPei.inf
>index f307ea7646..c6c48f7349 100644
>--- a/MdeModulePkg/Bus/Pci/XhciPei/XhciPei.inf
>+++ b/MdeModulePkg/Bus/Pci/XhciPei/XhciPei.inf
>@@ -4,7 +4,7 @@
> # It produces gPeiUsb2HostControllerPpiGuid based on
>gPeiUsbControllerPpiGuid
> # which is used to enable recovery function from USB Drivers.
> #
>-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
>b/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
>index abcd267668..fb1ef3a8f5 100644
>--- a/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
>+++ b/MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES              =  IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES              =  IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gSCSIBusDriverBinding
> #  COMPONENT_NAME                =  gScsiBusComponentName
>diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
>b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
>index 397d314272..ffe9ee9dad 100644
>--- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
>+++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gScsiDiskDriverBinding
> #  COMPONENT_NAME                =  gScsiDiskComponentName
>diff --git a/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcBlockIoPei.inf
>b/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcBlockIoPei.inf
>index b4127b791d..86c3631c82 100644
>--- a/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcBlockIoPei.inf
>+++ b/MdeModulePkg/Bus/Sd/EmmcBlockIoPei/EmmcBlockIoPei.inf
>@@ -1,7 +1,7 @@
> ## @file
> # Description file for the Embedded MMC (eMMC) Peim driver.
> #
>-# Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf
>b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf
>index 3f27bdbcaf..b7e38098e6 100644
>--- a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf
>+++ b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf
>@@ -4,7 +4,7 @@
> #  It produces BlockIo, BlockIo2 and StorageSecurity protocols to allow upper
>layer
> #  access the EMMC device.
> #
>-#  Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gEmmcDxeDriverBinding
> #  COMPONENT_NAME                =  gEmmcDxeComponentName
>diff --git a/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdBlockIoPei.inf
>b/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdBlockIoPei.inf
>index 1530f1efdb..0a31661aed 100644
>--- a/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdBlockIoPei.inf
>+++ b/MdeModulePkg/Bus/Sd/SdBlockIoPei/SdBlockIoPei.inf
>@@ -1,7 +1,7 @@
> ## @file
> # Description file for the SD memory card Peim driver.
> #
>-# Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf
>b/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf
>index a763314275..1ce801ffcb 100644
>--- a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf
>+++ b/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf
>@@ -4,7 +4,7 @@
> #  It produces BlockIo and BlockIo2 protocols to allow upper layer
> #  access the SD memory card device.
> #
>-#  Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gSdDxeDriverBinding
> #  COMPONENT_NAME                =  gSdDxeComponentName
>diff --git a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsBlockIoPei.inf
>b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsBlockIoPei.inf
>index 28daf67ffc..daa8b6b573 100644
>--- a/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsBlockIoPei.inf
>+++ b/MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsBlockIoPei.inf
>@@ -1,7 +1,7 @@
> ## @file
> # Description file for the Universal Flash Storage (UFS) Peim driver.
> #
>-# Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruDxe.inf
>b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruDxe.inf
>index 93b6424020..a8a3f7c4c5 100644
>--- a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruDxe.inf
>+++ b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruDxe.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gUfsPassThruDriverBinding
> #  COMPONENT_NAME                =  gUfsPassThruComponentName
>diff --git a/MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
>b/MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
>index 977bef5c8b..1cd8286ad3 100644
>--- a/MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
>+++ b/MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
>@@ -1,7 +1,7 @@
> ## @file
> # The Usb mass storage device Peim driver is used to support recovery from
>USB device.
> #
>-# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
>b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
>index 30d59adb34..e9baefdcff 100644
>--- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
>+++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  mUsbBusDriverBinding
> #  COMPONENT_NAME                =  mUsbBusComponentName
>diff --git a/MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
>b/MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
>index 0d81bf8dc2..8781adc6a8 100644
>--- a/MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
>+++ b/MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
>b/MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
>index 41f0d9ab9b..b994ea3e24 100644
>--- a/MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
>+++ b/MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
>@@ -37,7 +37,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
> #  DRIVER_BINDING                =  gUsbKeyboardDriverBinding
> #  COMPONENT_NAME                =  gUsbKeyboardComponentName
>diff --git
>a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
>b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
>index 1fdd43443f..91953b35bc 100644
>--- a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
>+++
>b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
>@@ -38,7 +38,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gUSBMassDriverBinding
> #  COMPONENT_NAME                =  gUsbMassStorageComponentName
>diff --git
>a/MdeModulePkg/Bus/Usb/UsbMouseAbsolutePointerDxe/UsbMouseAbsol
>utePointerDxe.inf
>b/MdeModulePkg/Bus/Usb/UsbMouseAbsolutePointerDxe/UsbMouseAbsol
>utePointerDxe.inf
>index 10e74b9783..aacd8fe3fe 100644
>---
>a/MdeModulePkg/Bus/Usb/UsbMouseAbsolutePointerDxe/UsbMouseAbsol
>utePointerDxe.inf
>+++
>b/MdeModulePkg/Bus/Usb/UsbMouseAbsolutePointerDxe/UsbMouseAbsol
>utePointerDxe.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gUsbMouseAbsolutePointerDriverBinding
> #  COMPONENT_NAME                =
>gUsbMouseAbsolutePointerComponentName
>diff --git a/MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf
>b/MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf
>index 5bea024d20..6da3debb96 100644
>--- a/MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf
>+++ b/MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gUsbMouseDriverBinding
> #  COMPONENT_NAME                =  gUsbMouseComponentName
>diff --git a/MdeModulePkg/Core/Dxe/DxeMain.inf
>b/MdeModulePkg/Core/Dxe/DxeMain.inf
>index 68fa0a01d9..404f924764 100644
>--- a/MdeModulePkg/Core/Dxe/DxeMain.inf
>+++ b/MdeModulePkg/Core/Dxe/DxeMain.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
>b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
>index 7deeb8f270..2ea429c215 100644
>--- a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
>+++ b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
>@@ -31,7 +31,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
>AARCH64
> #
>
> [Sources]
>@@ -49,9 +49,6 @@
>   X64/VirtualMemory.c
>   X64/DxeLoadFunc.c
>
>-[Sources.IPF]
>-  Ipf/DxeLoadFunc.c
>-
> [Sources.EBC]
>   Ebc/DxeLoadFunc.c
>
>diff --git a/MdeModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c
>b/MdeModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c
>deleted file mode 100644
>index 7443648017..0000000000
>--- a/MdeModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c
>+++ /dev/null
>@@ -1,85 +0,0 @@
>-/** @file
>-  Ipf-specific functionality for DxeLoad.
>-
>-Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
>-This program and the accompanying materials
>-are licensed and made available under the terms and conditions of the BSD
>License
>-which accompanies this distribution.  The full text of the license may be
>found at
>-http://opensource.org/licenses/bsd-license.php
>-
>-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-
>-**/
>-
>-#include "DxeIpl.h"
>-
>-
>-
>-/**
>-   Transfers control to DxeCore.
>-
>-   This function performs a CPU architecture specific operations to execute
>-   the entry point of DxeCore with the parameters of HobList.
>-   It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase.
>-
>-   @param DxeCoreEntryPoint         The entry point of DxeCore.
>-   @param HobList                   The start of HobList passed to DxeCore.
>-
>-**/
>-VOID
>-HandOffToDxeCore (
>-  IN EFI_PHYSICAL_ADDRESS   DxeCoreEntryPoint,
>-  IN EFI_PEI_HOB_POINTERS   HobList
>-  )
>-{
>-  VOID                *BaseOfStack;
>-  VOID                *TopOfStack;
>-  VOID                *BspStore;
>-  EFI_STATUS          Status;
>-
>-  //
>-  // Allocate 128KB for the Stack
>-  //
>-  BaseOfStack = AllocatePages (EFI_SIZE_TO_PAGES (STACK_SIZE));
>-  ASSERT (BaseOfStack != NULL);
>-
>-  //
>-  // Allocate 16KB for the BspStore
>-  //
>-  BspStore    = AllocatePages (EFI_SIZE_TO_PAGES (BSP_STORE_SIZE));
>-  ASSERT (BspStore != NULL);
>-  //
>-  // Build BspStoreHob
>-  //
>-  BuildBspStoreHob ((EFI_PHYSICAL_ADDRESS) (UINTN) BspStore,
>BSP_STORE_SIZE, EfiBootServicesData);
>-
>-  //
>-  // Compute the top of the stack we were allocated. Pre-allocate a UINTN
>-  // for safety.
>-  //
>-  TopOfStack = (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES
>(STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);
>-  TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
>-
>-  //
>-  // End of PEI phase signal
>-  //
>-  Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);
>-  ASSERT_EFI_ERROR (Status);
>-
>-  //
>-  // Update the contents of BSP stack HOB to reflect the real stack info passed
>to DxeCore.
>-  //
>-  UpdateStackHob ((EFI_PHYSICAL_ADDRESS)(UINTN) BaseOfStack,
>STACK_SIZE);
>-
>-  //
>-  // Transfer the control to the entry point of DxeCore.
>-  //
>-  SwitchStack (
>-    (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,
>-    HobList.Raw,
>-    NULL,
>-    TopOfStack,
>-    BspStore
>-    );
>-}
>diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf
>b/MdeModulePkg/Core/Pei/PeiMain.inf
>index 2fb01958e5..18f46e1bd4 100644
>--- a/MdeModulePkg/Core/Pei/PeiMain.inf
>+++ b/MdeModulePkg/Core/Pei/PeiMain.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
>b/MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
>index d66c8b9f09..980efad3dd 100644
>--- a/MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
>+++ b/MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
>@@ -31,7 +31,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Include/Guid/VariableFormat.h
>b/MdeModulePkg/Include/Guid/VariableFormat.h
>index b0c2616c4d..52214f1b6c 100644
>--- a/MdeModulePkg/Include/Guid/VariableFormat.h
>+++ b/MdeModulePkg/Include/Guid/VariableFormat.h
>@@ -2,7 +2,7 @@
>   The variable data structures are related to EDK II-specific implementation of
>UEFI variables.
>   VariableFormat.h defines variable data headers and variable storage region
>headers.
>
>-Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
>+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> This program and the accompanying materials are licensed and made
>available under
> the terms and conditions of the BSD License that accompanies this
>distribution.
> The full text of the license may be found at
>@@ -28,13 +28,8 @@ extern EFI_GUID gEfiAuthenticatedVariableGuid;
> ///
> /// Alignment of variable name and data, according to the architecture:
> /// * For IA-32 and Intel(R) 64 architectures: 1.
>-/// * For IA-64 architecture: 8.
> ///
>-#if defined (MDE_CPU_IPF)
>-#define ALIGNMENT         8
>-#else
> #define ALIGNMENT         1
>-#endif
>
> //
> // GET_PAD_SIZE calculates the miminal pad bytes needed to make the
>current pad size satisfy the alignment requirement.
>diff --git
>a/MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNu
>ll.inf
>b/MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNu
>ll.inf
>index 6d5195576f..7a004005f0 100644
>---
>a/MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNu
>ll.inf
>+++
>b/MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNu
>ll.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Null Platform Hook Library instance.
> #
>-#  Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.
>inf
>b/MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.
>inf
>index 96e0ebb212..b744b0767f 100644
>---
>a/MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.
>inf
>+++
>b/MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.
>inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Null Reset System Library instance that only generates ASSERT() conditions.
> #
>-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
>b/MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
>index 4b493f4eb6..d9b781cbe1 100644
>--- a/MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
>+++ b/MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
>@@ -1,7 +1,7 @@
> ##  @file
> #   Library used for sorting routines.
> #
>-#  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved. <BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -23,7 +23,7 @@
>   LIBRARY_CLASS                  = SortLib|DXE_DRIVER DXE_RUNTIME_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
>b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
>index a2afc9e089..310254510d 100644
>--- a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
>+++ b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance
>ManagerUiLib.inf
>b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanc
>eManagerUiLib.inf
>index aad9d7678e..d23f71ff28 100644
>---
>a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance
>ManagerUiLib.inf
>+++
>b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanc
>eManagerUiLib.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
>b/MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
>index f6fc074b9d..5ae0f174b6 100644
>--- a/MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
>+++ b/MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandler
>LibNull.inf
>b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandle
>rLibNull.inf
>index c79c5a76ee..4dbbe410d5 100644
>---
>a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandler
>LibNull.inf
>+++
>b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandle
>rLibNull.inf
>@@ -1,7 +1,7 @@
> ## @file
> # Null instance of CPU Exception Handler Library with empty functions.
> #
>-#  Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git
>a/MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
>b/MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
>index 4b1f6b4404..6ce2e59957 100644
>--- a/MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
>+++
>b/MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
>b/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
>index ce1eab2623..8318f1e4ca 100644
>--- a/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
>+++ b/MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Null instance of Debug Agent Library with empty functions.
> #
>-#  Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git
>a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
>b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
>index d493b37baa..2e61a3debd 100644
>--- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
>+++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdate
>ProgressLibGraphics.inf
>b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdate
>ProgressLibGraphics.inf
>index ada6076770..6ba073f21f 100644
>---
>a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdate
>ProgressLibGraphics.inf
>+++
>b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdate
>ProgressLibGraphics.inf
>@@ -37,7 +37,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProg
>ressLibText.inf
>b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProg
>ressLibText.inf
>index c3134439e4..df8624a77e 100644
>---
>a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProg
>ressLibText.inf
>+++
>b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProg
>ressLibText.inf
>@@ -37,7 +37,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
>b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
>index 8367264f76..74f23f97ff 100644
>--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
>+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
>b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
>index 342df9e99c..5a80cbef3f 100644
>--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
>+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
>b/MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
>index b836607aae..42cb306655 100644
>--- a/MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
>+++ b/MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
>@@ -2,7 +2,7 @@
> #  NULL Dxe Capsule library instance.
> #  It can make core modules pass package level build.
> #
>-#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationLib.inf
>b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationLib.inf
>index caba8cd4a4..a7df08b520 100644
>---
>a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationLib.inf
>+++
>b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationLib.inf
>@@ -4,7 +4,7 @@
> # for memory allocation instead of using UEFI boot services in an indirect way.
> # It is assumed that this library instance must be linked with DxeCore in this
>package.
> #
>-# Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationProfileLib.inf
>b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationProfileLib.inf
>index a2b5f8c102..823ca7127d 100644
>---
>a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationProfileLib.inf
>+++
>b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAll
>ocationProfileLib.inf
>@@ -4,7 +4,7 @@
> # for memory allocation/profile instead of using UEFI boot services or
>memory profile protocol in an indirect way.
> # It is assumed that this library instance must be linked with DxeCore in this
>package.
> #
>-# Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
>inf
>b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
>inf
>index 8fab47ff02..e19a74bbe6 100644
>---
>a/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
>inf
>+++
>b/MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.
>inf
>@@ -35,7 +35,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32Guide
>dSectionExtractLib.inf
>b/MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32Guide
>dSectionExtractLib.inf
>index 7a8efbf8cf..176d9d984a 100644
>---
>a/MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32Guide
>dSectionExtractLib.inf
>+++
>b/MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32Guide
>dSectionExtractLib.inf
>@@ -25,14 +25,14 @@
>   FILE_GUID                      = 387A2490-81FC-4E7C-8E0A-3E58C30FCD0B
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = NULL|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = NULL|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
>   CONSTRUCTOR                    = DxeCrc32GuidedSectionExtractLibConstructor
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorL
>evelLib.inf
>b/MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorL
>evelLib.inf
>index 69a41f40c7..47f8681f2f 100644
>---
>a/MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorL
>evelLib.inf
>+++
>b/MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorL
>evelLib.inf
>@@ -22,12 +22,12 @@
>   FILE_GUID                      = 1D564EC9-9373-49a4-9E3F-E4D7B9974C84
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = DebugPrintErrorLevelLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = DebugPrintErrorLevelLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   CONSTRUCTOR                    = DxeDebugPrintErrorLevelLibConstructor
>   DESTRUCTOR                     = DxeDebugPrintErrorLevelLibDestructor
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
>b/MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
>index d541acd5a9..091f0a0465 100644
>--- a/MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
>+++ b/MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  This library instance provides DPC service by consuming EFI DPC Protocol.
> #
>-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution.  The full text of the license may be
>found at
>@@ -19,13 +19,13 @@
>   FILE_GUID                      = 38897D86-FF36-4472-AE64-1DB9AE715C81
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = DpcLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = DpcLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   CONSTRUCTOR                    = DpcLibConstructor
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeFileExplorerProtocol/DxeFileExplorerProtocol.i
>nf
>b/MdeModulePkg/Library/DxeFileExplorerProtocol/DxeFileExplorerProtocol.i
>nf
>index 9db58cb8f6..bfa18d7bdd 100644
>---
>a/MdeModulePkg/Library/DxeFileExplorerProtocol/DxeFileExplorerProtocol.i
>nf
>+++
>b/MdeModulePkg/Library/DxeFileExplorerProtocol/DxeFileExplorerProtocol.i
>nf
>@@ -20,7 +20,7 @@
>   FILE_GUID                      = 6806C45F-13C4-4274-B8A3-055EF641A060
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = FileExplorerLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = FileExplorerLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   CONSTRUCTOR                    = FileExplorerConstructor
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf
>b/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf
>index d6d5391b3a..dbcb67f9ab 100644
>--- a/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf
>+++ b/MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.inf
>@@ -21,12 +21,12 @@
>   FILE_GUID                      = ABBAB4CD-EA88-45b9-8234-C8A7450531FC
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = HttpLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = HttpLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
>b/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
>index 086c74d1f1..c8e7a516a9 100644
>--- a/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
>+++ b/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  This library instance provides IP services upon EFI IPv4/IPv6 Protocols.
> #
>-#  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution.  The full text of the license may be
>found at
>@@ -20,12 +20,12 @@
>   FILE_GUID                      = A302F877-8625-425c-B1EC-7487B62C4FDA
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = IpIoLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = IpIoLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
>b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
>index c31a04bb72..290b865e09 100644
>--- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
>+++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
>@@ -21,12 +21,12 @@
>   FILE_GUID                      = db6dcef3-9f4e-4340-9351-fc35aa8a5888
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = NetLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = NetLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
>b/MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
>index d9c7e833b5..3f10a4234f 100644
>--- a/MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
>+++ b/MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
>@@ -24,12 +24,12 @@
>   FILE_GUID                      = 8B8B4CCC-65FC-41a5-8067-308B8E42CCF2
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = PerformanceLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = PerformanceLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxePrintLibPrint2Protocol/DxePrintLibPrint2Protoc
>ol.inf
>b/MdeModulePkg/Library/DxePrintLibPrint2Protocol/DxePrintLibPrint2Protoc
>ol.inf
>index 1cda2dc5cf..e1b05986ca 100644
>---
>a/MdeModulePkg/Library/DxePrintLibPrint2Protocol/DxePrintLibPrint2Protoc
>ol.inf
>+++
>b/MdeModulePkg/Library/DxePrintLibPrint2Protocol/DxePrintLibPrint2Protoc
>ol.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Library instance that implements Print Library class based on protocol
>gEfiPrint2ProtocolGuid.
> #
>-#  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -20,7 +20,7 @@
>   FILE_GUID                      = 55D460DB-8FEA-415a-B95D-70145AE0675C
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = PrintLib|DXE_DRIVER DXE_RUNTIME_DRIVER
>DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = PrintLib|DXE_DRIVER DXE_RUNTIME_DRIVER
>DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   CONSTRUCTOR                    = PrintLibConstructor
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLi
>b.inf
>b/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLi
>b.inf
>index 962cf8b05b..d833b667e5 100644
>---
>a/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLi
>b.inf
>+++
>b/MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLi
>b.inf
>@@ -3,7 +3,7 @@
> #
> #  Retrieve status code and report status code in DXE phase.
> #
>-#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -22,12 +22,12 @@
>   FILE_GUID                      = EBF144C8-70F5-4e09-ADE2-F41F5C59AFDA
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = ReportStatusCodeLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER SMM_CORE
>+  LIBRARY_CLASS                  = ReportStatusCodeLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>SMM_CORE
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
>b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
>index 5cd52d8859..be1a01518f 100644
>--- a/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
>+++ b/MdeModulePkg/Library/DxeResetSystemLib/DxeResetSystemLib.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManage
>mentLib.inf
>b/MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManage
>mentLib.inf
>index 41d8ff8fd1..023b7fd88d 100644
>---
>a/MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManage
>mentLib.inf
>+++
>b/MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManage
>mentLib.inf
>@@ -22,12 +22,12 @@
>   FILE_GUID                      = 7F61122C-19DF-47c3-BA0D-6C1149E30FA1
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = SecurityManagementLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = SecurityManagementLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf
>b/MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf
>index 2dc74a73e2..78465d5826 100644
>--- a/MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf
>+++ b/MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf
>@@ -20,12 +20,12 @@
>   FILE_GUID                      = D4608509-1AB0-4cc7-827A-AB8E1E7BD3E6
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = TcpIoLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = TcpIoLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
>b/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
>index 3e541ee6ee..3a10a7945d 100644
>--- a/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
>+++ b/MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
>@@ -20,12 +20,12 @@
>   FILE_GUID                      = 7E615AA1-41EE-49d4-B7E9-1D7A60AA5C8D
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = UdpIoLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = UdpIoLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
>b/MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
>index 5d9822d95f..d5a4732dd3 100644
>--- a/MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
>+++ b/MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/FmpAuthenticationLibNull/FmpAuthenticationLibN
>ull.inf
>b/MdeModulePkg/Library/FmpAuthenticationLibNull/FmpAuthenticationLibN
>ull.inf
>index f9b87ca53a..5c4e9d0958 100644
>---
>a/MdeModulePkg/Library/FmpAuthenticationLibNull/FmpAuthenticationLibN
>ull.inf
>+++
>b/MdeModulePkg/Library/FmpAuthenticationLibNull/FmpAuthenticationLibN
>ull.inf
>@@ -3,7 +3,7 @@
> #
> # NULL Instance of FmpAuthentication Library.
> #
>-# Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompr
>essLib.inf
>b/MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecomp
>ressLib.inf
>index 127c7ded86..9d3a51a383 100644
>---
>a/MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompr
>essLib.inf
>+++
>b/MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecomp
>ressLib.inf
>@@ -5,7 +5,7 @@
> #  LZMA SDK 16.04 was placed in the public domain on 2016-10-04.
> #  It was released on the http://www.7-zip.org/sdk.html website.
> #
>-#  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCode
>LibNull.inf
>b/MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCod
>eLibNull.inf
>index 34555761a0..1d49f5e379 100644
>---
>a/MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCode
>LibNull.inf
>+++
>b/MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCod
>eLibNull.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PciHostBridgeLibNull/PciHostBridgeLibNull.inf
>b/MdeModulePkg/Library/PciHostBridgeLibNull/PciHostBridgeLibNull.inf
>index 8df14924ad..42da8d93c1 100644
>--- a/MdeModulePkg/Library/PciHostBridgeLibNull/PciHostBridgeLibNull.inf
>+++ b/MdeModulePkg/Library/PciHostBridgeLibNull/PciHostBridgeLibNull.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Null instance of PCI Host Bridge Library with empty functions.
> #
>-#  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials are licensed and made
>available
> #  under the terms and conditions of the BSD License which accompanies this
>@@ -27,7 +27,7 @@
> # The following information is for reference only and not required by the
>build
> # tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PeiCrc32GuidedSectionExtractLib/PeiCrc32GuidedS
>ectionExtractLib.inf
>b/MdeModulePkg/Library/PeiCrc32GuidedSectionExtractLib/PeiCrc32Guided
>SectionExtractLib.inf
>index c1d6f27992..eaa2f2c931 100644
>---
>a/MdeModulePkg/Library/PeiCrc32GuidedSectionExtractLib/PeiCrc32GuidedS
>ectionExtractLib.inf
>+++
>b/MdeModulePkg/Library/PeiCrc32GuidedSectionExtractLib/PeiCrc32Guided
>SectionExtractLib.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLi
>bReportStatusCode.inf
>b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLi
>bReportStatusCode.inf
>index 12a063f5b8..8d98982aed 100644
>---
>a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLi
>bReportStatusCode.inf
>+++
>b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLi
>bReportStatusCode.inf
>@@ -21,12 +21,12 @@
>   FILE_GUID                      = bda39d3a-451b-4350-8266-81ab10fa0523
>   MODULE_TYPE                    = PEIM
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = DebugLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER SMM_CORE
>PEIM SEC PEI_CORE UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = DebugLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER SMM_CORE PEIM SEC PEI_CORE
>UEFI_APPLICATION UEFI_DRIVER
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
>b/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
>index cad3a120a2..96bc613949 100644
>--- a/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
>+++ b/MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PeiRecoveryLibNull/PeiRecoveryLibNull.inf
>b/MdeModulePkg/Library/PeiRecoveryLibNull/PeiRecoveryLibNull.inf
>index 70c9a88491..a2b26855fb 100644
>--- a/MdeModulePkg/Library/PeiRecoveryLibNull/PeiRecoveryLibNull.inf
>+++ b/MdeModulePkg/Library/PeiRecoveryLibNull/PeiRecoveryLibNull.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.i
>nf
>b/MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.i
>nf
>index 5b1df7e2bb..e1b89792ab 100644
>---
>a/MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.i
>nf
>+++
>b/MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.i
>nf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf
>b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf
>index b1b9388c63..3d930e5d21 100644
>--- a/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf
>+++ b/MdeModulePkg/Library/PeiResetSystemLib/PeiResetSystemLib.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf
>b/MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf
>index f408d7f528..10525b0502 100644
>--- a/MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf
>+++ b/MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
>b/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
>index 0feff36612..f66e46e58e 100644
>--- a/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
>+++ b/MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
>@@ -1,7 +1,7 @@
> ## @file
> # DXE S3 boot script Library.
> #
>-# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials are
> # licensed and made available under the terms and conditions of the BSD
>License
>@@ -20,7 +20,7 @@
>   FILE_GUID                      = 57F9967B-26CD-4262-837A-55B8AA158254
>   MODULE_TYPE                    = DXE_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = S3BootScriptLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER
>UEFI_APPLICATION
>+  LIBRARY_CLASS                  = S3BootScriptLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_DRIVER UEFI_APPLICATION
>
>
>   CONSTRUCTOR                    = S3BootScriptLibInitialize
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PlatformHookLibSerialPortPpi/PlatformHookLibSeri
>alPortPpi.inf
>b/MdeModulePkg/Library/PlatformHookLibSerialPortPpi/PlatformHookLibSer
>ialPortPpi.inf
>index d577506b26..10be353742 100644
>---
>a/MdeModulePkg/Library/PlatformHookLibSerialPortPpi/PlatformHookLibSeri
>alPortPpi.inf
>+++
>b/MdeModulePkg/Library/PlatformHookLibSerialPortPpi/PlatformHookLibSer
>ialPortPpi.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Null Platform Hook Library instance with dependency on
>gPeiSerialPortPpiGuid
> #
>-#  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -18,13 +18,13 @@
>   FILE_GUID                      = 621734D8-8B5E-4c01-B330-9F89A1081710
>   MODULE_TYPE                    = PEIM
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = PlatformHookLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER SMM_CORE
>PEIM SEC PEI_CORE UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = PlatformHookLib|DXE_CORE DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER SMM_CORE PEIM SEC PEI_CORE
>UEFI_APPLICATION UEFI_DRIVER
>   MODULE_UNI_FILE                = PlatformHookLibSerialPortPpi.uni
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/PlatformVarCleanupLib/PlatformVarCleanupLib.inf
>b/MdeModulePkg/Library/PlatformVarCleanupLib/PlatformVarCleanupLib.inf
>index 6e7fcb6a5c..26b99c178e 100644
>---
>a/MdeModulePkg/Library/PlatformVarCleanupLib/PlatformVarCleanupLib.inf
>+++
>b/MdeModulePkg/Library/PlatformVarCleanupLib/PlatformVarCleanupLib.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Sample platform variable cleanup library instance.
> #
>-#  Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions
>@@ -21,7 +21,7 @@
>   FILE_GUID                     = 9C9623EB-4EF3-44e0-A931-F3A340D1A0F9
>   MODULE_TYPE                   = DXE_DRIVER
>   VERSION_STRING                = 1.0
>-  LIBRARY_CLASS                 = PlatformVarCleanupLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                 = PlatformVarCleanupLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   CONSTRUCTOR                   = PlatformVarCleanupLibConstructor
>   DESTRUCTOR                    = PlatformVarCleanupLibDestructor
>
>diff --git
>a/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeRep
>ortStatusCodeLib.inf
>b/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeRe
>portStatusCodeLib.inf
>index 9f03e2a1ed..e350e1b577 100644
>---
>a/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeRep
>ortStatusCodeLib.inf
>+++
>b/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeRe
>portStatusCodeLib.inf
>@@ -20,13 +20,13 @@
>   FILE_GUID                      = 07D25BBB-F832-41bb-BBA0-612E9F033067
>   MODULE_TYPE                    = DXE_RUNTIME_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = ReportStatusCodeLib|DXE_RUNTIME_DRIVER
>DXE_SAL_DRIVER
>+  LIBRARY_CLASS                  = ReportStatusCodeLib|DXE_RUNTIME_DRIVER
>   CONSTRUCTOR                    = ReportStatusCodeLibConstructor
>   DESTRUCTOR                     = ReportStatusCodeLibDestructor
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibN
>ull.inf
>b/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibN
>ull.inf
>index fef783a4f9..5e82b85656 100644
>---
>a/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibN
>ull.inf
>+++
>b/MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibN
>ull.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Provides NULL TPM measurement function.
> #
>-# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> # This program and the accompanying materials
> # are licensed and made available under the terms and conditions of the BSD
>License
> # which accompanies this distribution. The full text of the license may be
>found at
>@@ -17,13 +17,13 @@
>   FILE_GUID                      = 6DFD6E9F-9278-48D8-8F45-B6CFF2C2B69C
>   MODULE_TYPE                    = UEFI_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = TpmMeasurementLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = TpmMeasurementLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   MODULE_UNI_FILE                = TpmMeasurementLibNull.uni
>
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF
>+#  VALID_ARCHITECTURES           = IA32 X64
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
>b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
>index 72c5ca1cd5..408410872d 100644
>--- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
>+++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
>b/MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
>index 7ee68428a1..44076dfcbd 100644
>--- a/MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
>+++ b/MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  HII Library implementation using UEFI HII protocols and services.
> #
>-#  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -21,10 +21,10 @@
>   FILE_GUID                      = 3143687A-7C80-404e-B5FE-2D88980E1B1C
>   MODULE_TYPE                    = UEFI_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = HiiLib|DXE_DRIVER DXE_RUNTIME_DRIVER
>DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = HiiLib|DXE_DRIVER DXE_RUNTIME_DRIVER
>DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
>b/MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
>index fba1d6620e..8aee50527a 100644
>--- a/MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
>+++ b/MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
>@@ -20,12 +20,12 @@
>   FILE_GUID                      = 894DC1B6-07A3-4a9d-8CDD-333580B3D4B1
>   MODULE_TYPE                    = UEFI_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = UefiHiiServicesLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = UefiHiiServicesLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
>   CONSTRUCTOR                    = UefiHiiServicesLibConstructor
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAlloc
>ationProfileLib.inf
>b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAlloc
>ationProfileLib.inf
>index c4954efb04..e7630209b0 100644
>---
>a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAlloc
>ationProfileLib.inf
>+++
>b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAlloc
>ationProfileLib.inf
>@@ -27,12 +27,12 @@
>   FILE_GUID                      = 9E8A380A-231E-41E4-AD40-5E706196B853
>   MODULE_TYPE                    = UEFI_DRIVER
>   VERSION_STRING                 = 1.0
>-  LIBRARY_CLASS                  = MemoryAllocationLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>-  LIBRARY_CLASS                  = MemoryProfileLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER
>UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = MemoryAllocationLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>+  LIBRARY_CLASS                  = MemoryProfileLib|DXE_DRIVER
>DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>   CONSTRUCTOR                    = MemoryProfileLibConstructor
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
>b/MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
>index 4c3d5e0545..ddfeca3a4b 100644
>--- a/MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
>+++ b/MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
>@@ -1,7 +1,7 @@
> ##  @file
> #   Library used for sorting routines.
> #
>-#  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved. <BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -23,7 +23,7 @@
>   LIBRARY_CLASS                  = SortLib|UEFI_APPLICATION UEFI_DRIVER
>UEFI_DRIVER DXE_RUNTIME_DRIVER DXE_DRIVER
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources.common]
>diff --git a/MdeModulePkg/Logo/Logo.inf b/MdeModulePkg/Logo/Logo.inf
>index e2e61c82c5..1a30fed80c 100644
>--- a/MdeModulePkg/Logo/Logo.inf
>+++ b/MdeModulePkg/Logo/Logo.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  The default logo bitmap picture shown on setup screen, which is
>corresponding to gEfiDefaultBmpLogoGuid.
> #
>-#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
>
> [Binaries]
>diff --git a/MdeModulePkg/MdeModulePkg.dsc
>b/MdeModulePkg/MdeModulePkg.dsc
>index bb7744894a..b65ff5f4e6 100644
>--- a/MdeModulePkg/MdeModulePkg.dsc
>+++ b/MdeModulePkg/MdeModulePkg.dsc
>@@ -20,7 +20,7 @@
>   PLATFORM_VERSION               = 0.98
>   DSC_SPECIFICATION              = 0x00010005
>   OUTPUT_DIRECTORY               = Build/MdeModule
>-  SUPPORTED_ARCHITECTURES        = IA32|IPF|X64|EBC|ARM|AARCH64
>+  SUPPORTED_ARCHITECTURES        = IA32|X64|EBC|ARM|AARCH64
>   BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
>   SKUID_IDENTIFIER               = DEFAULT
>
>@@ -79,7 +79,6 @@
>
>SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
>
>CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
>   PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
>-  PalLib|MdePkg/Library/BasePalLibNull/BasePalLibNull.inf
>
>CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/Custom
>izedDisplayLib.inf
>
>FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBl
>tLib.inf
>   #
>@@ -202,9 +201,6 @@
>   gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule|0x0
>   gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|28
>
>-[PcdsFixedAtBuild.IPF]
>-  gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000
>-
>
>###########################################################
>########################################
> #
> # Components Section - list of the modules and components that will be
>processed by compilation
>@@ -445,14 +441,14 @@
>   MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
>   MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
>
>-[Components.IA32, Components.X64, Components.IPF,
>Components.AARCH64]
>+[Components.IA32, Components.X64, Components.AARCH64]
>   MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
>   MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
>   MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
>   MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf
>   MdeModulePkg/Universal/EbcDxe/EbcDebuggerConfig.inf
>
>-[Components.IA32, Components.X64, Components.IPF, Components.ARM,
>Components.AARCH64]
>+[Components.IA32, Components.X64, Components.ARM,
>Components.AARCH64]
>   MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
>   MdeModulePkg/Core/Dxe/DxeMain.inf {
>     <LibraryClasses>
>diff --git
>a/MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
>b/MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
>index f4860cdc0b..a1241571e9 100644
>--- a/MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
>+++ b/MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
>b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
>index 32c66785d5..f81cf1cceb 100644
>--- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
>+++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGrap
>hicsResourceTableDxe.inf
>b/MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGrap
>hicsResourceTableDxe.inf
>index 080a939cc0..968a3b11c5 100644
>---
>a/MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGrap
>hicsResourceTableDxe.inf
>+++
>b/MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGrap
>hicsResourceTableDxe.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm
>warePerformanceDxe.inf
>b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm
>warePerformanceDxe.inf
>index 843cda7021..b4ac04ee73 100644
>---
>a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm
>warePerformanceDxe.inf
>+++
>b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/Firm
>warePerformanceDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/Firmw
>arePerformancePei.inf
>b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/Firmw
>arePerformancePei.inf
>index 1b69e49cf9..9fec6cb5a0 100644
>---
>a/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/Firmw
>arePerformancePei.inf
>+++
>b/MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/Firmw
>arePerformancePei.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
>b/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
>index a4184212bb..d208661b0c 100644
>--- a/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
>+++ b/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/Acpi/SmmS3SaveState/SmmS3SaveState.inf
>b/MdeModulePkg/Universal/Acpi/SmmS3SaveState/SmmS3SaveState.inf
>index 0742da60ca..d993a81883 100644
>--- a/MdeModulePkg/Universal/Acpi/SmmS3SaveState/SmmS3SaveState.inf
>+++
>b/MdeModulePkg/Universal/Acpi/SmmS3SaveState/SmmS3SaveState.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
>b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
>index 7e644aa995..27b3914386 100644
>--- a/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
>+++ b/MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe
>.inf
>b/MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe
>.inf
>index 33014723d0..e58407732f 100644
>---
>a/MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe
>.inf
>+++
>b/MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe
>.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
>b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
>index 02cf90c75d..587956eb5f 100644
>--- a/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
>+++ b/MdeModulePkg/Universal/CapsulePei/CapsulePei.inf
>@@ -33,7 +33,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
>b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
>index 3849bc84a8..812b5a6427 100644
>--- a/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
>+++
>b/MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
>@@ -27,14 +27,14 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
>
> [Sources]
>   CapsuleService.c
>   CapsuleService.h
>-
>-[Sources.Ia32, Sources.IPF, Sources.EBC]
>+
>+[Sources.Ia32, Sources.EBC, Sources.ARM, Sources.AARCH64]
>   SaveLongModeContext.c
>   CapsuleReset.c
>
>diff --git
>a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
>b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
>index bc57e2c8a1..0f8c5d6a49 100644
>---
>a/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
>+++
>b/MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gConPlatformTextInDriverBinding
> #  COMPONENT_NAME                =  gConPlatformComponentName
>diff --git
>a/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
>b/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
>index a191ebcd9b..1f45e9cd55 100644
>--- a/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
>+++ b/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gConSplitterConInDriverBinding
> #  COMPONENT_NAME                =  gConSplitterConInComponentName
>diff --git
>a/MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole
>Dxe.inf
>b/MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole
>Dxe.inf
>index bf387cd97b..3645fad30a 100644
>---
>a/MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole
>Dxe.inf
>+++
>b/MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole
>Dxe.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gGraphicsConsoleDriverBinding
> #  COMPONENT_NAME                =  gGraphicsConsoleComponentName
>diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
>b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
>index 0780296798..cec5433f4e 100644
>--- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
>+++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
>@@ -5,7 +5,7 @@
> #  protocols based on Serial I/O protocol for serial devices including hotplug
>serial
> #  devices.
> #
>-#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution. The full text of the license may be
>found at
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gTerminalDriverBinding
> #  COMPONENT_NAME                =  gTerminalComponentName
>diff --git a/MdeModulePkg/Universal/DebugPortDxe/DebugPortDxe.inf
>b/MdeModulePkg/Universal/DebugPortDxe/DebugPortDxe.inf
>index b727cda3cf..6b26596491 100644
>--- a/MdeModulePkg/Universal/DebugPortDxe/DebugPortDxe.inf
>+++ b/MdeModulePkg/Universal/DebugPortDxe/DebugPortDxe.inf
>@@ -4,7 +4,7 @@
> # This driver binds exclusively to a standard UART serial port on the controller
>handle,
> # and initializes serial Io interface, publishs Debug Port and Device Path
>Protocol.
> #
>-# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gDebugPortDriverBinding
> #  COMPONENT_NAME                =  gDebugPortComponentName
>diff --git
>a/MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
>b/MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
>index 0d37f5fb64..d0e2e45c7f 100644
>--- a/MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
>+++ b/MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF
>+#  VALID_ARCHITECTURES           = IA32 X64
> #
>
> [Sources]
>@@ -50,14 +50,6 @@
>   X64/PlDebugSupportX64.c
>   X64/AsmFuncs.nasm
>
>-[Sources.IPF]
>-  Ipf/PlDebugSupport.h
>-  Ipf/PlDebugSupport.c
>-  Ipf/Ds64Macros.i
>-  Ipf/Common.i
>-  Ipf/AsmFuncs.s
>-
>-
> [Packages]
>   MdePkg/MdePkg.dec
>   MdeModulePkg/MdeModulePkg.dec
>diff --git a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/AsmFuncs.s
>b/MdeModulePkg/Universal/DebugSupportDxe/Ipf/AsmFuncs.s
>deleted file mode 100644
>index db75fc088e..0000000000
>--- a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/AsmFuncs.s
>+++ /dev/null
>@@ -1,1382 +0,0 @@
>-/// @file
>-///  Low level IPF routines used by the debug support driver
>-///
>-/// Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
>-/// This program and the accompanying materials
>-/// are licensed and made available under the terms and conditions of the
>BSD License
>-/// which accompanies this distribution.  The full text of the license may be
>found at
>-/// http://opensource.org/licenses/bsd-license.php
>-///
>-/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
>BASIS,
>-/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-///
>-///
>-
>-
>-#include "Common.i"
>-#include "Ds64Macros.i"
>-
>-ASM_GLOBAL PatchSaveBuffer
>-ASM_GLOBAL IpfContextBuf
>-ASM_GLOBAL CommonHandler
>-ASM_GLOBAL ExternalInterruptCount
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      InstructionCacheFlush
>-//
>-//  Description:
>-//      Flushes instruction cache for specified number of bytes
>-//
>-        ASM_GLOBAL InstructionCacheFlush
>-        .proc   InstructionCacheFlush
>-        .align 32
>-InstructionCacheFlush::
>- {      .mii
>-        alloc   r3=2, 0, 0, 0
>-        cmp4.leu p0,p6=32, r33;;
>-        (p6)    mov r33=32;;
>- }
>- {      .mii
>-        nop.m    0
>-        zxt4    r29=r33;;
>-        dep.z   r30=r29, 0, 5;;
>- }
>- {      .mii
>-        cmp4.eq p0,p7=r0, r30
>-        shr.u   r28=r29, 5;;
>-        (p7)    adds    r28=1, r28;;
>- }
>- {      .mii
>-        nop.m    0
>-        shl r27=r28, 5;;
>-        zxt4    r26=r27;;
>- }
>- {      .mfb
>-        add r31=r26, r32
>-        nop.f    0
>-        nop.b    0
>- }
>-LoopBack:   // $L143:
>- {      .mii
>-        fc   r32
>-        adds    r32=32, r32;;
>-        cmp.ltu p14,p15=r32, r31
>- }
>- {      .mfb
>-        nop.m    0
>-        nop.f    0
>-        //(p14) br.cond.dptk.few $L143#;;
>-        (p14)   br.cond.dptk.few LoopBack;;
>- }
>- {      .mmi
>-        sync.i;;
>-        srlz.i
>-        nop.i   0;;
>- }
>- {      .mfb
>-        nop.m    0
>-        nop.f    0
>-        br.ret.sptk.few b0;;
>- }
>-        .endp   InstructionCacheFlush
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      ChainHandler
>-//
>-//  Description:
>-//      Chains an interrupt handler
>-//
>-//      The purpose of this function is to enable chaining of the external
>interrupt.
>-//      Since there's no clean SAL abstraction for doing this, we must do it
>-//      surreptitiously.
>-//
>-//      The reserved IVT entry at offset 0x3400 is coopted for use by this
>handler.
>-//      According to Itanium architecture, it is reserved.  Strictly speaking, this is
>-//      not safe, as we're cheating and violating the Itanium architecture.
>However,
>-//      as long as we're the only ones cheating, we should be OK.  Without
>hooks in
>-//      the SAL to enable IVT management, there aren't many good options.
>-//
>-//      The strategy is to replace the first bundle of the external interrupt
>handler
>-//      with our own that will branch into a piece of code we've supplied and
>located
>-//      in the reserved IVT entry.  Only the first bundle of the external interrupt
>-//      IVT entry is modified.
>-//
>-//      The original bundle is moved and relocated to space
>-//      allocated within the reserved IVT entry.  The next bundle following is
>-//      is generated to go a hard coded branch back to the second bundle of the
>-//      external interrupt IVT entry just in case the first bundle had no branch.
>-//
>-//      Our new code will execute our handler, and then fall through to the
>-//      original bundle after restoring all context appropriately.
>-//
>-//      The following is a representation of what the IVT memory map looks like
>with
>-//      our chained handler installed:
>-//
>-//
>-//
>-//
>-//
>-//      This IVT entry is      Failsafe bundle
>-//      reserved by the
>-//      Itanium architecture   Original bundle 0
>-//      and is used for
>-//      for locating our
>-//      handler and the
>-//      original bundle        Patch code...
>-//      zero of the ext
>-//      interrupt handler
>-//
>-//      RSVD    (3400)         Unused
>-//
>-//
>-//
>-//
>-//
>-//
>-//
>-//
>-//
>-//
>-//
>-//
>-//      EXT_INT (3000)         Bundle 0               Bundle zero - This one is
>-//                                modified, all other bundles
>-//                                                       in the EXT_INT entry are
>-//                                                       untouched.
>-//
>-//
>-//       Arguments:
>-//
>-//       Returns:
>-//
>-//       Notes:
>-//
>-//
>-        ASM_GLOBAL ChainHandler
>-        .proc ChainHandler
>-ChainHandler:
>-
>-        NESTED_SETUP( 0,2+3,3,0 )
>-
>-        mov         r8=1                           // r8 = success
>-        mov         r2=cr.iva;;
>-//
>-// NOTE: There's a potential hazard here in that we're simply stealing a bunch
>of
>-// bundles (memory) from the IVT and assuming there's no catastrophic side
>effect.
>-//
>-// First, save IVT area we're taking over with the patch so we can restore it
>later
>-//
>-        addl        out0=PATCH_ENTRY_OFFSET, r2    // out0 = source buffer
>-        movl        out1=PatchSaveBuffer           // out1 = destination buffer
>-        mov         out2=0x40;;                    // out2 = number of bundles to copy...
>save entire IDT entry
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-// Next, copy the patch code into the IVT
>-        movl        out0=PatchCode                 // out0 = source buffer of patch code
>-        addl        out1=PATCH_OFFSET, r2          // out1 = destination buffer - in IVT
>-        mov         out2=PATCH_CODE_SIZE;;
>-        shr         out2=out2, 4;;                 // out2 = number of bundles to copy
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-
>-// copy original bundle 0 from the external interrupt handler to the
>-// appropriate place in the reserved IVT interrupt slot
>-        addl        out0=EXT_INT_ENTRY_OFFSET, r2  // out0 = source buffer
>-        addl        out1=RELOCATED_EXT_INT, r2     // out1 = destination buffer - in
>reserved IVT
>-        mov         out2=1;;                       // out2 = copy 1 bundle
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-// Now relocate it there because it very likely had a branch instruction that
>-// that must now be fixed up.
>-        addl        out0=RELOCATED_EXT_INT, r2     // out0 = new runtime address
>of bundle - in reserved IVT
>-        addl        out1=EXT_INT_ENTRY_OFFSET, r2;;// out1 = IP address of
>previous location
>-        mov         out2=out0;;                    // out2 = IP address of new location
>-        br.call.sptk.few    b0 = RelocateBundle
>-
>-// Now copy into the failsafe branch into the next bundle just in case
>-// the original ext int bundle 0 bundle did not contain a branch instruction
>-        movl        out0=FailsafeBranch            // out0 = source buffer
>-        addl        out1=FAILSAFE_BRANCH_OFFSET, r2  // out1 = destination
>buffer - in reserved IVT
>-        mov         out2=1;;                       // out2 = copy 1 bundle
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-// Last, copy in our replacement for the external interrupt IVT entry bundle 0
>-        movl        out0=PatchCodeNewBun0          // out0 = source buffer - our
>replacement bundle 0
>-        addl        out1=EXT_INT_ENTRY_OFFSET, r2  // out1 = destination buffer -
>bundle 0 of External interrupt entry
>-        mov         out2=1;;                       // out2 = copy 1 bundle
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-ChainHandlerDone:
>-        NESTED_RETURN
>-
>-        .endp ChainHandler
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      UnchainHandler
>-//
>-//  Description:
>-//      Unchains an interrupt handler
>-//
>-//  Arguments:
>-//
>-//  Returns:
>-//
>-//  Notes:
>-//
>-//
>-        ASM_GLOBAL UnchainHandler
>-        .proc UnchainHandler
>-
>-UnchainHandler:
>-
>-        NESTED_SETUP( 0,2+3,3,0 )
>-
>-        mov         r8=1                        // r8 = success
>-        mov         r2=cr.iva;;                 // r2 = interrupt vector address
>-
>-// First copy original Ext Int bundle 0 back to it's proper home...
>-        addl        out0=RELOCATED_EXT_INT, r2     // out0 = source - in reserved
>IVT
>-        addl        out1=EXT_INT_ENTRY_OFFSET, r2  // out1 = destination buffer -
>first bundle of Ext Int entry
>-        mov         out2=1;;                       // out2 = copy 1 bundle
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-// Now, relocate it again...
>-        addl        out0=EXT_INT_ENTRY_OFFSET, r2  // out1 = New runtime
>address
>-        addl        out1=RELOCATED_EXT_INT, r2;;   // out0 = IP address of previous
>location
>-        mov         out2=out0;;                    // out2 = IP address of new location
>-        br.call.sptk.few    b0 = RelocateBundle
>-
>-// Last, restore the patch area
>-        movl        out0=PatchSaveBuffer           // out0 = source buffer
>-        addl        out1=PATCH_ENTRY_OFFSET, r2    // out1 = destination buffer
>-        mov         out2=0x40;;                    // out2 = number of bundles to copy...
>save entire IDT entry
>-        br.call.sptk.few    b0 = CopyBundles
>-
>-UnchainHandlerDone:
>-        NESTED_RETURN
>-
>-        .endp UnchainHandler
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      CopyBundles
>-//
>-//  Description:
>-//      Copies instruction bundles - flushes icache as necessary
>-//
>-//  Arguments:
>-//      in0 - Bundle source
>-//      in1 - Bundle destination
>-//      in2 - Bundle count
>-//
>-//  Returns:
>-//
>-//  Notes:
>-//      This procedure is a leaf routine
>-//
>-        .proc   CopyBundles
>-
>-CopyBundles:
>-
>-        NESTED_SETUP(3,2+1,0,0)
>-
>-        shl         in2=in2, 1;;                // in2 = count of 8 byte blocks to copy
>-
>-CopyBundlesLoop:
>-
>-        cmp.eq      p14, p15 = 0, in2;;         // Check if done
>-(p14)   br.sptk.few CopyBundlesDone;;
>-
>-        ld8         loc2=[in0], 0x8;;           // loc2 = source bytes
>-        st8         [in1]=loc2;;                // [in1] = destination bytes
>-        fc          in1;;                       // Flush instruction cache
>-        sync.i;;                                // Ensure local and remote data/inst caches in sync
>-        srlz.i;;                                // Ensure sync has been observed
>-        add         in1=0x8, in1;;              // in1 = next destination
>-        add         in2=-1, in2;;               // in2 = decrement 8 bytes blocks to copy
>-        br.sptk.few CopyBundlesLoop;;
>-
>-CopyBundlesDone:
>-        NESTED_RETURN
>-
>-        .endp   CopyBundles
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      RelocateBundle
>-//
>-//  Description:
>-//      Relocates an instruction bundle by updating any ip-relative branch
>instructions.
>-//
>-//  Arguments:
>-//      in0 - Runtime address of bundle
>-//      in1 - IP address of previous location of bundle
>-//      in2 - IP address of new location of bundle
>-//
>-//  Returns:
>-//      in0 - 1 if successful or 0 if unsuccessful
>-//
>-//  Notes:
>-//      This routine examines all slots in the given bundle that are destined for
>the
>-//      branch execution unit.  If any of these slots contain an IP-relative branch
>-//      namely instructions B1, B2, B3, or B6, the slot is fixed-up with a new
>relative
>-//      address.  Errors can occur if a branch cannot be reached.
>-//
>-        .proc   RelocateBundle
>-
>-RelocateBundle:
>-
>-        NESTED_SETUP(3,2+4,3,0)
>-
>-        mov         loc2=SLOT0                  // loc2 = slot index
>-        mov         loc5=in0;;                  // loc5 = runtime address of bundle
>-        mov         in0=1;;                     // in0 = success
>-
>-RelocateBundleNextSlot:
>-
>-        cmp.ge      p14, p15 = SLOT2, loc2;;    // Check if maximum slot
>-(p15)   br.sptk.few RelocateBundleDone
>-
>-        mov         out0=loc5;;                 // out0 = runtime address of bundle
>-        br.call.sptk.few    b0 = GetTemplate
>-        mov         loc3=out0;;                 // loc3 = instruction template
>-        mov         out0=loc5                   // out0 = runtime address of bundle
>-        mov         out1=loc2;;                 // out1 = instruction slot number
>-        br.call.sptk.few    b0 = GetSlot
>-        mov         loc4=out0;;                 // loc4 = instruction encoding
>-        mov         out0=loc4                   // out0 = instuction encoding
>-        mov         out1=loc2                   // out1 = instruction slot number
>-        mov         out2=loc3;;                 // out2 = instruction template
>-        br.call.sptk.few    b0 = IsSlotBranch
>-        cmp.eq      p14, p15 = 1, out0;;        // Check if branch slot
>-(p15)   add         loc2=1,loc2                 // Increment slot
>-(p15)   br.sptk.few RelocateBundleNextSlot
>-        mov         out0=loc4                   // out0 = instuction encoding
>-        mov         out1=in1                    // out1 = IP address of previous location
>-        mov         out2=in2;;                  // out2 = IP address of new location
>-        br.call.sptk.few    b0 = RelocateSlot
>-        cmp.eq      p14, p15 = 1, out1;;        // Check if relocated slot
>-(p15)   mov         in0=0                       // in0 = failure
>-(p15)   br.sptk.few RelocateBundleDone
>-        mov         out2=out0;;                 // out2 = instruction encoding
>-        mov         out0=loc5                   // out0 = runtime address of bundle
>-        mov         out1=loc2;;                 // out1 = instruction slot number
>-        br.call.sptk.few    b0 = SetSlot
>-        add         loc2=1,loc2;;               // Increment slot
>-        br.sptk.few RelocateBundleNextSlot
>-
>-RelocateBundleDone:
>-        NESTED_RETURN
>-
>-        .endp   RelocateBundle
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      RelocateSlot
>-//
>-//  Description:
>-//      Relocates an instruction bundle by updating any ip-relative branch
>instructions.
>-//
>-//  Arguments:
>-//      in0 - Instruction encoding (41-bits, right justified)
>-//      in1 - IP address of previous location of bundle
>-//      in2 - IP address of new location of bundle
>-//
>-//  Returns:
>-//      in0 - Instruction encoding (41-bits, right justified)
>-//      in1 - 1 if successful otherwise 0
>-//
>-//  Notes:
>-//      This procedure is a leaf routine
>-//
>-        .proc   RelocateSlot
>-
>-RelocateSlot:
>-        NESTED_SETUP(3,2+5,0,0)
>-        extr.u      loc2=in0, 37, 4;;           // loc2 = instruction opcode
>-        cmp.eq      p14, p15 = 4, loc2;;        // IP-relative branch (B1) or
>-                                                // IP-relative counted branch (B2)
>-(p15)   cmp.eq      p14, p15 = 5, loc2;;        // IP-relative call (B3)
>-(p15)   cmp.eq      p14, p15 = 7, loc2;;        // IP-relative predict (B6)
>-(p15)   mov         in1=1                       // Instruction did not need to be reencoded
>-(p15)   br.sptk.few RelocateSlotDone
>-        tbit.nz     p14, p15 = in0, 36;;        // put relative offset sign bit in p14
>-        extr.u      loc2=in0, 13, 20;;          // loc2 = relative offset in instruction
>-(p14)   movl        loc3=0xfffffffffff00000;;   // extend sign
>-(p14)   or          loc2=loc2, loc3;;
>-        shl         loc2=loc2,4;;               // convert to byte offset instead of bundle
>offset
>-        add         loc3=loc2, in1;;            // loc3 = physical address of branch target
>-(p14)   sub         loc2=r0,loc2;;              // flip sign in loc2 if offset is negative
>-        sub         loc4=loc3,in2;;             // loc4 = relative offset from new ip to
>branch target
>-        cmp.lt      p15, p14 = 0, loc4;;        // get new sign bit
>-(p14)   sub         loc5=r0,loc4                // get absolute value of offset
>-(p15)   mov         loc5=loc4;;
>-        movl        loc6=0x0FFFFFF;;            // maximum offset in bytes for ip-rel
>branch
>-        cmp.gt      p14, p15 = loc5, loc6;;     // check to see we're not out of range
>for an ip-relative branch
>-(p14)   br.sptk.few RelocateSlotError
>-        cmp.lt      p15, p14 = 0, loc4;;        // store sign in p14 again
>-(p14)   dep         in0=-1,in0,36,1              // store sign bit in instruction
>-(p15)   dep         in0=0,in0,36,1
>-        shr         loc4=loc4, 4;;              // convert back to bundle offset
>-        dep         in0=loc4,in0,13,16;;        // put first 16 bits of new offset into
>instruction
>-        shr         loc4=loc4,16;;
>-        dep         in0=loc4,in0,13+16,4        // put last 4 bits of new offset into
>instruction
>-        mov         in1=1;;                     // in1 = success
>-        br.sptk.few RelocateSlotDone;;
>-
>-RelocateSlotError:
>-        mov         in1=0;;                     // in1 = failure
>-
>-RelocateSlotDone:
>-        NESTED_RETURN
>-
>-        .endp   RelocateSlot
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      IsSlotBranch
>-//
>-//  Description:
>-//      Determines if the given instruction is a branch instruction.
>-//
>-//  Arguments:
>-//      in0 - Instruction encoding (41-bits, right justified)
>-//      in1 - Instruction slot number
>-//      in2 - Bundle template
>-//
>-//  Returns:
>-//      in0 - 1 if branch or 0 if not branch
>-//
>-//  Notes:
>-//      This procedure is a leaf routine
>-//
>-//      IsSlotBranch recognizes all branch instructions by looking at the provided
>template.
>-//      The instruction encoding is only passed to this routine for future
>expansion.
>-//
>-        .proc   IsSlotBranch
>-
>-IsSlotBranch:
>-
>-        NESTED_SETUP (3,2+0,0,0)
>-
>-        mov         in0=1;;                     // in0 = 1 which destroys the instruction
>-        andcm       in2=in2,in0;;               // in2 = even template to reduce compares
>-        mov         in0=0;;                     // in0 = not a branch
>-        cmp.eq      p14, p15 = 0x16, in2;;      // Template 0x16 is BBB
>-(p14)   br.sptk.few IsSlotBranchTrue
>-        cmp.eq      p14, p15 = SLOT0, in1;;     // Slot 0 has no other possiblities
>-(p14)   br.sptk.few IsSlotBranchDone
>-        cmp.eq      p14, p15 = 0x12, in2;;      // Template 0x12 is MBB
>-(p14)   br.sptk.few IsSlotBranchTrue
>-        cmp.eq      p14, p15 = SLOT1, in1;;     // Slot 1 has no other possiblities
>-(p14)   br.sptk.few IsSlotBranchDone
>-        cmp.eq      p14, p15 = 0x10, in2;;      // Template 0x10 is MIB
>-(p14)   br.sptk.few IsSlotBranchTrue
>-        cmp.eq      p14, p15 = 0x18, in2;;      // Template 0x18 is MMB
>-(p14)   br.sptk.few IsSlotBranchTrue
>-        cmp.eq      p14, p15 = 0x1C, in2;;      // Template 0x1C is MFB
>-(p14)   br.sptk.few IsSlotBranchTrue
>-        br.sptk.few IsSlotBranchDone
>-
>-IsSlotBranchTrue:
>-        mov         in0=1;;                     // in0 = branch
>-
>-IsSlotBranchDone:
>-        NESTED_RETURN
>-
>-        .endp   IsSlotBranch
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      GetTemplate
>-//
>-//  Description:
>-//      Retrieves the instruction template for an instruction bundle
>-//
>-//  Arguments:
>-//      in0 - Runtime address of bundle
>-//
>-//  Returns:
>-//      in0 - Instruction template (5-bits, right-justified)
>-//
>-//  Notes:
>-//      This procedure is a leaf routine
>-//
>-        .proc   GetTemplate
>-
>-GetTemplate:
>-
>-        NESTED_SETUP (1,2+2,0,0)
>-
>-        ld8     loc2=[in0], 0x8             // loc2 = first 8 bytes of branch bundle
>-        movl    loc3=MASK_0_4;;             // loc3 = template mask
>-        and     loc2=loc2,loc3;;            // loc2 = template, right justified
>-        mov     in0=loc2;;                  // in0 = template, right justified
>-
>-        NESTED_RETURN
>-
>-        .endp   GetTemplate
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      GetSlot
>-//
>-//  Description:
>-//      Gets the instruction encoding for an instruction slot and bundle
>-//
>-//  Arguments:
>-//      in0 - Runtime address of bundle
>-//      in1 - Instruction slot (either 0, 1, or 2)
>-//
>-//  Returns:
>-//      in0 - Instruction encoding (41-bits, right justified)
>-//
>-//  Notes:
>-//      This procedure is a leaf routine
>-//
>-//      Slot0 - [in0 + 0x8] Bits 45-5
>-//      Slot1 - [in0 + 0x8] Bits 63-46 and [in0] Bits 22-0
>-//      Slot2 - [in0] Bits 63-23
>-//
>-        .proc   GetSlot
>-
>-GetSlot:
>-        NESTED_SETUP (2,2+3,0,0)
>-
>-        ld8     loc2=[in0], 0x8;;           // loc2 = first 8 bytes of branch bundle
>-        ld8     loc3=[in0];;                // loc3 = second 8 bytes of branch bundle
>-        cmp.eq  p14, p15 = 2, in1;;         // check if slot 2 specified
>- (p14)  br.cond.sptk.few    GetSlot2;;      // get slot 2
>-        cmp.eq  p14, p15 = 1, in1;;         // check if slot 1 specified
>- (p14)  br.cond.sptk.few    GetSlot1;;      // get slot 1
>-
>-GetSlot0:
>-        extr.u  in0=loc2, 5, 45             // in0 = extracted slot 0
>-        br.sptk.few GetSlotDone;;
>-
>-GetSlot1:
>-        extr.u  in0=loc2, 46, 18            // in0 = bits 63-46 of loc2 right-justified
>-        extr.u  loc4=loc3, 0, 23;;          // loc4 = bits 22-0 of loc3 right-justified
>-        dep     in0=loc4, in0, 18, 15;;
>-        shr.u   loc4=loc4,15;;
>-        dep     in0=loc4, in0, 33, 8;;      // in0 = extracted slot 1
>-        br.sptk.few GetSlotDone;;
>-
>-GetSlot2:
>-        extr.u  in0=loc3, 23, 41;;          // in0 = extracted slot 2
>-
>-GetSlotDone:
>-        NESTED_RETURN
>-
>-        .endp   GetSlot
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      SetSlot
>-//
>-//  Description:
>-//      Sets the instruction encoding for an instruction slot and bundle
>-//
>-//  Arguments:
>-//      in0 - Runtime address of bundle
>-//      in1 - Instruction slot (either 0, 1, or 2)
>-//      in2 - Instruction encoding (41-bits, right justified)
>-//
>-//  Returns:
>-//
>-//  Notes:
>-//      This procedure is a leaf routine
>-//
>-        .proc       SetSlot
>-
>-SetSlot:
>-        NESTED_SETUP (3,2+3,0,0)
>-
>-        ld8     loc2=[in0], 0x8;;           // loc2 = first 8 bytes of bundle
>-        ld8     loc3=[in0];;                // loc3 = second 8 bytes of bundle
>-        cmp.eq  p14, p15 = 2, in1;;         // check if slot 2 specified
>- (p14)  br.cond.sptk.few    SetSlot2;;      // set slot 2
>-        cmp.eq  p14, p15 = 1, in1;;         // check if slot 1 specified
>- (p14)  br.cond.sptk.few    SetSlot1;;      // set slot 1
>-
>-SetSlot0:
>-        dep     loc2=0, loc2, 5, 41;;       // remove old instruction from slot 0
>-        shl     loc4=in2, 5;;               // loc4 = new instruction ready to be inserted
>-        or      loc2=loc2, loc4;;           // loc2 = updated first 8 bytes of bundle
>-        add     loc4=0x8,in0;;              // loc4 = address to store first 8 bytes of
>bundle
>-        st8     [loc4]=loc2                 // [loc4] = updated bundle
>-        br.sptk.few SetSlotDone;;
>-        ;;
>-
>-SetSlot1:
>-        dep     loc2=0, loc2, 46, 18        // remove old instruction from slot 1
>-        dep     loc3=0, loc3, 0, 23;;
>-        shl     loc4=in2, 46;;              // loc4 = partial instruction ready to be inserted
>-        or      loc2=loc2, loc4;;           // loc2 = updated first 8 bytes of bundle
>-        add     loc4=0x8,in0;;              // loc4 = address to store first 8 bytes of
>bundle
>-        st8     [loc4]=loc2;;               // [loc4] = updated bundle
>-        shr.u   loc4=in2, 18;;              // loc4 = partial instruction ready to be inserted
>-        or      loc3=loc3, loc4;;           // loc3 = updated second 8 bytes of bundle
>-        st8     [in0]=loc3;;                // [in0] = updated bundle
>-        br.sptk.few SetSlotDone;;
>-
>-SetSlot2:
>-        dep     loc3=0, loc3, 23, 41;;      // remove old instruction from slot 2
>-        shl     loc4=in2, 23;;              // loc4 = instruction ready to be inserted
>-        or      loc3=loc3, loc4;;           // loc3 = updated second 8 bytes of bundle
>-        st8     [in0]=loc3;;                // [in0] = updated bundle
>-
>-SetSlotDone:
>-
>-        NESTED_RETURN
>-        .endp       SetSlot
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      GetIva
>-//
>-//  Description:
>-//      C callable function to obtain the current value of IVA
>-//
>-//  Returns:
>-//      Current value if IVA
>-
>-        ASM_GLOBAL     GetIva
>-        .proc       GetIva
>-GetIva:
>-        mov         r8=cr2;;
>-        br.ret.sptk.many    b0
>-
>-        .endp       GetIva
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      ProgramInterruptFlags
>-//
>-//  Description:
>-//      C callable function to enable/disable interrupts
>-//
>-//  Returns:
>-//      Previous state of psr.ic
>-//
>-        ASM_GLOBAL     ProgramInterruptFlags
>-        .proc       ProgramInterruptFlags
>-ProgramInterruptFlags:
>-        alloc       loc0=1,2,0,0;;
>-        mov         loc0=psr
>-        mov         loc1=0x6000;;
>-        and         r8=loc0, loc1           // obtain current psr.ic and psr.i state
>-        and         in0=in0, loc1           // insure no extra bits set in input
>-        andcm       loc0=loc0,loc1;;        // clear original psr.i and psr.ic
>-        or          loc0=loc0,in0;;         // OR in new psr.ic value
>-        mov         psr.l=loc0;;            // write new psr
>-        srlz.d
>-        br.ret.sptk.many    b0              // return
>-
>-        .endp       ProgramInterruptFlags
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      SpillContext
>-//
>-//  Description:
>-//      Saves system context to context record.
>-//
>-//  Arguments:
>-//          in0 = 512 byte aligned context record address
>-//          in1 = original B0
>-//          in2 = original ar.bsp
>-//          in3 = original ar.bspstore
>-//          in4 = original ar.rnat
>-//          in5 = original ar.pfs
>-//
>-//  Notes:
>-//      loc0 - scratch
>-//      loc1 - scratch
>-//      loc2 - temporary application unat storage
>-//      loc3 - temporary exception handler unat storage
>-
>-        .proc       SpillContext
>-
>-SpillContext:
>-        alloc       loc0=6,4,0,0;;          // alloc 6 input, 4 locals, 0 outs
>-        mov         loc2=ar.unat;;          // save application context unat (spilled later)
>-        mov         ar.unat=r0;;            // set UNAT=0
>-        st8.spill   [in0]=r0,8;;
>-        st8.spill   [in0]=r1,8;;            // save R1 - R31
>-        st8.spill   [in0]=r2,8;;
>-        st8.spill   [in0]=r3,8;;
>-        st8.spill   [in0]=r4,8;;
>-        st8.spill   [in0]=r5,8;;
>-        st8.spill   [in0]=r6,8;;
>-        st8.spill   [in0]=r7,8;;
>-        st8.spill   [in0]=r8,8;;
>-        st8.spill   [in0]=r9,8;;
>-        st8.spill   [in0]=r10,8;;
>-        st8.spill   [in0]=r11,8;;
>-        st8.spill   [in0]=r12,8;;
>-        st8.spill   [in0]=r13,8;;
>-        st8.spill   [in0]=r14,8;;
>-        st8.spill   [in0]=r15,8;;
>-        st8.spill   [in0]=r16,8;;
>-        st8.spill   [in0]=r17,8;;
>-        st8.spill   [in0]=r18,8;;
>-        st8.spill   [in0]=r19,8;;
>-        st8.spill   [in0]=r20,8;;
>-        st8.spill   [in0]=r21,8;;
>-        st8.spill   [in0]=r22,8;;
>-        st8.spill   [in0]=r23,8;;
>-        st8.spill   [in0]=r24,8;;
>-        st8.spill   [in0]=r25,8;;
>-        st8.spill   [in0]=r26,8;;
>-        st8.spill   [in0]=r27,8;;
>-        st8.spill   [in0]=r28,8;;
>-        st8.spill   [in0]=r29,8;;
>-        st8.spill   [in0]=r30,8;;
>-        st8.spill   [in0]=r31,8;;
>-        mov         loc3=ar.unat;;          // save debugger context unat (spilled later)
>-        stf.spill   [in0]=f2,16;;           // save f2 - f31
>-        stf.spill   [in0]=f3,16;;
>-        stf.spill   [in0]=f4,16;;
>-        stf.spill   [in0]=f5,16;;
>-        stf.spill   [in0]=f6,16;;
>-        stf.spill   [in0]=f7,16;;
>-        stf.spill   [in0]=f8,16;;
>-        stf.spill   [in0]=f9,16;;
>-        stf.spill   [in0]=f10,16;;
>-        stf.spill   [in0]=f11,16;;
>-        stf.spill   [in0]=f12,16;;
>-        stf.spill   [in0]=f13,16;;
>-        stf.spill   [in0]=f14,16;;
>-        stf.spill   [in0]=f15,16;;
>-        stf.spill   [in0]=f16,16;;
>-        stf.spill   [in0]=f17,16;;
>-        stf.spill   [in0]=f18,16;;
>-        stf.spill   [in0]=f19,16;;
>-        stf.spill   [in0]=f20,16;;
>-        stf.spill   [in0]=f21,16;;
>-        stf.spill   [in0]=f22,16;;
>-        stf.spill   [in0]=f23,16;;
>-        stf.spill   [in0]=f24,16;;
>-        stf.spill   [in0]=f25,16;;
>-        stf.spill   [in0]=f26,16;;
>-        stf.spill   [in0]=f27,16;;
>-        stf.spill   [in0]=f28,16;;
>-        stf.spill   [in0]=f29,16;;
>-        stf.spill   [in0]=f30,16;;
>-        stf.spill   [in0]=f31,16;;
>-        mov         loc0=pr;;               // save predicates
>-        st8.spill   [in0]=loc0,8;;
>-        st8.spill   [in0]=in1,8;;           // save b0 - b7... in1 already equals saved b0
>-        mov         loc0=b1;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=b2;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=b3;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=b4;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=b5;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=b6;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=b7;;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.rsc;;           // save ar.rsc
>-        st8.spill   [in0]=loc0,8;;
>-        st8.spill   [in0]=in2,8;;           // save ar.bsp (in2)
>-        st8.spill   [in0]=in3,8;;           // save ar.bspstore (in3)
>-        st8.spill   [in0]=in4,8;;           // save ar.rnat (in4)
>-        mov         loc0=ar.fcr;;           // save ar.fcr (ar21 - IA32 floating-point control
>register)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.eflag;;         // save ar.eflag (ar24)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.csd;;           // save ar.csd (ar25 - ia32 CS descriptor)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.ssd;;           // save ar.ssd (ar26 - ia32 ss descriptor)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.cflg;;          // save ar.cflg (ar27 - ia32 cr0 and cr4)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.fsr;;           // save ar.fsr (ar28 - ia32 floating-point status
>register)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.fir;;           // save ar.fir (ar29 - ia32 floating-point
>instruction register)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.fdr;;           // save ar.fdr (ar30 - ia32 floating-point data
>register)
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.ccv;;           // save ar.ccv
>-        st8.spill   [in0]=loc0,8;;
>-        st8.spill   [in0]=loc2,8;;          // save ar.unat (saved to loc2 earlier)
>-        mov         loc0=ar.fpsr;;          // save floating point status register
>-        st8.spill   [in0]=loc0,8;;
>-        st8.spill   [in0]=in5,8;;           // save ar.pfs
>-        mov         loc0=ar.lc;;            // save ar.lc
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ar.ec;;            // save ar.ec
>-        st8.spill   [in0]=loc0,8;;
>-
>-        // save control registers
>-        mov         loc0=cr.dcr;;           // save dcr
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.itm;;           // save itm
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.iva;;           // save iva
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.pta;;           // save pta
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.ipsr;;          // save ipsr
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.isr;;           // save isr
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.iip;;           // save iip
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.ifa;;           // save ifa
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.itir;;          // save itir
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.iipa;;          // save iipa
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.ifs;;           // save ifs
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.iim;;           // save iim
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=cr.iha;;           // save iha
>-        st8.spill   [in0]=loc0,8;;
>-
>-        // save debug registers
>-        mov         loc0=dbr[r0];;          // save dbr0 - dbr7
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=1;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=2;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=3;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=4;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=5;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=6;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=7;;
>-        mov         loc0=dbr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        mov         loc0=ibr[r0];;          // save ibr0 - ibr7
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=1;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=2;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=3;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=4;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=5;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=6;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        movl        loc1=7;;
>-        mov         loc0=ibr[loc1];;
>-        st8.spill   [in0]=loc0,8;;
>-        st8.spill   [in0]=loc3;;
>-
>-        br.ret.sptk.few     b0
>-
>-        .endp       SpillContext
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      FillContext
>-//
>-//  Description:
>-//      Restores register context from context record.
>-//
>-//  Arguments:
>-//          in0 = address of last element 512 byte aligned context record address
>-//          in1 = modified B0
>-//          in2 = modified ar.bsp
>-//          in3 = modified ar.bspstore
>-//          in4 = modified ar.rnat
>-//          in5 = modified ar.pfs
>-//
>-//  Notes:
>-//      loc0 - scratch
>-//      loc1 - scratch
>-//      loc2 - temporary application unat storage
>-//      loc3 - temporary exception handler unat storage
>-
>-        .proc       FillContext
>-FillContext:
>-        alloc       loc0=6,4,0,0;;          // alloc 6 inputs, 4 locals, 0 outs
>-        ld8.fill    loc3=[in0],-8;;         // int_nat (nat bits for R1-31)
>-        movl        loc1=7;;                // ibr7
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        movl        loc1=6;;                // ibr6
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        movl        loc1=5;;                // ibr5
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        movl        loc1=4;;                // ibr4
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        movl        loc1=3;;                // ibr3
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        movl        loc1=2;;                // ibr2
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        movl        loc1=1;;                // ibr1
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         ibr[loc1]=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ibr0
>-        mov         ibr[r0]=loc0;;
>-        movl        loc1=7;;                // dbr7
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        movl        loc1=6;;                // dbr6
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        movl        loc1=5;;                // dbr5
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        movl        loc1=4;;                // dbr4
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        movl        loc1=3;;                // dbr3
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        movl        loc1=2;;                // dbr2
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        movl        loc1=1;;                // dbr1
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         dbr[loc1]=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // dbr0
>-        mov         dbr[r0]=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // iha
>-        mov         cr.iha=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // iim
>-        mov         cr.iim=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ifs
>-        mov         cr.ifs=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // iipa
>-        mov         cr.iipa=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // itir
>-        mov         cr.itir=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ifa
>-        mov         cr.ifa=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // iip
>-        mov         cr.iip=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // isr
>-        mov         cr.isr=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ipsr
>-        mov         cr.ipsr=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // pta
>-        mov         cr.pta=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // iva
>-        mov         cr.iva=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // itm
>-        mov         cr.itm=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // dcr
>-        mov         cr.dcr=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ec
>-        mov         ar.ec=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // lc
>-        mov         ar.lc=loc0;;
>-        ld8.fill    in5=[in0],-8;;          // ar.pfs
>-        ld8.fill    loc0=[in0],-8;;         // ar.fpsr
>-        mov         ar.fpsr=loc0;;
>-        ld8.fill    loc2=[in0],-8;;         // ar.unat - restored later...
>-        ld8.fill    loc0=[in0],-8;;         // ar.ccv
>-        mov         ar.ccv=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.fdr
>-        mov         ar.fdr=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.fir
>-        mov         ar.fir=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.fsr
>-        mov         ar.fsr=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.cflg
>-        mov         ar.cflg=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.ssd
>-        mov         ar.ssd=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.csd
>-        mov         ar.csd=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.eflag
>-        mov         ar.eflag=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // ar.fcr
>-        mov         ar.fcr=loc0;;
>-        ld8.fill    in4=[in0],-8;;          // ar.rnat
>-        ld8.fill    in3=[in0],-8;;          // bspstore
>-        ld8.fill    in2=[in0],-8;;          // bsp
>-        ld8.fill    loc0=[in0],-8;;         // ar.rsc
>-        mov         ar.rsc=loc0;;
>-        ld8.fill    loc0=[in0],-8;;         // B7 - B0
>-        mov         b7=loc0;;
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         b6=loc0;;
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         b5=loc0;;
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         b4=loc0;;
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         b3=loc0;;
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         b2=loc0;;
>-        ld8.fill    loc0=[in0],-8;;
>-        mov         b1=loc0;;
>-        ld8.fill    in1=[in0],-8;;          // b0 is temporarily stored in in1
>-        ld8.fill    loc0=[in0],-16;;        // predicates
>-        mov         pr=loc0;;
>-        ldf.fill    f31=[in0],-16;;
>-        ldf.fill    f30=[in0],-16;;
>-        ldf.fill    f29=[in0],-16;;
>-        ldf.fill    f28=[in0],-16;;
>-        ldf.fill    f27=[in0],-16;;
>-        ldf.fill    f26=[in0],-16;;
>-        ldf.fill    f25=[in0],-16;;
>-        ldf.fill    f24=[in0],-16;;
>-        ldf.fill    f23=[in0],-16;;
>-        ldf.fill    f22=[in0],-16;;
>-        ldf.fill    f21=[in0],-16;;
>-        ldf.fill    f20=[in0],-16;;
>-        ldf.fill    f19=[in0],-16;;
>-        ldf.fill    f18=[in0],-16;;
>-        ldf.fill    f17=[in0],-16;;
>-        ldf.fill    f16=[in0],-16;;
>-        ldf.fill    f15=[in0],-16;;
>-        ldf.fill    f14=[in0],-16;;
>-        ldf.fill    f13=[in0],-16;;
>-        ldf.fill    f12=[in0],-16;;
>-        ldf.fill    f11=[in0],-16;;
>-        ldf.fill    f10=[in0],-16;;
>-        ldf.fill    f9=[in0],-16;;
>-        ldf.fill    f8=[in0],-16;;
>-        ldf.fill    f7=[in0],-16;;
>-        ldf.fill    f6=[in0],-16;;
>-        ldf.fill    f5=[in0],-16;;
>-        ldf.fill    f4=[in0],-16;;
>-        ldf.fill    f3=[in0],-16;;
>-        ldf.fill    f2=[in0],-8;;
>-        mov         ar.unat=loc3;;          // restore unat (int_nat) before fill of general
>registers
>-        ld8.fill    r31=[in0],-8;;
>-        ld8.fill    r30=[in0],-8;;
>-        ld8.fill    r29=[in0],-8;;
>-        ld8.fill    r28=[in0],-8;;
>-        ld8.fill    r27=[in0],-8;;
>-        ld8.fill    r26=[in0],-8;;
>-        ld8.fill    r25=[in0],-8;;
>-        ld8.fill    r24=[in0],-8;;
>-        ld8.fill    r23=[in0],-8;;
>-        ld8.fill    r22=[in0],-8;;
>-        ld8.fill    r21=[in0],-8;;
>-        ld8.fill    r20=[in0],-8;;
>-        ld8.fill    r19=[in0],-8;;
>-        ld8.fill    r18=[in0],-8;;
>-        ld8.fill    r17=[in0],-8;;
>-        ld8.fill    r16=[in0],-8;;
>-        ld8.fill    r15=[in0],-8;;
>-        ld8.fill    r14=[in0],-8;;
>-        ld8.fill    r13=[in0],-8;;
>-        ld8.fill    r12=[in0],-8;;
>-        ld8.fill    r11=[in0],-8;;
>-        ld8.fill    r10=[in0],-8;;
>-        ld8.fill    r9=[in0],-8;;
>-        ld8.fill    r8=[in0],-8;;
>-        ld8.fill    r7=[in0],-8;;
>-        ld8.fill    r6=[in0],-8;;
>-        ld8.fill    r5=[in0],-8;;
>-        ld8.fill    r4=[in0],-8;;
>-        ld8.fill    r3=[in0],-8;;
>-        ld8.fill    r2=[in0],-8;;
>-        ld8.fill    r1=[in0],-8;;
>-        mov         ar.unat=loc2;;          // restore application context unat
>-
>-        br.ret.sptk.many    b0
>-
>-        .endp       FillContext
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      HookHandler
>-//
>-//  Description:
>-//      Common branch target from hooked IVT entries.  Runs in interrupt
>context.
>-//      Responsible for saving and restoring context and calling common C
>-//      handler.  Banked registers running on bank 0 at entry.
>-//
>-//  Arguments:
>-//      All arguments are passed in banked registers:
>-//          B0_REG = Original B0
>-//          SCRATCH_REG1 = IVT entry index
>-//
>-//  Returns:
>-//      Returns via rfi
>-//
>-//  Notes:
>-//      loc0 - scratch
>-//      loc1 - scratch
>-//      loc2 - vector number / mask
>-//      loc3 - 16 byte aligned context record address
>-//      loc4 - temporary storage of last address in context record
>-
>-HookHandler:
>-        flushrs;;                               // Synch RSE with backing store
>-        mov         SCRATCH_REG2=ar.bsp         // save interrupted context bsp
>-        mov         SCRATCH_REG3=ar.bspstore    // save interrupted context
>bspstore
>-        mov         SCRATCH_REG4=ar.rnat        // save interrupted context rnat
>-        mov         SCRATCH_REG6=cr.ifs;;       // save IFS in case we need to chain...
>-        cover;;                                 // creates new frame, moves old
>-                                                //   CFM to IFS.
>-        alloc       SCRATCH_REG5=0,5,6,0        // alloc 5 locals, 6 outs
>-        ;;
>-        // save banked registers to locals
>-        mov         out1=B0_REG                 // out1 = Original B0
>-        mov         out2=SCRATCH_REG2           // out2 = original ar.bsp
>-        mov         out3=SCRATCH_REG3           // out3 = original ar.bspstore
>-        mov         out4=SCRATCH_REG4           // out4 = original ar.rnat
>-        mov         out5=SCRATCH_REG5           // out5 = original ar.pfs
>-        mov         loc2=SCRATCH_REG1;;         // loc2 = vector number + chain flag
>-        bsw.1;;                                 // switch banked registers to bank 1
>-        srlz.d                                  // explicit serialize required
>-                                                // now fill in context record structure
>-        movl        loc3=IpfContextBuf          // Insure context record is aligned
>-        add         loc0=-0x200,r0;;            // mask the lower 9 bits (align on 512 byte
>boundary)
>-        and         loc3=loc3,loc0;;
>-        add         loc3=0x200,loc3;;           // move to next 512 byte boundary
>-                                                // loc3 now contains the 512 byte aligned context
>record
>-                                                // spill register context into context record
>-        mov         out0=loc3;;                 // Context record base in out0
>-                                                // original B0 in out1 already
>-                                                // original ar.bsp in out2 already
>-                                                // original ar.bspstore in out3 already
>-        br.call.sptk.few b0=SpillContext;;      // spill context
>-        mov         loc4=out0                   // save modified address
>-
>-    // At this point, the context has been saved to the context record and
>we're
>-    // ready to call the C part of the handler...
>-
>-        movl        loc0=CommonHandler;;        // obtain address of plabel
>-        ld8         loc1=[loc0];;               // get entry point of CommonHandler
>-        mov         b6=loc1;;                   // put it in a branch register
>-        adds        loc1= 8, loc0;;             // index to GP in plabel
>-        ld8         r1=[loc1];;                 // set up gp for C call
>-        mov         loc1=0xfffff;;              // mask off so only vector bits are present
>-        and         out0=loc2,loc1;;            // pass vector number (exception type)
>-        mov         out1=loc3;;                 // pass context record address
>-        br.call.sptk.few b0=b6;;                // call C handler
>-
>-    // We've returned from the C call, so restore the context and either rfi
>-    // back to interrupted thread, or chain into the SAL if this was an external
>interrupt
>-        mov         out0=loc4;;                 // pass address of last element in context
>record
>-        br.call.sptk.few b0=FillContext;;       // Fill context
>-        mov         b0=out1                     // fill in b0
>-        mov         ar.rnat=out4
>-        mov         ar.pfs=out5
>-
>-  // Loadrs is necessary because the debugger may have changed some
>values in
>-  // the backing store.  The processor, however may not be aware that the
>-  // stacked registers need to be reloaded from the backing store.  Therefore,
>-  // we explicitly cause the RSE to refresh the stacked register's contents
>-  // from the backing store.
>-        mov         loc0=ar.rsc                 // get RSC value
>-        mov         loc1=ar.rsc                 // save it so we can restore it
>-        movl        loc3=0xffffffffc000ffff;;   // create mask for clearing RSC.loadrs
>-        and         loc0=loc0,loc3;;            // create value for RSC with RSC.loadrs==0
>-        mov         ar.rsc=loc0;;               // modify RSC
>-        loadrs;;                                // invalidate register stack
>-        mov         ar.rsc=loc1;;               // restore original RSC
>-
>-        bsw.0;;                                 // switch banked registers back to bank 0
>-        srlz.d;;                                // explicit serialize required
>-        mov         PR_REG=pr                   // save predicates - to be restored after
>chaining decision
>-        mov         B0_REG=b0                   // save b0 - required by chain code
>-        mov         loc2=EXCPT_EXTERNAL_INTERRUPT;;
>-        cmp.eq      p7,p0=SCRATCH_REG1,loc2;;   // check to see if this is the timer
>tick
>-  (p7)  br.cond.dpnt.few    DO_CHAIN;;
>-
>-NO_CHAIN:
>-        mov         pr=PR_REG;;
>-        rfi;;                                   // we're outa here.
>-
>-DO_CHAIN:
>-        mov         pr=PR_REG
>-        mov         SCRATCH_REG1=cr.iva
>-        mov         SCRATCH_REG2=PATCH_RETURN_OFFSET;;
>-        add         SCRATCH_REG1=SCRATCH_REG1, SCRATCH_REG2;;
>-        mov         b0=SCRATCH_REG1;;
>-        br.cond.sptk.few  b0;;
>-
>-EndHookHandler:
>-
>-
>-/////////////////////////////////////////////
>-//
>-//  Name:
>-//      HookStub
>-//
>-//  Description:
>-//      HookStub will be copied from it's loaded location into the IVT when
>-//      an IVT entry is hooked.  The IVT entry does an indirect jump via B0 to
>-//      HookHandler, which in turn calls into the default C handler, which calls
>-//      the user-installed C handler.  The calls return and HookHandler executes
>-//      an rfi.
>-//
>-//  Notes:
>-//      Saves B0 to B0_REG
>-//      Saves IVT index to SCRATCH_REG1 (immediate value is fixed up when
>code is copied
>-//          to the IVT entry.
>-
>-        ASM_GLOBAL HookStub
>-        .proc   HookStub
>-HookStub:
>-
>-        mov         B0_REG=b0
>-        movl        SCRATCH_REG1=HookHandler;;
>-        mov         b0=SCRATCH_REG1;;
>-        mov         SCRATCH_REG1=0;;// immediate value is fixed up during install
>of handler to be the vector number
>-        br.cond.sptk.few b0
>-
>-        .endp       HookStub
>-
>-
>-/////////////////////////////////////////////
>-// The following code is moved into IVT entry 14 (offset 3400) which is
>reserved
>-// in the Itanium architecture.  The patch code is located at the end of the
>-// IVT entry.
>-
>-PatchCode:
>-        mov       SCRATCH_REG0=psr
>-        mov       SCRATCH_REG6=cr.ipsr
>-        mov       PR_REG=pr
>-        mov       B0_REG=b0;;
>-
>-        // turn off any virtual translations
>-        movl      SCRATCH_REG1 = ~( MASK(PSR_DT,1) | MASK(PSR_RT,1));;
>-        and       SCRATCH_REG1 = SCRATCH_REG0, SCRATCH_REG1;;
>-        mov       psr.l = SCRATCH_REG1;;
>-        srlz.d
>-        tbit.z    p14, p15 = SCRATCH_REG6, PSR_IS;;   // Check to see if we were
>-                                                      // interrupted from IA32
>-                                                      // context.  If so, bail out
>-                                                      // and chain to SAL immediately
>- (p15)  br.cond.sptk.few Stub_IVT_Passthru;;
>-        // we only want to take 1 out of 32 external interrupts to minimize the
>-        // impact to system performance.  Check our interrupt count and bail
>-        // out if we're not up to 32
>-        movl      SCRATCH_REG1=ExternalInterruptCount;;
>-        ld8       SCRATCH_REG2=[SCRATCH_REG1];;       // ExternalInterruptCount
>-        tbit.z    p14, p15 = SCRATCH_REG2, 5;;        // bit 5 set?
>- (p14)  add       SCRATCH_REG2=1, SCRATCH_REG2;;      // No?  Then increment
>-                                                      // ExternalInterruptCount
>-                                                      // and Chain to SAL
>-                                                      // immediately
>- (p14)  st8       [SCRATCH_REG1]=SCRATCH_REG2;;
>- (p14)  br.cond.sptk.few Stub_IVT_Passthru;;
>- (p15)  mov       SCRATCH_REG2=0;;                    // Yes?  Then reset
>-                                                        // ExternalInterruptCount
>-                                                        // and branch to
>-                                                        // HookHandler
>- (p15)  st8       [SCRATCH_REG1]=SCRATCH_REG2;;
>-        mov       pr=PR_REG
>-        movl      SCRATCH_REG1=HookHandler;;          // SCRATCH_REG1 =
>entrypoint of HookHandler
>-        mov       b0=SCRATCH_REG1;;                   // b0 = entrypoint of HookHandler
>-        mov       SCRATCH_REG1=EXCPT_EXTERNAL_INTERRUPT;;
>-        br.sptk.few b0;;                                // branch to HookHandler
>-
>-PatchCodeRet:
>-        // fake-up an rfi to get RSE back to being coherent and insure psr has
>-        // original contents when interrupt occured, then exit to SAL
>-        // at this point:
>-        //      cr.ifs has been modified by previous "cover"
>-        //      SCRATCH_REG6 has original cr.ifs
>-
>-        mov       SCRATCH_REG5=cr.ipsr
>-        mov       SCRATCH_REG4=cr.iip;;
>-        mov       cr.ipsr=SCRATCH_REG0
>-        mov       SCRATCH_REG1=ip;;
>-        add       SCRATCH_REG1=0x30, SCRATCH_REG1;;
>-        mov       cr.iip=SCRATCH_REG1;;
>-        rfi;;                       // rfi to next instruction
>-
>-Stub_RfiTarget:
>-        mov       cr.ifs=SCRATCH_REG6
>-        mov       cr.ipsr=SCRATCH_REG5
>-        mov       cr.iip=SCRATCH_REG4;;
>-
>-Stub_IVT_Passthru:
>-        mov       pr=PR_REG                         // pr = saved predicate registers
>-        mov       b0=B0_REG;;                       // b0 = saved b0
>-EndPatchCode:
>-
>-
>-/////////////////////////////////////////////
>-// The following bundle is moved into IVT entry 14 (offset 0x3400) which is
>reserved
>-// in the Itanium architecture.  This bundle will be the last bundle and will
>-// be located at offset 0x37F0 in the IVT.
>-
>-FailsafeBranch:
>-{
>-        .mib
>-        nop.m     0
>-        nop.i     0
>-        br.sptk.few -(FAILSAFE_BRANCH_OFFSET - EXT_INT_ENTRY_OFFSET -
>0x10)
>-}
>-
>-
>-/////////////////////////////////////////////
>-// The following bundle is moved into IVT entry 13 (offset 0x3000) which is
>the
>-// external interrupt.  It branches to the patch code.
>-
>-PatchCodeNewBun0:
>-{
>-        .mib
>-        nop.m     0
>-        nop.i     0
>-        br.cond.sptk.few PATCH_BRANCH
>-}
>diff --git a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/Common.i
>b/MdeModulePkg/Universal/DebugSupportDxe/Ipf/Common.i
>deleted file mode 100644
>index a11f780125..0000000000
>--- a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/Common.i
>+++ /dev/null
>@@ -1,29 +0,0 @@
>-/// @file
>-///  This is set of useful macros.
>-///
>-/// Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
>-/// This program and the accompanying materials
>-/// are licensed and made available under the terms and conditions of the
>BSD License
>-/// which accompanies this distribution.  The full text of the license may be
>found at
>-/// http://opensource.org/licenses/bsd-license.php
>-///
>-/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
>BASIS,
>-/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-///
>-/// Module Name: Common.i
>-///
>-///
>-
>-
>-#define NESTED_SETUP(i,l,o,r)               \
>-         alloc loc1=ar##.##pfs,i,l,o,r ;    \
>-         mov loc0=b0 ;;
>-
>-
>-#define NESTED_RETURN                       \
>-         mov b0=loc0 ;                      \
>-         mov ar##.##pfs=loc1 ;;             \
>-         br##.##ret##.##dpnt  b0 ;;
>-
>-#define MASK(bp,value)  (value << bp)
>-
>diff --git a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/Ds64Macros.i
>b/MdeModulePkg/Universal/DebugSupportDxe/Ipf/Ds64Macros.i
>deleted file mode 100644
>index 8ce97f32c2..0000000000
>--- a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/Ds64Macros.i
>+++ /dev/null
>@@ -1,78 +0,0 @@
>-/// @file
>-///  This is set of macros used in calculating offsets in the IVT.
>-///
>-/// Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
>-/// This program and the accompanying materials
>-/// are licensed and made available under the terms and conditions of the
>BSD License
>-/// which accompanies this distribution.  The full text of the license may be
>found at
>-/// http://opensource.org/licenses/bsd-license.php
>-///
>-/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
>BASIS,
>-/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-///
>-///
>-
>-
>-#define EXCPT_EXTERNAL_INTERRUPT 12
>-#define MASK_0_4        0x000000000000001F  // mask bits 0 through 4
>-#define SLOT0           0
>-#define SLOT1           1
>-#define SLOT2           2
>-
>-#define PSR_DT          17
>-#define PSR_TB          26
>-#define PSR_RT          27
>-#define PSR_IS          34
>-#define PSR_IT          36
>-#define PSR_IC          13
>-#define PSR_I           14
>-#define PSR_SS          40
>-#define PSR_BN          44
>-#define PSR_RI_MASK     0x60000000000
>-
>-#define EXCPT_EXTERNAL_INTERRUPT 12
>-
>-#define SCRATCH_REG0    r23
>-#define SCRATCH_REG1    r24
>-#define SCRATCH_REG2    r25
>-#define SCRATCH_REG3    r26
>-#define SCRATCH_REG4    r27
>-#define SCRATCH_REG5    r28
>-#define SCRATCH_REG6    r29
>-#define PR_REG          r30
>-#define B0_REG          r31
>-
>-
>-// EXT_INT_OFFSET is the offset of the external interrupt entry in the IVT
>-#define EXT_INT_ENTRY_OFFSET    0x03000
>-
>-// PATCH_ENTRY_OFFSET is the offset into the IVT of the entry that is
>coopted (stolen)
>-// for use by the handler.  The entire entry is restored when the handler is
>-// unloaded.
>-#define PATCH_ENTRY_OFFSET      0x03400
>-
>-// PATCH_CODE_SIZE is the size of patch code
>-#define PATCH_CODE_SIZE       (EndPatchCode - PatchCode)
>-
>-// A hard coded branch back into the external interrupt IVT entry's second
>bundle
>-// is put here, just in case the original bundle zero did not have a branch
>-// This is the last bundle in the reserved IVT entry
>-#define FAILSAFE_BRANCH_OFFSET  (PATCH_ENTRY_OFFSET + 0x400 - 0x10)
>-
>-// the original external interrupt IVT entry bundle zero is copied and
>relocated
>-// here... also in the reserved IVT entry
>-// This is the second-to-last bundle in the reserved IVT entry
>-#define RELOCATED_EXT_INT       (PATCH_ENTRY_OFFSET + 0x400 - 0x20)
>-
>-// The patch is actually stored at the end of IVT:PATCH_ENTRY.  The
>PATCH_OFFSET
>-// is the offset into IVT where the patch is actually stored.  It is carefully
>-// located so that when we run out of patch code, the next bundle is the
>-// relocated bundle 0 from the original external interrupt handler
>-#define PATCH_OFFSET            (PATCH_ENTRY_OFFSET + 0x400 -
>( EndPatchCode - PatchCode ) - 0x20)
>-
>-#define PATCH_RETURN_OFFSET     (PATCH_ENTRY_OFFSET + 0x400 -
>( EndPatchCode - PatchCodeRet ) - 0x20)
>-
>-// PATCH_BRANCH is used only in the new bundle that is placed at the
>beginning
>-// of the external interrupt IVT entry.
>-#define PATCH_BRANCH            (PATCH_OFFSET - EXT_INT_ENTRY_OFFSET)
>-
>diff --git
>a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.c
>b/MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.c
>deleted file mode 100644
>index 44f59e8ec8..0000000000
>--- a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.c
>+++ /dev/null
>@@ -1,467 +0,0 @@
>-/** @file
>-  IPF specific functions to support Debug Support protocol.
>-
>-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
>-This program and the accompanying materials
>-are licensed and made available under the terms and conditions of the BSD
>License
>-which accompanies this distribution.  The full text of the license may be
>found at
>-http://opensource.org/licenses/bsd-license.php
>-
>-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-
>-**/
>-
>-#include "PlDebugSupport.h"
>-
>-BOOLEAN  mInHandler = FALSE;
>-
>-//
>-// number of bundles to swap in ivt
>-//
>-#define NUM_BUNDLES_IN_STUB 5
>-#define NUM_IVT_ENTRIES     64
>-
>-typedef struct {
>-  BUNDLE         OrigBundles[NUM_BUNDLES_IN_STUB];
>-  CALLBACK_FUNC  RegisteredCallback;
>-} IVT_ENTRY;
>-
>-IVT_ENTRY IvtEntryTable[NUM_IVT_ENTRIES];
>-
>-//
>-// IPF context record is overallocated by 512 bytes to guarantee a 512 byte
>alignment exists
>-// within the buffer and still have a large enough buffer to hold a whole IPF
>context record.
>-//
>-UINT8     IpfContextBuf[sizeof (EFI_SYSTEM_CONTEXT_IPF) + 512];
>-
>-//
>-// The PatchSaveBuffer is used to store the original bundles from the IVT
>where it is patched
>-// with the common handler.
>-//
>-UINT8     PatchSaveBuffer[0x400];
>-UINTN     ExternalInterruptCount;
>-
>-
>-/**
>-  IPF specific DebugSupport driver initialization.
>-
>-  Must be public because it's referenced from DebugSupport.c
>-
>-  @retval  EFI_SUCCESS     Always.
>-
>-**/
>-EFI_STATUS
>-PlInitializeDebugSupportDriver (
>-  VOID
>-  )
>-{
>-  ZeroMem (IvtEntryTable, sizeof (IvtEntryTable));
>-  ExternalInterruptCount = 0;
>-  return EFI_SUCCESS;
>-}
>-
>-/**
>-  Unload handler that is called during UnloadImage() - deallocates pool
>memory
>-  used by the driver.
>-
>-  Must be public because it's referenced from DebugSuport.c
>-
>-  @param  ImageHandle    The firmware allocated handle for the EFI image.
>-
>-  @retval EFI_SUCCESS    Always.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-PlUnloadDebugSupportDriver (
>-  IN EFI_HANDLE       ImageHandle
>-  )
>-{
>-  EFI_EXCEPTION_TYPE  ExceptionType;
>-
>-  for (ExceptionType = 0; ExceptionType < NUM_IVT_ENTRIES;
>ExceptionType++) {
>-    ManageIvtEntryTable (ExceptionType, NULL, NULL);
>-  }
>-
>-  return EFI_SUCCESS;
>-}
>-
>-/**
>-  C routine that is called for all registered exceptions.  This is the main
>-  exception dispatcher.
>-
>-  Must be public because it's referenced from AsmFuncs.s.
>-
>-  @param  ExceptionType        Specifies which processor exception.
>-  @param  Context              System Context.
>-**/
>-VOID
>-CommonHandler (
>-  IN EFI_EXCEPTION_TYPE ExceptionType,
>-  IN EFI_SYSTEM_CONTEXT Context
>-  )
>-{
>-  DEBUG_CODE_BEGIN ();
>-    if (mInHandler) {
>-      DEBUG ((EFI_D_INFO, "ERROR: Re-entered debugger!\n"
>-                                    "       ExceptionType == %X\n"
>-                                    "       Context       == %X\n"
>-                                    "       Context.SystemContextIpf->CrIip  == %LX\n"
>-                                    "       Context.SystemContextIpf->CrIpsr == %LX\n"
>-                                    "       mInHandler     == %X\n",
>-                                    (INT32)ExceptionType,
>-                                    Context,
>-                                    Context.SystemContextIpf->CrIip,
>-                                    Context.SystemContextIpf->CrIpsr,
>-                                    mInHandler));
>-    }
>-  DEBUG_CODE_END ();
>-
>-  ASSERT (!mInHandler);
>-  mInHandler = TRUE;
>-  if (IvtEntryTable[ExceptionType].RegisteredCallback != NULL) {
>-    if (ExceptionType != EXCEPT_IPF_EXTERNAL_INTERRUPT) {
>-      IvtEntryTable[ExceptionType].RegisteredCallback (ExceptionType,
>Context.SystemContextIpf);
>-    } else {
>-      IvtEntryTable[ExceptionType].RegisteredCallback
>(Context.SystemContextIpf);
>-    }
>-  } else {
>-    ASSERT (0);
>-  }
>-
>-  mInHandler = FALSE;
>-}
>-
>-/**
>-  Given an integer number, return the physical address of the entry point in
>the IFT.
>-
>-  @param  HandlerIndex       Index of the Handler
>-  @param  EntryPoint         IFT Entrypoint
>-
>-**/
>-VOID
>-GetHandlerEntryPoint (
>-  UINTN   HandlerIndex,
>-  VOID    **EntryPoint
>-  )
>-{
>-  UINT8 *TempPtr;
>-
>-  //
>-  // get base address of IVT
>-  //
>-  TempPtr = GetIva ();
>-
>-  if (HandlerIndex < 20) {
>-    //
>-    // first 20 provide 64 bundles per vector
>-    //
>-    TempPtr += 0x400 * HandlerIndex;
>-  } else {
>-    //
>-    // the rest provide 16 bundles per vector
>-    //
>-    TempPtr += 0x5000 + 0x100 * (HandlerIndex - 20);
>-  }
>-
>-  *EntryPoint = (VOID *) TempPtr;
>-}
>-
>-/**
>-  This is the worker function that uninstalls and removes all handlers.
>-
>-  @param  ExceptionType     Specifies which processor exception.
>-  @param  NewBundles        New Boundles.
>-  @param  NewCallback       A pointer to the new function to be registered.
>-
>-  @retval EFI_ALEADY_STARTED Ivt already hooked.
>-  @retval EFI_SUCCESS        Successfully uninstalled.
>-
>-**/
>-EFI_STATUS
>-ManageIvtEntryTable (
>-  IN  EFI_EXCEPTION_TYPE           ExceptionType,
>-  IN  BUNDLE                       NewBundles[NUM_BUNDLES_IN_STUB],
>-  IN  CALLBACK_FUNC                NewCallback
>-  )
>-{
>-  BUNDLE  *B0Ptr;
>-  UINT64  InterruptFlags;
>-  EFI_TPL OldTpl;
>-
>-  //
>-  // Get address of bundle 0
>-  //
>-  GetHandlerEntryPoint (ExceptionType, (VOID **) &B0Ptr);
>-
>-  if (IvtEntryTable[ExceptionType].RegisteredCallback != NULL) {
>-    //
>-    // we've already installed to this vector
>-    //
>-    if (NewCallback != NULL) {
>-      //
>-      // if the input handler is non-null, error
>-      //
>-      return EFI_ALREADY_STARTED;
>-    } else {
>-      //
>-      // else remove the previously installed handler
>-      //
>-      OldTpl          = gBS->RaiseTPL (TPL_HIGH_LEVEL);
>-      InterruptFlags  = ProgramInterruptFlags (DISABLE_INTERRUPTS);
>-      if (ExceptionType == EXCEPT_IPF_EXTERNAL_INTERRUPT) {
>-        UnchainExternalInterrupt ();
>-      } else {
>-        UnhookEntry (ExceptionType);
>-      }
>-
>-      ProgramInterruptFlags (InterruptFlags);
>-      gBS->RestoreTPL (OldTpl);
>-      //
>-      // re-init IvtEntryTable
>-      //
>-      ZeroMem (&IvtEntryTable[ExceptionType], sizeof (IVT_ENTRY));
>-    }
>-  } else {
>-    //
>-    // no user handler installed on this vector
>-    //
>-    if (NewCallback != NULL) {
>-      OldTpl          = gBS->RaiseTPL (TPL_HIGH_LEVEL);
>-      InterruptFlags  = ProgramInterruptFlags (DISABLE_INTERRUPTS);
>-      if (ExceptionType == EXCEPT_IPF_EXTERNAL_INTERRUPT) {
>-        ChainExternalInterrupt (NewCallback);
>-      } else {
>-        HookEntry (ExceptionType, NewBundles, NewCallback);
>-      }
>-
>-      ProgramInterruptFlags (InterruptFlags);
>-      gBS->RestoreTPL (OldTpl);
>-    }
>-  }
>-
>-  return EFI_SUCCESS;
>-}
>-
>-/**
>-  Saves original IVT contents and inserts a few new bundles which are fixed
>up
>-  to store the ExceptionType and then call the common handler.
>-
>-  @param  ExceptionType      Specifies which processor exception.
>-  @param  NewBundles         New Boundles.
>-  @param  NewCallback        A pointer to the new function to be hooked.
>-
>-**/
>-VOID
>-HookEntry (
>-  IN  EFI_EXCEPTION_TYPE  ExceptionType,
>-  IN  BUNDLE              NewBundles[4],
>-  IN  CALLBACK_FUNC       NewCallback
>-  )
>-{
>-  BUNDLE  *FixupBundle;
>-  BUNDLE  *B0Ptr;
>-
>-  //
>-  // Get address of bundle 0
>-  //
>-  GetHandlerEntryPoint (ExceptionType, (VOID **) &B0Ptr);
>-
>-  //
>-  // copy original bundles from IVT to IvtEntryTable so we can restore them
>later
>-  //
>-  CopyMem (
>-    IvtEntryTable[ExceptionType].OrigBundles,
>-    B0Ptr,
>-    sizeof (BUNDLE) * NUM_BUNDLES_IN_STUB
>-    );
>-  //
>-  // insert new B0
>-  //
>-  CopyMem (B0Ptr, NewBundles, sizeof (BUNDLE) *
>NUM_BUNDLES_IN_STUB);
>-
>-  //
>-  // fixup IVT entry so it stores its index and whether or not to chain...
>-  //
>-  FixupBundle = B0Ptr + 2;
>-  FixupBundle->High |= ExceptionType << 36;
>-
>-  InstructionCacheFlush (B0Ptr, 5);
>-  IvtEntryTable[ExceptionType].RegisteredCallback = NewCallback;
>-}
>-
>-/**
>-  Restores original IVT contents when unregistering a callback function.
>-
>-  @param  ExceptionType     Specifies which processor exception.
>-
>-**/
>-VOID
>-UnhookEntry (
>-  IN  EFI_EXCEPTION_TYPE  ExceptionType
>-  )
>-{
>-  BUNDLE  *B0Ptr;
>-
>-  //
>-  // Get address of bundle 0
>-  //
>-  GetHandlerEntryPoint (ExceptionType, (VOID **) &B0Ptr);
>-  //
>-  // restore original bundles in IVT
>-  //
>-  CopyMem (
>-    B0Ptr,
>-    IvtEntryTable[ExceptionType].OrigBundles,
>-    sizeof (BUNDLE) * NUM_BUNDLES_IN_STUB
>-    );
>-  InstructionCacheFlush (B0Ptr, 5);
>-}
>-
>-/**
>-  Sets up cache flush and calls assembly function to chain external interrupt.
>-
>-  Records new callback in IvtEntryTable.
>-
>-  @param  NewCallback     A pointer to the interrupt handle.
>-
>-**/
>-VOID
>-ChainExternalInterrupt (
>-  IN  CALLBACK_FUNC  NewCallback
>-  )
>-{
>-  VOID  *Start;
>-
>-  Start = (VOID *) ((UINT8 *) GetIva () + 0x400 *
>EXCEPT_IPF_EXTERNAL_INTERRUPT + 0x400);
>-  IvtEntryTable[EXCEPT_IPF_EXTERNAL_INTERRUPT].RegisteredCallback =
>NewCallback;
>-  ChainHandler ();
>-  InstructionCacheFlush (Start, 0x400);
>-}
>-
>-/**
>-  Sets up cache flush and calls assembly function to restore external interrupt.
>-  Removes registered callback from IvtEntryTable.
>-
>-**/
>-VOID
>-UnchainExternalInterrupt (
>-  VOID
>-  )
>-{
>-  VOID  *Start;
>-
>-  Start = (VOID *) ((UINT8 *) GetIva () + 0x400 *
>EXCEPT_IPF_EXTERNAL_INTERRUPT + 0x400);
>-  UnchainHandler ();
>-  InstructionCacheFlush (Start, 0x400);
>-  IvtEntryTable[EXCEPT_IPF_EXTERNAL_INTERRUPT].RegisteredCallback =
>NULL;
>-}
>-
>-/**
>-  Returns the maximum value that may be used for the ProcessorIndex
>parameter in
>-  RegisterPeriodicCallback() and RegisterExceptionCallback().
>-
>-  Hard coded to support only 1 processor for now.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  MaxProcessorIndex     Pointer to a caller-allocated UINTN in which
>the maximum supported
>-                                processor index is returned. Always 0 returned.
>-
>-  @retval EFI_SUCCESS           Always returned with **MaxProcessorIndex set
>to 0.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-GetMaximumProcessorIndex (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL    *This,
>-  OUT UINTN                        *MaxProcessorIndex
>-  )
>-{
>-  *MaxProcessorIndex = 0;
>-  return (EFI_SUCCESS);
>-}
>-
>-/**
>-  Registers a function to be called back periodically in interrupt context.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  ProcessorIndex        Specifies which processor the callback function
>applies to.
>-  @param  PeriodicCallback      A pointer to a function of type
>PERIODIC_CALLBACK that is the main
>-                                periodic entry point of the debug agent.
>-
>-  @retval EFI_SUCCESS           The function completed successfully.
>-  @retval EFI_ALREADY_STARTED   Non-NULL PeriodicCallback parameter
>when a callback
>-                                function was previously registered.
>-  @retval EFI_OUT_OF_RESOURCES  System has insufficient memory
>resources to register new callback
>-                                function.
>-**/
>-EFI_STATUS
>-EFIAPI
>-RegisterPeriodicCallback (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL     *This,
>-  IN UINTN                          ProcessorIndex,
>-  IN EFI_PERIODIC_CALLBACK          PeriodicCallback
>-  )
>-{
>-  return ManageIvtEntryTable (EXCEPT_IPF_EXTERNAL_INTERRUPT, NULL,
>PeriodicCallback);
>-}
>-
>-/**
>-  Registers a function to be called when a given processor exception occurs.
>-
>-  This code executes in boot services context.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  ProcessorIndex        Specifies which processor the callback function
>applies to.
>-  @param  ExceptionCallback     A pointer to a function of type
>EXCEPTION_CALLBACK that is called
>-                                when the processor exception specified by ExceptionType
>occurs.
>-  @param  ExceptionType         Specifies which processor exception to hook.
>-
>-  @retval EFI_SUCCESS           The function completed successfully.
>-  @retval EFI_ALREADY_STARTED   Non-NULL PeriodicCallback parameter
>when a callback
>-                                function was previously registered.
>-  @retval EFI_OUT_OF_RESOURCES  System has insufficient memory
>resources to register new callback
>-                                function.
>-**/
>-EFI_STATUS
>-EFIAPI
>-RegisterExceptionCallback (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL    *This,
>-  IN UINTN                         ProcessorIndex,
>-  IN EFI_EXCEPTION_CALLBACK        ExceptionCallback,
>-  IN EFI_EXCEPTION_TYPE            ExceptionType
>-  )
>-{
>-  return ManageIvtEntryTable (
>-          ExceptionType,
>-          (BUNDLE *) ((EFI_PLABEL *) HookStub)->EntryPoint,
>-          ExceptionCallback
>-          );
>-}
>-
>-/**
>-  Invalidates processor instruction cache for a memory range. Subsequent
>execution in this range
>-  causes a fresh memory fetch to retrieve code to be executed.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  ProcessorIndex        Specifies which processor's instruction cache is
>to be invalidated.
>-  @param  Start                 Specifies the physical base of the memory range to
>be invalidated.
>-  @param  Length                Specifies the minimum number of bytes in the
>processor's instruction
>-                                cache to invalidate.
>-
>-  @retval EFI_SUCCESS           Always returned.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-InvalidateInstructionCache (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL    *This,
>-  IN UINTN                         ProcessorIndex,
>-  IN VOID                          *Start,
>-  IN UINTN                         Length
>-  )
>-{
>-  InstructionCacheFlush (Start, Length);
>-  return EFI_SUCCESS;
>-}
>diff --git
>a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.h
>b/MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.h
>deleted file mode 100644
>index 1701fbff42..0000000000
>--- a/MdeModulePkg/Universal/DebugSupportDxe/Ipf/PlDebugSupport.h
>+++ /dev/null
>@@ -1,324 +0,0 @@
>-/** @file
>-  IPF specific types, macros, and definitions for Debug Support Driver.
>-
>-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
>-This program and the accompanying materials
>-are licensed and made available under the terms and conditions of the BSD
>License
>-which accompanies this distribution.  The full text of the license may be
>found at
>-http://opensource.org/licenses/bsd-license.php
>-
>-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-
>-**/
>-
>-#ifndef _PLDEBUG_SUPPORT_H_
>-#define _PLDEBUG_SUPPORT_H_
>-
>-#include <Uefi.h>
>-
>-#include <Protocol/DebugSupport.h>
>-#include <Protocol/LoadedImage.h>
>-
>-#include <Library/DebugLib.h>
>-#include <Library/UefiDriverEntryPoint.h>
>-#include <Library/BaseMemoryLib.h>
>-#include <Library/MemoryAllocationLib.h>
>-#include <Library/UefiBootServicesTableLib.h>
>-
>-#define DISABLE_INTERRUPTS  0UL
>-
>-#define EFI_ISA IsaIpf
>-
>-typedef struct {
>-  UINT64  Low;
>-  UINT64  High;
>-} BUNDLE;
>-
>-typedef
>-VOID
>-(*CALLBACK_FUNC) (
>-  );
>-
>-/**
>-  IPF specific DebugSupport driver initialization.
>-
>-  Must be public because it's referenced from DebugSupport.c
>-
>-  @retval  EFI_SUCCESS     Always.
>-
>-**/
>-EFI_STATUS
>-PlInitializeDebugSupportDriver (
>-  VOID
>-  );
>-
>-/**
>-  Unload handler that is called during UnloadImage() - deallocates pool
>memory
>-  used by the driver.
>-
>-  Must be public because it's referenced from DebugSuport.c
>-
>-  @param  ImageHandle    The firmware allocated handle for the EFI image.
>-
>-  @retval EFI_SUCCESS    Always.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-PlUnloadDebugSupportDriver (
>-  IN EFI_HANDLE                   ImageHandle
>-  );
>-
>-/**
>-  C callable function to obtain the current value of IVA.
>-
>-  @return Current value of IVA.
>-
>-**/
>-VOID  *
>-GetIva (
>-  VOID
>-  );
>-
>-/**
>-  C callable function that HookStub will be copied from it's loaded location into
>the IVT when
>-  an IVT entry is hooked.
>-
>-**/
>-VOID
>-HookStub (
>-  VOID
>-  );
>-
>-/**
>-  C callable function to chain an interrupt handler.
>-
>-**/
>-VOID
>-ChainHandler (
>-  VOID
>-  );
>-
>-/**
>-  C callable function to unchain an interrupt handler.
>-
>-**/
>-VOID
>-UnchainHandler (
>-  VOID
>-  );
>-
>-/**
>-  C callable function to enable/disable interrupts.
>-
>-  @param  NewInterruptState   New Interrupt State.
>-
>-  @return Previous state of psr.ic.
>-
>-**/
>-UINT64
>-ProgramInterruptFlags (
>-  IN UINT64                       NewInterruptState
>-  );
>-
>-/**
>-  Flushes instruction cache for specified number of bytes.
>-
>-  @param  StartAddress     Cache Start Address.
>-  @param  SizeInBytes      Cache Size.
>-
>-**/
>-VOID
>-InstructionCacheFlush (
>-  IN VOID    *StartAddress,
>-  IN UINTN   SizeInBytes
>-  );
>-
>-/**
>-  Returns the maximum value that may be used for the ProcessorIndex
>parameter in
>-  RegisterPeriodicCallback() and RegisterExceptionCallback().
>-
>-  Hard coded to support only 1 processor for now.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  MaxProcessorIndex     Pointer to a caller-allocated UINTN in which
>the maximum supported
>-                                processor index is returned. Always 0 returned.
>-
>-  @retval EFI_SUCCESS           Always returned with **MaxProcessorIndex set
>to 0.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-GetMaximumProcessorIndex (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL   *This,
>-  OUT UINTN                       *MaxProcessorIndex
>-  );
>-
>-/**
>-  Registers a function to be called back periodically in interrupt context.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  ProcessorIndex        Specifies which processor the callback function
>applies to.
>-  @param  PeriodicCallback      A pointer to a function of type
>PERIODIC_CALLBACK that is the main
>-                                periodic entry point of the debug agent.
>-
>-  @retval EFI_SUCCESS           The function completed successfully.
>-  @retval EFI_ALREADY_STARTED   Non-NULL PeriodicCallback parameter
>when a callback
>-                                function was previously registered.
>-  @retval EFI_OUT_OF_RESOURCES  System has insufficient memory
>resources to register new callback
>-                                function.
>-**/
>-EFI_STATUS
>-EFIAPI
>-RegisterPeriodicCallback (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL   *This,
>-  IN UINTN                        ProcessorIndex,
>-  IN EFI_PERIODIC_CALLBACK        PeriodicCallback
>-  );
>-
>-/**
>-  Registers a function to be called when a given processor exception occurs.
>-
>-  This code executes in boot services context.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  ProcessorIndex        Specifies which processor the callback function
>applies to.
>-  @param  ExceptionCallback     A pointer to a function of type
>EXCEPTION_CALLBACK that is called
>-                                when the processor exception specified by ExceptionType
>occurs.
>-  @param  ExceptionType         Specifies which processor exception to hook.
>-
>-  @retval EFI_SUCCESS           The function completed successfully.
>-  @retval EFI_ALREADY_STARTED   Non-NULL PeriodicCallback parameter
>when a callback
>-                                function was previously registered.
>-  @retval EFI_OUT_OF_RESOURCES  System has insufficient memory
>resources to register new callback
>-                                function.
>-**/
>-EFI_STATUS
>-EFIAPI
>-RegisterExceptionCallback (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL   *This,
>-  IN UINTN                        ProcessorIndex,
>-  IN EFI_EXCEPTION_CALLBACK       ExceptionCallback,
>-  IN EFI_EXCEPTION_TYPE           ExceptionType
>-  );
>-
>-/**
>-  Invalidates processor instruction cache for a memory range. Subsequent
>execution in this range
>-  causes a fresh memory fetch to retrieve code to be executed.
>-
>-  @param  This                  A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL
>instance.
>-  @param  ProcessorIndex        Specifies which processor's instruction cache is
>to be invalidated.
>-  @param  Start                 Specifies the physical base of the memory range to
>be invalidated.
>-  @param  Length                Specifies the minimum number of bytes in the
>processor's instruction
>-                                cache to invalidate.
>-
>-  @retval EFI_SUCCESS           Always returned.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-InvalidateInstructionCache (
>-  IN EFI_DEBUG_SUPPORT_PROTOCOL   *This,
>-  IN UINTN                        ProcessorIndex,
>-  IN VOID                         *Start,
>-  IN UINTN                        Length
>-  );
>-
>-/**
>-  C routine that is called for all registered exceptions.  This is the main
>-  exception dispatcher.
>-
>-  Must be public because it's referenced from AsmFuncs.s.
>-
>-  @param  ExceptionType        Specifies which processor exception.
>-  @param  Context              System Context.
>-**/
>-VOID
>-CommonHandler (
>-  IN EFI_EXCEPTION_TYPE ExceptionType,
>-  IN EFI_SYSTEM_CONTEXT Context
>-  );
>-
>-/**
>-  This is the worker function that uninstalls and removes all handlers.
>-
>-  @param  ExceptionType     Specifies which processor exception.
>-  @param  NewBundles        New Boundles.
>-  @param  NewCallback       A pointer to the new function to be registered.
>-
>-  @retval EFI_ALEADY_STARTED Ivt already hooked.
>-  @retval EFI_SUCCESS        Successfully uninstalled.
>-
>-**/
>-EFI_STATUS
>-ManageIvtEntryTable (
>-  IN  EFI_EXCEPTION_TYPE    ExceptionType,
>-  IN  BUNDLE                NewBundles[4],
>-  IN  CALLBACK_FUNC         NewCallback
>-  );
>-
>-/**
>-  Saves original IVT contents and inserts a few new bundles which are fixed
>up
>-  to store the ExceptionType and then call the common handler.
>-
>-  @param  ExceptionType      Specifies which processor exception.
>-  @param  NewBundles         New Boundles.
>-  @param  NewCallback        A pointer to the new function to be hooked.
>-
>-**/
>-VOID
>-HookEntry (
>-  IN  EFI_EXCEPTION_TYPE    ExceptionType,
>-  IN  BUNDLE                NewBundles[4],
>-  IN  CALLBACK_FUNC         NewCallback
>-  );
>-
>-/**
>-  Restores original IVT contents when unregistering a callback function.
>-
>-  @param  ExceptionType     Specifies which processor exception.
>-
>-**/
>-VOID
>-UnhookEntry (
>-  IN  EFI_EXCEPTION_TYPE    ExceptionType
>-  );
>-
>-/**
>-  Sets up cache flush and calls assembly function to chain external interrupt.
>-
>-  Records new callback in IvtEntryTable.
>-
>-  @param  NewCallback     A pointer to the interrupt handle.
>-
>-**/
>-VOID
>-ChainExternalInterrupt (
>-  IN  CALLBACK_FUNC         NewCallback
>-  );
>-
>-/**
>-  Sets up cache flush and calls assembly function to restore external interrupt.
>-  Removes registered callback from IvtEntryTable.
>-
>-**/
>-VOID
>-UnchainExternalInterrupt (
>-  VOID
>-  );
>-
>-/**
>-  Given an integer number, return the physical address of the entry point in
>the IFT.
>-
>-  @param  HandlerIndex       Index of the Handler
>-  @param  EntryPoint         IFT Entrypoint
>-
>-**/
>-VOID
>-GetHandlerEntryPoint (
>-  UINTN                     HandlerIndex,
>-  VOID                      **EntryPoint
>-  );
>-
>-#endif
>diff --git a/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
>b/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
>index 37bbe297e6..1fdd4dbe56 100644
>--- a/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
>+++ b/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/Disk/CdExpressPei/CdExpressPei.inf
>b/MdeModulePkg/Universal/Disk/CdExpressPei/CdExpressPei.inf
>index e9ddecf967..8ed0023d81 100644
>--- a/MdeModulePkg/Universal/Disk/CdExpressPei/CdExpressPei.inf
>+++ b/MdeModulePkg/Universal/Disk/CdExpressPei/CdExpressPei.inf
>@@ -31,7 +31,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
>b/MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
>index 6c00f553aa..d9241879c0 100644
>--- a/MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
>+++ b/MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
>@@ -31,7 +31,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gDiskIoDriverBinding
> #  COMPONENT_NAME                =  gDiskIoComponentName
>diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
>b/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
>index 46e39129cf..39ad5aa2fb 100644
>--- a/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
>+++ b/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                = gPartitionDriverBinding
> #  COMPONENT_NAME                = gPartitionComponentName
>diff --git a/MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
>b/MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
>index 7fea6bd9dc..fb0bd9ee4c 100644
>--- a/MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
>+++ b/MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
>@@ -1,6 +1,7 @@
> ## @file
> #  UDF/ECMA-167 file system driver.
> #
>+#  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
> #  Copyright (C) 2014-2017 Paulo Alcantara <pcacjr@zytor.com>
> #
> #  This program and the accompanying materials
>@@ -23,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                = gUdfDriverBinding
> #  COMPONENT_NAME                = gUdfComponentName
>diff --git
>a/MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.in
>f
>b/MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.in
>f
>index ad763b1af4..01bc115da9 100644
>---
>a/MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.in
>f
>+++
>b/MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.in
>f
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>b/MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>index c1c1974c13..0e484b3ce6 100644
>--- a/MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>+++ b/MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManager
>Dxe.inf
>b/MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManager
>Dxe.inf
>index d84c7cee15..a4d4e6e4f7 100644
>---
>a/MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManager
>Dxe.inf
>+++
>b/MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManager
>Dxe.inf
>@@ -33,7 +33,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
>
>diff --git a/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
>b/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
>index f856efebc7..6cc05eb293 100644
>--- a/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
>+++ b/MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf
>b/MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf
>index 4554eb485d..fefdd2a5b1 100644
>--- a/MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf
>+++ b/MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 AARCH64
> #
>
> [Sources]
>@@ -73,11 +73,6 @@
>   X64/EbcSupport.c
>   X64/EbcLowLevel.nasm
>
>-[Sources.IPF]
>-  Ipf/EbcSupport.h
>-  Ipf/EbcSupport.c
>-  Ipf/EbcLowLevel.s
>-
> [Sources.AARCH64]
>   AArch64/EbcSupport.c
>   AArch64/EbcLowLevel.S
>diff --git a/MdeModulePkg/Universal/EbcDxe/EbcDebuggerConfig.inf
>b/MdeModulePkg/Universal/EbcDxe/EbcDebuggerConfig.inf
>index 0d931a46f0..cdbad43aa7 100644
>--- a/MdeModulePkg/Universal/EbcDxe/EbcDebuggerConfig.inf
>+++ b/MdeModulePkg/Universal/EbcDxe/EbcDebuggerConfig.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  EBC Debugger configuration application.
> #
>-#  Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 AARCH64
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
>b/MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
>index 8f128b121d..849df7e0eb 100644
>--- a/MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
>+++ b/MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 AARCH64
> #
>
> [Sources]
>@@ -48,11 +48,6 @@
>   X64/EbcSupport.c
>   X64/EbcLowLevel.nasm
>
>-[Sources.IPF]
>-  Ipf/EbcSupport.h
>-  Ipf/EbcSupport.c
>-  Ipf/EbcLowLevel.s
>-
> [Sources.AARCH64]
>   AArch64/EbcSupport.c
>   AArch64/EbcLowLevel.S
>diff --git a/MdeModulePkg/Universal/EbcDxe/Ipf/EbcLowLevel.s
>b/MdeModulePkg/Universal/EbcDxe/Ipf/EbcLowLevel.s
>deleted file mode 100644
>index 4ae24dee7d..0000000000
>--- a/MdeModulePkg/Universal/EbcDxe/Ipf/EbcLowLevel.s
>+++ /dev/null
>@@ -1,206 +0,0 @@
>-///** @file
>-//
>-//  Contains low level routines for the Virtual Machine implementation
>-//  on an Itanium-based platform.
>-//
>-//  Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
>-//  This program and the accompanying materials
>-//  are licensed and made available under the terms and conditions of the
>BSD License
>-//  which accompanies this distribution.  The full text of the license may be
>found at
>-//  http://opensource.org/licenses/bsd-license.php
>-//
>-//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
>BASIS,
>-//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-//
>-//**/
>-
>-.file  "EbcLowLevel.s"
>-
>-#define PROCEDURE_ENTRY(name)   .##text;            \
>-                                .##type name, @function;    \
>-                                .##proc name;           \
>-name::
>-
>-#define PROCEDURE_EXIT(name)    .##endp name
>-
>-// Note: use of NESTED_SETUP requires number of locals (l) >= 3
>-
>-#define NESTED_SETUP(i,l,o,r) \
>-         alloc loc1=ar##.##pfs,i,l,o,r ;\
>-         mov loc0=b0
>-
>-#define NESTED_RETURN \
>-         mov b0=loc0 ;\
>-         mov ar##.##pfs=loc1 ;;\
>-         br##.##ret##.##dpnt  b0;;
>-
>-.type CopyMem, @function;
>-
>-//-----------------------------------------------------------------------------
>-//++
>-// EbcAsmLLCALLEX
>-//
>-//  Implements the low level EBC CALLEX instruction. Sets up the
>-//  stack pointer, does the spill of function arguments, and
>-//  calls the native function. On return it restores the original
>-//  stack pointer and returns to the caller.
>-//
>-// Arguments :
>-//
>-// On Entry :
>-//    in0 = Address of native code to call
>-//    in1 = New stack pointer
>-//
>-// Return Value:
>-//
>-// As per static calling conventions.
>-//
>-//--
>-//---------------------------------------------------------------------------
>-;// void EbcAsmLLCALLEX (UINTN FunctionAddr, UINTN EbcStackPointer)
>-PROCEDURE_ENTRY(EbcAsmLLCALLEX)
>-  NESTED_SETUP (2,6,8,0)
>-
>-  // NESTED_SETUP uses loc0 and loc1 for context save
>-
>-  //
>-  // Save a copy of the EBC VM stack pointer
>-  //
>-  mov r8 = in1;;
>-
>-  //
>-  // Copy stack arguments from EBC stack into registers.
>-  // Assume worst case and copy 8.
>-  //
>-  ld8   out0 = [r8], 8;;
>-  ld8   out1 = [r8], 8;;
>-  ld8   out2 = [r8], 8;;
>-  ld8   out3 = [r8], 8;;
>-  ld8   out4 = [r8], 8;;
>-  ld8   out5 = [r8], 8;;
>-  ld8   out6 = [r8], 8;;
>-  ld8   out7 = [r8], 8;;
>-
>-  //
>-  // Save the original stack pointer
>-  //
>-  mov   loc2 = r12;
>-
>-  //
>-  // Save the gp
>-  //
>-  or    loc3 = r1, r0
>-
>-  //
>-  // Set the new aligned stack pointer. Reserve space for the required
>-  // 16-bytes of scratch area as well.
>-  //
>-  add  r12 = 48, in1
>-
>-  //
>-  // Now call the function. Load up the function address from the descriptor
>-  // pointed to by in0. Then get the gp from the descriptor at the following
>-  // address in the descriptor.
>-  //
>-  ld8   r31 = [in0], 8;;
>-  ld8   r30 = [in0];;
>-  mov   b1 = r31
>-  mov   r1 = r30
>-  (p0) br.call.dptk.many b0 = b1;;
>-
>-  //
>-  // Restore the original stack pointer and gp
>-  //
>-  mov   r12 = loc2
>-  or    r1 = loc3, r0
>-
>-  //
>-  // Now return
>-  //
>-  NESTED_RETURN
>-
>-PROCEDURE_EXIT(EbcAsmLLCALLEX)
>-
>-//-----------------------------------------------------------------------------
>-//++
>-// EbcLLCALLEXNative
>-//
>-//  This function is called to execute an EBC CALLEX instruction.
>-//  This instruction requires that we thunk out to external native
>-//  code. On return, we restore the stack pointer to its original location.
>-//  Destroys no working registers.  For IPF, at least 8 register slots
>-//  must be allocated on the stack frame to support any number of
>-//  arguments beiung passed to the external native function.  The
>-//  size of the stack frame is FramePtr - EbcSp.  If this size is less
>-//  than 64-bytes, the amount of stack frame allocated is rounded up
>-//  to 64-bytes
>-//
>-// Arguments On Entry :
>-//    in0 = CallAddr     The function address.
>-//    in1 = EbcSp        The new EBC stack pointer.
>-//    in2 = FramePtr     The frame pointer.
>-//
>-// Return Value:
>-//    None
>-//
>-// C Function Prototype:
>-//    VOID
>-//    EFIAPI
>-//    EbcLLCALLEXNative (
>-//      IN UINTN        CallAddr,
>-//      IN UINTN        EbcSp,
>-//      IN VOID         *FramePtr
>-//      );
>-//--
>-//---------------------------------------------------------------------------
>-
>-PROCEDURE_ENTRY(EbcLLCALLEXNative)
>-  NESTED_SETUP (3,6,3,0)
>-
>-  mov   loc2 = in2;;              // loc2 = in2 = FramePtr
>-  mov   loc3 = in1;;              // loc3 = in1 = EbcSp
>-  sub   loc2 = loc2, loc3;;       // loc2 = loc2 - loc3 = FramePtr - EbcSp
>-  mov   out2 = loc2;;             // out2 = loc2 = FramePtr - EbcSp
>-  mov   loc4 = 0x40;;             // loc4 = 0x40
>-  cmp.leu p6  = out2, loc4;;      // IF out2 < loc4 THEN P6=1 ELSE P6=0; IF
>(FramePtr - EbcSp) < 0x40 THEN P6 = 1 ELSE P6=0
>-  (p6) mov   loc2 = loc4;;        // IF P6==1 THEN loc2 = loc4 = 0x40
>-  mov   loc4 = r12;;              // save sp
>-  or    loc5 = r1, r0             // save gp
>-
>-  sub   r12 = r12, loc2;;         // sp = sp - loc2 = sp - MAX (0x40, FramePtr - EbcSp)
>-
>-  and   r12 = -0x10, r12          // Round sp down to the nearest 16-byte
>boundary
>-  mov   out1 = in1;;              // out1 = EbcSp
>-  mov   out0 = r12;;              // out0 = sp
>-  adds  r12 = -0x8, r12
>-  (p0) br.call.dptk.many b0 = CopyMem;;      // CopyMem (sp, EbcSp,
>(FramePtr - EbcSp))
>-  adds  r12 = 0x8, r12
>-
>-  mov   out0 = in0;;              // out0 = CallAddr
>-  mov   out1 = r12;;              // out1 = sp
>-  (p0) br.call.dptk.many b0 = EbcAsmLLCALLEX;;    // EbcAsmLLCALLEX
>(CallAddr, sp)
>-  mov   r12 = loc4;;              // restore sp
>-  or    r1 = loc5, r0             // restore gp
>-
>-  NESTED_RETURN
>-PROCEDURE_EXIT(EbcLLCALLEXNative)
>-
>-
>-//
>-// UINTN EbcLLGetEbcEntryPoint(VOID)
>-//
>-// Description:
>-//    Simply return, so that the caller retrieves the return register
>-//    contents (R8). That's where the thunk-to-ebc code stuffed the
>-//    EBC entry point.
>-//
>-PROCEDURE_ENTRY(EbcLLGetEbcEntryPoint)
>-    br.ret.sptk  b0 ;;
>-PROCEDURE_EXIT(EbcLLGetEbcEntryPoint)
>-
>-
>-
>-
>-
>-
>-
>diff --git a/MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.c
>b/MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.c
>deleted file mode 100644
>index f99348f181..0000000000
>--- a/MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.c
>+++ /dev/null
>@@ -1,884 +0,0 @@
>-/** @file
>-  This module contains EBC support routines that are customized based on
>-  the target processor.
>-
>-Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
>-This program and the accompanying materials
>-are licensed and made available under the terms and conditions of the BSD
>License
>-which accompanies this distribution.  The full text of the license may be
>found at
>-http://opensource.org/licenses/bsd-license.php
>-
>-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-
>-**/
>-
>-#include "EbcInt.h"
>-#include "EbcExecute.h"
>-#include "EbcSupport.h"
>-#include "EbcDebuggerHook.h"
>-
>-/**
>-  Given raw bytes of Itanium based code, format them into a bundle and
>-  write them out.
>-
>-  @param  MemPtr                 pointer to memory location to write the bundles
>-                                 to.
>-  @param  Template               5-bit template.
>-  @param  Slot0                  Instruction slot 0 data for the bundle.
>-  @param  Slot1                  Instruction slot 1 data for the bundle.
>-  @param  Slot2                  Instruction slot 2 data for the bundle.
>-
>-  @retval EFI_INVALID_PARAMETER  Pointer is not aligned
>-  @retval EFI_INVALID_PARAMETER  No more than 5 bits in template
>-  @retval EFI_INVALID_PARAMETER  More than 41 bits used in code
>-  @retval EFI_SUCCESS            All data is written.
>-
>-**/
>-EFI_STATUS
>-WriteBundle (
>-  IN    VOID    *MemPtr,
>-  IN    UINT8   Template,
>-  IN    UINT64  Slot0,
>-  IN    UINT64  Slot1,
>-  IN    UINT64  Slot2
>-  );
>-
>-/**
>-  Pushes a 64 bit unsigned value to the VM stack.
>-
>-  @param VmPtr  The pointer to current VM context.
>-  @param Arg    The value to be pushed.
>-
>-**/
>-VOID
>-PushU64 (
>-  IN VM_CONTEXT *VmPtr,
>-  IN UINT64     Arg
>-  )
>-{
>-  //
>-  // Advance the VM stack down, and then copy the argument to the stack.
>-  // Hope it's aligned.
>-  //
>-  VmPtr->Gpr[0] -= sizeof (UINT64);
>-  *(UINT64 *) VmPtr->Gpr[0] = Arg;
>-}
>-
>-/**
>-  Begin executing an EBC image. The address of the entry point is passed
>-  in via a processor register, so we'll need to make a call to get the
>-  value.
>-
>-  This is a thunk function. Microsoft x64 compiler only provide fast_call
>-  calling convention, so the first four arguments are passed by rcx, rdx,
>-  r8, and r9, while other arguments are passed in stack.
>-
>-  @param  Arg1                  The 1st argument.
>-  @param  ...                   The variable arguments list.
>-
>-  @return The value returned by the EBC application we're going to run.
>-
>-**/
>-UINT64
>-EFIAPI
>-EbcInterpret (
>-  UINT64      Arg1,
>-  ...
>-  )
>-{
>-  //
>-  // Create a new VM context on the stack
>-  //
>-  VM_CONTEXT  VmContext;
>-  UINTN       Addr;
>-  EFI_STATUS  Status;
>-  UINTN       StackIndex;
>-  VA_LIST     List;
>-  UINT64      Arg2;
>-  UINT64      Arg3;
>-  UINT64      Arg4;
>-  UINT64      Arg5;
>-  UINT64      Arg6;
>-  UINT64      Arg7;
>-  UINT64      Arg8;
>-  UINT64      Arg9;
>-  UINT64      Arg10;
>-  UINT64      Arg11;
>-  UINT64      Arg12;
>-  UINT64      Arg13;
>-  UINT64      Arg14;
>-  UINT64      Arg15;
>-  UINT64      Arg16;
>-  //
>-  // Get the EBC entry point from the processor register. Make sure you don't
>-  // call any functions before this or you could mess up the register the
>-  // entry point is passed in.
>-  //
>-  Addr = EbcLLGetEbcEntryPoint ();
>-  //
>-  // Need the args off the stack.
>-  //
>-  VA_START (List, Arg1);
>-  Arg2      = VA_ARG (List, UINT64);
>-  Arg3      = VA_ARG (List, UINT64);
>-  Arg4      = VA_ARG (List, UINT64);
>-  Arg5      = VA_ARG (List, UINT64);
>-  Arg6      = VA_ARG (List, UINT64);
>-  Arg7      = VA_ARG (List, UINT64);
>-  Arg8      = VA_ARG (List, UINT64);
>-  Arg9      = VA_ARG (List, UINT64);
>-  Arg10     = VA_ARG (List, UINT64);
>-  Arg11     = VA_ARG (List, UINT64);
>-  Arg12     = VA_ARG (List, UINT64);
>-  Arg13     = VA_ARG (List, UINT64);
>-  Arg14     = VA_ARG (List, UINT64);
>-  Arg15     = VA_ARG (List, UINT64);
>-  Arg16     = VA_ARG (List, UINT64);
>-  VA_END (List);
>-  //
>-  // Now clear out our context
>-  //
>-  ZeroMem ((VOID *) &VmContext, sizeof (VM_CONTEXT));
>-  //
>-  // Set the VM instruction pointer to the correct location in memory.
>-  //
>-  VmContext.Ip = (VMIP) Addr;
>-  //
>-  // Initialize the stack pointer for the EBC. Get the current system stack
>-  // pointer and adjust it down by the max needed for the interpreter.
>-  //
>-  //
>-  // NOTE: Eventually we should have the interpreter allocate memory
>-  //       for stack space which it will use during its execution. This
>-  //       would likely improve performance because the interpreter would
>-  //       no longer be required to test each memory access and adjust
>-  //       those reading from the stack gap.
>-  //
>-  // For IPF, the stack looks like (assuming 10 args passed)
>-  //   arg10
>-  //   arg9       (Bottom of high stack)
>-  //   [ stack gap for interpreter execution ]
>-  //   [ magic value for detection of stack corruption ]
>-  //   arg8       (Top of low stack)
>-  //   arg7....
>-  //   arg1
>-  //   [ 64-bit return address ]
>-  //   [ ebc stack ]
>-  // If the EBC accesses memory in the stack gap, then we assume that it's
>-  // actually trying to access args9 and greater. Therefore we need to
>-  // adjust memory accesses in this region to point above the stack gap.
>-  //
>-  //
>-  // Now adjust the EBC stack pointer down to leave a gap for interpreter
>-  // execution. Then stuff a magic value there.
>-  //
>-
>-  Status = GetEBCStack((EFI_HANDLE)(UINTN)-1, &VmContext.StackPool,
>&StackIndex);
>-  if (EFI_ERROR(Status)) {
>-    return Status;
>-  }
>-  VmContext.StackTop = (UINT8*)VmContext.StackPool +
>(STACK_REMAIN_SIZE);
>-  VmContext.Gpr[0] = (UINT64) ((UINT8*)VmContext.StackPool +
>STACK_POOL_SIZE);
>-  VmContext.HighStackBottom = (UINTN) VmContext.Gpr[0];
>-  VmContext.Gpr[0] -= sizeof (UINTN);
>-
>-
>-  PushU64 (&VmContext, (UINT64) VM_STACK_KEY_VALUE);
>-  VmContext.StackMagicPtr = (UINTN *) VmContext.Gpr[0];
>-  VmContext.LowStackTop   = (UINTN) VmContext.Gpr[0];
>-  //
>-  // Push the EBC arguments on the stack. Does not matter that they may not
>-  // all be valid.
>-  //
>-  PushU64 (&VmContext, Arg16);
>-  PushU64 (&VmContext, Arg15);
>-  PushU64 (&VmContext, Arg14);
>-  PushU64 (&VmContext, Arg13);
>-  PushU64 (&VmContext, Arg12);
>-  PushU64 (&VmContext, Arg11);
>-  PushU64 (&VmContext, Arg10);
>-  PushU64 (&VmContext, Arg9);
>-  PushU64 (&VmContext, Arg8);
>-  PushU64 (&VmContext, Arg7);
>-  PushU64 (&VmContext, Arg6);
>-  PushU64 (&VmContext, Arg5);
>-  PushU64 (&VmContext, Arg4);
>-  PushU64 (&VmContext, Arg3);
>-  PushU64 (&VmContext, Arg2);
>-  PushU64 (&VmContext, Arg1);
>-  //
>-  // Push a bogus return address on the EBC stack because the
>-  // interpreter expects one there. For stack alignment purposes on IPF,
>-  // EBC return addresses are always 16 bytes. Push a bogus value as well.
>-  //
>-  PushU64 (&VmContext, 0);
>-  PushU64 (&VmContext, 0xDEADBEEFDEADBEEF);
>-  VmContext.StackRetAddr = (UINT64) VmContext.Gpr[0];
>-
>-  //
>-  // Begin executing the EBC code
>-  //
>-  EbcDebuggerHookEbcInterpret (&VmContext);
>-  EbcExecute (&VmContext);
>-
>-  //
>-  // Return the value in Gpr[7] unless there was an error
>-  //
>-  ReturnEBCStack(StackIndex);
>-  return (UINT64) VmContext.Gpr[7];
>-}
>-
>-
>-/**
>-  Begin executing an EBC image. The address of the entry point is passed
>-  in via a processor register, so we'll need to make a call to get the
>-  value.
>-
>-  @param  ImageHandle      image handle for the EBC application we're
>executing
>-  @param  SystemTable      standard system table passed into an driver's entry
>-                           point
>-
>-  @return The value returned by the EBC application we're going to run.
>-
>-**/
>-UINT64
>-EFIAPI
>-ExecuteEbcImageEntryPoint (
>-  IN EFI_HANDLE           ImageHandle,
>-  IN EFI_SYSTEM_TABLE     *SystemTable
>-  )
>-{
>-  //
>-  // Create a new VM context on the stack
>-  //
>-  VM_CONTEXT  VmContext;
>-  UINTN       Addr;
>-  EFI_STATUS  Status;
>-  UINTN       StackIndex;
>-
>-  //
>-  // Get the EBC entry point from the processor register. Make sure you don't
>-  // call any functions before this or you could mess up the register the
>-  // entry point is passed in.
>-  //
>-  Addr = EbcLLGetEbcEntryPoint ();
>-
>-  //
>-  // Now clear out our context
>-  //
>-  ZeroMem ((VOID *) &VmContext, sizeof (VM_CONTEXT));
>-
>-  //
>-  // Save the image handle so we can track the thunks created for this image
>-  //
>-  VmContext.ImageHandle = ImageHandle;
>-  VmContext.SystemTable = SystemTable;
>-
>-  //
>-  // Set the VM instruction pointer to the correct location in memory.
>-  //
>-  VmContext.Ip = (VMIP) Addr;
>-
>-  //
>-  // Get the stack pointer. This is the bottom of the upper stack.
>-  //
>-
>-  Status = GetEBCStack(ImageHandle, &VmContext.StackPool, &StackIndex);
>-  if (EFI_ERROR(Status)) {
>-    return Status;
>-  }
>-  VmContext.StackTop = (UINT8*)VmContext.StackPool +
>(STACK_REMAIN_SIZE);
>-  VmContext.Gpr[0] = (UINT64) ((UINT8*)VmContext.StackPool +
>STACK_POOL_SIZE);
>-  VmContext.HighStackBottom = (UINTN) VmContext.Gpr[0];
>-  VmContext.Gpr[0] -= sizeof (UINTN);
>-
>-
>-  //
>-  // Allocate stack space for the interpreter. Then put a magic value
>-  // at the bottom so we can detect stack corruption.
>-  //
>-  PushU64 (&VmContext, (UINT64) VM_STACK_KEY_VALUE);
>-  VmContext.StackMagicPtr = (UINTN *) (UINTN) VmContext.Gpr[0];
>-
>-  //
>-  // When we thunk to external native code, we copy the last 8 qwords from
>-  // the EBC stack into the processor registers, and adjust the stack pointer
>-  // up. If the caller is not passing 8 parameters, then we've moved the
>-  // stack pointer up into the stack gap. If this happens, then the caller
>-  // can mess up the stack gap contents (in particular our magic value).
>-  // Therefore, leave another gap below the magic value. Pick 10 qwords
>down,
>-  // just as a starting point.
>-  //
>-  VmContext.Gpr[0] -= 10 * sizeof (UINT64);
>-
>-  //
>-  // Align the stack pointer such that after pushing the system table,
>-  // image handle, and return address on the stack, it's aligned on a 16-byte
>-  // boundary as required for IPF.
>-  //
>-  VmContext.Gpr[0] &= (INT64)~0x0f;
>-  VmContext.LowStackTop = (UINTN) VmContext.Gpr[0];
>-  //
>-  // Simply copy the image handle and system table onto the EBC stack.
>-  // Greatly simplifies things by not having to spill the args
>-  //
>-  PushU64 (&VmContext, (UINT64) SystemTable);
>-  PushU64 (&VmContext, (UINT64) ImageHandle);
>-
>-  //
>-  // Interpreter assumes 64-bit return address is pushed on the stack.
>-  // IPF does not do this so pad the stack accordingly. Also, a
>-  // "return address" is 16 bytes as required for IPF stack alignments.
>-  //
>-  PushU64 (&VmContext, (UINT64) 0);
>-  PushU64 (&VmContext, (UINT64) 0x1234567887654321);
>-  VmContext.StackRetAddr = (UINT64) VmContext.Gpr[0];
>-
>-  //
>-  // Begin executing the EBC code
>-  //
>-  EbcDebuggerHookExecuteEbcImageEntryPoint (&VmContext);
>-  EbcExecute (&VmContext);
>-
>-  //
>-  // Return the value in Gpr[7] unless there was an error
>-  //
>-  ReturnEBCStack(StackIndex);
>-  return (UINT64) VmContext.Gpr[7];
>-}
>-
>-
>-/**
>-  Create thunks for an EBC image entry point, or an EBC protocol service.
>-
>-  @param  ImageHandle           Image handle for the EBC image. If not null,
>then
>-                                we're creating a thunk for an image entry point.
>-  @param  EbcEntryPoint         Address of the EBC code that the thunk is to call
>-  @param  Thunk                 Returned thunk we create here
>-  @param  Flags                 Flags indicating options for creating the thunk
>-
>-  @retval EFI_SUCCESS           The thunk was created successfully.
>-  @retval EFI_INVALID_PARAMETER The parameter of EbcEntryPoint is not
>16-bit
>-                                aligned.
>-  @retval EFI_OUT_OF_RESOURCES  There is not enough memory to created
>the EBC
>-                                Thunk.
>-  @retval EFI_BUFFER_TOO_SMALL  EBC_THUNK_SIZE is not larger enough.
>-
>-**/
>-EFI_STATUS
>-EbcCreateThunks (
>-  IN EFI_HANDLE           ImageHandle,
>-  IN VOID                 *EbcEntryPoint,
>-  OUT VOID                **Thunk,
>-  IN  UINT32              Flags
>-  )
>-{
>-  UINT8       *Ptr;
>-  UINT8       *ThunkBase;
>-  UINT64      Addr;
>-  UINT64      Code[3];    // Code in a bundle
>-  UINT64      RegNum;     // register number for MOVL
>-  UINT64      BitI;       // bits of MOVL immediate data
>-  UINT64      BitIc;         // bits of MOVL immediate data
>-  UINT64      BitImm5c;      // bits of MOVL immediate data
>-  UINT64      BitImm9d;      // bits of MOVL immediate data
>-  UINT64      BitImm7b;      // bits of MOVL immediate data
>-  UINT64      Br;         // branch register for loading and jumping
>-  UINT64      *Data64Ptr;
>-  UINT32      ThunkSize;
>-  UINT32      Size;
>-
>-  //
>-  // Check alignment of pointer to EBC code, which must always be aligned
>-  // on a 2-byte boundary.
>-  //
>-  if ((UINT32) (UINTN) EbcEntryPoint & 0x01) {
>-    return EFI_INVALID_PARAMETER;
>-  }
>-  //
>-  // Allocate memory for the thunk. Make the (most likely incorrect)
>assumption
>-  // that the returned buffer is not aligned, so round up to the next
>-  // alignment size.
>-  //
>-  Size      = EBC_THUNK_SIZE + EBC_THUNK_ALIGNMENT - 1;
>-  ThunkSize = Size;
>-  Ptr = EbcAllocatePoolForThunk (Size);
>-
>-  if (Ptr == NULL) {
>-    return EFI_OUT_OF_RESOURCES;
>-  }
>-  //
>-  // Save the start address of the buffer.
>-  //
>-  ThunkBase = Ptr;
>-
>-  //
>-  // Make sure it's aligned for code execution. If not, then
>-  // round up.
>-  //
>-  if ((UINT32) (UINTN) Ptr & (EBC_THUNK_ALIGNMENT - 1)) {
>-    Ptr = (UINT8 *) (((UINTN) Ptr + (EBC_THUNK_ALIGNMENT - 1)) &~ (UINT64)
>(EBC_THUNK_ALIGNMENT - 1));
>-  }
>-  //
>-  // Return the pointer to the thunk to the caller to user as the
>-  // image entry point.
>-  //
>-  *Thunk = (VOID *) Ptr;
>-
>-  //
>-  // Clear out the thunk entry
>-  // ZeroMem(Ptr, Size);
>-  //
>-  // For IPF, when you do a call via a function pointer, the function pointer
>-  // actually points to a function descriptor which consists of a 64-bit
>-  // address of the function, followed by a 64-bit gp for the function being
>-  // called. See the the Software Conventions and Runtime Architecture
>Guide
>-  // for details.
>-  // So first off in our thunk, create a descriptor for our actual thunk code.
>-  // This means we need to create a pointer to the thunk code (which follows
>-  // the descriptor we're going to create), followed by the gp of the Vm
>-  // interpret function we're going to eventually execute.
>-  //
>-  Data64Ptr = (UINT64 *) Ptr;
>-
>-  //
>-  // Write the function's entry point (which is our thunk code that follows
>-  // this descriptor we're creating).
>-  //
>-  *Data64Ptr = (UINT64) (Data64Ptr + 2);
>-  //
>-  // Get the gp from the descriptor for EbcInterpret and stuff it in our thunk
>-  // descriptor.
>-  //
>-  *(Data64Ptr + 1) = *(UINT64 *) ((UINT64 *) (UINTN) EbcInterpret + 1);
>-  //
>-  // Advance our thunk data pointer past the descriptor. Since the
>-  // descriptor consists of 16 bytes, the pointer is still aligned for
>-  // IPF code execution (on 16-byte boundary).
>-  //
>-  Ptr += sizeof (UINT64) * 2;
>-
>-  //
>-  // *************************** MAGIC BUNDLE
>********************************
>-  //
>-  // Write magic code bundle for: movl r8 = 0xca112ebcca112ebc to help the
>VM
>-  // to recognize it is a thunk.
>-  //
>-  Addr = (UINT64) 0xCA112EBCCA112EBC;
>-
>-  //
>-  // Now generate the code bytes. First is nop.m 0x0
>-  //
>-  Code[0] = OPCODE_NOP;
>-
>-  //
>-  // Next is simply Addr[62:22] (41 bits) of the address
>-  //
>-  Code[1] = RShiftU64 (Addr, 22) & 0x1ffffffffff;
>-
>-  //
>-  // Extract bits from the address for insertion into the instruction
>-  // i = Addr[63:63]
>-  //
>-  BitI = RShiftU64 (Addr, 63) & 0x01;
>-  //
>-  // ic = Addr[21:21]
>-  //
>-  BitIc = RShiftU64 (Addr, 21) & 0x01;
>-  //
>-  // imm5c = Addr[20:16] for 5 bits
>-  //
>-  BitImm5c = RShiftU64 (Addr, 16) & 0x1F;
>-  //
>-  // imm9d = Addr[15:7] for 9 bits
>-  //
>-  BitImm9d = RShiftU64 (Addr, 7) & 0x1FF;
>-  //
>-  // imm7b = Addr[6:0] for 7 bits
>-  //
>-  BitImm7b = Addr & 0x7F;
>-
>-  //
>-  // The EBC entry point will be put into r8, so r8 can be used here
>-  // temporary. R8 is general register and is auto-serialized.
>-  //
>-  RegNum = 8;
>-
>-  //
>-  // Next is jumbled data, including opcode and rest of address
>-  //
>-  Code[2] = LShiftU64 (BitImm7b, 13);
>-  Code[2] = Code[2] | LShiftU64 (0x00, 20);   // vc
>-  Code[2] = Code[2] | LShiftU64 (BitIc, 21);
>-  Code[2] = Code[2] | LShiftU64 (BitImm5c, 22);
>-  Code[2] = Code[2] | LShiftU64 (BitImm9d, 27);
>-  Code[2] = Code[2] | LShiftU64 (BitI, 36);
>-  Code[2] = Code[2] | LShiftU64 ((UINT64)MOVL_OPCODE, 37);
>-  Code[2] = Code[2] | LShiftU64 ((RegNum & 0x7F), 6);
>-
>-  WriteBundle ((VOID *) Ptr, 0x05, Code[0], Code[1], Code[2]);
>-
>-  //
>-  // *************************** FIRST BUNDLE
>********************************
>-  //
>-  // Write code bundle for: movl r8 = EBC_ENTRY_POINT so we pass
>-  // the ebc entry point in to the interpreter function via a processor
>-  // register.
>-  // Note -- we could easily change this to pass in a pointer to a structure
>-  // that contained, among other things, the EBC image's entry point. But
>-  // for now pass it directly.
>-  //
>-  Ptr += 16;
>-  Addr = (UINT64) EbcEntryPoint;
>-
>-  //
>-  // Now generate the code bytes. First is nop.m 0x0
>-  //
>-  Code[0] = OPCODE_NOP;
>-
>-  //
>-  // Next is simply Addr[62:22] (41 bits) of the address
>-  //
>-  Code[1] = RShiftU64 (Addr, 22) & 0x1ffffffffff;
>-
>-  //
>-  // Extract bits from the address for insertion into the instruction
>-  // i = Addr[63:63]
>-  //
>-  BitI = RShiftU64 (Addr, 63) & 0x01;
>-  //
>-  // ic = Addr[21:21]
>-  //
>-  BitIc = RShiftU64 (Addr, 21) & 0x01;
>-  //
>-  // imm5c = Addr[20:16] for 5 bits
>-  //
>-  BitImm5c = RShiftU64 (Addr, 16) & 0x1F;
>-  //
>-  // imm9d = Addr[15:7] for 9 bits
>-  //
>-  BitImm9d = RShiftU64 (Addr, 7) & 0x1FF;
>-  //
>-  // imm7b = Addr[6:0] for 7 bits
>-  //
>-  BitImm7b = Addr & 0x7F;
>-
>-  //
>-  // Put the EBC entry point in r8, which is the location of the return value
>-  // for functions.
>-  //
>-  RegNum = 8;
>-
>-  //
>-  // Next is jumbled data, including opcode and rest of address
>-  //
>-  Code[2] = LShiftU64 (BitImm7b, 13);
>-  Code[2] = Code[2] | LShiftU64 (0x00, 20);   // vc
>-  Code[2] = Code[2] | LShiftU64 (BitIc, 21);
>-  Code[2] = Code[2] | LShiftU64 (BitImm5c, 22);
>-  Code[2] = Code[2] | LShiftU64 (BitImm9d, 27);
>-  Code[2] = Code[2] | LShiftU64 (BitI, 36);
>-  Code[2] = Code[2] | LShiftU64 ((UINT64)MOVL_OPCODE, 37);
>-  Code[2] = Code[2] | LShiftU64 ((RegNum & 0x7F), 6);
>-
>-  WriteBundle ((VOID *) Ptr, 0x05, Code[0], Code[1], Code[2]);
>-
>-  //
>-  // *************************** NEXT BUNDLE
>*********************************
>-  //
>-  // Write code bundle for:
>-  //   movl rx = offset_of(EbcInterpret|ExecuteEbcImageEntryPoint)
>-  //
>-  // Advance pointer to next bundle, then compute the offset from this
>bundle
>-  // to the address of the entry point of the interpreter.
>-  //
>-  Ptr += 16;
>-  if ((Flags & FLAG_THUNK_ENTRY_POINT) != 0) {
>-    Addr = (UINT64) ExecuteEbcImageEntryPoint;
>-  } else {
>-    Addr = (UINT64) EbcInterpret;
>-  }
>-  //
>-  // Indirection on Itanium-based systems
>-  //
>-  Addr = *(UINT64 *) Addr;
>-
>-  //
>-  // Now write the code to load the offset into a register
>-  //
>-  Code[0] = OPCODE_NOP;
>-
>-  //
>-  // Next is simply Addr[62:22] (41 bits) of the address
>-  //
>-  Code[1] = RShiftU64 (Addr, 22) & 0x1ffffffffff;
>-
>-  //
>-  // Extract bits from the address for insertion into the instruction
>-  // i = Addr[63:63]
>-  //
>-  BitI = RShiftU64 (Addr, 63) & 0x01;
>-  //
>-  // ic = Addr[21:21]
>-  //
>-  BitIc = RShiftU64 (Addr, 21) & 0x01;
>-  //
>-  // imm5c = Addr[20:16] for 5 bits
>-  //
>-  BitImm5c = RShiftU64 (Addr, 16) & 0x1F;
>-  //
>-  // imm9d = Addr[15:7] for 9 bits
>-  //
>-  BitImm9d = RShiftU64 (Addr, 7) & 0x1FF;
>-  //
>-  // imm7b = Addr[6:0] for 7 bits
>-  //
>-  BitImm7b = Addr & 0x7F;
>-
>-  //
>-  // Put it in r31, a scratch register
>-  //
>-  RegNum = 31;
>-
>-  //
>-  // Next is jumbled data, including opcode and rest of address
>-  //
>-  Code[2] =   LShiftU64(BitImm7b, 13);
>-  Code[2] = Code[2] | LShiftU64 (0x00, 20);   // vc
>-  Code[2] = Code[2] | LShiftU64 (BitIc, 21);
>-  Code[2] = Code[2] | LShiftU64 (BitImm5c, 22);
>-  Code[2] = Code[2] | LShiftU64 (BitImm9d, 27);
>-  Code[2] = Code[2] | LShiftU64 (BitI, 36);
>-  Code[2] = Code[2] | LShiftU64 ((UINT64)MOVL_OPCODE, 37);
>-  Code[2] = Code[2] | LShiftU64 ((RegNum & 0x7F), 6);
>-
>-  WriteBundle ((VOID *) Ptr, 0x05, Code[0], Code[1], Code[2]);
>-
>-  //
>-  // *************************** NEXT BUNDLE
>*********************************
>-  //
>-  // Load branch register with EbcInterpret() function offset from the bundle
>-  // address: mov b6 = RegNum
>-  //
>-  // See volume 3 page 4-29 of the Arch. Software Developer's Manual.
>-  //
>-  // Advance pointer to next bundle
>-  //
>-  Ptr += 16;
>-  Code[0] = OPCODE_NOP;
>-  Code[1] = OPCODE_NOP;
>-  Code[2] = OPCODE_MOV_BX_RX;
>-
>-  //
>-  // Pick a branch register to use. Then fill in the bits for the branch
>-  // register and user register (same user register as previous bundle).
>-  //
>-  Br = 6;
>-  Code[2] |= LShiftU64 (Br, 6);
>-  Code[2] |= LShiftU64 (RegNum, 13);
>-  WriteBundle ((VOID *) Ptr, 0x0d, Code[0], Code[1], Code[2]);
>-
>-  //
>-  // *************************** NEXT BUNDLE
>*********************************
>-  //
>-  // Now do the branch:  (p0) br.cond.sptk.few b6
>-  //
>-  // Advance pointer to next bundle.
>-  // Fill in the bits for the branch register (same reg as previous bundle)
>-  //
>-  Ptr += 16;
>-  Code[0] = OPCODE_NOP;
>-  Code[1] = OPCODE_NOP;
>-  Code[2] = OPCODE_BR_COND_SPTK_FEW;
>-  Code[2] |= LShiftU64 (Br, 13);
>-  WriteBundle ((VOID *) Ptr, 0x1d, Code[0], Code[1], Code[2]);
>-
>-  //
>-  // Add the thunk to our list of allocated thunks so we can do some cleanup
>-  // when the image is unloaded. Do this last since the Add function flushes
>-  // the instruction cache for us.
>-  //
>-  EbcAddImageThunk (ImageHandle, (VOID *) ThunkBase, ThunkSize);
>-
>-  //
>-  // Done
>-  //
>-  return EFI_SUCCESS;
>-}
>-
>-
>-/**
>-  Given raw bytes of Itanium based code, format them into a bundle and
>-  write them out.
>-
>-  @param  MemPtr                 pointer to memory location to write the bundles
>-                                 to.
>-  @param  Template               5-bit template.
>-  @param  Slot0                  Instruction slot 0 data for the bundle.
>-  @param  Slot1                  Instruction slot 1 data for the bundle.
>-  @param  Slot2                  Instruction slot 2 data for the bundle.
>-
>-  @retval EFI_INVALID_PARAMETER  Pointer is not aligned
>-  @retval EFI_INVALID_PARAMETER  No more than 5 bits in template
>-  @retval EFI_INVALID_PARAMETER  More than 41 bits used in code
>-  @retval EFI_SUCCESS            All data is written.
>-
>-**/
>-EFI_STATUS
>-WriteBundle (
>-  IN    VOID    *MemPtr,
>-  IN    UINT8   Template,
>-  IN    UINT64  Slot0,
>-  IN    UINT64  Slot1,
>-  IN    UINT64  Slot2
>-  )
>-{
>-  UINT8   *BPtr;
>-  UINT32  Index;
>-  UINT64  Low64;
>-  UINT64  High64;
>-
>-  //
>-  // Verify pointer is aligned
>-  //
>-  if ((UINT64) MemPtr & 0xF) {
>-    return EFI_INVALID_PARAMETER;
>-  }
>-  //
>-  // Verify no more than 5 bits in template
>-  //
>-  if ((Template &~0x1F) != 0) {
>-    return EFI_INVALID_PARAMETER;
>-  }
>-  //
>-  // Verify max of 41 bits used in code
>-  //
>-  if (((Slot0 | Slot1 | Slot2) &~0x1ffffffffff) != 0) {
>-    return EFI_INVALID_PARAMETER;
>-  }
>-
>-  Low64   = LShiftU64 (Slot1, 46);
>-  Low64   = Low64 | LShiftU64 (Slot0, 5) | Template;
>-
>-  High64  = RShiftU64 (Slot1, 18);
>-  High64  = High64 | LShiftU64 (Slot2, 23);
>-
>-  //
>-  // Now write it all out
>-  //
>-  BPtr = (UINT8 *) MemPtr;
>-  for (Index = 0; Index < 8; Index++) {
>-    *BPtr = (UINT8) Low64;
>-    Low64 = RShiftU64 (Low64, 8);
>-    BPtr++;
>-  }
>-
>-  for (Index = 0; Index < 8; Index++) {
>-    *BPtr   = (UINT8) High64;
>-    High64  = RShiftU64 (High64, 8);
>-    BPtr++;
>-  }
>-
>-  return EFI_SUCCESS;
>-}
>-
>-
>-/**
>-  This function is called to execute an EBC CALLEX instruction.
>-  The function check the callee's content to see whether it is common native
>-  code or a thunk to another piece of EBC code.
>-  If the callee is common native code, use EbcLLCAllEXASM to manipulate,
>-  otherwise, set the VM->IP to target EBC code directly to avoid another VM
>-  be startup which cost time and stack space.
>-
>-  @param  VmPtr            Pointer to a VM context.
>-  @param  FuncAddr         Callee's address
>-  @param  NewStackPointer  New stack pointer after the call
>-  @param  FramePtr         New frame pointer after the call
>-  @param  Size             The size of call instruction
>-
>-**/
>-VOID
>-EbcLLCALLEX (
>-  IN VM_CONTEXT   *VmPtr,
>-  IN UINTN        FuncAddr,
>-  IN UINTN        NewStackPointer,
>-  IN VOID         *FramePtr,
>-  IN UINT8        Size
>-  )
>-{
>-  UINTN    IsThunk;
>-  UINTN    TargetEbcAddr;
>-  UINTN    CodeOne18;
>-  UINTN    CodeOne23;
>-  UINTN    CodeTwoI;
>-  UINTN    CodeTwoIc;
>-  UINTN    CodeTwo7b;
>-  UINTN    CodeTwo5c;
>-  UINTN    CodeTwo9d;
>-  UINTN    CalleeAddr;
>-
>-  IsThunk       = 1;
>-  TargetEbcAddr = 0;
>-
>-  //
>-  // FuncAddr points to the descriptor of the target instructions.
>-  //
>-  CalleeAddr = *((UINT64 *)FuncAddr);
>-
>-  //
>-  // Processor specific code to check whether the callee is a thunk to EBC.
>-  //
>-  if (*((UINT64 *)CalleeAddr) != 0xBCCA000100000005) {
>-    IsThunk = 0;
>-    goto Action;
>-  }
>-  if (*((UINT64 *)CalleeAddr + 1) != 0x697623C1004A112E)  {
>-    IsThunk = 0;
>-    goto Action;
>-  }
>-
>-  CodeOne18 = RShiftU64 (*((UINT64 *)CalleeAddr + 2), 46) & 0x3FFFF;
>-  CodeOne23 = (*((UINT64 *)CalleeAddr + 3)) & 0x7FFFFF;
>-  CodeTwoI  = RShiftU64 (*((UINT64 *)CalleeAddr + 3), 59) & 0x1;
>-  CodeTwoIc = RShiftU64 (*((UINT64 *)CalleeAddr + 3), 44) & 0x1;
>-  CodeTwo7b = RShiftU64 (*((UINT64 *)CalleeAddr + 3), 36) & 0x7F;
>-  CodeTwo5c = RShiftU64 (*((UINT64 *)CalleeAddr + 3), 45) & 0x1F;
>-  CodeTwo9d = RShiftU64 (*((UINT64 *)CalleeAddr + 3), 50) & 0x1FF;
>-
>-  TargetEbcAddr = CodeTwo7b;
>-  TargetEbcAddr = TargetEbcAddr | LShiftU64 (CodeTwo9d, 7);
>-  TargetEbcAddr = TargetEbcAddr | LShiftU64 (CodeTwo5c, 16);
>-  TargetEbcAddr = TargetEbcAddr | LShiftU64 (CodeTwoIc, 21);
>-  TargetEbcAddr = TargetEbcAddr | LShiftU64 (CodeOne18, 22);
>-  TargetEbcAddr = TargetEbcAddr | LShiftU64 (CodeOne23, 40);
>-  TargetEbcAddr = TargetEbcAddr | LShiftU64 (CodeTwoI, 63);
>-
>-Action:
>-  if (IsThunk == 1){
>-    //
>-    // The callee is a thunk to EBC, adjust the stack pointer down 16 bytes and
>-    // put our return address and frame pointer on the VM stack.
>-    // Then set the VM's IP to new EBC code.
>-    //
>-    VmPtr->Gpr[0] -= 8;
>-    VmWriteMemN (VmPtr, (UINTN) VmPtr->Gpr[0], (UINTN) FramePtr);
>-    VmPtr->FramePtr = (VOID *) (UINTN) VmPtr->Gpr[0];
>-    VmPtr->Gpr[0] -= 8;
>-    VmWriteMem64 (VmPtr, (UINTN) VmPtr->Gpr[0], (UINT64) (VmPtr->Ip +
>Size));
>-
>-    VmPtr->Ip = (VMIP) (UINTN) TargetEbcAddr;
>-  } else {
>-    //
>-    // The callee is not a thunk to EBC, call native code,
>-    // and get return value.
>-    //
>-    VmPtr->Gpr[7] = EbcLLCALLEXNative (FuncAddr, NewStackPointer,
>FramePtr);
>-
>-    //
>-    // Advance the IP.
>-    //
>-    VmPtr->Ip += Size;
>-  }
>-}
>diff --git a/MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.h
>b/MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.h
>deleted file mode 100644
>index d90ea82ad0..0000000000
>--- a/MdeModulePkg/Universal/EbcDxe/Ipf/EbcSupport.h
>+++ /dev/null
>@@ -1,41 +0,0 @@
>-/** @file
>-  Definition of EBC Support function.
>-
>-Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
>-This program and the accompanying materials
>-are licensed and made available under the terms and conditions of the BSD
>License
>-which accompanies this distribution.  The full text of the license may be
>found at
>-http://opensource.org/licenses/bsd-license.php
>-
>-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER
>EXPRESS OR IMPLIED.
>-
>-**/
>-
>-#ifndef _IPF_EBC_SUPPORT_H_
>-#define _IPF_EBC_SUPPORT_H_
>-
>-#define VM_STACK_SIZE   (1024 * 32)
>-
>-#define EBC_THUNK_SIZE  128
>-#define STACK_REMAIN_SIZE (1024 * 4)
>-
>-//
>-// For code execution, thunks must be aligned on 16-byte boundary
>-//
>-#define EBC_THUNK_ALIGNMENT 16
>-
>-//
>-// Opcodes for IPF instructions. We'll need to hand-create thunk code
>(stuffing
>-// bits) to insert a jump to the interpreter.
>-//
>-#define OPCODE_NOP              (UINT64) 0x00008000000
>-#define OPCODE_BR_COND_SPTK_FEW (UINT64) 0x00100000000
>-#define OPCODE_MOV_BX_RX        (UINT64) 0x00E00100000
>-
>-//
>-// Opcode for MOVL instruction
>-//
>-#define MOVL_OPCODE 0x06
>-
>-#endif
>diff --git a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf
>b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf
>index 5eb7ef924a..066e0bbae7 100644
>--- a/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf
>+++ b/MdeModulePkg/Universal/EsrtDxe/EsrtDxe.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.i
>nf
>b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.i
>nf
>index 30a765c807..20396260ce 100644
>---
>a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.i
>nf
>+++
>b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.i
>nf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
>b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
>index 12b26604e2..b5cab4bf55 100644
>---
>a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
>+++
>b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
>@@ -3,7 +3,7 @@
> #
> # This module installs gEdkiiFaultTolerantWriteGuid PPI to inform the check
>for FTW last write data has been done.
> #
>-# Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/FileExplorerDxe/FileExplorerDxe.inf
>b/MdeModulePkg/Universal/FileExplorerDxe/FileExplorerDxe.inf
>index 8f8b8b4294..e00e581d63 100644
>--- a/MdeModulePkg/Universal/FileExplorerDxe/FileExplorerDxe.inf
>+++ b/MdeModulePkg/Universal/FileExplorerDxe/FileExplorerDxe.inf
>@@ -27,7 +27,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
>b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
>index 0593ff85bb..44bdf42344 100644
>--- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
>+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSampleDx
>e.inf
>b/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSampleDx
>e.inf
>index 7287ba5050..b925508434 100644
>---
>a/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSampleDx
>e.inf
>+++
>b/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSampleDx
>e.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf
>b/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf
>index 3a34cf210f..c7c2e0d03d 100644
>--- a/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf
>+++ b/MdeModulePkg/Universal/LegacyRegion2Dxe/LegacyRegion2Dxe.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/LoadFileOnFv2/LoadFileOnFv2.inf
>b/MdeModulePkg/Universal/LoadFileOnFv2/LoadFileOnFv2.inf
>index a4ded94e7f..4f14b3a307 100644
>--- a/MdeModulePkg/Universal/LoadFileOnFv2/LoadFileOnFv2.inf
>+++ b/MdeModulePkg/Universal/LoadFileOnFv2/LoadFileOnFv2.inf
>@@ -5,7 +5,7 @@
> #  version of the module only supports loading of files for the purpose of
> #  booting from the file.
> #
>-#  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/MemoryTest/GenericMemoryTestDxe/Generic
>MemoryTestDxe.inf
>b/MdeModulePkg/Universal/MemoryTest/GenericMemoryTestDxe/Generic
>MemoryTestDxe.inf
>index 975dc4cd3a..85123ad223 100644
>---
>a/MdeModulePkg/Universal/MemoryTest/GenericMemoryTestDxe/Generic
>MemoryTestDxe.inf
>+++
>b/MdeModulePkg/Universal/MemoryTest/GenericMemoryTestDxe/Generic
>MemoryTestDxe.inf
>@@ -1,7 +1,7 @@
> ## @file
> # This driver first constructs the non-tested memory range, then performs
>the R/W/V memory test.
> #
>-# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> # This program and the accompanying materials are
> # licensed and made available under the terms and conditions of the BSD
>License
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemory
>TestDxe.inf
>b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemor
>yTestDxe.inf
>index a0d2ce7a89..beb18bfce1 100644
>---
>a/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemory
>TestDxe.inf
>+++
>b/MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemor
>yTestDxe.inf
>@@ -24,7 +24,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/Metronome/Metronome.inf
>b/MdeModulePkg/Universal/Metronome/Metronome.inf
>index 3a633ed753..88a28afd0b 100644
>--- a/MdeModulePkg/Universal/Metronome/Metronome.inf
>+++ b/MdeModulePkg/Universal/Metronome/Metronome.inf
>@@ -34,7 +34,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Packages]
>diff --git
>a/MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCou
>nterRuntimeDxe.inf
>b/MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCou
>nterRuntimeDxe.inf
>index e44e268014..c73ec42994 100644
>---
>a/MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCou
>nterRuntimeDxe.inf
>+++
>b/MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCou
>nterRuntimeDxe.inf
>@@ -1,7 +1,7 @@
> ## @file
> # This module produces the UEFI boot service GetNextMonotonicCount()
>and runtime service GetNextHighMonotonicCount().
> #
>-# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>b/MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>index 85f7982971..29f0c43592 100644
>--- a/MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>+++ b/MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gArpDriverBinding
> #  COMPONENT_NAME                =  gArpComponentName
>diff --git a/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>b/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>index e41bddb017..2d1008f894 100644
>--- a/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>+++ b/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>@@ -29,7 +29,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gDhcp4DriverBinding
> #  COMPONENT_NAME                =  gDhcp4ComponentName
>diff --git a/MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>b/MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>index 8a1f8baf79..233339d7d3 100644
>--- a/MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>+++ b/MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  This module produces Deferred Procedure Call Protocol.
> #
>-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution.  The full text of the license may be
>found at
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES      = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES      = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
>b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
>index dce39681d1..c2b9bd2c6f 100644
>--- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
>+++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
>@@ -30,7 +30,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gIScsiDriverBinding
> #  COMPONENT_NAME                =  gIScsiComponentName
>diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>index b2b934a8c3..fb15c3fffa 100644
>--- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>+++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>@@ -31,7 +31,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gIp4DriverBinding
> #  COMPONENT_NAME                =  gIp4ComponentName
>diff --git a/MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>b/MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>index 090ab732b9..d3f74e199c 100644
>--- a/MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>+++ b/MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gMnpDriverBinding
> #  COMPONENT_NAME                =  gMnpComponentName
>diff --git a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>index ad9e7abce6..1e8b12d500 100644
>--- a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>+++ b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gMtftp4DriverBinding
> #  COMPONENT_NAME                =  gMtftp4ComponentName
>diff --git a/MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
>b/MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
>index 021d45d44d..04ce74670c 100644
>--- a/MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
>+++ b/MdeModulePkg/Universal/Network/SnpDxe/SnpDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  mSimpleNetworkDriverBinding
> #  COMPONENT_NAME                =  gSimpleNetworkComponentName
>diff --git a/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
>b/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
>index 5021cbc4b8..11a6425471 100644
>--- a/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
>+++ b/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  mTcp4DriverBinding
> #  COMPONENT_NAME                =  gTcp4ComponentName
>diff --git a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>index 69b6d5d943..7b7b6150d2 100644
>--- a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>+++ b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
> #  DRIVER_BINDING                =  gUdp4DriverBinding
> #  COMPONENT_NAME                =  gUdp4ComponentName
>diff --git
>a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
>b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
>index 121d68ed26..de2c6ad72c 100644
>--- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
>+++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
>@@ -32,7 +32,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF
>+#  VALID_ARCHITECTURES           = IA32 X64
> #
> #  DRIVER_BINDING                =  gPxeBcDriverBinding
> #  COMPONENT_NAME                =  gPxeBcComponentName
>diff --git
>a/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>b/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>index a36c57871e..b344e4b729 100644
>--- a/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>+++ b/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>@@ -4,7 +4,7 @@
> #  This module produces EFI HII Configuration Access Protocol to provide one
>way to
> #  configurate VALN setting
> #
>-#  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution. The full text of the license may be
>found at
>@@ -27,7 +27,7 @@
>
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
>b/MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
>index e6b3e0d920..93c451bbd4 100644
>--- a/MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
>+++ b/MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
>@@ -303,7 +303,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/PCD/Pei/Pcd.inf
>b/MdeModulePkg/Universal/PCD/Pei/Pcd.inf
>index c2a3ccbbc0..974a68c994 100644
>--- a/MdeModulePkg/Universal/PCD/Pei/Pcd.inf
>+++ b/MdeModulePkg/Universal/PCD/Pei/Pcd.inf
>@@ -302,7 +302,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/PcatSingleSegmentPciCfg2Pei/PcatSingleSegme
>ntPciCfg2Pei.inf
>b/MdeModulePkg/Universal/PcatSingleSegmentPciCfg2Pei/PcatSingleSegme
>ntPciCfg2Pei.inf
>index 27bce7b7b7..748e0d7b29 100644
>---
>a/MdeModulePkg/Universal/PcatSingleSegmentPciCfg2Pei/PcatSingleSegme
>ntPciCfg2Pei.inf
>+++
>b/MdeModulePkg/Universal/PcatSingleSegmentPciCfg2Pei/PcatSingleSegme
>ntPciCfg2Pei.inf
>@@ -4,7 +4,7 @@
> #  It installs SingleSegmentPciConfiguration2 PPI to provide read, write and
>modify access to Pci configuration space in PEI phase.
> #  To follow PI specification, these services also support access to the
>unaligned Pci address.
> #
>-#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is for build only)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatformDriOverrideDx
>e.inf
>b/MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatformDriOverrideDx
>e.inf
>index 5bd9e44edd..aeaceb050e 100644
>---
>a/MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatformDriOverrideDx
>e.inf
>+++
>b/MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatformDriOverrideDx
>e.inf
>@@ -43,7 +43,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf
>b/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf
>index 19eef5a8a8..50b24e75fc 100644
>--- a/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf
>+++ b/MdeModulePkg/Universal/PrintDxe/PrintDxe.inf
>@@ -3,7 +3,7 @@
> #
> #  This driver produces Print2 protocols layered on top of the PrintLib from
>the MdePkg.
> #
>-#  Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution.  The full text of the license may be
>found at
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/PropertiesTableAttributesDxe/PropertiesTableA
>ttributesDxe.inf
>b/MdeModulePkg/Universal/PropertiesTableAttributesDxe/PropertiesTable
>AttributesDxe.inf
>index 3f699f6b5a..9b78f07f13 100644
>---
>a/MdeModulePkg/Universal/PropertiesTableAttributesDxe/PropertiesTableA
>ttributesDxe.inf
>+++
>b/MdeModulePkg/Universal/PropertiesTableAttributesDxe/PropertiesTable
>AttributesDxe.inf
>@@ -4,7 +4,7 @@
> # This module sets EFI_MEMORY_XP for attributes of EfiACPIMemoryNVS
>and EfiReservedMemoryType
> # in UEFI memory map, if and only of PropertiesTable is published and has
>BIT0 set.
> #
>-# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
>+# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.in
>f
>b/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.in
>f
>index d8a1490021..b35ec85b9b 100644
>---
>a/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.in
>f
>+++
>b/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.in
>f
>@@ -1,6 +1,7 @@
> ## @file
> #  EFI_REGULAR_EXPRESSION_PROTOCOL Implementation
> #
>+#  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
> #  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> #
> #  This program and the accompanying materials are licensed and made
>available
>@@ -74,12 +75,10 @@
>
> [BuildOptions]
>   # Override MSFT build option to remove /Oi and /GL
>-  MSFT:DEBUG_*_IA32_CC_FLAGS   == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm
>-  MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF
>-  MSFT:DEBUG_*_X64_CC_FLAGS    == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X
>-  MSFT:RELEASE_*_X64_CC_FLAGS  == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X
>-  MSFT:DEBUG_*_IPF_CC_FLAGS    == /nologo /c /WX /GS- /W4 /EHs-c- /GR-
>/Gy /Os /FIAutoGen.h /QIPF_fr32 /Zi /X
>-  MSFT:RELEASE_*_IPF_CC_FLAGS  == /nologo /c /WX /GS- /W4 /EHs-c- /GR-
>/Gy /Os /FIAutoGen.h /QIPF_fr32 /X
>+  MSFT:DEBUG_*_IA32_CC_FLAGS   == /nologo /c /WX /GS- /W4 /Gs32768
>/D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm
>+  MSFT:RELEASE_*_IA32_CC_FLAGS == /nologo /c /WX /GS- /W4 /Gs32768
>/D UNICODE /O1b2  /FIAutoGen.h /EHs-c- /GR- /GF
>+  MSFT:DEBUG_*_X64_CC_FLAGS    == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm /X
>+  MSFT:RELEASE_*_X64_CC_FLAGS  == /nologo /c /WX /GS- /W4 /Gs32768 /D
>UNICODE /O1b2s /FIAutoGen.h /EHs-c- /GR- /GF /Gy /X
>   INTEL:*_*_*_CC_FLAGS         =  /Oi-
>
>   # Oniguruma: potentially uninitialized local variable used
>diff --git
>a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCod
>eRouterPei.inf
>b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCod
>eRouterPei.inf
>index a3de382d00..ea53f32ff7 100644
>---
>a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCod
>eRouterPei.inf
>+++
>b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCod
>eRouterPei.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  Report Status Code Router PEIM which produces Report Stataus Code
>Handler PPI and Status Code PPI.
> #
>-#  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
> #
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is only for build)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is only for build)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportS
>tatusCodeRouterRuntimeDxe.inf
>b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportS
>tatusCodeRouterRuntimeDxe.inf
>index 9556260082..0671e895a8 100644
>---
>a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportS
>tatusCodeRouterRuntimeDxe.inf
>+++
>b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportS
>tatusCodeRouterRuntimeDxe.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/SectionExtractionPei/SectionExtractionPei.inf
>b/MdeModulePkg/Universal/SectionExtractionPei/SectionExtractionPei.inf
>index 91800cec01..ba6bd9584b 100644
>--- a/MdeModulePkg/Universal/SectionExtractionPei/SectionExtractionPei.inf
>+++
>b/MdeModulePkg/Universal/SectionExtractionPei/SectionExtractionPei.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
>b/MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
>index c5553a38e0..5bddc885b5 100644
>--- a/MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
>+++ b/MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
>@@ -1,7 +1,7 @@
> ## @file
> #  This driver produces security2 and security architectural protocol based on
>SecurityManagementLib.
> #
>-#  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution. The full text of the license may be
>found at
>@@ -24,7 +24,7 @@
>
>
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>index 4f847d4061..e7618350dc 100644
>--- a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>+++ b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
>@@ -28,7 +28,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
>b/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
>index 0e623aeb41..e0c89307a3 100644
>--- a/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
>+++ b/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurement
>Dxe.inf
>b/MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurement
>Dxe.inf
>index 879bc21481..698a64c3b1 100644
>---
>a/MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurement
>Dxe.inf
>+++
>b/MdeModulePkg/Universal/SmbiosMeasurementDxe/SmbiosMeasurement
>Dxe.inf
>@@ -35,7 +35,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC ARM AARCH64
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.i
>nf
>b/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.i
>nf
>index 5d96fe3041..60deee3826 100644
>---
>a/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.i
>nf
>+++
>b/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.i
>nf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is only for build)
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC (EBC is only for build)
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHa
>ndlerRuntimeDxe.inf
>b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHa
>ndlerRuntimeDxe.inf
>index 928ae15b6f..f04d40ef28 100644
>---
>a/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHa
>ndlerRuntimeDxe.inf
>+++
>b/MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHa
>ndlerRuntimeDxe.inf
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git a/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf
>b/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf
>index 07858857e3..a5d91f6dff 100644
>--- a/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf
>+++ b/MdeModulePkg/Universal/TimestampDxe/TimestampDxe.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Packages]
>diff --git a/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
>b/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
>index 72a440dcd1..5095bfd8b8 100644
>--- a/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
>+++ b/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
>@@ -3,7 +3,7 @@
> #
> #  This module implements ReadOnly Variable Services required by PEIM and
>installs PEI ReadOnly Varaiable2 PPI.
> #
>-#  Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
>+#  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> #  This program and the accompanying materials
> #  are licensed and made available under the terms and conditions of the BSD
>License
> #  which accompanies this distribution. The full text of the license may be
>found at
>@@ -26,7 +26,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Sources]
>diff --git
>a/MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
>b/MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
>index cd2daf3033..acf12144f3 100644
>--- a/MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
>+++ b/MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
>@@ -25,7 +25,7 @@
> #
> # The following information is for reference only and not required by the
>build tools.
> #
>-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>+#  VALID_ARCHITECTURES           = IA32 X64 EBC
> #
>
> [Packages]
>--
>2.16.2.windows.1



  reply	other threads:[~2018-07-10  7:09 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-09  6:03 [PATCH V2 1/4] CryptoPkg: Removing ipf which is no longer supported from edk2 Chen A Chen
2018-07-09  6:03 ` [PATCH V2 2/4] MdeModulePkg: " Chen A Chen
2018-07-09  9:45   ` Zeng, Star
2018-07-10  7:08     ` Gao, Liming [this message]
2018-07-09  6:03 ` [PATCH V2 3/4] MdePkg: " Chen A Chen
2018-07-09  6:03 ` [PATCH V2 4/4] UefiCpuPkg: " Chen A Chen
2018-07-09  6:13   ` Dong, Eric

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14E2B93C2@SHSMSX104.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox