From: Chen Qi <qi.c...@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.c...@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
-=-=-=-=-=-=-=-=-=-=-=- 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: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-