52 if (
params().dtb_filename !=
"") {
53 inform(
"Loading DTB file: %s at address %#x\n",
params().dtb_filename,
58 if (!dtb_file->addBootCmdLine(
60 warn(
"couldn't append bootargs to DTB file: %s\n",
64 dtb_file->buildImage().offset(
params().dtb_addr)
68 for (
auto *tc:
system->threads) {
72 warn(
"No DTB file specified\n");
75 for (
auto *tc:
system->threads) {
76 tc->getIsaPtr()->resetThread();
93 const std::string dmesg_output =
name() +
".dmesg";
94 if (
params().exit_on_kernel_panic) {
96 "panic",
"Kernel panic in simulated system.",
97 dmesg_output,
params().on_panic
106 const std::string dmesg_output =
name() +
".dmesg";
107 if (
params().exit_on_kernel_oops) {
109 "oops_exit",
"Kernel oops in simulated system.",
110 dmesg_output,
params().on_oops
113 "Failed to find kernel symbol 'oops_exit'");
120 if (
params().bootloader_filename !=
"") {
121 Addr bootloader_paddr_offset =
params().bootloader_addr;
124 auto renamedBootloaderSymbolTable = \
126 bootloader_paddr_offset
127 )->functionSymbols()->rename(
128 [](
const std::string &
name) {
129 return "bootloader." +
name;
139 if (
params().object_file !=
"") {
142 auto renamedKernelSymbolTable = \
144 [](
const std::string &
name) {
145 return "kernel." +
name;
155 if (
params().bootloader_filename !=
"") {
157 Addr bootloader_addr_offset = \
158 params().bootloader_addr - image.
minAddr();
162 inform(
"Loaded bootloader \'%s\' at 0x%llx\n",
163 params().bootloader_filename,
164 params().bootloader_addr);
166 inform(
"Bootloader is not specified.\n");
173 if (
params().object_file !=
"") {
179 inform(
"Loaded kernel \'%s\' at 0x%llx\n",
183 inform(
"Kernel is not specified.\n");
191 if (
params().dtb_filename !=
"") {
194 dtb_file->buildImage().offset(
params().dtb_addr)
195 .write(
system->physProxy);
198 inform(
"Loaded DTB \'%s\' at 0x%llx\n",
202 for (
auto *tc:
system->threads) {
206 inform(
"DTB file is not specified.\n");
213 const std::string dmesg_output =
name() +
".dmesg";
214 if (
params().exit_on_kernel_panic) {
217 dmesg_output,
params().on_panic
225 const std::string dmesg_output =
name() +
".dmesg";
226 if (
params().exit_on_kernel_oops) {
229 dmesg_output,
params().on_oops
241 for (
auto *tc:
system->threads) {
242 tc->getIsaPtr()->resetThread();
const std::string commandLine
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
T * addKernelFuncEvent(const char *lbl, Args... args)
Add a function-based event to a kernel symbol.
virtual std::string name() const
PCEvent * kernelPanicPcEvent
Event to halt the simulator if the kernel calls panic() or oops_exit()
void addExitOnKernelPanicEvent()
void serialize(CheckpointOut &checkpoint) const override
Serialize an object.
loader::SymbolTable kernelSymbolTable
void unserialize(CheckpointIn &checkpoint) override
Unserialize an object.
PCEvent * kernelOopsPcEvent
void loadKernelSymbolTable()
void startup() override
startup() is the final initialization call before simulation.
loader::ObjectFile * kernel
void loadBootloaderSymbolTable()
loader::ObjectFile * bootloader
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
void addExitOnKernelOopsEvent()
loader::SymbolTable bootloaderSymbolTable
void startup() override
startup() is the final initialization call before simulation.
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
PCEvent * kernelOopsPcEvent
void addExitOnKernelOopsEvent()
void addExitOnKernelPanicEvent()
PCEvent * kernelPanicPcEvent
Event to halt the simulator if the kernel calls panic() or oops_exit()
void startup() override
startup() is the final initialization call before simulation.
T * addFuncEvent(const loader::SymbolTable &symtab, const char *lbl, const std::string &desc, Args... args)
Add a function-based event to the given function, to be looked up in the specified symbol table.
MemoryImage & offset(Addr by)
bool write(const PortProxy &proxy) const
This implements an image file format to support loading and modifying flattened device tree blobs for...
const Params & params() const
virtual void startup()
startup() is the final initialization call before simulation.
#define warn_if(cond,...)
Conditional warning macro that checks the supplied condition and only prints a warning if the conditi...
SymbolTable debugSymbolTable
Global unified debugging symbol table (for target).
ObjectFile * createObjectFile(const std::string &fname, bool raw)
Copyright (c) 2024 Arm Limited All rights reserved.
std::ostream CheckpointOut
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.