aboutsummaryrefslogtreecommitdiff
path: root/c_emulator
diff options
context:
space:
mode:
authorPrashanth Mundkur <prashanth.mundkur@gmail.com>2026-03-10 17:26:27 -0500
committerGitHub <noreply@github.com>2026-03-10 22:26:27 +0000
commit4a99fb4a4c6e2447fbdcf4e6d317cd6b4b13d0ba (patch)
tree797e8873abef4e50d032b34b4297841fa7505ee5 /c_emulator
parent094850656a8ff431c61709636c6a44c17c148f66 (diff)
downloadsail-riscv-4a99fb4a4c6e2447fbdcf4e6d317cd6b4b13d0ba.tar.gz
sail-riscv-4a99fb4a4c6e2447fbdcf4e6d317cd6b4b13d0ba.tar.bz2
sail-riscv-4a99fb4a4c6e2447fbdcf4e6d317cd6b4b13d0ba.zip
Add a `--rv32` option to use a default RV32 configuration. (#1600)
Fixes #1567.
Diffstat (limited to 'c_emulator')
-rw-r--r--c_emulator/config_utils.cpp4
-rw-r--r--c_emulator/config_utils.h2
-rw-r--r--c_emulator/riscv_sim.cpp11
3 files changed, 14 insertions, 3 deletions
diff --git a/c_emulator/config_utils.cpp b/c_emulator/config_utils.cpp
index 3617278b..d7534880 100644
--- a/c_emulator/config_utils.cpp
+++ b/c_emulator/config_utils.cpp
@@ -68,6 +68,10 @@ const char *get_default_config() {
return DEFAULT_JSON;
}
+const char *get_default_rv32_config() {
+ return DEFAULT_JSON_RV32;
+}
+
const char *get_config_schema() {
return CONFIG_SCHEMA;
}
diff --git a/c_emulator/config_utils.h b/c_emulator/config_utils.h
index 1d04459f..7352c6ef 100644
--- a/c_emulator/config_utils.h
+++ b/c_emulator/config_utils.h
@@ -12,6 +12,8 @@
uint64_t get_config_uint64(const std::vector<const char *> &keypath);
const char *get_default_config();
+const char *get_default_rv32_config();
+
const char *get_config_schema();
void validate_config_schema(const jsoncons::json &json_config, const std::string &source_desc);
diff --git a/c_emulator/riscv_sim.cpp b/c_emulator/riscv_sim.cpp
index b5442abb..6ec8b240 100644
--- a/c_emulator/riscv_sim.cpp
+++ b/c_emulator/riscv_sim.cpp
@@ -126,6 +126,7 @@ struct CLIOptions {
bool do_validate_config = false;
bool do_print_isa = false;
+ bool use_rv32_default = false;
std::string config_file;
std::vector<std::string> config_overrides;
std::string term_log;
@@ -180,13 +181,17 @@ static CLIOptions parse_cli(int argc, char **argv) {
"Enable experimental extensions"
);
app.add_flag("--use-abi-names", opts.config_use_abi_names, "Use ABI register names in trace log");
+ app.add_flag("--rv32", opts.use_rv32_default, "Use the default RV32 configuration");
app.add_option("--device-tree-blob", opts.dtb_file, "Device tree blob file")
->check(CLI::ExistingFile)
->option_text("<file>");
app.add_option("--terminal-log", opts.term_log, "Terminal log output file")->option_text("<file>");
app.add_option("--test-signature", opts.sig_file, "Test signature file")->option_text("<file>");
- app.add_option("--config", opts.config_file, "Configuration file")->check(CLI::ExistingFile)->option_text("<file>");
+ app.add_option("--config", opts.config_file, "Configuration file")
+ ->check(CLI::ExistingFile)
+ ->option_text("<file>")
+ ->excludes("--rv32");
app
.add_option(
"--config-override",
@@ -589,7 +594,7 @@ int inner_main(int argc, char **argv) {
return EXIT_SUCCESS;
}
if (opts.do_print_default_config) {
- printf("%s", get_default_config());
+ printf("%s", opts.use_rv32_default ? get_default_rv32_config() : get_default_config());
return EXIT_SUCCESS;
}
if (opts.do_print_config_schema) {
@@ -634,7 +639,7 @@ int inner_main(int argc, char **argv) {
if (!opts.config_file.empty()) {
config_json_string = read_file_to_string(opts.config_file);
} else {
- config_json_string = get_default_config();
+ config_json_string = opts.use_rv32_default ? get_default_rv32_config() : get_default_config();
}
// Check json config and merge overrides