From 5e52c28397b79f8c4c99552217cbe95202166626 Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Mon, 15 Aug 2022 10:17:44 -0700 Subject: [PATCH] arch: set ld's common-page-size explicitly On some CPU architecures it's possible to use MMU pages of different sizes, for example on ARC or ARM. And while for user-space applications the page size is supposed to be transparent, there's still some use of that extra information. In particular it's possible to align data structures or code/data sections on page boundary, etc. For these tricks to become possible tools which pack data (think of the linker, like GNU "ld") need to be informed of the page size to be considered. Obviously, there're some sane defaults which are being used most of the time, so we even think about that peculiarity, but when non-default value needs to be used, GNU "ld" accepts 2 properties related to page size: -z common-page-size=XXX -z max-page-size=YYY And while in thery those might be different (but always "common" <= "max"), and that might make sense if we build for some unknown platfrom, in case of Buildroot when we build entire target's filesystem and so know exactly the configuration we're targeting to, we may safely assume "common-page-size"="max-page-size". See a lengthy discussion in this thread [1]. Fixes: http://autobuild.buildroot.net/results/c8b2f331c98453670cd982558144c4fd84674a3d/ (uclibc) http://autobuild.buildroot.net/results/3a22f7aac38145b26c549254b819f87329e7a77e/ (glibc) And while at it, recover use of "XX-page-size" for ARC, as with [2] moving page size selection in the generic code we've got unexpected override for ARC (note "=", but not "+="): --------------------->8-------------------- ARCH_TOOLCHAIN_WRAPPER_OPTS = -matomic --------------------->8-------------------- [1] https://lists.buildroot.org/pipermail/buildroot/2022-July/646176.html [2] https://git.buildroot.net/buildroot/commit/?id=dcb74db89e74e512e36b32cea6f574a1a1ca84c4 Signed-off-by: Alexey Brodkin Signed-off-by: Thomas Petazzoni --- arch/arch.mk | 8 ++++---- arch/arch.mk.arc | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/arch.mk b/arch/arch.mk index 96f11eba42..2e737b92ac 100644 --- a/arch/arch.mk +++ b/arch/arch.mk @@ -20,13 +20,13 @@ GCC_TARGET_MODE := $(call qstrip,$(BR2_GCC_TARGET_MODE)) # Explicitly set LD's "max-page-size" instead of relying on some defaults ifeq ($(BR2_ARC_PAGE_SIZE_4K)$(BR2_ARM64_PAGE_SIZE_4K),y) -ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=4096 +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 else ifeq ($(BR2_ARC_PAGE_SIZE_8K),y) -ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=8192 +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=8192 -Wl,-z,common-page-size=8192 else ifeq ($(BR2_ARC_PAGE_SIZE_16K),y) -ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=16384 +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384 else ifeq ($(BR2_ARM64_PAGE_SIZE_64K),y) -ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=65536 +ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=65536 -Wl,-z,common-page-size=65536 endif # Include any architecture specific makefiles. diff --git a/arch/arch.mk.arc b/arch/arch.mk.arc index a6b56a869f..42037626a6 100644 --- a/arch/arch.mk.arc +++ b/arch/arch.mk.arc @@ -2,7 +2,7 @@ ifeq ($(BR2_arc),y) # -matomic is always required when the ARC core has the atomic extensions ifeq ($(BR2_ARC_ATOMIC_EXT),y) -ARCH_TOOLCHAIN_WRAPPER_OPTS = -matomic +ARCH_TOOLCHAIN_WRAPPER_OPTS += -matomic endif endif