[openwrt/openwrt] build: Add support for linking with DT_RELR

LEDE Commits lede-commits at lists.infradead.org
Tue Nov 18 14:17:50 PST 2025


hauke pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/a2a78c04f807806d81dde1d146d3688707a375de

commit a2a78c04f807806d81dde1d146d3688707a375de
Author: Hauke Mehrtens <hauke at hauke-m.de>
AuthorDate: Thu Nov 6 23:08:04 2025 +0100

    build: Add support for linking with DT_RELR
    
    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.
    
    Link: https://github.com/openwrt/openwrt/pull/20679
    Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
---
 config/Config-build.in | 9 +++++++++
 include/hardening.mk   | 8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/config/Config-build.in b/config/Config-build.in
index 2d08f4ccd2..caeae79944 100644
--- a/config/Config-build.in
+++ b/config/Config-build.in
@@ -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
diff --git a/include/hardening.mk b/include/hardening.mk
index a2be5eabd0..1565e5aa27 100644
--- a/include/hardening.mk
+++ b/include/hardening.mk
@@ -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
+




More information about the lede-commits mailing list