Browse Source

Move start_pc into cfg_t

pull/954/head
Rupert Swarbrick 4 years ago
parent
commit
970466e6eb
  1. 2
      riscv/cfg.h
  2. 5
      riscv/sim.cc
  3. 3
      riscv/sim.h
  4. 5
      spike_main/spike.cc

2
riscv/cfg.h

@ -2,6 +2,7 @@
#ifndef _RISCV_CFG_H #ifndef _RISCV_CFG_H
#define _RISCV_CFG_H #define _RISCV_CFG_H
#include <optional>
#include "decode.h" #include "decode.h"
#include "mmu.h" #include "mmu.h"
#include <cassert> #include <cassert>
@ -70,6 +71,7 @@ public:
cfg_arg_t<const char *> isa; cfg_arg_t<const char *> isa;
cfg_arg_t<const char *> priv; cfg_arg_t<const char *> priv;
cfg_arg_t<std::vector<mem_cfg_t>> mem_layout; cfg_arg_t<std::vector<mem_cfg_t>> mem_layout;
std::optional<reg_t> start_pc;
}; };
#endif #endif

5
riscv/sim.cc

@ -29,7 +29,7 @@ static void handle_signal(int sig)
} }
sim_t::sim_t(const cfg_t *cfg, const char* varch, bool halted, bool real_time_clint, sim_t::sim_t(const cfg_t *cfg, const char* varch, bool halted, bool real_time_clint,
reg_t start_pc, std::vector<std::pair<reg_t, mem_t*>> mems, std::vector<std::pair<reg_t, mem_t*>> mems,
std::vector<std::pair<reg_t, abstract_device_t*>> plugin_devices, std::vector<std::pair<reg_t, abstract_device_t*>> plugin_devices,
const std::vector<std::string>& args, const std::vector<std::string>& args,
std::vector<int> const hartids, std::vector<int> const hartids,
@ -46,7 +46,6 @@ sim_t::sim_t(const cfg_t *cfg, const char* varch, bool halted, bool real_time_cl
mems(mems), mems(mems),
plugin_devices(plugin_devices), plugin_devices(plugin_devices),
procs(std::max(cfg->nprocs(), size_t(1))), procs(std::max(cfg->nprocs(), size_t(1))),
start_pc(start_pc),
dtb_file(dtb_file ? dtb_file : ""), dtb_file(dtb_file ? dtb_file : ""),
dtb_enabled(dtb_enabled), dtb_enabled(dtb_enabled),
log_file(log_path), log_file(log_path),
@ -334,7 +333,7 @@ void sim_t::set_rom()
{ {
const int reset_vec_size = 8; const int reset_vec_size = 8;
start_pc = start_pc == reg_t(-1) ? get_entry_point() : start_pc; reg_t start_pc = cfg->start_pc.value_or(get_entry_point());
uint32_t reset_vec[reset_vec_size] = { uint32_t reset_vec[reset_vec_size] = {
0x297, // auipc t0,0x0 0x297, // auipc t0,0x0

3
riscv/sim.h

@ -33,7 +33,7 @@ class sim_t : public htif_t, public simif_t
{ {
public: public:
sim_t(const cfg_t *cfg, const char* varch, bool halted, bool real_time_clint, sim_t(const cfg_t *cfg, const char* varch, bool halted, bool real_time_clint,
reg_t start_pc, std::vector<std::pair<reg_t, mem_t*>> mems, std::vector<std::pair<reg_t, mem_t*>> mems,
std::vector<std::pair<reg_t, abstract_device_t*>> plugin_devices, std::vector<std::pair<reg_t, abstract_device_t*>> plugin_devices,
const std::vector<std::string>& args, const std::vector<int> hartids, const std::vector<std::string>& args, const std::vector<int> hartids,
const debug_module_config_t &dm_config, const char *log_path, const debug_module_config_t &dm_config, const char *log_path,
@ -76,7 +76,6 @@ private:
mmu_t* debug_mmu; // debug port into main memory mmu_t* debug_mmu; // debug port into main memory
std::vector<processor_t*> procs; std::vector<processor_t*> procs;
std::pair<reg_t, reg_t> initrd_range; std::pair<reg_t, reg_t> initrd_range;
reg_t start_pc;
std::string dts; std::string dts;
std::string dtb; std::string dtb;
std::string dtb_file; std::string dtb_file;

5
spike_main/spike.cc

@ -232,7 +232,6 @@ int main(int argc, char** argv)
bool real_time_clint = false; bool real_time_clint = false;
const char* kernel = NULL; const char* kernel = NULL;
reg_t kernel_offset, kernel_size; reg_t kernel_offset, kernel_size;
reg_t start_pc = reg_t(-1);
std::vector<std::pair<reg_t, abstract_device_t*>> plugin_devices; std::vector<std::pair<reg_t, abstract_device_t*>> plugin_devices;
std::unique_ptr<icache_sim_t> ic; std::unique_ptr<icache_sim_t> ic;
std::unique_ptr<dcache_sim_t> dc; std::unique_ptr<dcache_sim_t> dc;
@ -335,7 +334,7 @@ int main(int argc, char** argv)
// I wanted to use --halted, but for some reason that doesn't work. // I wanted to use --halted, but for some reason that doesn't work.
parser.option('H', 0, 0, [&](const char* s){halted = true;}); parser.option('H', 0, 0, [&](const char* s){halted = true;});
parser.option(0, "rbb-port", 1, [&](const char* s){use_rbb = true; rbb_port = atoul_safe(s);}); parser.option(0, "rbb-port", 1, [&](const char* s){use_rbb = true; rbb_port = atoul_safe(s);});
parser.option(0, "pc", 1, [&](const char* s){start_pc = strtoull(s, 0, 0);}); parser.option(0, "pc", 1, [&](const char* s){cfg.start_pc = strtoull(s, 0, 0);});
parser.option(0, "hartids", 1, hartids_parser); parser.option(0, "hartids", 1, hartids_parser);
parser.option(0, "ic", 1, [&](const char* s){ic.reset(new icache_sim_t(s));}); parser.option(0, "ic", 1, [&](const char* s){ic.reset(new icache_sim_t(s));});
parser.option(0, "dc", 1, [&](const char* s){dc.reset(new dcache_sim_t(s));}); parser.option(0, "dc", 1, [&](const char* s){dc.reset(new dcache_sim_t(s));});
@ -457,7 +456,7 @@ int main(int argc, char** argv)
#endif #endif
sim_t s(&cfg, varch, halted, real_time_clint, sim_t s(&cfg, varch, halted, real_time_clint,
start_pc, mems, plugin_devices, htif_args, mems, plugin_devices, htif_args,
std::move(hartids), dm_config, log_path, dtb_enabled, dtb_file, std::move(hartids), dm_config, log_path, dtb_enabled, dtb_file,
#ifdef HAVE_BOOST_ASIO #ifdef HAVE_BOOST_ASIO
io_service_ptr, acceptor_ptr, io_service_ptr, acceptor_ptr,

Loading…
Cancel
Save