From: Petr Štetiar Date: Thu, 31 Mar 2022 07:44:25 +0000 (+0200) Subject: patchelf: backport fix for rpath endianness X-Git-Tag: v19.07.10~7 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=9aa35fada6522189202c324dd9a97672460b0e4a;p=openwrt%2Fstaging%2Fhauke.git patchelf: backport fix for rpath endianness This is backport of upstream fix introduced in commit e88d83c8b4e4 ("patchelf: Check ELF endianness before writing new runpath") which fixes broken rpath handling on big endian systems: $ patchelf --set-rpath '/opt/foo/bar' lxc4-start $ readelf -d lxc4-start ... 0x1d000000 (: 1d000000) 0x72f ... Expected output, having following patch applied is: $ readelf -d lxc4-start ... 0x0000001d (RUNPATH) Library runpath: [/opt/foo/bar] ... Build and runtime tested on mvebu/turris-omnia, ipq40xx/glinet-b1300 and external target xrx500/nec-wx3000hp (MIPS BE). Signed-off-by: Matthias Van Gestel Signed-off-by: Petr Štetiar --- diff --git a/tools/patchelf/patches/0001-patchelf-Check-ELF-endianness-before-writing-new-run.patch b/tools/patchelf/patches/0001-patchelf-Check-ELF-endianness-before-writing-new-run.patch new file mode 100644 index 0000000000..197a321f72 --- /dev/null +++ b/tools/patchelf/patches/0001-patchelf-Check-ELF-endianness-before-writing-new-run.patch @@ -0,0 +1,41 @@ +From 9c9efd0525ac1e11f83029b8df5303a47ab6fe56 Mon Sep 17 00:00:00 2001 +From: Bryce Ferguson +Date: Mon, 25 Jun 2018 13:50:46 -0500 +Subject: [PATCH] patchelf: Check ELF endianness before writing new runpath +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ upstream commit e88d83c8b4e42a3358a90b781a5a98efa279ff15 ] + +This commit modifies the way fields are written in the dynamic +section in order to account the architecture of the target ELF +file. Instead of copying the raw data, use the helper functions +to convert endianness. + +Signed-off-by: Bryce Ferguson +Signed-off-by: Petr Å tetiar [version 0.9 backport] +--- + src/patchelf.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/patchelf.cc b/src/patchelf.cc +index 136098fbeeda..383c78a46ee4 100644 +--- a/src/patchelf.cc ++++ b/src/patchelf.cc +@@ -1171,13 +1171,13 @@ void ElfFile::modifyRPath(RPathOp op, string newRPath) + debug("new rpath is `%s'\n", newRPath.c_str()); + + if (!forceRPath && dynRPath && !dynRunPath) { /* convert DT_RPATH to DT_RUNPATH */ +- dynRPath->d_tag = DT_RUNPATH; ++ wri(dynRPath->d_tag, DT_RUNPATH); + dynRunPath = dynRPath; + dynRPath = 0; + } + + if (forceRPath && dynRPath && dynRunPath) { /* convert DT_RUNPATH to DT_RPATH */ +- dynRunPath->d_tag = DT_IGNORE; ++ wri(dynRunPath->d_tag, DT_IGNORE); + } + + if (newRPath.size() <= rpathSize) {