OLD | NEW |
1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 debug_context(), | 76 debug_context(), |
77 id(0), | 77 id(0), |
78 stack_region_address(0), | 78 stack_region_address(0), |
79 stack_region_size(0), | 79 stack_region_size(0), |
80 thread_specific_data_address(0), | 80 thread_specific_data_address(0), |
81 port(THREAD_NULL), | 81 port(THREAD_NULL), |
82 suspend_count(0), | 82 suspend_count(0), |
83 priority(0) { | 83 priority(0) { |
84 } | 84 } |
85 | 85 |
86 ProcessReader::Module::Module() : name(), reader(NULL), timestamp(0) { | 86 ProcessReader::Module::Module() : name(), reader(nullptr), timestamp(0) { |
87 } | 87 } |
88 | 88 |
89 ProcessReader::Module::~Module() { | 89 ProcessReader::Module::~Module() { |
90 } | 90 } |
91 | 91 |
92 ProcessReader::ProcessReader() | 92 ProcessReader::ProcessReader() |
93 : kern_proc_info_(), | 93 : kern_proc_info_(), |
94 threads_(), | 94 threads_(), |
95 modules_(), | 95 modules_(), |
96 module_readers_(), | 96 module_readers_(), |
(...skipping 17 matching lines...) Expand all Loading... |
114 | 114 |
115 pid_t pid; | 115 pid_t pid; |
116 kern_return_t kr = pid_for_task(task, &pid); | 116 kern_return_t kr = pid_for_task(task, &pid); |
117 if (kr != KERN_SUCCESS) { | 117 if (kr != KERN_SUCCESS) { |
118 MACH_LOG(ERROR, kr) << "pid_for_task"; | 118 MACH_LOG(ERROR, kr) << "pid_for_task"; |
119 return false; | 119 return false; |
120 } | 120 } |
121 | 121 |
122 int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; | 122 int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; |
123 size_t len = sizeof(kern_proc_info_); | 123 size_t len = sizeof(kern_proc_info_); |
124 if (sysctl(mib, arraysize(mib), &kern_proc_info_, &len, NULL, 0) != 0) { | 124 if (sysctl(mib, arraysize(mib), &kern_proc_info_, &len, nullptr, 0) != 0) { |
125 PLOG(ERROR) << "sysctl for pid " << pid; | 125 PLOG(ERROR) << "sysctl for pid " << pid; |
126 return false; | 126 return false; |
127 } | 127 } |
128 | 128 |
129 DCHECK_EQ(kern_proc_info_.kp_proc.p_pid, pid); | 129 DCHECK_EQ(kern_proc_info_.kp_proc.p_pid, pid); |
130 | 130 |
131 is_64_bit_ = kern_proc_info_.kp_proc.p_flag & P_LP64; | 131 is_64_bit_ = kern_proc_info_.kp_proc.p_flag & P_LP64; |
132 | 132 |
133 task_memory_.reset(new TaskMemory(task)); | 133 task_memory_.reset(new TaskMemory(task)); |
134 task_ = task; | 134 task_ = task; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 process_types::dyld_all_image_infos all_image_infos; | 388 process_types::dyld_all_image_infos all_image_infos; |
389 if (!all_image_infos.Read(this, dyld_info.all_image_info_addr)) { | 389 if (!all_image_infos.Read(this, dyld_info.all_image_info_addr)) { |
390 LOG(WARNING) << "could not read dyld_all_image_infos"; | 390 LOG(WARNING) << "could not read dyld_all_image_infos"; |
391 return; | 391 return; |
392 } | 392 } |
393 | 393 |
394 DCHECK_GE(all_image_infos.version, 1u); | 394 DCHECK_GE(all_image_infos.version, 1u); |
395 | 395 |
396 // Note that all_image_infos.infoArrayCount may be 0 if a crash occurred while | 396 // Note that all_image_infos.infoArrayCount may be 0 if a crash occurred while |
397 // dyld was loading the executable. This can happen if a required dynamic | 397 // dyld was loading the executable. This can happen if a required dynamic |
398 // library was not found. Similarly, all_image_infos.infoArray may be NULL if | 398 // library was not found. Similarly, all_image_infos.infoArray may be nullptr |
399 // a crash occurred while dyld was updating it. | 399 // if a crash occurred while dyld was updating it. |
400 // | 400 // |
401 // TODO(mark): It may be possible to recover from these situations by looking | 401 // TODO(mark): It may be possible to recover from these situations by looking |
402 // through memory mappings for Mach-O images. | 402 // through memory mappings for Mach-O images. |
403 if (all_image_infos.infoArrayCount == 0) { | 403 if (all_image_infos.infoArrayCount == 0) { |
404 LOG(WARNING) << "all_image_infos.infoArrayCount is zero"; | 404 LOG(WARNING) << "all_image_infos.infoArrayCount is zero"; |
405 return; | 405 return; |
406 } | 406 } |
407 if (!all_image_infos.infoArray) { | 407 if (!all_image_infos.infoArray) { |
408 LOG(WARNING) << "all_image_infos.infoArray is NULL"; | 408 LOG(WARNING) << "all_image_infos.infoArray is nullptr"; |
409 return; | 409 return; |
410 } | 410 } |
411 | 411 |
412 std::vector<process_types::dyld_image_info> image_info_vector( | 412 std::vector<process_types::dyld_image_info> image_info_vector( |
413 all_image_infos.infoArrayCount); | 413 all_image_infos.infoArrayCount); |
414 if (!process_types::dyld_image_info::ReadArrayInto(this, | 414 if (!process_types::dyld_image_info::ReadArrayInto(this, |
415 all_image_infos.infoArray, | 415 all_image_infos.infoArray, |
416 image_info_vector.size(), | 416 image_info_vector.size(), |
417 &image_info_vector[0])) { | 417 &image_info_vector[0])) { |
418 LOG(WARNING) << "could not read dyld_image_info array"; | 418 LOG(WARNING) << "could not read dyld_image_info array"; |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 // The red zone would go lower into another region in memory, but no | 707 // The red zone would go lower into another region in memory, but no |
708 // region was found. Memory can only be captured to an address as low as | 708 // region was found. Memory can only be captured to an address as low as |
709 // the base address of the region already found. | 709 // the base address of the region already found. |
710 *start_address = *region_base; | 710 *start_address = *region_base; |
711 } | 711 } |
712 } | 712 } |
713 #endif | 713 #endif |
714 } | 714 } |
715 | 715 |
716 } // namespace crashpad | 716 } // namespace crashpad |
OLD | NEW |