From: "Ard Biesheuvel" <ard.biesheuvel@arm.com>
To: devel@edk2.groups.io
Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>,
Laszlo Ersek <lersek@redhat.com>,
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: [PATCH v2 0/3] ArmVirtPkg: use PE/COFF metadata for self relocation
Date: Thu, 11 Jun 2020 14:52:25 +0200 [thread overview]
Message-ID: <20200611125228.252500-1-ard.biesheuvel@arm.com> (raw)
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.
- 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
--
2.26.2
next reply other threads:[~2020-06-11 12:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-11 12:52 Ard Biesheuvel [this message]
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
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=20200611125228.252500-1-ard.biesheuvel@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