Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | |
| 2 // | |
| 3 // Licensed under the Apache License, Version 2.0 (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 | |
| 6 // | |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | |
| 8 // | |
| 9 // Unless required by applicable law or agreed to in writing, software | |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 12 // See the License for the specific language governing permissions and | |
| 13 // limitations under the License. | |
| 14 | |
| 15 #ifndef CRASHPAD_SNAPSHOT_MODULE_SNAPSHOT_H_ | |
| 16 #define CRASHPAD_SNAPSHOT_MODULE_SNAPSHOT_H_ | |
| 17 | |
| 18 #include <stdint.h> | |
| 19 #include <sys/types.h> | |
| 20 | |
| 21 #include <map> | |
| 22 #include <string> | |
| 23 #include <vector> | |
| 24 | |
| 25 #include "util/misc/uuid.h" | |
| 26 | |
| 27 namespace crashpad { | |
| 28 | |
| 29 //! \brief An abstract interface to a snapshot representing a code module | |
| 30 //! (binary image) loaded into a snapshot process. | |
| 31 class ModuleSnapshot { | |
| 32 public: | |
| 33 //! \brief A module’s type. | |
| 34 enum ModuleType { | |
| 35 //! \brief The module’s type is unknown. | |
| 36 kModuleTypeUnknown = 0, | |
| 37 | |
| 38 //! \brief The module is a main executable. | |
| 39 kModuleTypeExecutable, | |
| 40 | |
| 41 //! \brief The module is a shared library. | |
| 42 //! | |
| 43 //! \sa kModuleTypeLoadableModule | |
| 44 kModuleTypeSharedLibrary, | |
| 45 | |
| 46 //! \brief The module is a loadable module. | |
| 47 //! | |
| 48 //! On some platforms, loadable modules are distinguished from shared | |
| 49 //! libraries. On these platforms, a shared library is a module that another | |
| 50 //! module links against directly, and a loadable module is not. Loadable | |
| 51 //! modules tend to be binary plug-ins. | |
| 52 kModuleTypeLoadableModule, | |
| 53 | |
| 54 //! \brief The module is a dynamic loader. | |
| 55 //! | |
| 56 //! This is the module responsible for loading other modules. This is | |
| 57 //! normally `dyld` for Mac OS X and `ld.so` for Linux and other systems | |
| 58 //! using ELF. | |
| 59 kModuleTypeDynamicLoader, | |
| 60 }; | |
| 61 | |
| 62 //! \brief Returns the module’s pathname. | |
| 63 virtual std::string Name() = 0; | |
| 64 | |
| 65 //! \brief Returns the base address that the module is loaded at in the | |
| 66 //! snapshot process. | |
| 67 virtual uint64_t Address() = 0; | |
| 68 | |
| 69 //! \brief Returns the size that the module occupies in the snapshot process’ | |
| 70 //! address space, starting at its base address. | |
| 71 //! | |
| 72 //! For Mac OS X snapshots, this method only reports the size of the `__TEXT` | |
| 73 //! segment, because segments may not be loaded contiguously. | |
| 74 virtual uint64_t Size() = 0; | |
| 75 | |
| 76 //! \brief Returns the module’s timestamp, if known. | |
| 77 //! | |
| 78 //! The timestamp is typically the modification time of the file that provided | |
| 79 //! the module in `time_t` format, seconds since the POSIX epoch. If the | |
| 80 //! module’s timestamp is unknown, this method returns `0`. | |
| 81 virtual time_t Timestamp() = 0; | |
| 82 | |
| 83 //! \brief Returns the module’s file version in the \a version_* parameters. | |
| 84 //! | |
| 85 //! If no file version can be determined, the \a version_* parameters are set | |
| 86 //! to `0`. | |
| 87 //! | |
| 88 //! For Mac OS X snapshots, this is taken from the module’s `LC_ID_DYLIB` load | |
| 89 //! command for shared libraries, and is `0` for other module types. | |
| 90 virtual void FileVersion(uint16_t* version_0, | |
|
Robert Sesek
2014/09/25 15:44:08
Could this take a uint16_t version[4] instead?
Mark Mentovai
2014/10/02 20:27:00
Robert Sesek wrote:
| |
| 91 uint16_t* version_1, | |
| 92 uint16_t* version_2, | |
| 93 uint16_t* version_3) = 0; | |
| 94 | |
| 95 //! \brief Returns the module’s source version in the \a version_* parameters. | |
| 96 //! | |
| 97 //! If no source version can be determined, the \a version_* parameters are | |
| 98 //! set to `0`. | |
| 99 //! | |
| 100 //! For Mac OS X snapshots, this is taken from the module’s | |
| 101 //! `LC_SOURCE_VERSION` load command. | |
| 102 virtual void SourceVersion(uint16_t* version_0, | |
| 103 uint16_t* version_1, | |
| 104 uint16_t* version_2, | |
| 105 uint16_t* version_3) = 0; | |
| 106 | |
| 107 //! \brief Returns the module’s type. | |
| 108 virtual ModuleType GetModuleType() = 0; | |
| 109 | |
| 110 //! \brief Returns the module’s UUID in the \a uuid parameter. | |
| 111 //! | |
| 112 //! A snapshot module’s UUID is taken directly from the module itself. If the | |
| 113 //! module does not have a UUID, the \a uuid parameter will be zeroed out. | |
| 114 virtual void UUID(struct UUID* uuid) = 0; | |
|
Robert Sesek
2014/09/25 15:44:08
crashpad::UUID for consistency with other places?
| |
| 115 | |
| 116 //! \brief Returns diagnostic messages recorded in the module. | |
| 117 //! | |
| 118 //! This method retrieves diagnostic messages recorded in a module. These | |
| 119 //! messages are intended for diagnostic use, including crash analysis. A | |
| 120 //! module may contain multiple diagnostic messages. | |
| 121 //! | |
| 122 //! For Mac OS X snapshots, the diagnostic messages are found by interpreting | |
| 123 //! the module’s `__DATA, __crash_info` section as | |
| 124 //! `crashreporter_annotations_t`. System libraries using the crash reporter | |
| 125 //! client interface may reference diagnostic messages in this structure. | |
| 126 //! Additional diagnostic messages may be found in other locations, which may | |
| 127 //! be module-specific. The dynamic linker (`dyld`) can provide a diagnostic | |
| 128 //! message at its `_error_string` symbol. | |
| 129 virtual std::vector<std::string> DiagnosticMessages() = 0; | |
| 130 | |
| 131 //! \brief Returns simple annotations recorded in the module. | |
| 132 //! | |
| 133 //! This method retrieves simple annotations recorded in a module. These | |
| 134 //! annotations are intended for diagnostic use, including crash analysis. | |
| 135 //! Simple annotations are structured as a sequence of key-value pairs. These | |
| 136 //! are referred to in Chrome as “crash keys.” | |
| 137 //! | |
| 138 //! For Mac OS X snapshots, simple annotations are found by interpreting | |
| 139 //! the `__DATA, __crashpad_info` section as `CrashpadInfo`. Clients can use | |
| 140 //! the Crashpad client interface to store annotations in this structure. | |
| 141 virtual std::map<std::string, std::string> SimpleAnnotations() = 0; | |
| 142 | |
| 143 protected: | |
| 144 ~ModuleSnapshot() {} | |
| 145 }; | |
| 146 | |
| 147 } // namespace crashpad | |
| 148 | |
| 149 #endif // CRASHPAD_SNAPSHOT_MODULE_SNAPSHOT_H_ | |
| OLD | NEW |