patchelf: add patch to fix relative rpath issue on big-endian systems

This commit adds a patch to the host package patchelf to fix an issue
with endianness when the --make-rpath-relative option is
specified. Currently, patchelf does not take into account the
architecture of the target ELF when it performs the fixup on the
RPATH. Thus, if it differs from the host in endianness, the RUNPATH
field will be invalid. The patch fixes the bug reported here:

https://bugs.busybox.net/show_bug.cgi?id=11101

Signed-off-by: Bryce Ferguson <bryce.ferguson@rockwellcollins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2018.08.x
Bryce Ferguson 2018-06-25 16:44:07 -05:00 committed by Thomas Petazzoni
parent 2c9c47c6b2
commit 17c9810fe7
1 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1,40 @@
From 8c75599b674c73fbfe9c15afeccad54ae88243f5 Mon Sep 17 00:00:00 2001
From: Bryce Ferguson <bryce.ferguson@rockwellcollins.com>
Date: Mon, 25 Jun 2018 13:05:07 -0500
Subject: [PATCH] patchelf: Check ELF endianness before writing new runpath
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.
Link to upstream PR: https://github.com/NixOS/patchelf/pull/151
Signed-off-by: Bryce Ferguson <bryce.ferguson@rockwellcollins.com>
---
src/patchelf.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/patchelf.cc b/src/patchelf.cc
index 35b4a33..a33f644 100644
--- a/src/patchelf.cc
+++ b/src/patchelf.cc
@@ -1315,13 +1315,13 @@ void ElfFile<ElfFileParamNames>::modifyRPath(RPathOp op, string rootDir, string
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) {
--
2.17.0