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

Unified Diff: snapshot/module_snapshot.h

Issue 597673004: Add the Snapshot interface (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Make everything else const too 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « snapshot/memory_snapshot.h ('k') | snapshot/process_snapshot.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: snapshot/module_snapshot.h
diff --git a/snapshot/module_snapshot.h b/snapshot/module_snapshot.h
new file mode 100644
index 0000000000000000000000000000000000000000..7ebef0448a897ebc20c17679477c180e4931be90
--- /dev/null
+++ b/snapshot/module_snapshot.h
@@ -0,0 +1,149 @@
+// Copyright 2014 The Crashpad Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef CRASHPAD_SNAPSHOT_MODULE_SNAPSHOT_H_
+#define CRASHPAD_SNAPSHOT_MODULE_SNAPSHOT_H_
+
+#include <stdint.h>
+#include <sys/types.h>
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "util/misc/uuid.h"
+
+namespace crashpad {
+
+//! \brief An abstract interface to a snapshot representing a code module
+//! (binary image) loaded into a snapshot process.
+class ModuleSnapshot {
+ public:
+ //! \brief A module’s type.
+ enum ModuleType {
+ //! \brief The module’s type is unknown.
+ kModuleTypeUnknown = 0,
+
+ //! \brief The module is a main executable.
+ kModuleTypeExecutable,
+
+ //! \brief The module is a shared library.
+ //!
+ //! \sa kModuleTypeLoadableModule
+ kModuleTypeSharedLibrary,
+
+ //! \brief The module is a loadable module.
+ //!
+ //! On some platforms, loadable modules are distinguished from shared
+ //! libraries. On these platforms, a shared library is a module that another
+ //! module links against directly, and a loadable module is not. Loadable
+ //! modules tend to be binary plug-ins.
+ kModuleTypeLoadableModule,
+
+ //! \brief The module is a dynamic loader.
+ //!
+ //! This is the module responsible for loading other modules. This is
+ //! normally `dyld` for Mac OS X and `ld.so` for Linux and other systems
+ //! using ELF.
+ kModuleTypeDynamicLoader,
+ };
+
+ //! \brief Returns the module’s pathname.
+ virtual std::string Name() const = 0;
+
+ //! \brief Returns the base address that the module is loaded at in the
+ //! snapshot process.
+ virtual uint64_t Address() const = 0;
+
+ //! \brief Returns the size that the module occupies in the snapshot process’
+ //! address space, starting at its base address.
+ //!
+ //! For Mac OS X snapshots, this method only reports the size of the `__TEXT`
+ //! segment, because segments may not be loaded contiguously.
+ virtual uint64_t Size() const = 0;
+
+ //! \brief Returns the module’s timestamp, if known.
+ //!
+ //! The timestamp is typically the modification time of the file that provided
+ //! the module in `time_t` format, seconds since the POSIX epoch. If the
+ //! module’s timestamp is unknown, this method returns `0`.
+ virtual time_t Timestamp() const = 0;
+
+ //! \brief Returns the module’s file version in the \a version_* parameters.
+ //!
+ //! If no file version can be determined, the \a version_* parameters are set
+ //! to `0`.
+ //!
+ //! For Mac OS X snapshots, this is taken from the module’s `LC_ID_DYLIB` load
+ //! command for shared libraries, and is `0` for other module types.
+ virtual void FileVersion(uint16_t* version_0,
+ uint16_t* version_1,
+ uint16_t* version_2,
+ uint16_t* version_3) const = 0;
+
+ //! \brief Returns the module’s source version in the \a version_* parameters.
+ //!
+ //! If no source version can be determined, the \a version_* parameters are
+ //! set to `0`.
+ //!
+ //! For Mac OS X snapshots, this is taken from the module’s
+ //! `LC_SOURCE_VERSION` load command.
+ virtual void SourceVersion(uint16_t* version_0,
+ uint16_t* version_1,
+ uint16_t* version_2,
+ uint16_t* version_3) const = 0;
+
+ //! \brief Returns the module’s type.
+ virtual ModuleType GetModuleType() const = 0;
+
+ //! \brief Returns the module’s UUID in the \a uuid parameter.
+ //!
+ //! A snapshot module’s UUID is taken directly from the module itself. If the
+ //! module does not have a UUID, the \a uuid parameter will be zeroed out.
+ virtual void UUID(crashpad::UUID* uuid) const = 0;
+
+ //! \brief Returns diagnostic messages recorded in the module.
+ //!
+ //! This method retrieves diagnostic messages recorded in a module. These
+ //! messages are intended for diagnostic use, including crash analysis. A
+ //! module may contain multiple diagnostic messages.
+ //!
+ //! For Mac OS X snapshots, the diagnostic messages are found by interpreting
+ //! the module’s `__DATA, __crash_info` section as
+ //! `crashreporter_annotations_t`. System libraries using the crash reporter
+ //! client interface may reference diagnostic messages in this structure.
+ //! Additional diagnostic messages may be found in other locations, which may
+ //! be module-specific. The dynamic linker (`dyld`) can provide a diagnostic
+ //! message at its `_error_string` symbol.
+ virtual std::vector<std::string> DiagnosticMessages() const = 0;
+
+ //! \brief Returns simple annotations recorded in the module.
+ //!
+ //! This method retrieves simple annotations recorded in a module. These
+ //! annotations are intended for diagnostic use, including crash analysis.
+ //! Simple annotations are structured as a sequence of key-value pairs. These
+ //! are referred to in Chrome as “crash keys.”
+ //!
+ //! For Mac OS X snapshots, simple annotations are found by interpreting
+ //! the `__DATA, __crashpad_info` section as `CrashpadInfo`. Clients can use
+ //! the Crashpad client interface to store annotations in this structure.
+ virtual std::map<std::string, std::string> SimpleAnnotations() const = 0;
+
+ protected:
+ ~ModuleSnapshot() {}
+};
+
+} // namespace crashpad
+
+#endif // CRASHPAD_SNAPSHOT_MODULE_SNAPSHOT_H_
« no previous file with comments | « snapshot/memory_snapshot.h ('k') | snapshot/process_snapshot.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698