OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef MAPS_H__ | |
6 #define MAPS_H__ | |
7 | |
8 #include <elf.h> | |
9 #include <functional> | |
10 #include <map> | |
11 #include <string> | |
12 | |
13 #include "allocator.h" | |
14 | |
15 #if defined(__x86_64__) | |
16 typedef Elf64_Addr Elf_Addr; | |
17 #elif defined(__i386__) | |
18 typedef Elf32_Addr Elf_Addr; | |
19 #else | |
20 #error Undefined target platform | |
21 #endif | |
22 | |
23 namespace playground { | |
24 | |
25 class Library; | |
26 class Maps { | |
27 friend class Library; | |
28 public: | |
29 typedef std::basic_string<char, std::char_traits<char>, | |
30 SystemAllocator<char> > string; | |
31 | |
32 Maps(int proc_self_maps); | |
33 ~Maps() { } | |
34 | |
35 protected: | |
36 // A map with all the libraries currently loaded into the application. | |
37 // The key is a unique combination of device number, inode number, and | |
38 // file name. It should be treated as opaque. | |
39 typedef std::map<string, Library, std::less<string>, | |
40 SystemAllocator<std::pair<const string, | |
41 Library> > > LibraryMap; | |
42 friend class Iterator; | |
43 class Iterator { | |
44 friend class Maps; | |
45 | |
46 protected: | |
47 explicit Iterator(Maps* maps); | |
48 Iterator(Maps* maps, bool at_beginning, bool at_end); | |
49 Maps::LibraryMap::iterator& getIterator() const; | |
50 | |
51 public: | |
52 Iterator begin(); | |
53 Iterator end(); | |
54 Iterator& operator++(); | |
55 Iterator operator++(int i); | |
56 Library* operator*() const; | |
57 bool operator==(const Iterator& iter) const; | |
58 bool operator!=(const Iterator& iter) const; | |
59 string name() const; | |
60 | |
61 protected: | |
62 mutable LibraryMap::iterator iter_; | |
63 Maps *maps_; | |
64 bool at_beginning_; | |
65 bool at_end_; | |
66 }; | |
67 | |
68 public: | |
69 typedef class Iterator const_iterator; | |
70 | |
71 const_iterator begin() { | |
72 return begin_iter_; | |
73 } | |
74 | |
75 const_iterator end() { | |
76 return end_iter_; | |
77 } | |
78 | |
79 char* allocNearAddr(char *addr, size_t size, int prot) const; | |
80 | |
81 char* vsyscall() const { return vsyscall_; } | |
82 | |
83 protected: | |
84 const int proc_self_maps_; | |
85 const Iterator begin_iter_; | |
86 const Iterator end_iter_; | |
87 | |
88 LibraryMap libs_; | |
89 char* vsyscall_; | |
90 }; | |
91 | |
92 } // namespace | |
93 | |
94 #endif // MAPS_H__ | |
OLD | NEW |