summaryrefslogtreecommitdiff
path: root/configs
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2019-11-25 14:03:46 +0000
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2019-11-27 23:30:05 +0000
commit2a0140593f652f446464be1f0e01e5c1f9069a4b (patch)
tree88ce2c3966b70d50a09987fa4ebeb2ed2c6771c9 /configs
parent8e493b5fd275cdb15513dc3466ca4b108ab688e2 (diff)
downloadgem5-2a0140593f652f446464be1f0e01e5c1f9069a4b.tar.xz
base, python: Allow dirname selection for the interpreter
This is the second step towards being able to run dynamically linked applications when the guest ISA != than host ISA. Once the guest interpreter is loaded to memory, we are able to redirect shared object loads through the redirectPath interface. How do we load the guest interpreter? The elf file is for example asking for the /lib/ld-linux-aarch64.so interpreter. That would point to a valid dynamic linker/loader if guest ISA == host ISA, but if we are running on X86 we should point to the guest (aarch64 in the example) toolchain wherever it is installed. This patch is adding the --interp-dir option to point to the parent folder of the guest /lib in the host fs. Change-Id: Id27b97c060008d2e847776a49323d45c8809a27f Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23066 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'configs')
-rw-r--r--configs/common/FileSystemConfig.py12
-rw-r--r--configs/common/Options.py9
2 files changed, 21 insertions, 0 deletions
diff --git a/configs/common/FileSystemConfig.py b/configs/common/FileSystemConfig.py
index 76ea5ffef..33515bca3 100644
--- a/configs/common/FileSystemConfig.py
+++ b/configs/common/FileSystemConfig.py
@@ -154,6 +154,18 @@ def config_filesystem(system, options = None):
system.redirect_paths = _redirect_paths(options)
+ # Setting the interpreter path. This is used to load the
+ # guest dynamic linker itself from the elf file.
+ interp = getattr(options, 'interp_dir', None)
+ if interp:
+ from m5.core import setInterpDir
+ setInterpDir(interp)
+
+ print("Setting the interpreter path to:", interp,
+ "\nFor dynamically linked applications you might still "
+ "need to setup the --redirects so that libraries are "
+ "found\n")
+
def register_node(cpu_list, mem, node_number):
nodebasedir = joinpath(m5.options.outdir, 'fs', 'sys', 'devices',
'system', 'node')
diff --git a/configs/common/Options.py b/configs/common/Options.py
index 855c0063f..c47d4f755 100644
--- a/configs/common/Options.py
+++ b/configs/common/Options.py
@@ -381,6 +381,15 @@ def addSEOptions(parser):
"for information or functionality. Instead of " \
"finding files on the __HOST__ filesystem, the " \
"process will find the user's replacment files.")
+ parser.add_option("--interp-dir", action="store", type="string",
+ default=None,
+ help="The interp-dir option is used for "
+ "setting the interpreter's path. This will "
+ "allow to load the guest dynamic linker/loader "
+ "itself from the elf binary. The option points to "
+ "the parent folder of the guest /lib in the "
+ "host fs")
+
parser.add_option("--redirects", action="append", type="string",
default=[],
help="A collection of one or more redirect paths "