aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2023-01-03 03:19:54 +0100
committerAndreas K. Hüttel <dilfridge@gentoo.org>2023-04-02 14:07:53 +0200
commit154fd1ea1b147c526a70ed4f1d351de1bf525930 (patch)
treea81c6dfb10de7ecddfc87c6006e48365c9c6f949
parentld/testsuite: Adjust for ELF_MAXPAGESIZE 0x1000 (diff)
downloadbinutils-gdb-154fd1ea1b147c526a70ed4f1d351de1bf525930.tar.gz
binutils-gdb-154fd1ea1b147c526a70ed4f1d351de1bf525930.tar.bz2
binutils-gdb-154fd1ea1b147c526a70ed4f1d351de1bf525930.zip
ARM: Fix ld bloat introduced between binutils-2.38 and 2.39
Since commit 9833b7757d24, "PR28824, relro security issues", ELF_MAXPAGESIZE matters much more, with regards to layout of the linked file. That commit fixed an actual bug, but also exposes a problem for targets were that value is too high. For example, for ARM(32, a.k.a. "Aarch32") specifically bfd_arch_arm, it's set to 64 KiB, making all Linux(/GNU) targets pay an extra amount of up to 60 KiB of bloat in DSO:s and executables. This matters when there are many such files, and where storage is expensive. It's *mostly* bloat when using a Linux kernel, as ARM(32) is a good example of an target where ELF_MAXPAGESIZE is set to an extreme value for an obscure corner-case. The ARM (32-bit) kernel has 4 KiB pages, has had that value forever, and can't be configured to any other value. The use-case is IIUC "Aarch32" emulation on an "Aarch64" (arm64) kernel, but not just that, but a setup where the Linux page-size is configured to something other than the *default* 4 KiB. Not sure there actually any such systems in use, again with both Aarch32 compatibility support and a non-4KiB pagesize, with all the warnings in the kernel config and requiring the "EXPERT" level set on. So, let's do like x86-64 in a2267dbfc9e1 "x86-64: Use only one default max-page-size" and set ELF_MAXPAGESIZE to 4096. bfd: * elf32-arm.c (ELF_MAXPAGESIZE): Always set to 0x1000. (cherry picked from commit 1a26a53a0dee39106ba58fcb15496c5f13074652) (cherry picked from commit 9d131130d2f35f1515855d786a9905d8eb8cce8f)
-rw-r--r--bfd/elf32-arm.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 0852b38ae4c..835c4ceb7f4 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -20249,11 +20249,7 @@ elf32_arm_backend_symbol_processing (bfd *abfd, asymbol *sym)
#define ELF_ARCH bfd_arch_arm
#define ELF_TARGET_ID ARM_ELF_DATA
#define ELF_MACHINE_CODE EM_ARM
-#ifdef __QNXTARGET__
#define ELF_MAXPAGESIZE 0x1000
-#else
-#define ELF_MAXPAGESIZE 0x10000
-#endif
#define ELF_COMMONPAGESIZE 0x1000
#define bfd_elf32_mkobject elf32_arm_mkobject