2015-02-28 21:34:36 +01:00
|
|
|
#
|
2015-05-29 15:50:43 +02:00
|
|
|
# Copyright (c) 2011-2015, ARM Limited. All rights reserved.
|
2015-02-28 21:34:36 +01:00
|
|
|
# Copyright (c) 2014, Linaro Limited. All rights reserved.
|
2019-01-12 15:44:52 +01:00
|
|
|
# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
|
2015-02-28 21:34:36 +01:00
|
|
|
#
|
2019-04-04 01:03:23 +02:00
|
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
2015-02-28 21:34:36 +01:00
|
|
|
#
|
|
|
|
#
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# Defines Section - statements that will be processed to create a Makefile.
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
[Defines]
|
2015-05-29 15:50:43 +02:00
|
|
|
PLATFORM_NAME = ArmVirtXen
|
2015-02-28 21:34:36 +01:00
|
|
|
PLATFORM_GUID = d1c43be3-3373-4a06-86fb-d1cb3083a207
|
|
|
|
PLATFORM_VERSION = 0.1
|
|
|
|
DSC_SPECIFICATION = 0x00010005
|
2015-05-29 15:50:43 +02:00
|
|
|
OUTPUT_DIRECTORY = Build/ArmVirtXen-$(ARCH)
|
2015-12-17 18:11:33 +01:00
|
|
|
SUPPORTED_ARCHITECTURES = AARCH64|ARM
|
2017-12-06 12:35:15 +01:00
|
|
|
BUILD_TARGETS = DEBUG|RELEASE|NOOPT
|
2015-02-28 21:34:36 +01:00
|
|
|
SKUID_IDENTIFIER = DEFAULT
|
2015-05-29 15:50:43 +02:00
|
|
|
FLASH_DEFINITION = ArmVirtPkg/ArmVirtXen.fdf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
2015-05-29 15:50:43 +02:00
|
|
|
!include ArmVirtPkg/ArmVirt.dsc.inc
|
2015-02-28 21:34:36 +01:00
|
|
|
|
2021-03-12 06:13:55 +01:00
|
|
|
!include MdePkg/MdeLibs.dsc.inc
|
|
|
|
|
2015-02-28 21:34:36 +01:00
|
|
|
[LibraryClasses]
|
|
|
|
SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
|
2019-08-13 13:31:18 +02:00
|
|
|
RealTimeClockLib|OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.inf
|
2015-03-03 09:13:09 +01:00
|
|
|
XenHypercallLib|OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
2018-04-23 16:55:18 +02:00
|
|
|
ArmGenericTimerCounterLib|ArmVirtPkg/Library/XenArmGenericTimerVirtCounterLib/XenArmGenericTimerVirtCounterLib.inf
|
2016-09-05 12:48:17 +02:00
|
|
|
ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
|
2016-06-16 11:51:10 +02:00
|
|
|
ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
|
|
|
|
|
2015-02-28 21:34:36 +01:00
|
|
|
# Virtio Support
|
|
|
|
VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
|
|
|
|
VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf
|
|
|
|
|
2017-11-17 14:58:07 +01:00
|
|
|
ArmVirtMemInfoLib|ArmVirtPkg/Library/XenVirtMemInfoLib/XenVirtMemInfoLib.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
|
|
|
|
|
|
|
|
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
|
2017-11-30 21:28:23 +01:00
|
|
|
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
|
|
|
|
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
|
|
|
|
PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
|
2020-02-27 15:24:21 +01:00
|
|
|
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
|
2021-09-24 13:42:20 +02:00
|
|
|
TpmPlatformHierarchyLib|SecurityPkg/Library/PeiDxeTpmPlatformHierarchyLibNull/PeiDxeTpmPlatformHierarchyLib.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
[LibraryClasses.common.UEFI_DRIVER]
|
|
|
|
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
|
|
|
|
|
2020-06-08 13:07:54 +02:00
|
|
|
[BuildOptions]
|
ArmVirtPkg/PrePiUniCoreRelocatable CLANG38: work around build issues
The self-relocating PrePi module that is used by the ArmVirtQemuKernel
and ArmVirtXen targets runs the linker in PIE mode so that it emits
dynamic relocations into the final image in a way that permits the
module to relocate itself into place before calling into the C code.
When building these targets using the CLANG38 toolchain, we switch
from the BFD to the GOLD linker, which behaves a bit differently when
building PIE executables, and insists on emitting GOT indirected symbol
references throughout, which means a) that we end up with absolute
addresses (which need to be fixed up at load time) for no good reason,
and b) we have to add support for handling GOT entries to GenFw if we
want to convert them into PE/COFF.
So instead, let's emit a shared library. Since the ELF image only serves
as the input to GenFw, this does not lead to any loss of functionality,
although it does require the -Bsymbolic linker option to be added to
ensure that no symbol based dynamic relocations are emitted (which
would, e.g., permit lazy binding for shared libraries). So for all
other toolchains, the linker option changes are a no-op.
Then, we have to convince CLANG38/GOLD that there is no need to refer
to symbols via a GOT entry. This is done by forcing hidden visibility
for all symbols in all components that make up the PrePi SEC module:
this informs the linker that a symbol is never exported or preempted,
making it safe to refer to it directly from anywhere in the code,
rather than indirectly via a GOT entry.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Laszlo Ersek <lersek@redhat.com>
2018-12-11 13:01:10 +01:00
|
|
|
#
|
2020-06-08 13:07:54 +02:00
|
|
|
# We need to avoid jump tables in SEC modules, so that the PE/COFF
|
|
|
|
# self-relocation code itself is guaranteed to be position independent.
|
ArmVirtPkg/PrePiUniCoreRelocatable CLANG38: work around build issues
The self-relocating PrePi module that is used by the ArmVirtQemuKernel
and ArmVirtXen targets runs the linker in PIE mode so that it emits
dynamic relocations into the final image in a way that permits the
module to relocate itself into place before calling into the C code.
When building these targets using the CLANG38 toolchain, we switch
from the BFD to the GOLD linker, which behaves a bit differently when
building PIE executables, and insists on emitting GOT indirected symbol
references throughout, which means a) that we end up with absolute
addresses (which need to be fixed up at load time) for no good reason,
and b) we have to add support for handling GOT entries to GenFw if we
want to convert them into PE/COFF.
So instead, let's emit a shared library. Since the ELF image only serves
as the input to GenFw, this does not lead to any loss of functionality,
although it does require the -Bsymbolic linker option to be added to
ensure that no symbol based dynamic relocations are emitted (which
would, e.g., permit lazy binding for shared libraries). So for all
other toolchains, the linker option changes are a no-op.
Then, we have to convince CLANG38/GOLD that there is no need to refer
to symbols via a GOT entry. This is done by forcing hidden visibility
for all symbols in all components that make up the PrePi SEC module:
this informs the linker that a symbol is never exported or preempted,
making it safe to refer to it directly from anywhere in the code,
rather than indirectly via a GOT entry.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Laszlo Ersek <lersek@redhat.com>
2018-12-11 13:01:10 +01:00
|
|
|
#
|
2020-06-08 13:07:54 +02:00
|
|
|
GCC:*_*_*_CC_FLAGS = -fno-jump-tables
|
ArmVirtPkg ARM: make relocatable PrePi users build with CLANG35
The clang developers have made a backward incompatible change to the
command line arguments, and have replaced '-mllvm -arm-use-movt=0'
with '-mno-movt'. This does not matter for most ARM platforms, and
therefore it has been removed from the default CLANG35/ARM CC flags
in patch 1c63516075b3 ("BaseTools CLANG35: drop problematic use-movt
and save-temps options"), but as it turns out, the relocatable PrePi
implementation used by ArmVirtQemuKernel and ArmVirtXen will fail to
build if it contains MOVT/MOVW pairs, due to the fact that these are
not runtime relocatable under ELF.
Since they are runtime relocatable under PE/COFF, and GenFw does the
right thing when encountering them, selectively controlling their
use is more appropriate than disabling them altogether. Therefore,
this patch adds the -mno-movt argument only for the platforms that
use the relocatable PrePi, and only for the module types that may
be pulled into its build.
In addition, switch to the SEC type version of ArmLib, so that
the relocatable PrePi only depends on BASE and SEC type libraries.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
2016-08-03 10:11:29 +02:00
|
|
|
|
2015-02-28 21:34:36 +01:00
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# Pcd Section - list of all EDK II PCD Entries defined by this Platform
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
[PcdsFixedAtBuild.common]
|
|
|
|
!if $(ARCH) == AARCH64
|
|
|
|
gArmTokenSpaceGuid.PcdVFPEnabled|1
|
|
|
|
!endif
|
|
|
|
|
|
|
|
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x4000
|
|
|
|
|
|
|
|
# Size of the region used by UEFI in permanent memory (Reserved 64MB)
|
|
|
|
gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
|
|
|
|
|
|
|
|
#
|
|
|
|
# ARM Virtual Architectural Timer
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|0
|
|
|
|
|
|
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
|
2017-11-30 21:28:23 +01:00
|
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
|
2015-02-28 21:34:36 +01:00
|
|
|
|
2017-11-30 21:28:23 +01:00
|
|
|
## Default Terminal Type
|
|
|
|
## 0-PCANSI, 1-VT100, 2-VT00+, 3-UTF8, 4-TTYTERM
|
|
|
|
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
|
|
|
|
|
2019-01-12 15:44:52 +01:00
|
|
|
#
|
|
|
|
# Make VariableRuntimeDxe work at emulated non-volatile variable mode.
|
|
|
|
#
|
|
|
|
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE
|
|
|
|
|
2015-02-28 21:34:36 +01:00
|
|
|
[PcdsPatchableInModule.common]
|
2020-02-26 20:05:08 +01:00
|
|
|
# we need to provide a resolution for this PCD that supports PcdSet64()
|
|
|
|
# being called from ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.c,
|
|
|
|
# even though that call will be compiled out on this platform as it does
|
|
|
|
# not (and cannot) support the TPM2 driver stack
|
|
|
|
gEfiSecurityPkgTokenSpaceGuid.PcdTpmBaseAddress|0x0
|
|
|
|
|
2015-02-28 21:34:36 +01:00
|
|
|
#
|
|
|
|
# This will be overridden in the code
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdSystemMemoryBase|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdSystemMemorySize|0x0
|
2015-05-29 15:50:43 +02:00
|
|
|
gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress|0x0
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
gArmTokenSpaceGuid.PcdFdBaseAddress|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdFvBaseAddress|0x0
|
|
|
|
|
|
|
|
[PcdsDynamicDefault.common]
|
|
|
|
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum|0x0
|
|
|
|
|
|
|
|
#
|
|
|
|
# ARM General Interrupt Controller
|
|
|
|
#
|
|
|
|
gArmTokenSpaceGuid.PcdGicDistributorBase|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x0
|
|
|
|
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0x0
|
|
|
|
|
2015-05-06 06:44:43 +02:00
|
|
|
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|3
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# Components Section - list of all EDK II Modules needed by this Platform
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
[Components.common]
|
|
|
|
#
|
|
|
|
# PEI Phase modules
|
|
|
|
#
|
2015-05-29 15:50:43 +02:00
|
|
|
ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf {
|
2015-02-28 21:34:36 +01:00
|
|
|
<LibraryClasses>
|
|
|
|
ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
|
2015-04-08 21:58:50 +02:00
|
|
|
LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
|
|
|
|
HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
|
|
|
|
PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
|
|
|
|
MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf
|
|
|
|
SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
|
|
|
|
}
|
|
|
|
|
|
|
|
#
|
|
|
|
# DXE
|
|
|
|
#
|
|
|
|
MdeModulePkg/Core/Dxe/DxeMain.inf {
|
|
|
|
<LibraryClasses>
|
|
|
|
NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
|
ArmVirtPkg: use protocol-based DevicePathLib instance for most DXE modules
Port OvmfPkg commit 5c3481b0b611e to ArmVirtPkg. Some explanation should
be in order (because 5c3481b0b611e doesn't offer any):
- The UefiDevicePathLibDevicePathProtocol instance uses the Device Path
Utilities Protocol, produced by DevicePathDxe, for formatting and
parsing the textual device path representation. This allows for a
lighter weight lib instance that gets linked into several DXE modules.
In comparison, the more standalone UefiDevicePathLib instance includes
the formatting and parsing routines in every client module.
- The DXE core needs DevicePathLib before it dispatches DevicePathDxe, so
it needs to stick with the standalone instance.
- DevicePathDxe itself also needs the standalone instance, for
implementing the protocol.
- The DXE-phase PCD driver, "MdeModulePkg/Universal/PCD/Dxe/Pcd.inf",
depends on DevicePathLib via UefiLib and DxeServicesLib at the least; so
with this update, it inherits a dependency on the protocol. In reverse,
DevicePathDxe depends on the PCD Protocol, via PcdLib. The cycle is
broken by using BasePcdLibNull in DevicePathDxe. That restricts it to
FixedAtBuild, Patch, and FeatureFlag PCDs, but that's fine.
Example space savings (using ArmVirtQemu and the GCC5 toolchain):
- NOOPT: 187KB in FVMAIN, 12KB in FVMAIN_COMPACT
- DEBUG: 147KB in FVMAIN, 20KB in FVMAIN_COMPACT
- RELEASE: 123KB in FVMAIN, 17KB in FVMAIN_COMPACT
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Julien Grall <julien.grall@linaro.org>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=940
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2018-04-24 01:36:27 +02:00
|
|
|
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
}
|
2016-04-06 13:42:28 +02:00
|
|
|
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
|
|
|
|
<LibraryClasses>
|
|
|
|
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
|
|
|
|
}
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Architectural Protocols
|
|
|
|
#
|
|
|
|
ArmPkg/Drivers/CpuDxe/CpuDxe.inf
|
|
|
|
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
|
|
|
|
MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
|
|
|
|
MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
|
|
|
|
|
2019-01-14 15:45:56 +01:00
|
|
|
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
|
|
|
|
<LibraryClasses>
|
|
|
|
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
|
|
|
|
}
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
|
2017-07-03 15:46:18 +02:00
|
|
|
MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
|
|
|
|
EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
|
|
|
|
|
|
|
|
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
|
|
|
|
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
|
2015-11-26 09:52:12 +01:00
|
|
|
MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
|
|
|
|
|
|
|
|
ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
|
2016-04-08 11:44:56 +02:00
|
|
|
ArmPkg/Drivers/TimerDxe/TimerDxe.inf {
|
|
|
|
<LibraryClasses>
|
|
|
|
NULL|ArmVirtPkg/Library/ArmVirtTimerFdtClientLib/ArmVirtTimerFdtClientLib.inf
|
|
|
|
}
|
2015-02-28 21:34:36 +01:00
|
|
|
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
|
|
|
|
|
|
|
|
#
|
|
|
|
# Platform Driver
|
|
|
|
#
|
2016-04-08 11:45:10 +02:00
|
|
|
ArmVirtPkg/XenioFdtDxe/XenioFdtDxe.inf
|
2021-10-11 15:24:08 +02:00
|
|
|
EmbeddedPkg/Drivers/FdtClientDxe/FdtClientDxe.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
#
|
2017-09-08 14:41:49 +02:00
|
|
|
# FAT filesystem + GPT/MBR partitioning + UDF filesystem
|
2015-02-28 21:34:36 +01:00
|
|
|
#
|
|
|
|
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
|
|
|
|
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
|
|
|
|
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
|
2016-04-06 09:05:59 +02:00
|
|
|
FatPkg/EnhancedFatDxe/Fat.inf
|
2017-09-08 14:41:49 +02:00
|
|
|
MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bds
|
|
|
|
#
|
ArmVirtPkg: use protocol-based DevicePathLib instance for most DXE modules
Port OvmfPkg commit 5c3481b0b611e to ArmVirtPkg. Some explanation should
be in order (because 5c3481b0b611e doesn't offer any):
- The UefiDevicePathLibDevicePathProtocol instance uses the Device Path
Utilities Protocol, produced by DevicePathDxe, for formatting and
parsing the textual device path representation. This allows for a
lighter weight lib instance that gets linked into several DXE modules.
In comparison, the more standalone UefiDevicePathLib instance includes
the formatting and parsing routines in every client module.
- The DXE core needs DevicePathLib before it dispatches DevicePathDxe, so
it needs to stick with the standalone instance.
- DevicePathDxe itself also needs the standalone instance, for
implementing the protocol.
- The DXE-phase PCD driver, "MdeModulePkg/Universal/PCD/Dxe/Pcd.inf",
depends on DevicePathLib via UefiLib and DxeServicesLib at the least; so
with this update, it inherits a dependency on the protocol. In reverse,
DevicePathDxe depends on the PCD Protocol, via PcdLib. The cycle is
broken by using BasePcdLibNull in DevicePathDxe. That restricts it to
FixedAtBuild, Patch, and FeatureFlag PCDs, but that's fine.
Example space savings (using ArmVirtQemu and the GCC5 toolchain):
- NOOPT: 187KB in FVMAIN, 12KB in FVMAIN_COMPACT
- DEBUG: 147KB in FVMAIN, 20KB in FVMAIN_COMPACT
- RELEASE: 123KB in FVMAIN, 17KB in FVMAIN_COMPACT
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Julien Grall <julien.grall@linaro.org>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=940
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2018-04-24 01:36:27 +02:00
|
|
|
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf {
|
|
|
|
<LibraryClasses>
|
|
|
|
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
|
|
|
|
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
|
|
|
|
}
|
2015-02-28 21:34:36 +01:00
|
|
|
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
|
|
|
|
MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
|
2017-11-30 21:28:23 +01:00
|
|
|
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
|
|
|
|
MdeModulePkg/Application/UiApp/UiApp.inf {
|
|
|
|
<LibraryClasses>
|
|
|
|
NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
|
|
|
|
NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
|
|
|
|
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
|
|
|
|
}
|
2015-02-28 21:34:36 +01:00
|
|
|
|
|
|
|
OvmfPkg/XenBusDxe/XenBusDxe.inf
|
|
|
|
OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
|
2016-06-25 09:16:49 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# ACPI support
|
|
|
|
#
|
2017-03-17 15:46:40 +01:00
|
|
|
ArmVirtPkg/XenPlatformHasAcpiDtDxe/XenPlatformHasAcpiDtDxe.inf
|
2017-05-03 00:38:15 +02:00
|
|
|
!if $(ARCH) == AARCH64
|
2016-06-25 09:16:49 +02:00
|
|
|
ArmVirtPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.inf
|
|
|
|
!endif
|