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