1*9712c20fSFrederick Mayle // Copyright (c) 2012, Google Inc. 2*9712c20fSFrederick Mayle // All rights reserved. 3*9712c20fSFrederick Mayle // 4*9712c20fSFrederick Mayle // Redistribution and use in source and binary forms, with or without 5*9712c20fSFrederick Mayle // modification, are permitted provided that the following conditions are 6*9712c20fSFrederick Mayle // met: 7*9712c20fSFrederick Mayle // 8*9712c20fSFrederick Mayle // * Redistributions of source code must retain the above copyright 9*9712c20fSFrederick Mayle // notice, this list of conditions and the following disclaimer. 10*9712c20fSFrederick Mayle // * Redistributions in binary form must reproduce the above 11*9712c20fSFrederick Mayle // copyright notice, this list of conditions and the following disclaimer 12*9712c20fSFrederick Mayle // in the documentation and/or other materials provided with the 13*9712c20fSFrederick Mayle // distribution. 14*9712c20fSFrederick Mayle // * Neither the name of Google Inc. nor the names of its 15*9712c20fSFrederick Mayle // contributors may be used to endorse or promote products derived from 16*9712c20fSFrederick Mayle // this software without specific prior written permission. 17*9712c20fSFrederick Mayle // 18*9712c20fSFrederick Mayle // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19*9712c20fSFrederick Mayle // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20*9712c20fSFrederick Mayle // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21*9712c20fSFrederick Mayle // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22*9712c20fSFrederick Mayle // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23*9712c20fSFrederick Mayle // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24*9712c20fSFrederick Mayle // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25*9712c20fSFrederick Mayle // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26*9712c20fSFrederick Mayle // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*9712c20fSFrederick Mayle // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28*9712c20fSFrederick Mayle // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*9712c20fSFrederick Mayle 30*9712c20fSFrederick Mayle // This header can be included either from a C, C++ or Assembly file. 31*9712c20fSFrederick Mayle // Its purpose is to contain constants that must match the offsets of 32*9712c20fSFrederick Mayle // various fields in ucontext_t. 33*9712c20fSFrederick Mayle // 34*9712c20fSFrederick Mayle // They should match the definitions from 35*9712c20fSFrederick Mayle // src/common/android/include/sys/ucontext.h 36*9712c20fSFrederick Mayle // 37*9712c20fSFrederick Mayle // Used by src/common/android/breakpad_getcontext.S 38*9712c20fSFrederick Mayle // Tested by src/common/android/testing/breakpad_getcontext_unittest.cc 39*9712c20fSFrederick Mayle 40*9712c20fSFrederick Mayle #ifndef GOOGLEBREAKPAD_COMMON_ANDROID_UCONTEXT_CONSTANTS_H 41*9712c20fSFrederick Mayle #define GOOGLEBREAKPAD_COMMON_ANDROID_UCONTEXT_CONSTANTS_H 42*9712c20fSFrederick Mayle 43*9712c20fSFrederick Mayle #if defined(__arm__) 44*9712c20fSFrederick Mayle 45*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_OFFSET 32 46*9712c20fSFrederick Mayle #define UCONTEXT_SIGMASK_OFFSET 104 47*9712c20fSFrederick Mayle 48*9712c20fSFrederick Mayle #elif defined(__aarch64__) 49*9712c20fSFrederick Mayle 50*9712c20fSFrederick Mayle #define UCONTEXT_SIGMASK_OFFSET 40 51*9712c20fSFrederick Mayle 52*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_OFFSET 184 53*9712c20fSFrederick Mayle #define MCONTEXT_SP_OFFSET 432 54*9712c20fSFrederick Mayle #define MCONTEXT_PC_OFFSET 440 55*9712c20fSFrederick Mayle #define MCONTEXT_PSTATE_OFFSET 448 56*9712c20fSFrederick Mayle #define MCONTEXT_EXTENSION_OFFSET 464 57*9712c20fSFrederick Mayle 58*9712c20fSFrederick Mayle #define FPSIMD_MAGIC 0x46508001 59*9712c20fSFrederick Mayle 60*9712c20fSFrederick Mayle #define FPSIMD_CONTEXT_MAGIC_OFFSET 0 61*9712c20fSFrederick Mayle #define FPSIMD_CONTEXT_SIZE_OFFSET 4 62*9712c20fSFrederick Mayle #define FPSIMD_CONTEXT_FPSR_OFFSET 8 63*9712c20fSFrederick Mayle #define FPSIMD_CONTEXT_FPCR_OFFSET 12 64*9712c20fSFrederick Mayle #define FPSIMD_CONTEXT_VREGS_OFFSET 16 65*9712c20fSFrederick Mayle #define FPSIMD_CONTEXT_SIZE 528 66*9712c20fSFrederick Mayle 67*9712c20fSFrederick Mayle #define REGISTER_SIZE 8 68*9712c20fSFrederick Mayle #define SIMD_REGISTER_SIZE 16 69*9712c20fSFrederick Mayle 70*9712c20fSFrederick Mayle #elif defined(__i386__) 71*9712c20fSFrederick Mayle 72*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_OFFSET 20 73*9712c20fSFrederick Mayle #define MCONTEXT_GS_OFFSET (MCONTEXT_GREGS_OFFSET + 0*4) 74*9712c20fSFrederick Mayle #define MCONTEXT_FS_OFFSET (MCONTEXT_GREGS_OFFSET + 1*4) 75*9712c20fSFrederick Mayle #define MCONTEXT_ES_OFFSET (MCONTEXT_GREGS_OFFSET + 2*4) 76*9712c20fSFrederick Mayle #define MCONTEXT_DS_OFFSET (MCONTEXT_GREGS_OFFSET + 3*4) 77*9712c20fSFrederick Mayle #define MCONTEXT_EDI_OFFSET (MCONTEXT_GREGS_OFFSET + 4*4) 78*9712c20fSFrederick Mayle #define MCONTEXT_ESI_OFFSET (MCONTEXT_GREGS_OFFSET + 5*4) 79*9712c20fSFrederick Mayle #define MCONTEXT_EBP_OFFSET (MCONTEXT_GREGS_OFFSET + 6*4) 80*9712c20fSFrederick Mayle #define MCONTEXT_ESP_OFFSET (MCONTEXT_GREGS_OFFSET + 7*4) 81*9712c20fSFrederick Mayle #define MCONTEXT_EBX_OFFSET (MCONTEXT_GREGS_OFFSET + 8*4) 82*9712c20fSFrederick Mayle #define MCONTEXT_EDX_OFFSET (MCONTEXT_GREGS_OFFSET + 9*4) 83*9712c20fSFrederick Mayle #define MCONTEXT_ECX_OFFSET (MCONTEXT_GREGS_OFFSET + 10*4) 84*9712c20fSFrederick Mayle #define MCONTEXT_EAX_OFFSET (MCONTEXT_GREGS_OFFSET + 11*4) 85*9712c20fSFrederick Mayle #define MCONTEXT_TRAPNO_OFFSET (MCONTEXT_GREGS_OFFSET + 12*4) 86*9712c20fSFrederick Mayle #define MCONTEXT_ERR_OFFSET (MCONTEXT_GREGS_OFFSET + 13*4) 87*9712c20fSFrederick Mayle #define MCONTEXT_EIP_OFFSET (MCONTEXT_GREGS_OFFSET + 14*4) 88*9712c20fSFrederick Mayle #define MCONTEXT_CS_OFFSET (MCONTEXT_GREGS_OFFSET + 15*4) 89*9712c20fSFrederick Mayle #define MCONTEXT_EFL_OFFSET (MCONTEXT_GREGS_OFFSET + 16*4) 90*9712c20fSFrederick Mayle #define MCONTEXT_UESP_OFFSET (MCONTEXT_GREGS_OFFSET + 17*4) 91*9712c20fSFrederick Mayle #define MCONTEXT_SS_OFFSET (MCONTEXT_GREGS_OFFSET + 18*4) 92*9712c20fSFrederick Mayle 93*9712c20fSFrederick Mayle #define UCONTEXT_SIGMASK_OFFSET 108 94*9712c20fSFrederick Mayle 95*9712c20fSFrederick Mayle #define UCONTEXT_FPREGS_OFFSET 96 96*9712c20fSFrederick Mayle #define UCONTEXT_FPREGS_MEM_OFFSET 116 97*9712c20fSFrederick Mayle 98*9712c20fSFrederick Mayle #elif defined(__mips__) 99*9712c20fSFrederick Mayle 100*9712c20fSFrederick Mayle #if _MIPS_SIM == _ABIO32 101*9712c20fSFrederick Mayle #define MCONTEXT_PC_OFFSET 32 102*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_OFFSET 40 103*9712c20fSFrederick Mayle #define MCONTEXT_FPREGS_OFFSET 296 104*9712c20fSFrederick Mayle #define MCONTEXT_FPC_CSR 556 105*9712c20fSFrederick Mayle #define UCONTEXT_SIGMASK_OFFSET 616 106*9712c20fSFrederick Mayle #else 107*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_OFFSET 40 108*9712c20fSFrederick Mayle #define MCONTEXT_FPREGS_OFFSET 296 109*9712c20fSFrederick Mayle #define MCONTEXT_PC_OFFSET 616 110*9712c20fSFrederick Mayle #define MCONTEXT_FPC_CSR 624 111*9712c20fSFrederick Mayle #define UCONTEXT_SIGMASK_OFFSET 640 112*9712c20fSFrederick Mayle #endif 113*9712c20fSFrederick Mayle 114*9712c20fSFrederick Mayle #elif defined(__x86_64__) 115*9712c20fSFrederick Mayle 116*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_OFFSET 40 117*9712c20fSFrederick Mayle #define UCONTEXT_SIGMASK_OFFSET 296 118*9712c20fSFrederick Mayle 119*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R8 40 120*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R9 48 121*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R10 56 122*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R11 64 123*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R12 72 124*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R13 80 125*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R14 88 126*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_R15 96 127*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RDI 104 128*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RSI 112 129*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RBP 120 130*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RBX 128 131*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RDX 136 132*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RAX 144 133*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RCX 152 134*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RSP 160 135*9712c20fSFrederick Mayle #define MCONTEXT_GREGS_RIP 168 136*9712c20fSFrederick Mayle #define MCONTEXT_FPREGS_PTR 224 137*9712c20fSFrederick Mayle #define MCONTEXT_FPREGS_MEM 304 138*9712c20fSFrederick Mayle #define FPREGS_OFFSET_MXCSR 24 139*9712c20fSFrederick Mayle 140*9712c20fSFrederick Mayle #else 141*9712c20fSFrederick Mayle #error "This header has not been ported for your CPU" 142*9712c20fSFrederick Mayle #endif 143*9712c20fSFrederick Mayle 144*9712c20fSFrederick Mayle #endif // GOOGLEBREAKPAD_COMMON_ANDROID_UCONTEXT_CONSTANTS_H 145