1 2 /*---------------------------------------------------------------*/ 3 /*--- begin libvex_guest_mips32.h ---*/ 4 /*---------------------------------------------------------------*/ 5 6 /* 7 This file is part of Valgrind, a dynamic binary instrumentation 8 framework. 9 10 Copyright (C) 2010-2012 RT-RK 11 mips-valgrind@rt-rk.com 12 13 This program is free software; you can redistribute it and/or 14 modify it under the terms of the GNU General Public License as 15 published by the Free Software Foundation; either version 2 of the 16 License, or (at your option) any later version. 17 18 This program is distributed in the hope that it will be useful, but 19 WITHOUT ANY WARRANTY; without even the implied warranty of 20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 General Public License for more details. 22 23 You should have received a copy of the GNU General Public License 24 along with this program; if not, write to the Free Software 25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26 02111-1307, USA. 27 28 The GNU General Public License is contained in the file COPYING. 29 */ 30 31 #ifndef __LIBVEX_PUB_GUEST_MIPS32_H 32 #define __LIBVEX_PUB_GUEST_MIPS32_H 33 34 #include "libvex_basictypes.h" 35 #include "libvex_emwarn.h" 36 37 38 /*---------------------------------------------------------------*/ 39 /*--- Vex's representation of the MIPS32 CPU state. ---*/ 40 /*---------------------------------------------------------------*/ 41 42 typedef 43 struct { 44 /* CPU Registers */ 45 /* 0 */ UInt guest_r0; /* Hardwired to 0 */ 46 /* 4 */ UInt guest_r1; /* Assembler temporary */ 47 /* 8 */ UInt guest_r2; /* Values for function returns ...*/ 48 /* 12 */ UInt guest_r3; /* ...and expression evaluation */ 49 /* 16 */ UInt guest_r4; /* Function arguments */ 50 /* 20 */ UInt guest_r5; 51 /* 24 */ UInt guest_r6; 52 /* 28 */ UInt guest_r7; 53 /* 32 */ UInt guest_r8; /* Temporaries */ 54 /* 36 */ UInt guest_r9; 55 /* 40 */ UInt guest_r10; 56 /* 44 */ UInt guest_r11; 57 /* 48 */ UInt guest_r12; 58 /* 52 */ UInt guest_r13; 59 /* 56 */ UInt guest_r14; 60 /* 60 */ UInt guest_r15; 61 /* 64 */ UInt guest_r16; /* Saved temporaries */ 62 /* 68 */ UInt guest_r17; 63 /* 72 */ UInt guest_r18; 64 /* 76 */ UInt guest_r19; 65 /* 80 */ UInt guest_r20; 66 /* 84 */ UInt guest_r21; 67 /* 88 */ UInt guest_r22; 68 /* 92 */ UInt guest_r23; 69 /* 96 */ UInt guest_r24; /* Temporaries */ 70 /* 100 */ UInt guest_r25; 71 /* 104 */ UInt guest_r26; /* Reserved for OS kernel */ 72 /* 108 */ UInt guest_r27; 73 /* 112 */ UInt guest_r28; /* Global pointer */ 74 /* 116 */ UInt guest_r29; /* Stack pointer */ 75 /* 120 */ UInt guest_r30; /* Frame pointer */ 76 /* 124 */ UInt guest_r31; /* Return address */ 77 /* 128 */ UInt guest_PC; /* Program counter */ 78 /* 132 */ UInt guest_HI;/* Multiply and divide register higher result */ 79 /* 136 */ UInt guest_LO;/* Multiply and divide register lower result */ 80 81 /* FPU Registers */ 82 /* 140 */ UInt guest_f0; /* Floting point general purpose registers */ 83 /* 144 */ UInt guest_f1; 84 /* 148 */ UInt guest_f2; 85 /* 152 */ UInt guest_f3; 86 /* 156 */ UInt guest_f4; 87 /* 160 */ UInt guest_f5; 88 /* 164 */ UInt guest_f6; 89 /* 168 */ UInt guest_f7; 90 /* 172 */ UInt guest_f8; 91 /* 176 */ UInt guest_f9; 92 /* 180 */ UInt guest_f10; 93 /* 184 */ UInt guest_f11; 94 /* 188 */ UInt guest_f12; 95 /* 192 */ UInt guest_f13; 96 /* 196 */ UInt guest_f14; 97 /* 200 */ UInt guest_f15; 98 /* 204 */ UInt guest_f16; 99 /* 208 */ UInt guest_f17; 100 /* 212 */ UInt guest_f18; 101 /* 216 */ UInt guest_f19; 102 /* 220 */ UInt guest_f20; 103 /* 224 */ UInt guest_f21; 104 /* 228 */ UInt guest_f22; 105 /* 232 */ UInt guest_f23; 106 /* 236 */ UInt guest_f24; 107 /* 240 */ UInt guest_f25; 108 /* 244 */ UInt guest_f26; 109 /* 248 */ UInt guest_f27; 110 /* 252 */ UInt guest_f28; 111 /* 256 */ UInt guest_f29; 112 /* 260 */ UInt guest_f30; 113 /* 264 */ UInt guest_f31; 114 115 /* 268 */ UInt guest_FIR; 116 /* 272 */ UInt guest_FCCR; 117 /* 276 */ UInt guest_FEXR; 118 /* 280 */ UInt guest_FENR; 119 /* 284 */ UInt guest_FCSR; 120 121 /* TLS pointer for the thread. It's read-only in user space. 122 On Linux it is set in user space by various thread-related 123 syscalls. 124 User Local Register. 125 This register provides read access to the coprocessor 0 126 UserLocal register, if it is implemented. In some operating 127 environments, the UserLocal register is a pointer to a 128 thread-specific storage block. 129 */ 130 /* 288 */ UInt guest_ULR; 131 132 /* Emulation warnings */ 133 UInt guest_EMWARN; /* 292 */ 134 135 /* For clflush: record start and length of area to invalidate */ 136 UInt guest_TISTART; /* 296 */ 137 UInt guest_TILEN; /* 300 */ 138 UInt guest_NRADDR; /* 304 */ 139 140 UInt host_EvC_FAILADDR; /* 308 */ 141 UInt host_EvC_COUNTER; /* 312 */ 142 UInt guest_COND; /* 316 */ 143 } VexGuestMIPS32State; 144 /*---------------------------------------------------------------*/ 145 /*--- Utility functions for MIPS32 guest stuff. ---*/ 146 /*---------------------------------------------------------------*/ 147 148 /* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT */ 149 150 /* Initialise all guest MIPS32 state. */ 151 152 extern 153 void LibVEX_GuestMIPS32_initialise ( /*OUT*/VexGuestMIPS32State* vex_state ); 154 155 156 #endif /* ndef __LIBVEX_PUB_GUEST_MIPS32_H */ 157 158 159 /*---------------------------------------------------------------*/ 160 /*--- libvex_guest_mips32.h ---*/ 161 /*---------------------------------------------------------------*/ 162