Index: experimental/visual_studio_plugin/third_party/breakpad/common/module.h |
diff --git a/experimental/visual_studio_plugin/third_party/breakpad/common/module.h b/experimental/visual_studio_plugin/third_party/breakpad/common/module.h |
deleted file mode 100644 |
index 893d8275d949c4f07d1ac338df109d7f14dc0936..0000000000000000000000000000000000000000 |
--- a/experimental/visual_studio_plugin/third_party/breakpad/common/module.h |
+++ /dev/null |
@@ -1,268 +0,0 @@ |
-// -*- mode: c++ -*- |
- |
-// Copyright (c) 2010 Google Inc. |
-// All rights reserved. |
-// |
-// Redistribution and use in source and binary forms, with or without |
-// modification, are permitted provided that the following conditions are |
-// met: |
-// |
-// * Redistributions of source code must retain the above copyright |
-// notice, this list of conditions and the following disclaimer. |
-// * Redistributions in binary form must reproduce the above |
-// copyright notice, this list of conditions and the following disclaimer |
-// in the documentation and/or other materials provided with the |
-// distribution. |
-// * Neither the name of Google Inc. nor the names of its |
-// contributors may be used to endorse or promote products derived from |
-// this software without specific prior written permission. |
-// |
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- |
-// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com> |
- |
-// module.h: Define google_breakpad::Module. A Module holds debugging |
-// information, and can write that information out as a Breakpad |
-// symbol file. |
- |
-#ifndef COMMON_LINUX_MODULE_H__ |
-#define COMMON_LINUX_MODULE_H__ |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
-#include <cstdio> |
- |
-#include "google_breakpad/common/breakpad_types.h" |
- |
-namespace google_breakpad { |
- |
-using std::string; |
-using std::vector; |
-using std::map; |
- |
-// A Module represents the contents of a module, and supports methods |
-// for adding information produced by parsing STABS or DWARF data |
-// --- possibly both from the same file --- and then writing out the |
-// unified contents as a Breakpad-format symbol file. |
-class Module { |
- public: |
- // The type of addresses and sizes in a symbol table. |
- typedef u_int64_t Address; |
- struct File; |
- struct Function; |
- struct Line; |
- |
- // Addresses appearing in File, Function, and Line structures are |
- // absolute, not relative to the the module's load address. That |
- // is, if the module were loaded at its nominal load address, the |
- // addresses would be correct. |
- |
- // A source file. |
- struct File { |
- // The name of the source file. |
- string name; |
- |
- // The file's source id. The Write member function clears this |
- // field and assigns source ids a fresh, so any value placed here |
- // before calling Write will be lost. |
- int source_id; |
- }; |
- |
- // A function. |
- struct Function { |
- // For sorting by address. (Not style-guide compliant, but it's |
- // stupid not to put this in the struct.) |
- static bool CompareByAddress(const Function *x, const Function *y) { |
- return x->address < y->address; |
- } |
- |
- // The function's name. |
- string name; |
- |
- // The start address and length of the function's code. |
- Address address, size; |
- |
- // The function's parameter size. |
- Address parameter_size; |
- |
- // Source lines belonging to this function, sorted by increasing |
- // address. |
- vector<Line> lines; |
- }; |
- |
- // A source line. |
- struct Line { |
- // For sorting by address. (Not style-guide compliant, but it's |
- // stupid not to put this in the struct.) |
- static bool CompareByAddress(const Module::Line &x, const Module::Line &y) { |
- return x.address < y.address; |
- } |
- |
- Address address, size; // The address and size of the line's code. |
- File *file; // The source file. |
- int number; // The source line number. |
- }; |
- |
- // A map from register names to postfix expressions that recover |
- // their their values. This can represent a complete set of rules to |
- // follow at some address, or a set of changes to be applied to an |
- // extant set of rules. |
- typedef map<string, string> RuleMap; |
- |
- // A map from addresses to RuleMaps, representing changes that take |
- // effect at given addresses. |
- typedef map<Address, RuleMap> RuleChangeMap; |
- |
- // A range of 'STACK CFI' stack walking information. An instance of |
- // this structure corresponds to a 'STACK CFI INIT' record and the |
- // subsequent 'STACK CFI' records that fall within its range. |
- struct StackFrameEntry { |
- // The starting address and number of bytes of machine code this |
- // entry covers. |
- Address address, size; |
- |
- // The initial register recovery rules, in force at the starting |
- // address. |
- RuleMap initial_rules; |
- |
- // A map from addresses to rule changes. To find the rules in |
- // force at a given address, start with initial_rules, and then |
- // apply the changes given in this map for all addresses up to and |
- // including the address you're interested in. |
- RuleChangeMap rule_changes; |
- }; |
- |
- // Create a new module with the given name, operating system, |
- // architecture, and ID string. |
- Module(const string &name, const string &os, const string &architecture, |
- const string &id); |
- ~Module(); |
- |
- // Set the module's load address to LOAD_ADDRESS; addresses given |
- // for functions and lines will be written to the Breakpad symbol |
- // file as offsets from this address. Construction initializes this |
- // module's load address to zero: addresses written to the symbol |
- // file will be the same as they appear in the File and Line |
- // structures. |
- void SetLoadAddress(Address load_address); |
- |
- // Add FUNCTION to the module. |
- // This module owns all Function objects added with this function: |
- // destroying the module destroys them as well. |
- void AddFunction(Function *function); |
- |
- // Add all the functions in [BEGIN,END) to the module. |
- // This module owns all Function objects added with this function: |
- // destroying the module destroys them as well. |
- void AddFunctions(vector<Function *>::iterator begin, |
- vector<Function *>::iterator end); |
- |
- // Add STACK_FRAME_ENTRY to the module. |
- // |
- // This module owns all StackFrameEntry objects added with this |
- // function: destroying the module destroys them as well. |
- void AddStackFrameEntry(StackFrameEntry *stack_frame_entry); |
- |
- // If this module has a file named NAME, return a pointer to it. If |
- // it has none, then create one and return a pointer to the new |
- // file. This module owns all File objects created using these |
- // functions; destroying the module destroys them as well. |
- File *FindFile(const string &name); |
- File *FindFile(const char *name); |
- |
- // If this module has a file named NAME, return a pointer to it. |
- // Otherwise, return NULL. |
- File *FindExistingFile(const string &name); |
- |
- // Insert pointers to the functions added to this module at I in |
- // VEC. The pointed-to Functions are still owned by this module. |
- // (Since this is effectively a copy of the function list, this is |
- // mostly useful for testing; other uses should probably get a more |
- // appropriate interface.) |
- void GetFunctions(vector<Function *> *vec, vector<Function *>::iterator i); |
- |
- // Clear VEC and fill it with pointers to the Files added to this |
- // module, sorted by name. The pointed-to Files are still owned by |
- // this module. (Since this is effectively a copy of the file list, |
- // this is mostly useful for testing; other uses should probably get |
- // a more appropriate interface.) |
- void GetFiles(vector<File *> *vec); |
- |
- // Clear VEC and fill it with pointers to the StackFrameEntry |
- // objects that have been added to this module. (Since this is |
- // effectively a copy of the stack frame entry list, this is mostly |
- // useful for testing; other uses should probably get |
- // a more appropriate interface.) |
- void GetStackFrameEntries(vector<StackFrameEntry *> *vec); |
- |
- // Find those files in this module that are actually referred to by |
- // functions' line number data, and assign them source id numbers. |
- // Set the source id numbers for all other files --- unused by the |
- // source line data --- to -1. We do this before writing out the |
- // symbol file, at which point we omit any unused files. |
- void AssignSourceIds(); |
- |
- // Call AssignSourceIds, and write this module to STREAM in the |
- // breakpad symbol format. Return true if all goes well, or false if |
- // an error occurs. This method writes out: |
- // - a header based on the values given to the constructor, |
- // - the source files added via FindFile, and finally |
- // - the functions added via AddFunctions, each with its lines. |
- // Addresses in the output are all relative to the load address |
- // established by SetLoadAddress. |
- bool Write(FILE *stream); |
- |
-private: |
- |
- // Report an error that has occurred writing the symbol file, using |
- // errno to find the appropriate cause. Return false. |
- static bool ReportError(); |
- |
- // Write RULE_MAP to STREAM, in the form appropriate for 'STACK CFI' |
- // records, without a final newline. Return true if all goes well; |
- // if an error occurs, return false, and leave errno set. |
- static bool WriteRuleMap(const RuleMap &rule_map, FILE *stream); |
- |
- // Module header entries. |
- string name_, os_, architecture_, id_; |
- |
- // The module's nominal load address. Addresses for functions and |
- // lines are absolute, assuming the module is loaded at this |
- // address. |
- Address load_address_; |
- |
- // Relation for maps whose keys are strings shared with some other |
- // structure. |
- struct CompareStringPtrs { |
- bool operator()(const string *x, const string *y) const { return *x < *y; }; |
- }; |
- |
- // A map from filenames to File structures. The map's keys are |
- // pointers to the Files' names. |
- typedef map<const string *, File *, CompareStringPtrs> FileByNameMap; |
- |
- // The module owns all the files and functions that have been added |
- // to it; destroying the module frees the Files and Functions these |
- // point to. |
- FileByNameMap files_; // This module's source files. |
- vector<Function *> functions_; // This module's functions. |
- |
- // The module owns all the call frame info entries that have been |
- // added to it. |
- vector<StackFrameEntry *> stack_frame_entries_; |
-}; |
- |
-} // namespace google_breakpad |
- |
-#endif // COMMON_LINUX_MODULE_H__ |