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@hauke-m.de>
This commit is contained in:
Hauke Mehrtens
2025-11-06 23:08:04 +01:00
parent 08997df475
commit a2a78c04f8
2 changed files with 17 additions and 0 deletions

View 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