Ard, Thank you for the update on this patch series. This design is very clean. One logic issue for protocol notifications, but that should be only require a small update.
Mike > -----Original Message----- > From: edk2-devel [mailto:edk2-devel- > boun...@lists.01.org] On Behalf Of Ard Biesheuvel > Sent: Sunday, March 31, 2019 8:27 PM > To: edk2-de...@lists.01.org > Cc: Ni, Ray <ray...@intel.com>; Zimmer, Vincent > <vincent.zim...@intel.com>; Dong, Eric > <eric.d...@intel.com>; Carsey, Jaben > <jaben.car...@intel.com>; Richardson, Brian > <brian.richard...@intel.com>; Gao, Liming > <liming....@intel.com>; Kinney, Michael D > <michael.d.kin...@intel.com>; Zeng, Star > <star.z...@intel.com> > Subject: [edk2] [PATCH v4 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/up > stream-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 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 struct 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: Vincent Zimmer <vincent.zim...@intel.com> > Cc: Brian Richardson <brian.richard...@intel.com> > 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> > > 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 | 183 > ++++++++++++------ > .../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 | 123 > ++++++++++++ > MdeModulePkg/Universal/EbcDxe/EbcInt.h | 3 + > MdePkg/Include/Uefi/UefiBaseType.h | 6 +- > 12 files changed, 381 insertions(+), 72 deletions(-) > create mode 100644 > MdeModulePkg/Include/Protocol/PeCoffImageEmulator.h > > -- > 2.17.1 > > _______________________________________________ > edk2-devel mailing list > edk2-de...@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#38854): https://edk2.groups.io/g/devel/message/38854 Mute This Topic: https://groups.io/mt/31028066/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-