| Index: src/processor/microdump.cc
|
| diff --git a/src/processor/microdump.cc b/src/processor/microdump.cc
|
| index e3dececbe6b64a5734fe5edc5963bff971b1136b..06211e60bca2aa59b9d29847faed0ef99322e019 100644
|
| --- a/src/processor/microdump.cc
|
| +++ b/src/processor/microdump.cc
|
| @@ -61,6 +61,8 @@ static const char kStackFirstLineKey[] = ": S 0 ";
|
| static const char kArmArchitecture[] = "arm";
|
| static const char kArm64Architecture[] = "arm64";
|
| static const char kX86Architecture[] = "x86";
|
| +static const char kMipsArchitecture[] = "mips";
|
| +static const char kMips64Architecture[] = "mips64";
|
| static const char kGpuUnknown[] = "UNKNOWN";
|
|
|
| template<typename T>
|
| @@ -131,6 +133,18 @@ void MicrodumpContext::SetContextX86(MDRawContextX86* x86) {
|
| valid_ = true;
|
| }
|
|
|
| +void MicrodumpContext::SetContextMIPS(MDRawContextMIPS* mips) {
|
| + DumpContext::SetContextFlags(MD_CONTEXT_MIPS);
|
| + DumpContext::SetContextMIPS(mips);
|
| + valid_ = true;
|
| +}
|
| +
|
| +void MicrodumpContext::SetContextMIPS64(MDRawContextMIPS* mips64) {
|
| + DumpContext::SetContextFlags(MD_CONTEXT_MIPS64);
|
| + DumpContext::SetContextMIPS(mips64);
|
| + valid_ = true;
|
| +}
|
| +
|
|
|
| //
|
| // MicrodumpMemoryRegion
|
| @@ -281,8 +295,9 @@ Microdump::Microdump(const string& contents)
|
| std::vector<uint8_t> cpu_state_raw = ParseHexBuf(cpu_state_str);
|
| if (strcmp(arch.c_str(), kArmArchitecture) == 0) {
|
| if (cpu_state_raw.size() != sizeof(MDRawContextARM)) {
|
| - std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() <<
|
| - " bytes instead of " << sizeof(MDRawContextARM) << std::endl;
|
| + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
| + << " bytes instead of " << sizeof(MDRawContextARM)
|
| + << std::endl;
|
| continue;
|
| }
|
| MDRawContextARM* arm = new MDRawContextARM();
|
| @@ -290,8 +305,9 @@ Microdump::Microdump(const string& contents)
|
| context_->SetContextARM(arm);
|
| } else if (strcmp(arch.c_str(), kArm64Architecture) == 0) {
|
| if (cpu_state_raw.size() != sizeof(MDRawContextARM64)) {
|
| - std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() <<
|
| - " bytes instead of " << sizeof(MDRawContextARM64) << std::endl;
|
| + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
| + << " bytes instead of " << sizeof(MDRawContextARM64)
|
| + << std::endl;
|
| continue;
|
| }
|
| MDRawContextARM64* arm = new MDRawContextARM64();
|
| @@ -299,13 +315,34 @@ Microdump::Microdump(const string& contents)
|
| context_->SetContextARM64(arm);
|
| } else if (strcmp(arch.c_str(), kX86Architecture) == 0) {
|
| if (cpu_state_raw.size() != sizeof(MDRawContextX86)) {
|
| - std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() <<
|
| - " bytes instead of " << sizeof(MDRawContextX86) << std::endl;
|
| + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
| + << " bytes instead of " << sizeof(MDRawContextX86)
|
| + << std::endl;
|
| continue;
|
| }
|
| MDRawContextX86* x86 = new MDRawContextX86();
|
| memcpy(x86, &cpu_state_raw[0], cpu_state_raw.size());
|
| context_->SetContextX86(x86);
|
| + } else if (strcmp(arch.c_str(), kMipsArchitecture) == 0) {
|
| + if (cpu_state_raw.size() != sizeof(MDRawContextMIPS)) {
|
| + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
| + << " bytes instead of " << sizeof(MDRawContextMIPS)
|
| + << std::endl;
|
| + continue;
|
| + }
|
| + MDRawContextMIPS* mips = new MDRawContextMIPS();
|
| + memcpy(mips, &cpu_state_raw[0], cpu_state_raw.size());
|
| + context_->SetContextMIPS(mips);
|
| + } else if (strcmp(arch.c_str(), kMips64Architecture) == 0) {
|
| + if (cpu_state_raw.size() != sizeof(MDRawContextMIPS)) {
|
| + std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
|
| + << " bytes instead of " << sizeof(MDRawContextMIPS)
|
| + << std::endl;
|
| + continue;
|
| + }
|
| + MDRawContextMIPS* mips64 = new MDRawContextMIPS();
|
| + memcpy(mips64, &cpu_state_raw[0], cpu_state_raw.size());
|
| + context_->SetContextMIPS64(mips64);
|
| } else {
|
| std::cerr << "Unsupported architecture: " << arch << std::endl;
|
| }
|
|
|