From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: michael.d.kinney@intel.com) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by groups.io with SMTP; Wed, 10 Apr 2019 23:23:12 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Apr 2019 23:23:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,336,1549958400"; d="scan'208";a="222485088" Received: from orsmsx110.amr.corp.intel.com ([10.22.240.8]) by orsmga001.jf.intel.com with ESMTP; 10 Apr 2019 23:23:11 -0700 Received: from orsmsx157.amr.corp.intel.com (10.22.240.23) by ORSMSX110.amr.corp.intel.com (10.22.240.8) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 10 Apr 2019 23:15:22 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.24]) by ORSMSX157.amr.corp.intel.com ([169.254.9.192]) with mapi id 14.03.0415.000; Wed, 10 Apr 2019 23:15:22 -0700 From: "Michael D Kinney" To: Ard Biesheuvel , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Ni, Ray" , "Zimmer, Vincent" , "Dong, Eric" , "Carsey, Jaben" , "Richardson, Brian" , "Gao, Liming" , "Zeng, Star" Subject: Re: [edk2] [PATCH v4 0/7] MdeModulePkg: add support for dispatching foreign arch PE/COFF images Thread-Topic: [edk2] [PATCH v4 0/7] MdeModulePkg: add support for dispatching foreign arch PE/COFF images Thread-Index: AQHU6DrUSoySROcCb0KGiepMvNdmw6Y2irsQ Date: Thu, 11 Apr 2019 06:15:21 +0000 Message-ID: References: <20190401032709.14787-1-ard.biesheuvel@linaro.org> In-Reply-To: <20190401032709.14787-1-ard.biesheuvel@linaro.org> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.22.254.139] MIME-Version: 1.0 Return-Path: michael.d.kinney@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable 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- > bounces@lists.01.org] On Behalf Of Ard Biesheuvel > Sent: Sunday, March 31, 2019 8:27 PM > To: edk2-devel@lists.01.org > Cc: Ni, Ray ; Zimmer, Vincent > ; Dong, Eric > ; Carsey, Jaben > ; Richardson, Brian > ; Gao, Liming > ; Kinney, Michael D > ; Zeng, Star > > Subject: [edk2] [PATCH v4 0/7] MdeModulePkg: add > support for dispatching foreign arch PE/COFF images >=20 > 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. >=20 > One implementation of such an emulator can be found > here: > https://github.com/ardbiesheuvel/X86EmulatorPkg/tree/up > stream-v4 >=20 > 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. >=20 > 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. >=20 > 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. >=20 > 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(). >=20 > 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 >=20 > 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 >=20 > Cc: Vincent Zimmer > Cc: Brian Richardson > Cc: Michael D Kinney > Cc: Andrew Fish > Cc: Leif Lindholm > Cc: Star Zeng > Cc: Eric Dong > Cc: Ruiyu Ni > Cc: Liming Gao > Cc: Jaben Carsey > Cc: Steven Shi >=20 > 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 >=20 > .../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 >=20 > -- > 2.17.1 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel