> -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > Sent: Monday, April 15, 2019 3:52 AM > To: devel@edk2.groups.io > Cc: Ard Biesheuvel; Kinney, Michael D; Andrew Fish; Leif Lindholm; Zeng, Star; > Dong, Eric; Ni, Ray; Gao, Liming; Carsey, Jaben; Shi, Steven; Wang, Jian J; > Wu, > Hao A > Subject: [PATCH v6 0/7] MdeModulePkg: add support for dispatching foreign > arch PE/COFF images > > Add the basic plumbing to DXE core, the PCI bus driver and the boot manager > to allow PE/COFF images to be dispatched that target an architecture that is > not native for the platform, but which is supported by one of potentially > several available emulators. > > One implementation of such an emulator can be found here: > https://github.com/ardbiesheuvel/X86EmulatorPkg/tree/upstream-v4 > > This also allows us to get rid of the special treatment of EBC images in > core code. Instead, the EbcDxe driver is augmented with an implementation > of the EDK2 PE/COFF image emulator protocol so that internal knowledge of > how EBC is implemented (I-cache flushing, thunks) is removed from the DXE > core. > > Changes since v5: > - Fix build issues reported by Mike Kinney (#2, #5) > - Fix CheckPatch.py issue regarding the use of EFI_D_ERROR (#2) [This is code > that is only being moved around but I fixed it nonetheless] > - Use InstallMultipleProtocolInterfaces() to install the EBC protocol and the > PE/COFF emu protocol at the same time (to simplify/fix the error path) (#5) > - Add Mike's Reviewed-by
The series looks good to be. Please help to address the format issues as I replied in 1/7 and 2/7 patches. With those addressed, for the series, Reviewed-by: Hao Wu <hao.a...@intel.com> Best Regards, Hao Wu > > Changes since v4: > - Fix an issue in the protocol notify handler pointed out by Mike Kinney (#2) > > Changes since v3: > - Simplify the handling of option ROMs and Driver#### images, by simply > deferring to the LoadImage() boot service to decide whether an image > can be supported or not - this removes some redundant checks from the > BDS layer and the PCI bus driver. > - Move the machine type supported by the emulator into the protocol struct, > so we can optimize away calls into the emulator for each image loaded. > Instead, the LoadImage() code will only invoke the IsSupported() method for > images that are known to have a matching machine type. > > Note that I have considered, but ultimately dismissed the suggestion to > register and unregister emulators via a new protocol. The main issue is > that registering and unregistering structs containing sets of function > pointers is awfully similar to managing a protocol database, and we already > have the code to do that in EDK2. > > So instead, I have removed all the code that iterates over a handle buffer > of emu protocols and invokes each one to see if it will support the image. > Instead, this is all done by CoreLoadImage(). > > Changes since v2: > - incorporate feedback from Andrew Fish (delivered in person): > * pass a device path into the IsImageSupported() protocol method so that an > implementation can blacklist or whitelist certain devices, or implement > other policies that depend on the device where the driver originated > * allow the emulator to supersede the native loading of the image - this > permits things like X86 on X86 emulators for security sandboxing or debug > > Changes since v1: > - subsume the EBC handling into the EDK2 emulator protocol and abstract > away from EBC specifics in core code. > - allow multiple emulator implementations to co-exist > - incorporate Star's review feedback > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Andrew Fish <af...@apple.com> > Cc: Leif Lindholm <leif.lindh...@linaro.org> > Cc: Star Zeng <star.z...@intel.com> > Cc: Eric Dong <eric.d...@intel.com> > Cc: Ruiyu Ni <ruiyu...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Cc: Jaben Carsey <jaben.car...@intel.com> > Cc: Steven Shi <steven....@intel.com> > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Hao Wu <hao.a...@intel.com> > > Ard Biesheuvel (7): > MdeModulePkg: introduce PE/COFF image emulator protocol > MdeModulePkg/DxeCore: invoke the emulator protocol for foreign images > MdeModulePkg/PciBusDxe: dispatch option ROMs for foreign architectures > MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images > MdeModulePkg/EbcDxe: implement the PE/COFF emulator protocol > MdePkg/UefiBaseType.h: treat EBC as a non-native machine type > MdeModulePkg/DxeCore: remove explicit EBC handling > > .../Bus/Pci/PciBusDxe/PciOptionRomSupport.c | 7 - > MdeModulePkg/Core/Dxe/DxeMain.h | 6 +- > MdeModulePkg/Core/Dxe/DxeMain.inf | 2 +- > MdeModulePkg/Core/Dxe/Image/Image.c | 210 +++++++++++++----- > .../Include/Protocol/PeCoffImageEmulator.h | 107 +++++++++ > .../Library/UefiBootManagerLib/BmLoadOption.c | 6 +- > MdeModulePkg/MdeModulePkg.dec | 4 + > MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf | 3 + > MdeModulePkg/Universal/EbcDxe/EbcDxe.inf | 3 + > MdeModulePkg/Universal/EbcDxe/EbcInt.c | 121 +++++++++- > MdeModulePkg/Universal/EbcDxe/EbcInt.h | 3 + > MdePkg/Include/Uefi/UefiBaseType.h | 6 +- > 12 files changed, 402 insertions(+), 76 deletions(-) > create mode 100644 > MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h > > -- > 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#39018): https://edk2.groups.io/g/devel/message/39018 Mute This Topic: https://groups.io/mt/31133139/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-