Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:13:29

0001 
0002 /*---------------------------------------------------------------*/
0003 /*--- begin                             libvex_guest_mips64.h ---*/
0004 /*---------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2010-2017 RT-RK
0011 
0012    This program is free software; you can redistribute it and/or
0013    modify it under the terms of the GNU General Public License as
0014    published by the Free Software Foundation; either version 2 of the
0015    License, or (at your option) any later version.
0016 
0017    This program is distributed in the hope that it will be useful, but
0018    WITHOUT ANY WARRANTY; without even the implied warranty of
0019    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0020    General Public License for more details.
0021 
0022    You should have received a copy of the GNU General Public License
0023    along with this program; if not, see <http://www.gnu.org/licenses/>.
0024 
0025    The GNU General Public License is contained in the file COPYING.
0026 
0027    Neither the names of the U.S. Department of Energy nor the
0028    University of California nor the names of its contributors may be
0029    used to endorse or promote products derived from this software
0030    without prior written permission.
0031 */
0032 
0033 #ifndef __LIBVEX_PUB_GUEST_MIPS64_H
0034 #define __LIBVEX_PUB_GUEST_MIPS64_H
0035 
0036 #include "libvex_basictypes.h"
0037 #include "libvex_emnote.h"
0038 
0039 
0040 /*---------------------------------------------------------------*/
0041 /*--- Vex's representation of the MIPS64 CPU state.           ---*/
0042 /*---------------------------------------------------------------*/
0043 
0044 typedef
0045    struct {
0046       /*    0 */ ULong host_EvC_FAILADDR;
0047       /*    8 */ UInt host_EvC_COUNTER;
0048       /*   12 */ UInt _padding1;
0049 
0050       /* CPU Registers */
0051       /*   16 */ ULong guest_r0;   /* Hardwired to 0. */
0052       /*   24 */ ULong guest_r1;   /* Assembler temporary */
0053       /*   32 */ ULong guest_r2;   /* Values for function returns ...*/
0054       /*   40 */ ULong guest_r3;   /* ... and expression evaluation */
0055       /*   48 */ ULong guest_r4;   /* Function arguments */
0056       /*   56 */ ULong guest_r5;
0057       /*   64 */ ULong guest_r6;
0058       /*   72 */ ULong guest_r7;
0059       /*   80 */ ULong guest_r8;
0060       /*   88 */ ULong guest_r9;
0061       /*   96 */ ULong guest_r10;
0062       /*  104 */ ULong guest_r11;
0063       /*  112 */ ULong guest_r12;  /* Temporaries */
0064       /*  120 */ ULong guest_r13;
0065       /*  128 */ ULong guest_r14;
0066       /*  136 */ ULong guest_r15;
0067       /*  144 */ ULong guest_r16;  /* Saved temporaries */
0068       /*  152 */ ULong guest_r17;
0069       /*  160 */ ULong guest_r18;
0070       /*  168 */ ULong guest_r19;
0071       /*  176 */ ULong guest_r20;
0072       /*  184 */ ULong guest_r21;
0073       /*  192 */ ULong guest_r22;
0074       /*  200 */ ULong guest_r23;
0075       /*  208 */ ULong guest_r24;  /* Temporaries */
0076       /*  216 */ ULong guest_r25;
0077       /*  224 */ ULong guest_r26;  /* Reserved for OS kernel */
0078       /*  232 */ ULong guest_r27;
0079       /*  240 */ ULong guest_r28;  /* Global pointer */
0080       /*  248 */ ULong guest_r29;  /* Stack pointer */
0081       /*  256 */ ULong guest_r30;  /* Frame pointer */
0082       /*  264 */ ULong guest_r31;  /* Return address */
0083       /*  272 */ ULong guest_PC;   /* Program counter */
0084       /*  280 */ ULong guest_HI;   /* Multiply and divide reg higher result */
0085       /*  288 */ ULong guest_LO;   /* Multiply and divide reg lower result */
0086 
0087       /* FPU Registers */
0088       /*  296 */ ULong guest_f0;   /* Floating point gen. purpose registers */
0089       /*  304 */ ULong guest_f1;
0090       /*  312 */ ULong guest_f2;
0091       /*  320 */ ULong guest_f3;
0092       /*  328 */ ULong guest_f4;
0093       /*  336 */ ULong guest_f5;
0094       /*  344 */ ULong guest_f6;
0095       /*  352 */ ULong guest_f7;
0096       /*  360 */ ULong guest_f8;
0097       /*  368 */ ULong guest_f9;
0098       /*  376 */ ULong guest_f10;
0099       /*  384 */ ULong guest_f11;
0100       /*  392 */ ULong guest_f12;
0101       /*  400 */ ULong guest_f13;
0102       /*  408 */ ULong guest_f14;
0103       /*  416 */ ULong guest_f15;
0104       /*  424 */ ULong guest_f16;
0105       /*  432 */ ULong guest_f17;
0106       /*  440 */ ULong guest_f18;
0107       /*  448 */ ULong guest_f19;
0108       /*  456 */ ULong guest_f20;
0109       /*  464 */ ULong guest_f21;
0110       /*  472 */ ULong guest_f22;
0111       /*  480 */ ULong guest_f23;
0112       /*  488 */ ULong guest_f24;
0113       /*  496 */ ULong guest_f25;
0114       /*  504 */ ULong guest_f26;
0115       /*  512 */ ULong guest_f27;
0116       /*  520 */ ULong guest_f28;
0117       /*  528 */ ULong guest_f29;
0118       /*  536 */ ULong guest_f30;
0119       /*  544 */ ULong guest_f31;
0120 
0121       /*  552 */ UInt guest_FIR;
0122       /*  556 */ UInt guest_FCCR;
0123       /*  560 */ UInt guest_FEXR;
0124       /*  564 */ UInt guest_FENR;
0125       /*  568 */ UInt guest_FCSR;
0126       /*  572 */ UInt guest_CP0_status;
0127 
0128       /* TLS pointer for the thread. It's read-only in user space. On Linux it
0129          is set in user space by various thread-related syscalls.
0130          User Local Register.
0131          This register provides read access to the coprocessor 0
0132          UserLocal register, if it is implemented. In some operating
0133          environments, the UserLocal register is a pointer to a thread-specific
0134          storage block.
0135       */
0136       /*  576 */ ULong guest_ULR;
0137 
0138       /* Emulation notes */
0139       /*  584 */ UInt guest_EMNOTE;
0140       /*  588 */ UInt guest_COND;
0141 
0142       /* For clflush: record start and length of area to invalidate */
0143       /*  592 */ ULong guest_CMSTART;
0144       /*  600 */ ULong guest_CMLEN;
0145 
0146       /*  608 */ ULong guest_NRADDR;
0147 
0148       /*  616 */ ULong guest_LLaddr;
0149       /*  624 */ ULong guest_LLdata;
0150 
0151       /* MIPS32 MSA 128-bit vector registers */
0152       /*  632 */ V128 guest_w0;
0153       /*  648 */ V128 guest_w1;
0154       /*  664 */ V128 guest_w2;
0155       /*  680 */ V128 guest_w3;
0156       /*  696 */ V128 guest_w4;
0157       /*  712 */ V128 guest_w5;
0158       /*  728 */ V128 guest_w6;
0159       /*  744 */ V128 guest_w7;
0160       /*  760 */ V128 guest_w8;
0161       /*  776 */ V128 guest_w9;
0162       /*  792 */ V128 guest_w10;
0163       /*  808 */ V128 guest_w11;
0164       /*  824 */ V128 guest_w12;
0165       /*  840 */ V128 guest_w13;
0166       /*  856 */ V128 guest_w14;
0167       /*  872 */ V128 guest_w15;
0168       /*  888 */ V128 guest_w16;
0169       /*  904 */ V128 guest_w17;
0170       /*  920 */ V128 guest_w18;
0171       /*  936 */ V128 guest_w19;
0172       /*  952 */ V128 guest_w20;
0173       /*  968 */ V128 guest_w21;
0174       /*  984 */ V128 guest_w22;
0175       /* 1000 */ V128 guest_w23;
0176       /* 1016 */ V128 guest_w24;
0177       /* 1032 */ V128 guest_w25;
0178       /* 1048 */ V128 guest_w26;
0179       /* 1064 */ V128 guest_w27;
0180       /* 1080 */ V128 guest_w28;
0181       /* 1096 */ V128 guest_w29;
0182       /* 1112 */ V128 guest_w30;
0183       /* 1128 */ V128 guest_w31;
0184       /* 1144 */ UInt guest_MSACSR;
0185 
0186       /* 1148 */ UInt _padding2;
0187 
0188 } VexGuestMIPS64State;
0189 
0190 /*---------------------------------------------------------------*/
0191 /*--- Utility functions for MIPS64 guest stuff.               ---*/
0192 /*---------------------------------------------------------------*/
0193 
0194 /* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT. */
0195 
0196 /* Initialise all guest MIPS64 state. */
0197 
0198 extern
0199 void LibVEX_GuestMIPS64_initialise ( /*OUT*/VexGuestMIPS64State* vex_state );
0200 
0201 /* FR bit of CP0_STATUS_FR register */
0202 #define MIPS_CP0_STATUS_FR (1ul << 26)
0203 
0204 #endif /* ndef __LIBVEX_PUB_GUEST_MIPS64_H */
0205 
0206 /*---------------------------------------------------------------*/
0207 /*---                                   libvex_guest_mips64.h ---*/
0208 /*---------------------------------------------------------------*/
0209