summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sim/System.py1
-rw-r--r--src/sim/system.cc12
-rw-r--r--src/sim/system.hh3
3 files changed, 16 insertions, 0 deletions
diff --git a/src/sim/System.py b/src/sim/System.py
index 53377989d..68761384b 100644
--- a/src/sim/System.py
+++ b/src/sim/System.py
@@ -93,6 +93,7 @@ class System(MemObject):
kernel = Param.String("", "file that contains the kernel code")
kernel_addr_check = Param.Bool(True,
"whether to address check on kernel (disable for baremetal)")
+ kernel_extras = VectorParam.String([],"Additional object files to load")
readfile = Param.String("", "file to read startup script from")
symbolfile = Param.String("", "file to get the symbols from")
load_addr_mask = Param.UInt64(0xffffffffff,
diff --git a/src/sim/system.cc b/src/sim/system.cc
index 42cd5e720..9d0b919ca 100644
--- a/src/sim/system.cc
+++ b/src/sim/system.cc
@@ -174,6 +174,14 @@ System::System(Params *p)
// Loading only needs to happen once and after memory system is
// connected so it will happen in initState()
}
+
+ for (const auto &obj_name : p->kernel_extras) {
+ inform("Loading additional kernel object: %s", obj_name);
+ ObjectFile *obj = createObjectFile(obj_name);
+ fatal_if(!obj, "Failed to additional kernel object '%s'.\n",
+ obj_name);
+ kernelExtras.push_back(obj);
+ }
}
// increment the number of running systems
@@ -312,6 +320,10 @@ System::initState()
}
// Load program sections into memory
kernel->loadSections(physProxy, loadAddrMask, loadAddrOffset);
+ for (const auto &extra_kernel : kernelExtras) {
+ extra_kernel->loadSections(physProxy, loadAddrMask,
+ loadAddrOffset);
+ }
DPRINTF(Loader, "Kernel start = %#x\n", kernelStart);
DPRINTF(Loader, "Kernel end = %#x\n", kernelEnd);
diff --git a/src/sim/system.hh b/src/sim/system.hh
index a656ab382..acd3108a0 100644
--- a/src/sim/system.hh
+++ b/src/sim/system.hh
@@ -229,6 +229,9 @@ class System : public MemObject
/** Object pointer for the kernel code */
ObjectFile *kernel;
+ /** Additional object files */
+ std::vector<ObjectFile *> kernelExtras;
+
/** Beginning of kernel code */
Addr kernelStart;