summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrian Herrera <adrian.herrera@arm.com>2019-11-15 10:55:36 +0000
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2020-01-06 18:54:41 +0000
commit4936474c2cb47528deaeb1b0e8ebca1ffb5b8426 (patch)
treeb39efdff26ef2c72a5480f8dafd049e774c79d77 /src
parentca7d52ebc081300885953199a5a64a5b926422c7 (diff)
downloadgem5-4936474c2cb47528deaeb1b0e8ebca1ffb5b8426.tar.xz
arch-arm: Semihosting, specify files root dir
This patch adds an option to "ArmSemihosting" which allows for specifying an optional search path for host files. Previously, behaviour was fixed to search in the directory from where the gem5 binary was run from. Change-Id: I57b932b38d022f132af78857104633d7bfdd1442 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23903 Reviewed-by: Ciro Santilli <ciro.santilli@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/arch/arm/ArmSemihosting.py4
-rw-r--r--src/arch/arm/semihosting.cc7
-rw-r--r--src/arch/arm/semihosting.hh3
3 files changed, 11 insertions, 3 deletions
diff --git a/src/arch/arm/ArmSemihosting.py b/src/arch/arm/ArmSemihosting.py
index a804aa8ab..6052f1d6b 100644
--- a/src/arch/arm/ArmSemihosting.py
+++ b/src/arch/arm/ArmSemihosting.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 ARM Limited
+# Copyright (c) 2018, 2019 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
@@ -52,6 +52,8 @@ class ArmSemihosting(SimObject):
"Standard output (stdout for gem5's terminal)")
stderr = Param.String("stderr",
"Standard error (stderr for gem5's terminal)")
+ files_root_dir = Param.String("",
+ "Host root directory for files handled by Semihosting")
mem_reserve = Param.MemorySize("32MB",
"Amount of memory to reserve at the start of the address map. This "
diff --git a/src/arch/arm/semihosting.cc b/src/arch/arm/semihosting.cc
index 2fe5373b8..a0c865d8b 100644
--- a/src/arch/arm/semihosting.cc
+++ b/src/arch/arm/semihosting.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 ARM Limited
+ * Copyright (c) 2018, 2019 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -138,6 +138,9 @@ ArmSemihosting::ArmSemihosting(const ArmSemihostingParams *p)
timeBase([p]{ struct tm t = p->time; return mkutctime(&t); }()),
tickShift(calcTickShift()),
semiErrno(0),
+ filesRootDir(!p->files_root_dir.empty() &&
+ p->files_root_dir.back() != '/' ?
+ p->files_root_dir + '/' : p->files_root_dir),
stdin(getSTDIO("stdin", p->stdin, "r")),
stdout(getSTDIO("stdout", p->stdout, "w")),
stderr(p->stderr == p->stdout ?
@@ -291,6 +294,8 @@ ArmSemihosting::callOpen(ThreadContext *tc, bool aarch64,
return retError(EINVAL);
std::string fname = readString(tc, name_base, name_size);
+ if (!fname.empty() && fname.front() != '/')
+ fname = filesRootDir + fname;
std::unique_ptr<ArmSemihosting::FileBase> file =
FileBase::create(*this, fname, mode);
diff --git a/src/arch/arm/semihosting.hh b/src/arch/arm/semihosting.hh
index a9c11933f..2ae31827e 100644
--- a/src/arch/arm/semihosting.hh
+++ b/src/arch/arm/semihosting.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 ARM Limited
+ * Copyright (c) 2018, 2019 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -243,6 +243,7 @@ class ArmSemihosting : public SimObject
FILE *file;
};
+ std::string filesRootDir;
std::vector<std::unique_ptr<FileBase>> files;
FILE *stdin;
FILE *stdout;