No public description PiperOrigin-RevId: 915568086 Change-Id: I15d9e6e191a7b1678a01a9c38c7b5a224e061458
diff --git a/mpact/sim/decoder/instruction.h b/mpact/sim/decoder/instruction.h index 9f89586..a7a4520 100644 --- a/mpact/sim/decoder/instruction.h +++ b/mpact/sim/decoder/instruction.h
@@ -18,7 +18,7 @@ #include <string> #include <vector> -#include "absl/container/flat_hash_map.h" +#include "absl/container/btree_map.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "mpact/sim/decoder/opcode.h" @@ -97,7 +97,7 @@ return disasm_format_vec_; } - const absl::flat_hash_map<std::string, TemplateExpression*>& attribute_map() + const absl::btree_map<std::string, TemplateExpression*>& attribute_map() const { return attribute_map_; } @@ -112,7 +112,7 @@ std::vector<const ResourceReference*> resource_acquire_vec_; std::string semfunc_code_string_; std::vector<DisasmFormat*> disasm_format_vec_; - absl::flat_hash_map<std::string, TemplateExpression*> attribute_map_; + absl::btree_map<std::string, TemplateExpression*> attribute_map_; }; } // namespace instruction_set
diff --git a/mpact/sim/decoder/slot.cc b/mpact/sim/decoder/slot.cc index 0a8bd0e..85756e4 100644 --- a/mpact/sim/decoder/slot.cc +++ b/mpact/sim/decoder/slot.cc
@@ -230,7 +230,9 @@ // instructions can share attribute setter functions. std::string Slot::CreateAttributeLookupKey(const Instruction* inst) const { std::string key; + int count = attribute_names_.size(); for (auto const& [name, expr] : inst->attribute_map()) { + count--; std::string value; auto result = expr->GetValue(); if (!result.ok()) { @@ -244,6 +246,9 @@ } absl::StrAppend(&key, name, "[", *value_ptr, "]:"); } + for (int i = 0; i < count; ++i) { + absl::StrAppend(&key, "[]:"); + } return key; }
diff --git a/mpact/sim/util/gdbserver/gdbserver.cc b/mpact/sim/util/gdbserver/gdbserver.cc index 378f4e5..97a895e 100644 --- a/mpact/sim/util/gdbserver/gdbserver.cc +++ b/mpact/sim/util/gdbserver/gdbserver.cc
@@ -575,6 +575,7 @@ halt_reason_str = "T03thread:1;"; break; case *HaltReason::kProgramDone: + case *HaltReason::kSemihostHaltRequest: halt_reason_str = "W00thread:1;"; break; } @@ -721,7 +722,8 @@ // done. bool all_done = true; for (int tid = 1; tid <= core_debug_interfaces_.size(); ++tid) { - all_done &= (halt_reasons_[tid - 1] == *HaltReason::kProgramDone); + all_done &= ((halt_reasons_[tid - 1] == *HaltReason::kProgramDone) || + (halt_reasons_[tid - 1] == *HaltReason::kSemihostHaltRequest)); } if (all_done) { return Respond("W00"); @@ -777,6 +779,7 @@ case *HaltReason::kUserRequest: return Respond(absl::StrCat("T03thread:1;", encoded_pc)); case *HaltReason::kProgramDone: + case *HaltReason::kSemihostHaltRequest: return Respond("W00"); } }