aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spike_main/spike.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/spike_main/spike.cc b/spike_main/spike.cc
index e7ee03a..533811f 100644
--- a/spike_main/spike.cc
+++ b/spike_main/spike.cc
@@ -299,10 +299,28 @@ static std::vector<size_t> parse_hartids(const char *s)
int n;
while (stream >> n) {
+ if (n < 0) {
+ fprintf(stderr, "Negative hart ID %d is unsupported\n", n);
+ exit(-1);
+ }
+
hartids.push_back(n);
if (stream.peek() == ',') stream.ignore();
}
+ if (hartids.empty()) {
+ fprintf(stderr, "No hart IDs specified\n");
+ exit(-1);
+ }
+
+ std::sort(hartids.begin(), hartids.end());
+
+ const auto dup = std::adjacent_find(hartids.begin(), hartids.end());
+ if (dup != hartids.end()) {
+ fprintf(stderr, "Duplicate hart ID %zu\n", *dup);
+ exit(-1);
+ }
+
return hartids;
}