diff options
Diffstat (limited to 'toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h')
-rw-r--r-- | toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h deleted file mode 100644 index b55eb9c75..000000000 --- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2006, 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. - -#ifndef GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_H__ -#define GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_H__ - -#include <string> - -#include "common/using_std_string.h" -#include "google_breakpad/common/breakpad_types.h" - -namespace google_breakpad { - -class CodeModule; - -struct StackFrame { - // Indicates how well the instruction pointer derived during - // stack walking is trusted. Since the stack walker can resort to - // stack scanning, it can wind up with dubious frames. - // In rough order of "trust metric". - enum FrameTrust { - FRAME_TRUST_NONE, // Unknown - FRAME_TRUST_SCAN, // Scanned the stack, found this - FRAME_TRUST_CFI_SCAN, // Found while scanning stack using call frame info - FRAME_TRUST_FP, // Derived from frame pointer - FRAME_TRUST_CFI, // Derived from call frame info - FRAME_TRUST_PREWALKED, // Explicitly provided by some external stack walker. - FRAME_TRUST_CONTEXT // Given as instruction pointer in a context - }; - - StackFrame() - : instruction(), - module(NULL), - function_name(), - function_base(), - source_file_name(), - source_line(), - source_line_base(), - trust(FRAME_TRUST_NONE) {} - virtual ~StackFrame() {} - - // Return a string describing how this stack frame was found - // by the stackwalker. - string trust_description() const { - switch (trust) { - case StackFrame::FRAME_TRUST_CONTEXT: - return "given as instruction pointer in context"; - case StackFrame::FRAME_TRUST_PREWALKED: - return "recovered by external stack walker"; - case StackFrame::FRAME_TRUST_CFI: - return "call frame info"; - case StackFrame::FRAME_TRUST_CFI_SCAN: - return "call frame info with scanning"; - case StackFrame::FRAME_TRUST_FP: - return "previous frame's frame pointer"; - case StackFrame::FRAME_TRUST_SCAN: - return "stack scanning"; - default: - return "unknown"; - } - }; - - // Return the actual return address, as saved on the stack or in a - // register. See the comments for 'instruction', below, for details. - virtual uint64_t ReturnAddress() const { return instruction; } - - // The program counter location as an absolute virtual address. - // - // - For the innermost called frame in a stack, this will be an exact - // program counter or instruction pointer value. - // - // - For all other frames, this address is within the instruction that - // caused execution to branch to this frame's callee (although it may - // not point to the exact beginning of that instruction). This ensures - // that, when we look up the source code location for this frame, we - // get the source location of the call, not of the point at which - // control will resume when the call returns, which may be on the next - // line. (If the compiler knows the callee never returns, it may even - // place the call instruction at the very end of the caller's machine - // code, such that the "return address" (which will never be used) - // immediately after the call instruction is in an entirely different - // function, perhaps even from a different source file.) - // - // On some architectures, the return address as saved on the stack or in - // a register is fine for looking up the point of the call. On others, it - // requires adjustment. ReturnAddress returns the address as saved by the - // machine. - uint64_t instruction; - - // The module in which the instruction resides. - const CodeModule *module; - - // The function name, may be omitted if debug symbols are not available. - string function_name; - - // The start address of the function, may be omitted if debug symbols - // are not available. - uint64_t function_base; - - // The source file name, may be omitted if debug symbols are not available. - string source_file_name; - - // The (1-based) source line number, may be omitted if debug symbols are - // not available. - int source_line; - - // The start address of the source line, may be omitted if debug symbols - // are not available. - uint64_t source_line_base; - - // Amount of trust the stack walker has in the instruction pointer - // of this frame. - FrameTrust trust; -}; - -} // namespace google_breakpad - -#endif // GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_H__ |