build: Add support for linking with DT_RELR linking-relr
authorHauke Mehrtens <[email protected]>
Thu, 6 Nov 2025 22:08:04 +0000 (23:08 +0100)
committerHauke Mehrtens <[email protected]>
Sun, 16 Nov 2025 23:04:25 +0000 (00:04 +0100)
This adds the -Wl,-z,pack-relative-relocs linking options.
This reduces the size of some binaries.

This is only supported on i386, x86_64, aarch64 and loongarch64 in
binutils. This feature is not support for MIPS.

musl libc supports it since version 1.2.4 .
glibc supports it since vesion 2.36.
binutils ld supports it since version 2.38 for x86 and since version
2.43 for LoongArch.

This reduces the size of the armsr default root file system from
5,262,198 bytes to 5,200,950 bytes by 61,248 bytes.

Signed-off-by: Hauke Mehrtens <[email protected]>
config/Config-build.in
include/hardening.mk

index 2d08f4ccd2bdcc2edac4831d9e4ce1731d4a0e08..caeae799448abb8f7886ec92db93085fbf277cb3 100644 (file)
@@ -383,6 +383,15 @@ menu "Global build settings"
                        bool "Full"
        endchoice
 
+       config PKG_DT_RELR
+               bool "Link with relative relocations (RELR)"
+               depends on (aarch64 || i386 || loongarch64 || x86_64)
+               default y
+               help
+                 Link all applications with -Wl,-z,pack-relative-relocs.
+                 This will reduce the size of many applications.
+                 This is only supported on a limited number of architectures.
+
        config TARGET_ROOTFS_SECURITY_LABELS
                bool
                select KERNEL_SQUASHFS_XATTR
index a2be5eabd0d9c10e82ab88e57e1df1f3dde595c8..1565e5aa270341550e9394d95de8be56546e2af4 100644 (file)
@@ -8,6 +8,7 @@ PKG_ASLR_PIE_REGULAR ?= 0
 PKG_SSP ?= 1
 PKG_FORTIFY_SOURCE ?= 1
 PKG_RELRO ?= 1
+PKG_DT_RELR ?= 1
 
 ifdef CONFIG_PKG_CHECK_FORMAT_SECURITY
   ifeq ($(strip $(PKG_CHECK_FORMAT_SECURITY)),1)
@@ -69,3 +70,10 @@ ifdef CONFIG_PKG_RELRO_FULL
   endif
 endif
 
+ifdef CONFIG_PKG_DT_RELR
+  ifeq ($(strip $(PKG_DT_RELR)),1)
+    TARGET_CFLAGS += -Wl,-z,pack-relative-relocs
+    TARGET_LDFLAGS += -zpack-relative-relocs
+  endif
+endif
+