From: Chen Qi <[email protected]>
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 <[email protected]>
---
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
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#209071):
https://lists.openembedded.org/g/openembedded-core/message/209071
Mute This Topic: https://lists.openembedded.org/mt/110280373/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-