From: Qi.Chen@windriver.com
To: openembedded-core@lists.openembedded.org
Subject: [OE-core][PATCH V2] lib32-64k-pagesize.inc: add conf for building 32bit binary with 64K alignment
Date: Tue, 24 Dec 2024 19:04:37 -0800 [thread overview]
Message-ID: <20241225030437.972359-1-Qi.Chen@windriver.com> (raw)
From: Chen Qi <Qi.Chen@windriver.com>
When 64K page size is enabled, for 32bit multilib, we'll need to build
applications with 64K alignment, otherwise, we'll see errors like below at runtime:
root@marvell-cn10xxx:~# /lib/ld-linux-armhf.so.3
Segmentation fault
marvell-cn10xxx in yocto-kernel-cache enables CONFIG_ARM64_4K_PAGES=y by default.
And the issue was first discovered there.
However, there's a kernel config fragment in yocto-kernel-cache which enableds
64K page size for arm64: arch/arm/arm64-64kb-pages.scc. So it's easy for other
arm64 BSPs to enable this. And when they do so, they'll have problem with
multilib. This patch adds a config file to help people a little bit in such
situation.
The max-page-size option is used to fix this issue. This option is added
to both CFLAGS and LDFLAGS for the purpose of covering as many recipes as
possible.
The systemd-boot (bootloader) is an exception. It uses max-page-size=4096
in src/boot/efi/meson.build and it has a hardcoded value in elf2efi.py.
See https://github.com/systemd/systemd/blob/main/tools/elf2efi.py#L233
and https://github.com/systemd/systemd/blob/main/src/boot/meson.build#L192.
As an example, below are the lines I used in local.conf to enable 64K page size
for qemuarm64 and use mutlilib on that.
KERNEL_FEATURES += "arch/arm/arm64-64kb-pages.scc"
require conf/multilib.conf
MULTILIBS ?= "multilib:lib32"
DEFAULTTUNE:virtclass-multilib-lib32 ?= "armv7athf-neon"
require conf/distro/include/lib32-64k-pagesize.inc
IMAGE_INSTALL:append = " lib32-sysstat"
Note that people will need to enable CONFIG_EXPERT=y to make kernel
recognize 32bit binaries. As qemuarm64 does not enable that by default,
we need to enable that too:
EXTRA_KERNEL_FILES =. "/PATH/TO/build-poky/kernel-cfgs:"
EXTRA_KERNEL_SRC_URI += "file://enable-expert.cfg"
SRC_URI:append:pn-linux-yocto = " ${EXTRA_KERNEL_SRC_URI}"
FILESEXTRAPATHS:prepend:pn-linux-yocto := "${EXTRA_KERNEL_FILES}:"
With the above lines, lib32-sysstat can work correctly on core-image-full-cmdline.
Extra testing include:
1. qemuarm64 enables 64K page size + lib32-core-image-full-cmdline can boot up correctly
2. oe-core world build succeeds
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
---
meta/conf/distro/include/lib32-64k-pagesize.inc | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 meta/conf/distro/include/lib32-64k-pagesize.inc
diff --git a/meta/conf/distro/include/lib32-64k-pagesize.inc b/meta/conf/distro/include/lib32-64k-pagesize.inc
new file mode 100644
index 0000000000..851a3a65a5
--- /dev/null
+++ b/meta/conf/distro/include/lib32-64k-pagesize.inc
@@ -0,0 +1,4 @@
+MAX_PAGE_SIZE_FLAGS ?= " -Wl,-z,max-page-size=0x10000"
+MAX_PAGE_SIZE_FLAGS:pn-lib32-systemd-boot = ""
+CFLAGS:append:virtclass-multilib-lib32 = "${MAX_PAGE_SIZE_FLAGS}"
+LDFLAGS:append:virtclass-multilib-lib32 = "${MAX_PAGE_SIZE_FLAGS}"
--
2.25.1
next reply other threads:[~2024-12-25 3:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-25 3:04 Qi.Chen [this message]
2025-01-08 17:02 ` [OE-core][PATCH V2] lib32-64k-pagesize.inc: add conf for building 32bit binary with 64K alignment Ross Burton
2025-01-08 18:18 ` Ross Burton
2025-01-09 1:54 ` Chen, Qi
2025-01-16 4:34 ` Chen, Qi
[not found] ` <181B122FF6A5F825.28670@lists.openembedded.org>
2025-01-22 3:02 ` ChenQi
2025-01-22 4:18 ` Khem Raj
2025-01-22 4:52 ` ChenQi
2025-01-22 5:01 ` Khem Raj
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-all 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=20241225030437.972359-1-Qi.Chen@windriver.com \
--to=qi.chen@windriver.com \
--cc=openembedded-core@lists.openembedded.org \
/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