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

Side by Side Diff: snapshot/mac/mach_o_image_reader.cc

Issue 666483002: Create snapshot/mac and move some files from snapshot and util to there (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad/+/master
Patch Set: Move process_reader, process_types, and mach_o_image*_reader from util/mac to snapshot/mac Created 6 years, 2 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
« no previous file with comments | « snapshot/mac/mach_o_image_reader.h ('k') | snapshot/mac/mach_o_image_reader_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and 12 // See the License for the specific language governing permissions and
13 // limitations under the License. 13 // limitations under the License.
14 14
15 #include "util/mac/mach_o_image_reader.h" 15 #include "snapshot/mac/mach_o_image_reader.h"
16 16
17 #include <mach-o/loader.h> 17 #include <mach-o/loader.h>
18 #include <mach-o/nlist.h> 18 #include <mach-o/nlist.h>
19 #include <string.h> 19 #include <string.h>
20 20
21 #include <limits> 21 #include <limits>
22 #include <vector> 22 #include <vector>
23 23
24 #include "base/logging.h" 24 #include "base/logging.h"
25 #include "base/strings/stringprintf.h" 25 #include "base/strings/stringprintf.h"
26 #include "snapshot/mac/mach_o_image_segment_reader.h"
27 #include "snapshot/mac/mach_o_image_symbol_table_reader.h"
28 #include "snapshot/mac/process_reader.h"
26 #include "util/mac/checked_mach_address_range.h" 29 #include "util/mac/checked_mach_address_range.h"
27 #include "util/mac/mach_o_image_segment_reader.h"
28 #include "util/mac/mach_o_image_symbol_table_reader.h"
29 #include "util/mac/process_reader.h"
30 30
31 namespace { 31 namespace {
32 32
33 const uint32_t kInvalidSegmentIndex = std::numeric_limits<uint32_t>::max(); 33 const uint32_t kInvalidSegmentIndex = std::numeric_limits<uint32_t>::max();
34 34
35 } // namespace 35 } // namespace
36 36
37 namespace crashpad { 37 namespace crashpad {
38 38
39 MachOImageReader::MachOImageReader() 39 MachOImageReader::MachOImageReader()
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 for (MachOImageSegmentReader* segment : segments_) { 260 for (MachOImageSegmentReader* segment : segments_) {
261 segment->SetSlide(slide_); 261 segment->SetSlide(slide_);
262 262
263 // This was already checked for the unslid values while the segments were 263 // This was already checked for the unslid values while the segments were
264 // read, but now it’s possible to check the slid values too. The individual 264 // read, but now it’s possible to check the slid values too. The individual
265 // sections don’t need to be checked because they were verified to be 265 // sections don’t need to be checked because they were verified to be
266 // contained within their respective segments when the segments were read. 266 // contained within their respective segments when the segments were read.
267 mach_vm_address_t slid_segment_address = segment->Address(); 267 mach_vm_address_t slid_segment_address = segment->Address();
268 mach_vm_size_t slid_segment_size = segment->Size(); 268 mach_vm_size_t slid_segment_size = segment->Size();
269 CheckedMachAddressRange slid_segment_range( 269 CheckedMachAddressRange slid_segment_range(
270 process_reader_, slid_segment_address, slid_segment_size); 270 process_reader_->Is64Bit(), slid_segment_address, slid_segment_size);
271 if (!slid_segment_range.IsValid()) { 271 if (!slid_segment_range.IsValid()) {
272 LOG(WARNING) << base::StringPrintf( 272 LOG(WARNING) << base::StringPrintf(
273 "invalid slid segment range 0x%llx + 0x%llx, " 273 "invalid slid segment range 0x%llx + 0x%llx, "
274 "segment ", 274 "segment ",
275 slid_segment_address, 275 slid_segment_address,
276 slid_segment_size) << segment->Name() << module_info_; 276 slid_segment_size) << segment->Name() << module_info_;
277 return false; 277 return false;
278 } 278 }
279 } 279 }
280 280
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 // There, ld takes symbols that refer to anything in the mach_header[_64] and 408 // There, ld takes symbols that refer to anything in the mach_header[_64] and
409 // marks them as being in section 1. Here, section 1 is treated in this same 409 // marks them as being in section 1. Here, section 1 is treated in this same
410 // special way as long as it’s in the __TEXT segment that begins at the start 410 // special way as long as it’s in the __TEXT segment that begins at the start
411 // of the image, which is normally the case, and as long as the symbol’s value 411 // of the image, which is normally the case, and as long as the symbol’s value
412 // is the base of the image. 412 // is the base of the image.
413 // 413 //
414 // This only happens for PIE executables, because __mh_execute_header needs 414 // This only happens for PIE executables, because __mh_execute_header needs
415 // to slide. In non-PIE executables, __mh_execute_header is an absolute 415 // to slide. In non-PIE executables, __mh_execute_header is an absolute
416 // symbol. 416 // symbol.
417 CheckedMachAddressRange section_range( 417 CheckedMachAddressRange section_range(
418 process_reader_, section_address, section->size); 418 process_reader_->Is64Bit(), section_address, section->size);
419 if (!section_range.ContainsValue(slid_value) && 419 if (!section_range.ContainsValue(slid_value) &&
420 !(symbol_info->section == 1 && segment->Name() == SEG_TEXT && 420 !(symbol_info->section == 1 && segment->Name() == SEG_TEXT &&
421 slid_value == Address())) { 421 slid_value == Address())) {
422 std::string section_name_full = 422 std::string section_name_full =
423 MachOImageSegmentReader::SegmentAndSectionNameString(section->segname, 423 MachOImageSegmentReader::SegmentAndSectionNameString(section->segname,
424 section->sectname); 424 section->sectname);
425 LOG(WARNING) << base::StringPrintf( 425 LOG(WARNING) << base::StringPrintf(
426 "symbol %s (0x%llx) outside of section %s (0x%llx + " 426 "symbol %s (0x%llx) outside of section %s (0x%llx + "
427 "0x%llx)", 427 "0x%llx)",
428 name.c_str(), 428 name.c_str(),
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 linkedit_segment, 662 linkedit_segment,
663 module_info_)) { 663 module_info_)) {
664 symbol_table_.reset(); 664 symbol_table_.reset();
665 return; 665 return;
666 } 666 }
667 667
668 symbol_table_initialized_.set_valid(); 668 symbol_table_initialized_.set_valid();
669 } 669 }
670 670
671 } // namespace crashpad 671 } // namespace crashpad
OLDNEW
« no previous file with comments | « snapshot/mac/mach_o_image_reader.h ('k') | snapshot/mac/mach_o_image_reader_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698