Skip to content
Open
Changes from 4 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
790eb91
spike: add --pc-harts option for per-hart start addresses
nabudahab Dec 30, 2025
c0ec2eb
Merge branch 'master' of github.com:nabudahab/riscv-isa-sim
nabudahab Dec 30, 2025
1aba5ea
Merge branch 'master' into master
nabudahab Jan 3, 2026
25be30b
Merge branch 'master' into master
nabudahab Jan 13, 2026
dadb0e1
Merge branch 'master' into master
nabudahab Jan 15, 2026
53ddce4
Merge branch 'master' into master
nabudahab Jan 21, 2026
5341580
Merge branch 'master' into master
nabudahab Jan 22, 2026
5e855e3
Merge branch 'master' into master
nabudahab Jan 26, 2026
b711d18
Rename '--pc-harts' option to '--pcs' in spike.cc and fix formatting
nabudahab Jan 26, 2026
ad89e09
Merge branch 'master' into master
nabudahab Jan 26, 2026
ea6a854
Update spike_main/spike.cc
nabudahab Jan 27, 2026
2c9a342
Update spike_main/spike.cc fix formatting
nabudahab Jan 27, 2026
71096c0
Fix formatting of help message for --pcs option
nabudahab Jan 27, 2026
820dc31
Merge branch 'master' into master
nabudahab Jan 28, 2026
df4d99e
adjust cfg.start_pc to handle the hart-specialized start_pc case
nabudahab Jan 29, 2026
8d76f0a
fix segfault caused by proc_reset being called before procs is fully …
nabudahab Jan 29, 2026
41fd53b
align formatting
nabudahab Jan 29, 2026
c1990c9
code cleanup
nabudahab Jan 29, 2026
b5f4731
Remove blank lines in spike.cc
nabudahab Jan 29, 2026
85dc1ec
Merge branch 'master' of https://github.com/riscv-software-src/riscv-…
nabudahab Feb 1, 2026
9cdc97f
Merge branch 'master' of github.com:nabudahab/riscv-isa-sim
nabudahab Feb 1, 2026
fab6dc3
move implementations of start_pc class functions to cfg.cc from cfg.h
nabudahab Feb 1, 2026
843a76c
Merge branch 'master' into master
nabudahab Feb 5, 2026
2fa9329
Merge branch 'master' into master
nabudahab Feb 10, 2026
24b27eb
Fix default to RSTVEC logic in sim_t::proc_reset()
nabudahab Feb 11, 2026
0fd9471
Merge branch 'master' into master
nabudahab Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions spike_main/spike.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <limits>
#include <cinttypes>
#include <sstream>
#include <map>
#include "../VERSION"

static void help(int exit_code = 1)
Expand All @@ -46,6 +47,8 @@ static void help(int exit_code = 1)
fprintf(stderr, " --pmpgranularity=<n> PMP Granularity in bytes [default 4]\n");
fprintf(stderr, " --priv=<m|mu|msu> RISC-V privilege modes supported [default %s]\n", DEFAULT_PRIV);
fprintf(stderr, " --pc=<address> Override ELF entry point\n");
fprintf(stderr, " --pc-harts=<H:A,...> Override start PC for specific harts\n"
" (e.g. 0:0x2000,1:0x4000)\n");
fprintf(stderr, " --hartids=<a,b,...> Explicitly specify hartids, default is 0,1,...\n");
fprintf(stderr, " --ic=<S>:<W>:<B> Instantiate a cache model with S sets,\n");
fprintf(stderr, " --dc=<S>:<W>:<B> W ways, and B-byte blocks (with S and\n");
Expand Down Expand Up @@ -346,6 +349,9 @@ int main(int argc, char** argv)

cfg_t cfg;

//Map to store <hart_id, start_pc>
std::map<size_t, reg_t> hart_start_pcs;

auto const device_parser = [&plugin_device_factories](const char *s) {
const std::string device_args(s);
std::vector<std::string> parsed_args;
Expand Down Expand Up @@ -381,6 +387,23 @@ int main(int argc, char** argv)
parser.option(0, "halted", 0, [&](const char UNUSED *s){halted = true;});
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){cfg.start_pc = strtoull(s, 0, 0);});

parser.option(0, "pc-harts", 1, [&](const char* s){
std::string arg(s);
std::stringstream ss(arg);
std::string pair;
while(std::getline(ss, pair, ',')) {
size_t delim = pair.find(':');
if(delim == std::string::npos) {
fprintf(stderr, "Error: --pc-harts format is hartid:addr,hartid:addr\n");
exit(1);
}
size_t hartid = std::stoul(pair.substr(0, delim));
reg_t addr = std::strtoull(pair.substr(delim+1).c_str(), NULL, 0);
hart_start_pcs[hartid] = addr;
}
});

parser.option(0, "hartids", 1, [&](const char* s){
cfg.hartids = parse_hartids(s);
cfg.explicit_hartids = true;
Expand Down Expand Up @@ -552,6 +575,14 @@ int main(int argc, char** argv)
s.configure_log(log, log_commits);
s.set_histogram(histogram);

for(size_t i = 0; i < cfg.nprocs(); i++) {
size_t hartid = cfg.hartids[i];

if(hart_start_pcs.count(hartid)){
s.get_core(i)->get_state()->pc = hart_start_pcs[hartid];
}
}

auto return_code = s.run();

for (auto& mem : mems)
Expand Down