Home | History | Annotate | Download | only in pub
      1 /* -*- mode: C; c-basic-offset: 3; -*- */
      2 
      3 /*---------------------------------------------------------------*/
      4 /*--- begin                              libvex_guest_s390x.h ---*/
      5 /*---------------------------------------------------------------*/
      6 
      7 /*
      8    This file is part of Valgrind, a dynamic binary instrumentation
      9    framework.
     10 
     11    Copyright IBM Corp. 2010-2012
     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., 51 Franklin Street, Fifth Floor, Boston, MA
     26    02110-1301, USA.
     27 
     28    The GNU General Public License is contained in the file COPYING.
     29 */
     30 
     31 #ifndef __LIBVEX_PUB_GUEST_S390X_H
     32 #define __LIBVEX_PUB_GUEST_S390X_H
     33 
     34 #include "libvex_basictypes.h"
     35 #include "libvex_emwarn.h"
     36 
     37 /*------------------------------------------------------------*/
     38 /*--- Vex's representation of the s390 CPU state.          ---*/
     39 /*------------------------------------------------------------*/
     40 
     41 typedef struct {
     42 
     43 /*------------------------------------------------------------*/
     44 /*--- ar registers                                         ---*/
     45 /*------------------------------------------------------------*/
     46 
     47    /*    0 */  UInt guest_a0;
     48    /*    4 */  UInt guest_a1;
     49    /*    8 */  UInt guest_a2;
     50    /*   12 */  UInt guest_a3;
     51    /*   16 */  UInt guest_a4;
     52    /*   20 */  UInt guest_a5;
     53    /*   24 */  UInt guest_a6;
     54    /*   28 */  UInt guest_a7;
     55    /*   32 */  UInt guest_a8;
     56    /*   36 */  UInt guest_a9;
     57    /*   40 */  UInt guest_a10;
     58    /*   44 */  UInt guest_a11;
     59    /*   48 */  UInt guest_a12;
     60    /*   52 */  UInt guest_a13;
     61    /*   56 */  UInt guest_a14;
     62    /*   60 */  UInt guest_a15;
     63 
     64 /*------------------------------------------------------------*/
     65 /*--- fpr registers                                        ---*/
     66 /*------------------------------------------------------------*/
     67 
     68    /*   64 */  ULong guest_f0;
     69    /*   72 */  ULong guest_f1;
     70    /*   80 */  ULong guest_f2;
     71    /*   88 */  ULong guest_f3;
     72    /*   96 */  ULong guest_f4;
     73    /*  104 */  ULong guest_f5;
     74    /*  112 */  ULong guest_f6;
     75    /*  120 */  ULong guest_f7;
     76    /*  128 */  ULong guest_f8;
     77    /*  136 */  ULong guest_f9;
     78    /*  144 */  ULong guest_f10;
     79    /*  152 */  ULong guest_f11;
     80    /*  160 */  ULong guest_f12;
     81    /*  168 */  ULong guest_f13;
     82    /*  176 */  ULong guest_f14;
     83    /*  184 */  ULong guest_f15;
     84 
     85 /*------------------------------------------------------------*/
     86 /*--- gpr registers                                        ---*/
     87 /*------------------------------------------------------------*/
     88 
     89    /*  192 */  ULong guest_r0;
     90    /*  200 */  ULong guest_r1;
     91    /*  208 */  ULong guest_r2;
     92    /*  216 */  ULong guest_r3;
     93    /*  224 */  ULong guest_r4;
     94    /*  232 */  ULong guest_r5;
     95    /*  240 */  ULong guest_r6;
     96    /*  248 */  ULong guest_r7;
     97    /*  256 */  ULong guest_r8;
     98    /*  264 */  ULong guest_r9;
     99    /*  272 */  ULong guest_r10;
    100    /*  280 */  ULong guest_r11;
    101    /*  288 */  ULong guest_r12;
    102    /*  296 */  ULong guest_r13;
    103    /*  304 */  ULong guest_r14;
    104    /*  312 */  ULong guest_r15;
    105 
    106 /*------------------------------------------------------------*/
    107 /*--- S390 miscellaneous registers                         ---*/
    108 /*------------------------------------------------------------*/
    109 
    110    /*  320 */  ULong guest_counter;
    111    /*  328 */  UInt guest_fpc;
    112    /*  332 */  UChar unused[4]; /* 4-byte hole to get 8-byte alignment */
    113    /*  336 */  ULong guest_IA;
    114 
    115 /*------------------------------------------------------------*/
    116 /*--- S390 pseudo registers                                ---*/
    117 /*------------------------------------------------------------*/
    118 
    119    /*  344 */  ULong guest_SYSNO;
    120 
    121 /*------------------------------------------------------------*/
    122 /*--- 4-word thunk used to calculate the condition code    ---*/
    123 /*------------------------------------------------------------*/
    124 
    125    /*  352 */  ULong guest_CC_OP;
    126    /*  360 */  ULong guest_CC_DEP1;
    127    /*  368 */  ULong guest_CC_DEP2;
    128    /*  376 */  ULong guest_CC_NDEP;
    129 
    130 /*------------------------------------------------------------*/
    131 /*--- Pseudo registers. Required by all architectures      ---*/
    132 /*------------------------------------------------------------*/
    133 
    134    /* See comments at bottom of libvex.h */
    135    /*  384 */  ULong guest_NRADDR;
    136    /*  392 */  ULong guest_TISTART;
    137    /*  400 */  ULong guest_TILEN;
    138 
    139    /* Used when backing up to restart a syscall that has
    140       been interrupted by a signal. See also comment in
    141       libvex_ir.h */
    142    /*  408 */  ULong guest_IP_AT_SYSCALL;
    143 
    144    /* Emulation warnings; see comments in libvex_emwarn.h */
    145    /*  416 */  UInt guest_EMWARN;
    146 
    147    /* For translation chaining */
    148    /*  420 */  UInt  host_EvC_COUNTER;
    149    /*  424 */  ULong host_EvC_FAILADDR;
    150 
    151 /*------------------------------------------------------------*/
    152 /*--- Force alignment to 32 bytes                          ---*/
    153 /*------------------------------------------------------------*/
    154    /*  432 */  UChar padding[16];
    155 
    156    /*  448 */  /* This is the size of the guest state */
    157 } VexGuestS390XState;
    158 
    159 
    160 /*------------------------------------------------------------*/
    161 /*--- Function prototypes                                  ---*/
    162 /*------------------------------------------------------------*/
    163 
    164 void LibVEX_GuestS390X_initialise(VexGuestS390XState *);
    165 
    166 /*------------------------------------------------------------*/
    167 /*--- Dedicated registers                                  ---*/
    168 /*------------------------------------------------------------*/
    169 
    170 #define guest_LR guest_r14  /* Link register */
    171 #define guest_SP guest_r15  /* Stack pointer */
    172 #define guest_FP guest_r11  /* Frame pointer */
    173 
    174 /*---------------------------------------------------------------*/
    175 /*--- end                                libvex_guest_s390x.h ---*/
    176 /*---------------------------------------------------------------*/
    177 
    178 #endif /* __LIBVEX_PUB_GUEST_S390X_H */
    179