public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Andrew Fish <afish@apple.com>
Cc: Mike Kinney <michael.d.kinney@intel.com>,
	"Ni, Ruiyu" <ruiyu.ni@intel.com>,
	Vincent Zimmer <vincent.zimmer@intel.com>,
	"Dong, Eric" <eric.dong@intel.com>,
	 "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"agraf@suse.de" <agraf@suse.de>,
	 "Richardson, Brian" <brian.richardson@intel.com>,
	Laszlo Ersek <lersek@redhat.com>,
	"Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH 0/4] MdeModulePkg: add support for dispatching foreign arch PE/COFF images
Date: Wed, 19 Sep 2018 13:43:50 -0700	[thread overview]
Message-ID: <CAKv+Gu93NT+4UChCX0yVV3nYo2h-VnLf9Yk+B02beK_-MKDwyw@mail.gmail.com> (raw)
In-Reply-To: <158F7824-8679-4121-9E7D-5C3593808909@apple.com>

On 19 September 2018 at 12:35, Andrew Fish <afish@apple.com> wrote:
>
>
>> On Sep 15, 2018, at 6:28 AM, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
>>
>> On 13 September 2018 at 19:20, Kinney, Michael D
>> <michael.d.kinney@intel.com> wrote:
>>> Ard,
>>>
>>> I think there is a fundamental assumption that
>>> the sizeof(UINTN) and size of pointers of
>>> the native CPU are the same as the emulated CPU.
>>> If that is not the case, then I would like to see
>>> more details.  Otherwise that is a significant
>>> restriction that needs to be clearly documented.
>>>
>>
>> There is no such assumption. The PE/COFF emulator protocol is an
>> abstract protocol that leaves it fully up to the implementation to
>> decide whether it can support images of machine type X and image type
>> Y.
>>
>
> Ard,
>
> Not knowing the size of UINTN or a pointer was very painful in terms of how EBC worked. The compiler was forced to generate code for sizeof vs. resolving it at compile time.
>

Oh, I'm sure - but my point is that whether architecture X can be
emulated on architecture Y and how is a limitation that affects some
implementations of the protocol, but at the abstract level that we
deal with in the core code, it is not a concern.

>>> Protocols that only allow a single instance need to
>>> clearly document that assumption.
>>>
>>
>> I will remove that restriction.
>>
>>> If we decide to treat EBC as an emulated CPU, then
>>> we would want to support multiple instances of the
>>> protocol.  The updates to the DXE Core are a bit
>>> confusing because it has separate handling of EBC
>>> and emulated CPUs.  I think it would make the DXE
>>> Core logic simpler and easier to understand if they
>>> were combined.
>>>
>>
>> Yes, excellent idea, and it results in a nice cleanup as well
>>
>>> I asked about the startup case because if we do EBC,
>>> then we may need more services in the protocol because
>>> of the thunk code between native and EBC code.  At the
>>> time EBC was originally implemented, we did not have
>>> paging enabled and the EBC interpreter work without
>>> depending on a page fault handler.
>>>
>>> The way the protocol is currently defined, I believe it
>>> fundamentally assumes paging is enabled.  If paging is
>>> not enabled, then the current protocol services are not
>>> sufficient for any emulated CPU.  Do we want this to work
>>> for paging disabled cases?  If not, another assumption
>>> to clearly document.
>>>
>>
>> The paging disabled case is interesting. Does the UEFI spec even
>> permit running in DXE with paging disabled?
>
> Paging is a function of the processor binding in the UEFI spec. It is not required for IA32. For X64 you have to have paging enable to enter long mode. On other processors you need to turn on paging to control the cache. So I guess the no paging is likely more of a i386 issue?
>

Michael spotted yesterday that RISC-V mandates paging disabled, which
is peculiar in itself. But again, whether a certain implementation of
the protocol relies on paging or not is an implementation detail.

>>
>> In any case, I will send out a v2 as the basis for further discussion.
>> We can also sit down and discuss it in Vancouver the coming week.
>
> I'd suggest passing an EFI device path to IS_PECOFF_IMAGE_SUPPORTED. At some point it might be useful for the emulator to know what device is being emulated.
>

I guess you mean for which device we are loading a driver that relies
on emulation? I guess that makes sense for option ROMs, which is the
primary use case, so yes, I can add that.

> For bonus points we could check IsPecoffImageSupported() prior to the native check. Never say never, some one may want to have emulator run on native images for debugging etc.
>

Peter brought this up as well - in some cases, you may want to sandbox
X86 drivers running on X86 by running them on an emulator. If you
think the overhead of performing this check for each image rather than
only for images that have already been found to be for a foreign
architecture is acceptables then I'm happy to change this. But we can
easily do that later as well.


  reply	other threads:[~2018-09-19 20:43 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-12 13:21 [PATCH 0/4] MdeModulePkg: add support for dispatching foreign arch PE/COFF images Ard Biesheuvel
2018-09-12 13:21 ` [PATCH 1/4] MdeModulePkg: introduce PE/COFF image emulator protocol Ard Biesheuvel
2018-09-13 10:05   ` Zeng, Star
2018-09-13 10:36     ` Ard Biesheuvel
2018-09-12 13:21 ` [PATCH 2/4] MdeModulePkg/DxeCore: invoke the emulator protocol for foreign images Ard Biesheuvel
2018-09-13 10:23   ` Zeng, Star
2018-09-13 10:37     ` Ard Biesheuvel
2018-09-12 13:21 ` [PATCH 3/4] MdeModulePkg/PciBusDxe: invoke PE/COFF emulator for foreign option ROMs Ard Biesheuvel
2018-09-13 10:24   ` Zeng, Star
2018-09-13 10:46     ` Ard Biesheuvel
2018-09-12 13:21 ` [PATCH 4/4] MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images Ard Biesheuvel
2018-09-12 14:55 ` [PATCH 0/4] MdeModulePkg: add support for dispatching foreign arch PE/COFF images Gao, Liming
2018-09-12 14:56   ` Ard Biesheuvel
2018-09-12 15:07     ` Carsey, Jaben
2018-09-12 15:11       ` Ard Biesheuvel
2018-09-12 15:10 ` Kinney, Michael D
2018-09-13 10:36   ` Ard Biesheuvel
2018-09-13 17:20     ` Kinney, Michael D
2018-09-15 13:28       ` Ard Biesheuvel
2018-09-17  4:03         ` Kinney, Michael D
2018-09-19 19:35         ` Andrew Fish
2018-09-19 20:43           ` Ard Biesheuvel [this message]
2018-09-21 18:51             ` Andrew Fish
2018-09-12 15:48 ` Carsey, Jaben
2018-09-12 18:50   ` Zimmer, Vincent
2018-09-13  0:47 ` Shi, Steven
2018-09-13  5:18   ` Ard Biesheuvel

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=CAKv+Gu93NT+4UChCX0yVV3nYo2h-VnLf9Yk+B02beK_-MKDwyw@mail.gmail.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