public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ard Biesheuvel" <ard.biesheuvel@arm.com>
To: Laszlo Ersek <lersek@redhat.com>, devel@edk2.groups.io
Cc: Leif Lindholm <leif@nuviainc.com>,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	Julien Grall <julien@xen.org>, Jiewen Yao <jiewen.yao@intel.com>,
	Sami Mujawar <Sami.Mujawar@arm.com>
Subject: Re: [PATCH v2 0/3] ArmVirtPkg: use PE/COFF metadata for self relocation
Date: Sat, 13 Jun 2020 00:18:42 +0200	[thread overview]
Message-ID: <a5924e4f-4520-71c5-1f59-f76f21cd240e@arm.com> (raw)
In-Reply-To: <b2bc2a37-44b6-1fd3-ea54-8dc1c6ca98a6@redhat.com>

On 6/11/20 7:50 PM, Laszlo Ersek wrote:
> On 06/11/20 14:52, Ard Biesheuvel wrote:
>> As suggested by Jiewen in response to Ilias RFC [0], it is better to use
>> the PE/COFF metadata for self-relocating executables than to rely on ELF
>> metadata, given how the latter is only available when using ELF based
>> toolchains. Also, we have had some maintenance issues with this code in
>> the past, as PIE linking of non-position independent objects is not a well
>> tested code path in toolchains in general.
>>
>> So implement this for the self-relocating PrePi in ArmVirtPkg first.
>>
>> First, we need to ensure that the module in question is emitted with its
>> PE/COFF relocation metadata preserved, by creating a special FDF rule.
>>
>> We also need to provide a way for the code to refer to the start of the
>> image directly, by adding it to the linker script.
>>
>> Then, it is simply a matter of swapping out the two assembly routines,
>> and adding the C code that serves the same purpose but based on PE/COFF
>> base relocations.
>>
>> Note that PE/COFF relocations are considerably more compact than ELF RELA
>> relocations, so this does not impact the memory footprint of the resulting
>> image adversely.
>>
>> [0] https://edk2.groups.io/g/devel/message/60835
>>
>> Changes since v1:
>> - Drop change to linker script, and instead, use the existing FV parsing code
>>    (which is already incorporated into PrePi to load other modules), to find
>>    the start address of the image before relocation. This way, we can support
>>    TE images as well as PE32 images naturally, and not rely on GCC/binutils
>>    specific artifacts that make porting to a native PE/COFF toolchain more
>>    difficult
>> - Switch to TE format in the SELF_RELOC FDF rule - this is not terribly
>>    likely to matter in practice, but since PrePi is the only module that
>>    is incorporated in uncompressed form, and given that we used TE format
>>    before these changes, it is a more appropriate default.
> 
> Right, I noticed that when I compared the new rule in v1 against the
> pre-existent SEC rule. I'm happy to see my feedback tags carried forward.
> 
> Thanks
> Laszlo
> 

Merged as #692

Thanks all.

>> - Add acks from Jiewen, Laszlo and Sami. Note that I have dropped the
>>    Tested-bys - apologies for wasting anyone's time, but they could not
>>    be carried over due to the changes.
>>
>> Cc: Laszlo Ersek <lersek@redhat.com>
>> Cc: Leif Lindholm <leif@nuviainc.com>
>> Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
>> Cc: Julien Grall <julien@xen.org>
>> Cc: Jiewen Yao <jiewen.yao@intel.com>
>> Cc: Sami Mujawar <Sami.Mujawar@arm.com>
>>
>> Ard Biesheuvel (3):
>>    ArmVirtPkg: add FDF rule for self-relocating PrePi
>>    ArmVirtPkg/PrePi: use standard PeCoff routines for self-relocation
>>    ArmVirtPkg: remove unused files
>>
>>   ArmVirtPkg/ArmVirtQemuKernel.dsc                    | 10 ++--
>>   ArmVirtPkg/ArmVirtXen.dsc                           | 10 ++--
>>   ArmVirtPkg/ArmVirtQemuKernel.fdf                    |  2 +-
>>   ArmVirtPkg/ArmVirtXen.fdf                           |  2 +-
>>   ArmVirtPkg/PrePi/ArmVirtPrePiUniCoreRelocatable.inf |  4 +-
>>   ArmVirtPkg/Include/Platform/Hidden.h                | 22 ---------
>>   ArmVirtPkg/PrePi/PrePi.c                            | 35 ++++++++++++++
>>   ArmVirtPkg/ArmVirtRules.fdf.inc                     |  5 ++
>>   ArmVirtPkg/PrePi/AArch64/ModuleEntryPoint.S         | 49 +++++---------------
>>   ArmVirtPkg/PrePi/Arm/ModuleEntryPoint.S             | 47 +++++--------------
>>   ArmVirtPkg/PrePi/Scripts/PrePi-PIE.lds              | 41 ----------------
>>   11 files changed, 75 insertions(+), 152 deletions(-)
>>   delete mode 100644 ArmVirtPkg/Include/Platform/Hidden.h
>>   delete mode 100644 ArmVirtPkg/PrePi/Scripts/PrePi-PIE.lds
>>
> 


      reply	other threads:[~2020-06-12 22:18 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-11 12:52 [PATCH v2 0/3] ArmVirtPkg: use PE/COFF metadata for self relocation Ard Biesheuvel
2020-06-11 12:52 ` [PATCH v2 1/3] ArmVirtPkg: add FDF rule for self-relocating PrePi Ard Biesheuvel
2020-06-11 12:52 ` [PATCH v2 2/3] ArmVirtPkg/PrePi: use standard PeCoff routines for self-relocation Ard Biesheuvel
2020-06-11 12:52 ` [PATCH v2 3/3] ArmVirtPkg: remove unused files Ard Biesheuvel
2020-06-11 17:50 ` [PATCH v2 0/3] ArmVirtPkg: use PE/COFF metadata for self relocation Laszlo Ersek
2020-06-12 22:18   ` Ard Biesheuvel [this message]

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=a5924e4f-4520-71c5-1f59-f76f21cd240e@arm.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