Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2006, Google Inc. | 1 // Copyright (c) 2006, 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 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 270 | 270 |
| 271 // If the decorated name didn't give the parameter size, try to | 271 // If the decorated name didn't give the parameter size, try to |
| 272 // calculate it. | 272 // calculate it. |
| 273 if (stack_param_size < 0) { | 273 if (stack_param_size < 0) { |
| 274 stack_param_size = GetFunctionStackParamSize(function); | 274 stack_param_size = GetFunctionStackParamSize(function); |
| 275 } | 275 } |
| 276 | 276 |
| 277 AddressRangeVector ranges; | 277 AddressRangeVector ranges; |
| 278 MapAddressRange(image_map_, AddressRange(rva, static_cast<DWORD>(length)), | 278 MapAddressRange(image_map_, AddressRange(rva, static_cast<DWORD>(length)), |
| 279 &ranges); | 279 &ranges); |
| 280 wstring wname(name); | |
| 281 for (size_t i = 0; i < ranges.size(); ++i) { | 280 for (size_t i = 0; i < ranges.size(); ++i) { |
| 282 fprintf(output_, "FUNC %x %x %x %ws\n", | 281 fprintf(output_, "FUNC %x %x %x %ws\n", |
| 283 ranges[i].rva, ranges[i].length, stack_param_size, wname.c_str()); | 282 ranges[i].rva, ranges[i].length, stack_param_size, |
| 283 static_cast<wchar_t*>(name)); | |
|
Nico
2015/08/27 04:34:27
Does just saying name.m_bstr work here? It looks l
Yoshisato Yanagisawa
2015/08/27 05:55:57
thanks let me know it.
It seems work. I thought i
| |
| 284 } | 284 } |
| 285 | 285 |
| 286 CComPtr<IDiaEnumLineNumbers> lines; | 286 CComPtr<IDiaEnumLineNumbers> lines; |
| 287 if (FAILED(session_->findLinesByRVA(rva, DWORD(length), &lines))) { | 287 if (FAILED(session_->findLinesByRVA(rva, DWORD(length), &lines))) { |
| 288 return false; | 288 return false; |
| 289 } | 289 } |
| 290 | 290 |
| 291 if (!PrintLines(lines)) { | 291 if (!PrintLines(lines)) { |
| 292 return false; | 292 return false; |
| 293 } | 293 } |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 622 prolog_ranges[i].length, | 622 prolog_ranges[i].length, |
| 623 prolog_ranges[i].length }; | 623 prolog_ranges[i].length }; |
| 624 frame_infos.push_back(fi); | 624 frame_infos.push_back(fi); |
| 625 } | 625 } |
| 626 for (size_t i = 0; i < code_ranges.size(); ++i) { | 626 for (size_t i = 0; i < code_ranges.size(); ++i) { |
| 627 FrameInfo fi = { code_ranges[i].rva, code_ranges[i].length, 0 }; | 627 FrameInfo fi = { code_ranges[i].rva, code_ranges[i].length, 0 }; |
| 628 frame_infos.push_back(fi); | 628 frame_infos.push_back(fi); |
| 629 } | 629 } |
| 630 } | 630 } |
| 631 | 631 |
| 632 wstring wprogram_string(program_string); | |
| 633 for (size_t i = 0; i < frame_infos.size(); ++i) { | 632 for (size_t i = 0; i < frame_infos.size(); ++i) { |
| 634 const FrameInfo& fi(frame_infos[i]); | 633 const FrameInfo& fi(frame_infos[i]); |
| 635 fprintf(output_, "STACK WIN %x %x %x %x %x %x %x %x %x %d ", | 634 fprintf(output_, "STACK WIN %x %x %x %x %x %x %x %x %x %d ", |
| 636 type, fi.rva, fi.code_size, fi.prolog_size, | 635 type, fi.rva, fi.code_size, fi.prolog_size, |
| 637 0 /* epilog_size */, parameter_size, saved_register_size, | 636 0 /* epilog_size */, parameter_size, saved_register_size, |
| 638 local_size, max_stack_size, program_string_result == S_OK); | 637 local_size, max_stack_size, program_string_result == S_OK); |
| 639 if (program_string_result == S_OK) { | 638 if (program_string_result == S_OK) { |
| 640 fprintf(output_, "%ws\n", wprogram_string.c_str()); | 639 fprintf(output_, "%ws\n", static_cast<wchar_t *>(program_string)); |
| 641 } else { | 640 } else { |
| 642 fprintf(output_, "%d\n", allocates_base_pointer); | 641 fprintf(output_, "%d\n", allocates_base_pointer); |
| 643 } | 642 } |
| 644 } | 643 } |
| 645 | 644 |
| 646 last_type = type; | 645 last_type = type; |
| 647 last_rva = rva; | 646 last_rva = rva; |
| 648 last_code_size = code_size; | 647 last_code_size = code_size; |
| 649 last_prolog_size = prolog_size; | 648 last_prolog_size = prolog_size; |
| 650 } | 649 } |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 814 | 813 |
| 815 CComBSTR name; | 814 CComBSTR name; |
| 816 int stack_param_size; | 815 int stack_param_size; |
| 817 if (!GetSymbolFunctionName(symbol, &name, &stack_param_size)) { | 816 if (!GetSymbolFunctionName(symbol, &name, &stack_param_size)) { |
| 818 return false; | 817 return false; |
| 819 } | 818 } |
| 820 | 819 |
| 821 AddressRangeVector ranges; | 820 AddressRangeVector ranges; |
| 822 MapAddressRange(image_map_, AddressRange(rva, 1), &ranges); | 821 MapAddressRange(image_map_, AddressRange(rva, 1), &ranges); |
| 823 for (size_t i = 0; i < ranges.size(); ++i) { | 822 for (size_t i = 0; i < ranges.size(); ++i) { |
| 824 wstring wname(name); | |
| 825 fprintf(output_, "PUBLIC %x %x %ws\n", ranges[i].rva, | 823 fprintf(output_, "PUBLIC %x %x %ws\n", ranges[i].rva, |
| 826 stack_param_size > 0 ? stack_param_size : 0, wname.c_str()); | 824 stack_param_size > 0 ? stack_param_size : 0, |
| 825 static_cast<wchar_t *>(name)); | |
| 827 } | 826 } |
| 828 return true; | 827 return true; |
| 829 } | 828 } |
| 830 | 829 |
| 831 bool PDBSourceLineWriter::PrintPDBInfo() { | 830 bool PDBSourceLineWriter::PrintPDBInfo() { |
| 832 PDBModuleInfo info; | 831 PDBModuleInfo info; |
| 833 if (!GetModuleInfo(&info)) { | 832 if (!GetModuleInfo(&info)) { |
| 834 return false; | 833 return false; |
| 835 } | 834 } |
| 836 | 835 |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1319 // an old-style CodeView record if a real 128-bit GUID has its first 32 | 1318 // an old-style CodeView record if a real 128-bit GUID has its first 32 |
| 1320 // bits set the same as the module's signature (timestamp) and the rest of | 1319 // bits set the same as the module's signature (timestamp) and the rest of |
| 1321 // the GUID is set to 0. This is highly unlikely. | 1320 // the GUID is set to 0. This is highly unlikely. |
| 1322 | 1321 |
| 1323 GUID signature_guid = {signature}; // 0-initializes other members | 1322 GUID signature_guid = {signature}; // 0-initializes other members |
| 1324 *uses_guid = !IsEqualGUID(guid, signature_guid); | 1323 *uses_guid = !IsEqualGUID(guid, signature_guid); |
| 1325 return true; | 1324 return true; |
| 1326 } | 1325 } |
| 1327 | 1326 |
| 1328 } // namespace google_breakpad | 1327 } // namespace google_breakpad |
| OLD | NEW |