summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h')
-rw-r--r--toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h405
1 files changed, 0 insertions, 405 deletions
diff --git a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h b/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h
deleted file mode 100644
index dc5d8ae67..000000000
--- a/toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h
+++ /dev/null
@@ -1,405 +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.
-
-// stack_frame_cpu.h: CPU-specific StackFrame extensions.
-//
-// These types extend the StackFrame structure to carry CPU-specific register
-// state. They are defined in this header instead of stack_frame.h to
-// avoid the need to include minidump_format.h when only the generic
-// StackFrame type is needed.
-//
-// Author: Mark Mentovai
-
-#ifndef GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_CPU_H__
-#define GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_CPU_H__
-
-#include "google_breakpad/common/minidump_format.h"
-#include "google_breakpad/processor/stack_frame.h"
-
-namespace google_breakpad {
-
-struct WindowsFrameInfo;
-class CFIFrameInfo;
-
-struct StackFrameX86 : public StackFrame {
- // ContextValidity has one entry for each relevant hardware pointer
- // register (%eip and %esp) and one entry for each general-purpose
- // register. It's worthwhile having validity flags for caller-saves
- // registers: they are valid in the youngest frame, and such a frame
- // might save a callee-saves register in a caller-saves register, but
- // SimpleCFIWalker won't touch registers unless they're marked as valid.
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_EIP = 1 << 0,
- CONTEXT_VALID_ESP = 1 << 1,
- CONTEXT_VALID_EBP = 1 << 2,
- CONTEXT_VALID_EAX = 1 << 3,
- CONTEXT_VALID_EBX = 1 << 4,
- CONTEXT_VALID_ECX = 1 << 5,
- CONTEXT_VALID_EDX = 1 << 6,
- CONTEXT_VALID_ESI = 1 << 7,
- CONTEXT_VALID_EDI = 1 << 8,
- CONTEXT_VALID_ALL = -1
- };
-
- StackFrameX86()
- : context(),
- context_validity(CONTEXT_VALID_NONE),
- windows_frame_info(NULL),
- cfi_frame_info(NULL) {}
- ~StackFrameX86();
-
- // Overriden to return the return address as saved on the stack.
- virtual uint64_t ReturnAddress() const;
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, the values of nonvolatile registers may be
- // present, given sufficient debugging information. Refer to
- // context_validity.
- MDRawContextX86 context;
-
- // context_validity is actually ContextValidity, but int is used because
- // the OR operator doesn't work well with enumerated types. This indicates
- // which fields in context are valid.
- int context_validity;
-
- // Any stack walking information we found describing this.instruction.
- // These may be NULL if there is no such information for that address.
- WindowsFrameInfo *windows_frame_info;
- CFIFrameInfo *cfi_frame_info;
-};
-
-struct StackFramePPC : public StackFrame {
- // ContextValidity should eventually contain entries for the validity of
- // other nonvolatile (callee-save) registers as in
- // StackFrameX86::ContextValidity, but the ppc stackwalker doesn't currently
- // locate registers other than the ones listed here.
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_SRR0 = 1 << 0,
- CONTEXT_VALID_GPR1 = 1 << 1,
- CONTEXT_VALID_ALL = -1
- };
-
- StackFramePPC() : context(), context_validity(CONTEXT_VALID_NONE) {}
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, the values of nonvolatile registers may be
- // present, given sufficient debugging information. Refer to
- // context_validity.
- MDRawContextPPC context;
-
- // context_validity is actually ContextValidity, but int is used because
- // the OR operator doesn't work well with enumerated types. This indicates
- // which fields in context are valid.
- int context_validity;
-};
-
-struct StackFramePPC64 : public StackFrame {
- // ContextValidity should eventually contain entries for the validity of
- // other nonvolatile (callee-save) registers as in
- // StackFrameX86::ContextValidity, but the ppc stackwalker doesn't currently
- // locate registers other than the ones listed here.
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_SRR0 = 1 << 0,
- CONTEXT_VALID_GPR1 = 1 << 1,
- CONTEXT_VALID_ALL = -1
- };
-
- StackFramePPC64() : context(), context_validity(CONTEXT_VALID_NONE) {}
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, the values of nonvolatile registers may be
- // present, given sufficient debugging information. Refer to
- // context_validity.
- MDRawContextPPC64 context;
-
- // context_validity is actually ContextValidity, but int is used because
- // the OR operator doesn't work well with enumerated types. This indicates
- // which fields in context are valid.
- int context_validity;
-};
-
-struct StackFrameAMD64 : public StackFrame {
- // ContextValidity has one entry for each register that we might be able
- // to recover.
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_RAX = 1 << 0,
- CONTEXT_VALID_RDX = 1 << 1,
- CONTEXT_VALID_RCX = 1 << 2,
- CONTEXT_VALID_RBX = 1 << 3,
- CONTEXT_VALID_RSI = 1 << 4,
- CONTEXT_VALID_RDI = 1 << 5,
- CONTEXT_VALID_RBP = 1 << 6,
- CONTEXT_VALID_RSP = 1 << 7,
- CONTEXT_VALID_R8 = 1 << 8,
- CONTEXT_VALID_R9 = 1 << 9,
- CONTEXT_VALID_R10 = 1 << 10,
- CONTEXT_VALID_R11 = 1 << 11,
- CONTEXT_VALID_R12 = 1 << 12,
- CONTEXT_VALID_R13 = 1 << 13,
- CONTEXT_VALID_R14 = 1 << 14,
- CONTEXT_VALID_R15 = 1 << 15,
- CONTEXT_VALID_RIP = 1 << 16,
- CONTEXT_VALID_ALL = -1
- };
-
- StackFrameAMD64() : context(), context_validity(CONTEXT_VALID_NONE) {}
-
- // Overriden to return the return address as saved on the stack.
- virtual uint64_t ReturnAddress() const;
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, which registers are present depends on what
- // debugging information we had available. Refer to context_validity.
- MDRawContextAMD64 context;
-
- // For each register in context whose value has been recovered, we set
- // the corresponding CONTEXT_VALID_ bit in context_validity.
- //
- // context_validity's type should actually be ContextValidity, but
- // we use int instead because the bitwise inclusive or operator
- // yields an int when applied to enum values, and C++ doesn't
- // silently convert from ints to enums.
- int context_validity;
-};
-
-struct StackFrameSPARC : public StackFrame {
- // to be confirmed
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_PC = 1 << 0,
- CONTEXT_VALID_SP = 1 << 1,
- CONTEXT_VALID_FP = 1 << 2,
- CONTEXT_VALID_ALL = -1
- };
-
- StackFrameSPARC() : context(), context_validity(CONTEXT_VALID_NONE) {}
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, the values of nonvolatile registers may be
- // present, given sufficient debugging information. Refer to
- // context_validity.
- MDRawContextSPARC context;
-
- // context_validity is actually ContextValidity, but int is used because
- // the OR operator doesn't work well with enumerated types. This indicates
- // which fields in context are valid.
- int context_validity;
-};
-
-struct StackFrameARM : public StackFrame {
- // A flag for each register we might know.
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_R0 = 1 << 0,
- CONTEXT_VALID_R1 = 1 << 1,
- CONTEXT_VALID_R2 = 1 << 2,
- CONTEXT_VALID_R3 = 1 << 3,
- CONTEXT_VALID_R4 = 1 << 4,
- CONTEXT_VALID_R5 = 1 << 5,
- CONTEXT_VALID_R6 = 1 << 6,
- CONTEXT_VALID_R7 = 1 << 7,
- CONTEXT_VALID_R8 = 1 << 8,
- CONTEXT_VALID_R9 = 1 << 9,
- CONTEXT_VALID_R10 = 1 << 10,
- CONTEXT_VALID_R11 = 1 << 11,
- CONTEXT_VALID_R12 = 1 << 12,
- CONTEXT_VALID_R13 = 1 << 13,
- CONTEXT_VALID_R14 = 1 << 14,
- CONTEXT_VALID_R15 = 1 << 15,
- CONTEXT_VALID_ALL = ~CONTEXT_VALID_NONE,
-
- // Aliases for registers with dedicated or conventional roles.
- CONTEXT_VALID_FP = CONTEXT_VALID_R11,
- CONTEXT_VALID_SP = CONTEXT_VALID_R13,
- CONTEXT_VALID_LR = CONTEXT_VALID_R14,
- CONTEXT_VALID_PC = CONTEXT_VALID_R15
- };
-
- StackFrameARM() : context(), context_validity(CONTEXT_VALID_NONE) {}
-
- // Return the ContextValidity flag for register rN.
- static ContextValidity RegisterValidFlag(int n) {
- return ContextValidity(1 << n);
- }
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, the values of nonvolatile registers may be
- // present, given sufficient debugging information. Refer to
- // context_validity.
- MDRawContextARM context;
-
- // For each register in context whose value has been recovered, we set
- // the corresponding CONTEXT_VALID_ bit in context_validity.
- //
- // context_validity's type should actually be ContextValidity, but
- // we use int instead because the bitwise inclusive or operator
- // yields an int when applied to enum values, and C++ doesn't
- // silently convert from ints to enums.
- int context_validity;
-};
-
-struct StackFrameARM64 : public StackFrame {
- // A flag for each register we might know. Note that we can't use an enum
- // here as there are 33 values to represent.
- static const uint64_t CONTEXT_VALID_NONE = 0;
- static const uint64_t CONTEXT_VALID_X0 = 1ULL << 0;
- static const uint64_t CONTEXT_VALID_X1 = 1ULL << 1;
- static const uint64_t CONTEXT_VALID_X2 = 1ULL << 2;
- static const uint64_t CONTEXT_VALID_X3 = 1ULL << 3;
- static const uint64_t CONTEXT_VALID_X4 = 1ULL << 4;
- static const uint64_t CONTEXT_VALID_X5 = 1ULL << 5;
- static const uint64_t CONTEXT_VALID_X6 = 1ULL << 6;
- static const uint64_t CONTEXT_VALID_X7 = 1ULL << 7;
- static const uint64_t CONTEXT_VALID_X8 = 1ULL << 8;
- static const uint64_t CONTEXT_VALID_X9 = 1ULL << 9;
- static const uint64_t CONTEXT_VALID_X10 = 1ULL << 10;
- static const uint64_t CONTEXT_VALID_X11 = 1ULL << 11;
- static const uint64_t CONTEXT_VALID_X12 = 1ULL << 12;
- static const uint64_t CONTEXT_VALID_X13 = 1ULL << 13;
- static const uint64_t CONTEXT_VALID_X14 = 1ULL << 14;
- static const uint64_t CONTEXT_VALID_X15 = 1ULL << 15;
- static const uint64_t CONTEXT_VALID_X16 = 1ULL << 16;
- static const uint64_t CONTEXT_VALID_X17 = 1ULL << 17;
- static const uint64_t CONTEXT_VALID_X18 = 1ULL << 18;
- static const uint64_t CONTEXT_VALID_X19 = 1ULL << 19;
- static const uint64_t CONTEXT_VALID_X20 = 1ULL << 20;
- static const uint64_t CONTEXT_VALID_X21 = 1ULL << 21;
- static const uint64_t CONTEXT_VALID_X22 = 1ULL << 22;
- static const uint64_t CONTEXT_VALID_X23 = 1ULL << 23;
- static const uint64_t CONTEXT_VALID_X24 = 1ULL << 24;
- static const uint64_t CONTEXT_VALID_X25 = 1ULL << 25;
- static const uint64_t CONTEXT_VALID_X26 = 1ULL << 26;
- static const uint64_t CONTEXT_VALID_X27 = 1ULL << 27;
- static const uint64_t CONTEXT_VALID_X28 = 1ULL << 28;
- static const uint64_t CONTEXT_VALID_X29 = 1ULL << 29;
- static const uint64_t CONTEXT_VALID_X30 = 1ULL << 30;
- static const uint64_t CONTEXT_VALID_X31 = 1ULL << 31;
- static const uint64_t CONTEXT_VALID_X32 = 1ULL << 32;
- static const uint64_t CONTEXT_VALID_ALL = ~CONTEXT_VALID_NONE;
-
- // Aliases for registers with dedicated or conventional roles.
- static const uint64_t CONTEXT_VALID_FP = CONTEXT_VALID_X29;
- static const uint64_t CONTEXT_VALID_LR = CONTEXT_VALID_X30;
- static const uint64_t CONTEXT_VALID_SP = CONTEXT_VALID_X31;
- static const uint64_t CONTEXT_VALID_PC = CONTEXT_VALID_X32;
-
- StackFrameARM64() : context(),
- context_validity(CONTEXT_VALID_NONE) {}
-
- // Return the validity flag for register xN.
- static uint64_t RegisterValidFlag(int n) {
- return 1ULL << n;
- }
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, the values of nonvolatile registers may be
- // present, given sufficient debugging information. Refer to
- // context_validity.
- MDRawContextARM64 context;
-
- // For each register in context whose value has been recovered, we set
- // the corresponding CONTEXT_VALID_ bit in context_validity.
- uint64_t context_validity;
-};
-
-struct StackFrameMIPS : public StackFrame {
- // MIPS callee save registers for o32 ABI (32bit registers) are:
- // 1. $s0-$s7,
- // 2. $sp, $fp
- // 3. $f20-$f31
- //
- // The register structure is available at
- // http://en.wikipedia.org/wiki/MIPS_architecture#Compiler_register_usage
-
-#define INDEX_MIPS_REG_S0 MD_CONTEXT_MIPS_REG_S0 // 16
-#define INDEX_MIPS_REG_S7 MD_CONTEXT_MIPS_REG_S7 // 23
-#define INDEX_MIPS_REG_GP MD_CONTEXT_MIPS_REG_GP // 28
-#define INDEX_MIPS_REG_RA MD_CONTEXT_MIPS_REG_RA // 31
-#define INDEX_MIPS_REG_PC 34
-#define SHIFT_MIPS_REG_S0 0
-#define SHIFT_MIPS_REG_GP 8
-#define SHIFT_MIPS_REG_PC 12
-
- enum ContextValidity {
- CONTEXT_VALID_NONE = 0,
- CONTEXT_VALID_S0 = 1 << 0, // $16
- CONTEXT_VALID_S1 = 1 << 1, // $17
- CONTEXT_VALID_S2 = 1 << 2, // $18
- CONTEXT_VALID_S3 = 1 << 3, // $19
- CONTEXT_VALID_S4 = 1 << 4, // $20
- CONTEXT_VALID_S5 = 1 << 5, // $21
- CONTEXT_VALID_S6 = 1 << 6, // $22
- CONTEXT_VALID_S7 = 1 << 7, // $23
- // GP is not calee-save for o32 abi.
- CONTEXT_VALID_GP = 1 << 8, // $28
- CONTEXT_VALID_SP = 1 << 9, // $29
- CONTEXT_VALID_FP = 1 << 10, // $30
- CONTEXT_VALID_RA = 1 << 11, // $31
- CONTEXT_VALID_PC = 1 << 12, // $34
- CONTEXT_VALID_ALL = ~CONTEXT_VALID_NONE
- };
-
- // Return the ContextValidity flag for register rN.
- static ContextValidity RegisterValidFlag(int n) {
- if (n >= INDEX_MIPS_REG_S0 && n <= INDEX_MIPS_REG_S7)
- return ContextValidity(1 << (n - INDEX_MIPS_REG_S0 + SHIFT_MIPS_REG_S0));
- else if (n >= INDEX_MIPS_REG_GP && n <= INDEX_MIPS_REG_RA)
- return ContextValidity(1 << (n - INDEX_MIPS_REG_GP + SHIFT_MIPS_REG_GP));
- else if (n == INDEX_MIPS_REG_PC)
- return ContextValidity(1 << SHIFT_MIPS_REG_PC);
-
- return CONTEXT_VALID_NONE;
- }
-
- StackFrameMIPS() : context(), context_validity(CONTEXT_VALID_NONE) {}
-
- // Register state. This is only fully valid for the topmost frame in a
- // stack. In other frames, which registers are present depends on what
- // debugging information were available. Refer to 'context_validity' below.
- MDRawContextMIPS context;
-
- // For each register in context whose value has been recovered,
- // the corresponding CONTEXT_VALID_ bit in 'context_validity' is set.
- //
- // context_validity's type should actually be ContextValidity, but
- // type int is used instead because the bitwise inclusive or operator
- // yields an int when applied to enum values, and C++ doesn't
- // silently convert from ints to enums.
- int context_validity;
-};
-
-} // namespace google_breakpad
-
-#endif // GOOGLE_BREAKPAD_PROCESSOR_STACK_FRAME_CPU_H__