|
@@ -1,42 +0,0 @@
|
|
|
-From 1198329b922f3cdddc3e87a7c81d7730b646c088 Mon Sep 17 00:00:00 2001
|
|
|
-From: Yuta Hayama <hayama@lineo.co.jp>
|
|
|
-Date: Fri, 28 Jul 2023 16:22:31 +0900
|
|
|
-Subject: [PATCH] align startOffset with p_align instead of pagesize for
|
|
|
- compatibility
|
|
|
-
|
|
|
-According to the ELF specification, the alignment of loadable process segments
|
|
|
-should satisfy (p_vaddr mod pagesize) == (p_offset mod pagesize). However,
|
|
|
-glibc earlier than 2.35 incorrectly requires that the LOAD segment be (p_vaddr
|
|
|
-mod p_align) == (p_offset mod p_align), and will output the error message
|
|
|
-"ELF load command address/offset not properly aligned" if this is not met.
|
|
|
-
|
|
|
-Since there are many systems that use glibc earlier than 2.35, it is preferable
|
|
|
-that newly added LOAD segments satisfy (p_vaddr mod p_align) == (p_offset mod
|
|
|
-p_align) for compatibility.
|
|
|
-
|
|
|
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
|
|
|
----
|
|
|
-Upstream-Status: Submitted [https://github.com/NixOS/patchelf/pull/510]
|
|
|
-
|
|
|
- src/patchelf.cc | 8 +++++++-
|
|
|
- 1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
-
|
|
|
-diff --git a/src/patchelf.cc b/src/patchelf.cc
|
|
|
-index 82b4b46..6edb81a 100644
|
|
|
---- a/src/patchelf.cc
|
|
|
-+++ b/src/patchelf.cc
|
|
|
-@@ -843,7 +843,13 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsLibrary()
|
|
|
- neededSpace += headerTableSpace;
|
|
|
- debug("needed space is %d\n", neededSpace);
|
|
|
-
|
|
|
-- Elf_Off startOffset = roundUp(fileContents->size(), getPageSize());
|
|
|
-+ /* glibc earlier than 2.35 requires that the LOAD segment satisfies
|
|
|
-+ (p_vaddr mod p_align) == (p_offset mod p_align).
|
|
|
-+ The ELF specification requires that loadable process segments satisfy
|
|
|
-+ (p_vaddr mod pagesize) == (p_offset mod pagesize), so glibc is probably
|
|
|
-+ wrong, but here startOffset is calculated according to p_align for
|
|
|
-+ compatibility. */
|
|
|
-+ Elf_Off startOffset = roundUp(fileContents->size(), alignStartPage);
|
|
|
-
|
|
|
- // In older version of binutils (2.30), readelf would check if the dynamic
|
|
|
- // section segment is strictly smaller than the file (and not same size).
|