Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: src/processor/microdump.cc

Issue 1731923002: Support processing microdump for mips architecture (Closed) Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: Reduced size of .sym files + rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014 Google Inc. 1 // Copyright (c) 2014 Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 static const char kMicrodumpEnd[] = "-----END BREAKPAD MICRODUMP-----"; 54 static const char kMicrodumpEnd[] = "-----END BREAKPAD MICRODUMP-----";
55 static const char kOsKey[] = ": O "; 55 static const char kOsKey[] = ": O ";
56 static const char kCpuKey[] = ": C "; 56 static const char kCpuKey[] = ": C ";
57 static const char kGpuKey[] = ": G "; 57 static const char kGpuKey[] = ": G ";
58 static const char kMmapKey[] = ": M "; 58 static const char kMmapKey[] = ": M ";
59 static const char kStackKey[] = ": S "; 59 static const char kStackKey[] = ": S ";
60 static const char kStackFirstLineKey[] = ": S 0 "; 60 static const char kStackFirstLineKey[] = ": S 0 ";
61 static const char kArmArchitecture[] = "arm"; 61 static const char kArmArchitecture[] = "arm";
62 static const char kArm64Architecture[] = "arm64"; 62 static const char kArm64Architecture[] = "arm64";
63 static const char kX86Architecture[] = "x86"; 63 static const char kX86Architecture[] = "x86";
64 static const char kMipsArchitecture[] = "mips";
65 static const char kMips64Architecture[] = "mips64";
64 static const char kGpuUnknown[] = "UNKNOWN"; 66 static const char kGpuUnknown[] = "UNKNOWN";
65 67
66 template<typename T> 68 template<typename T>
67 T HexStrToL(const string& str) { 69 T HexStrToL(const string& str) {
68 uint64_t res = 0; 70 uint64_t res = 0;
69 std::istringstream ss(str); 71 std::istringstream ss(str);
70 ss >> std::hex >> res; 72 ss >> std::hex >> res;
71 return static_cast<T>(res); 73 return static_cast<T>(res);
72 } 74 }
73 75
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 DumpContext::SetContextARM64(arm64); 126 DumpContext::SetContextARM64(arm64);
125 valid_ = true; 127 valid_ = true;
126 } 128 }
127 129
128 void MicrodumpContext::SetContextX86(MDRawContextX86* x86) { 130 void MicrodumpContext::SetContextX86(MDRawContextX86* x86) {
129 DumpContext::SetContextFlags(MD_CONTEXT_X86); 131 DumpContext::SetContextFlags(MD_CONTEXT_X86);
130 DumpContext::SetContextX86(x86); 132 DumpContext::SetContextX86(x86);
131 valid_ = true; 133 valid_ = true;
132 } 134 }
133 135
136 void MicrodumpContext::SetContextMIPS(MDRawContextMIPS* mips) {
137 DumpContext::SetContextFlags(MD_CONTEXT_MIPS);
138 DumpContext::SetContextMIPS(mips);
139 valid_ = true;
140 }
141
142 void MicrodumpContext::SetContextMIPS64(MDRawContextMIPS* mips64) {
143 DumpContext::SetContextFlags(MD_CONTEXT_MIPS64);
144 DumpContext::SetContextMIPS(mips64);
145 valid_ = true;
146 }
147
134 148
135 // 149 //
136 // MicrodumpMemoryRegion 150 // MicrodumpMemoryRegion
137 // 151 //
138 152
139 MicrodumpMemoryRegion::MicrodumpMemoryRegion() : base_address_(0) { } 153 MicrodumpMemoryRegion::MicrodumpMemoryRegion() : base_address_(0) { }
140 154
141 void MicrodumpMemoryRegion::Init(uint64_t base_address, 155 void MicrodumpMemoryRegion::Init(uint64_t base_address,
142 const std::vector<uint8_t>& contents) { 156 const std::vector<uint8_t>& contents) {
143 base_address_ = base_address; 157 base_address_ = base_address;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 stack_start = start_addr; 288 stack_start = start_addr;
275 } 289 }
276 std::vector<uint8_t> chunk = ParseHexBuf(raw_content); 290 std::vector<uint8_t> chunk = ParseHexBuf(raw_content);
277 stack_content.insert(stack_content.end(), chunk.begin(), chunk.end()); 291 stack_content.insert(stack_content.end(), chunk.begin(), chunk.end());
278 292
279 } else if ((pos = line.find(kCpuKey)) != string::npos) { 293 } else if ((pos = line.find(kCpuKey)) != string::npos) {
280 string cpu_state_str(line, pos + strlen(kCpuKey)); 294 string cpu_state_str(line, pos + strlen(kCpuKey));
281 std::vector<uint8_t> cpu_state_raw = ParseHexBuf(cpu_state_str); 295 std::vector<uint8_t> cpu_state_raw = ParseHexBuf(cpu_state_str);
282 if (strcmp(arch.c_str(), kArmArchitecture) == 0) { 296 if (strcmp(arch.c_str(), kArmArchitecture) == 0) {
283 if (cpu_state_raw.size() != sizeof(MDRawContextARM)) { 297 if (cpu_state_raw.size() != sizeof(MDRawContextARM)) {
284 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() << 298 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
285 " bytes instead of " << sizeof(MDRawContextARM) << std::endl; 299 << " bytes instead of " << sizeof(MDRawContextARM)
300 << std::endl;
286 continue; 301 continue;
287 } 302 }
288 MDRawContextARM* arm = new MDRawContextARM(); 303 MDRawContextARM* arm = new MDRawContextARM();
289 memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size()); 304 memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size());
290 context_->SetContextARM(arm); 305 context_->SetContextARM(arm);
291 } else if (strcmp(arch.c_str(), kArm64Architecture) == 0) { 306 } else if (strcmp(arch.c_str(), kArm64Architecture) == 0) {
292 if (cpu_state_raw.size() != sizeof(MDRawContextARM64)) { 307 if (cpu_state_raw.size() != sizeof(MDRawContextARM64)) {
293 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() << 308 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
294 " bytes instead of " << sizeof(MDRawContextARM64) << std::endl; 309 << " bytes instead of " << sizeof(MDRawContextARM64)
310 << std::endl;
295 continue; 311 continue;
296 } 312 }
297 MDRawContextARM64* arm = new MDRawContextARM64(); 313 MDRawContextARM64* arm = new MDRawContextARM64();
298 memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size()); 314 memcpy(arm, &cpu_state_raw[0], cpu_state_raw.size());
299 context_->SetContextARM64(arm); 315 context_->SetContextARM64(arm);
300 } else if (strcmp(arch.c_str(), kX86Architecture) == 0) { 316 } else if (strcmp(arch.c_str(), kX86Architecture) == 0) {
301 if (cpu_state_raw.size() != sizeof(MDRawContextX86)) { 317 if (cpu_state_raw.size() != sizeof(MDRawContextX86)) {
302 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size() << 318 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
303 " bytes instead of " << sizeof(MDRawContextX86) << std::endl; 319 << " bytes instead of " << sizeof(MDRawContextX86)
320 << std::endl;
304 continue; 321 continue;
305 } 322 }
306 MDRawContextX86* x86 = new MDRawContextX86(); 323 MDRawContextX86* x86 = new MDRawContextX86();
307 memcpy(x86, &cpu_state_raw[0], cpu_state_raw.size()); 324 memcpy(x86, &cpu_state_raw[0], cpu_state_raw.size());
308 context_->SetContextX86(x86); 325 context_->SetContextX86(x86);
326 } else if (strcmp(arch.c_str(), kMipsArchitecture) == 0) {
327 if (cpu_state_raw.size() != sizeof(MDRawContextMIPS)) {
328 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
329 << " bytes instead of " << sizeof(MDRawContextMIPS)
330 << std::endl;
331 continue;
332 }
333 MDRawContextMIPS* mips = new MDRawContextMIPS();
334 memcpy(mips, &cpu_state_raw[0], cpu_state_raw.size());
335 context_->SetContextMIPS(mips);
336 } else if (strcmp(arch.c_str(), kMips64Architecture) == 0) {
337 if (cpu_state_raw.size() != sizeof(MDRawContextMIPS)) {
338 std::cerr << "Malformed CPU context. Got " << cpu_state_raw.size()
339 << " bytes instead of " << sizeof(MDRawContextMIPS)
340 << std::endl;
341 continue;
342 }
343 MDRawContextMIPS* mips64 = new MDRawContextMIPS();
344 memcpy(mips64, &cpu_state_raw[0], cpu_state_raw.size());
345 context_->SetContextMIPS64(mips64);
309 } else { 346 } else {
310 std::cerr << "Unsupported architecture: " << arch << std::endl; 347 std::cerr << "Unsupported architecture: " << arch << std::endl;
311 } 348 }
312 } else if ((pos = line.find(kGpuKey)) != string::npos) { 349 } else if ((pos = line.find(kGpuKey)) != string::npos) {
313 string gpu_str(line, pos + strlen(kGpuKey)); 350 string gpu_str(line, pos + strlen(kGpuKey));
314 if (strcmp(gpu_str.c_str(), kGpuUnknown) != 0) { 351 if (strcmp(gpu_str.c_str(), kGpuUnknown) != 0) {
315 std::istringstream gpu_tokens(gpu_str); 352 std::istringstream gpu_tokens(gpu_str);
316 std::getline(gpu_tokens, system_info_->gl_version, '|'); 353 std::getline(gpu_tokens, system_info_->gl_version, '|');
317 std::getline(gpu_tokens, system_info_->gl_vendor, '|'); 354 std::getline(gpu_tokens, system_info_->gl_vendor, '|');
318 std::getline(gpu_tokens, system_info_->gl_renderer, '|'); 355 std::getline(gpu_tokens, system_info_->gl_renderer, '|');
(...skipping 16 matching lines...) Expand all
335 filename, // debug_file 372 filename, // debug_file
336 identifier, // debug_identifier 373 identifier, // debug_identifier
337 "")); // version 374 "")); // version
338 } 375 }
339 } 376 }
340 stack_region_->Init(stack_start, stack_content); 377 stack_region_->Init(stack_start, stack_content);
341 } 378 }
342 379
343 } // namespace google_breakpad 380 } // namespace google_breakpad
344 381
OLDNEW
« no previous file with comments | « src/google_breakpad/processor/microdump.h ('k') | src/processor/microdump_processor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698