• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*--------------------------------------------------------------------*/
3 /*--- Common defs for s390x                  libvex_s390x_common.h ---*/
4 /*--------------------------------------------------------------------*/
5 
6 /*
7    This file is part of Valgrind, a dynamic binary instrumentation
8    framework.
9 
10    Copyright IBM Corp. 2010-2011
11 
12    This program is free software; you can redistribute it and/or
13    modify it under the terms of the GNU General Public License as
14    published by the Free Software Foundation; either version 2 of the
15    License, or (at your option) any later version.
16 
17    This program is distributed in the hope that it will be useful, but
18    WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20    General Public License for more details.
21 
22    You should have received a copy of the GNU General Public License
23    along with this program; if not, write to the Free Software
24    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25    02110-1301, USA.
26 
27    The GNU General Public License is contained in the file COPYING.
28 */
29 
30 /* -*- mode: C; c-basic-offset: 3; -*- */
31 
32 #ifndef __LIBVEX_PUB_S390X_H
33 #define __LIBVEX_PUB_S390X_H
34 
35 /* This file includes definitions for s390.
36 
37    It must be suitable for inclusion in assembler source files. */
38 
39 
40 /*--------------------------------------------------------------*/
41 /*--- Dedicated registers                                    ---*/
42 /*--------------------------------------------------------------*/
43 
44 #define S390_REGNO_RETURN_VALUE         2
45 #define S390_REGNO_DISPATCH_CTR        12   /* Holds VG_(dispatch_ctr) */
46 #define S390_REGNO_GUEST_STATE_POINTER 13
47 #define S390_REGNO_LINK_REGISTER       14
48 #define S390_REGNO_STACK_POINTER       15
49 
50 
51 /*--------------------------------------------------------------*/
52 /*--- Offsets in the stack frame allocated by the dispatcher ---*/
53 /*--------------------------------------------------------------*/
54 
55 /* Where the profiling dispatcher saves the r2 contents. */
56 #define S390_OFFSET_SAVED_R2 160+96
57 
58 /* Where client's FPC register is saved. */
59 #define S390_OFFSET_SAVED_FPC_C 160+88
60 
61 /* Where valgrind's FPC register is saved. */
62 #define S390_OFFSET_SAVED_FPC_V 160+80
63 
64 /* Where client code will save the link register before calling a helper. */
65 #define S390_OFFSET_SAVED_LR 160+72
66 
67 /* Location of saved guest state pointer */
68 #define S390_OFFSET_SAVED_GSP 160+64
69 
70 /* Size of frame allocated by VG_(run_innerloop)
71    Need size for
72        8 FPRs
73      + 3 GPRs (SAVED_GSP, SAVED_LR, and SAVED_R2)
74      + 2 FPCs (SAVED_FPC_C and SAVED_FPC_V).
75 
76    Additionally, we need a standard frame for helper functions being called
77    from client code. (See figure 1-16 in zSeries ABI) */
78 #define S390_INNERLOOP_FRAME_SIZE ((8+3+2)*8 + 160)
79 
80 
81 /*--------------------------------------------------------------*/
82 /*--- Miscellaneous                                          ---*/
83 /*--------------------------------------------------------------*/
84 
85 /* Number of arguments that can be passed in registers */
86 #define S390_NUM_GPRPARMS 5
87 
88 /* Number of double words needed to store all facility bits. */
89 #define S390_NUM_FACILITY_DW 2
90 
91 #endif /* __LIBVEX_PUB_S390X_H */
92 
93 /*--------------------------------------------------------------------*/
94 /*--- end                                    libvex_s390x_common.h ---*/
95 /*--------------------------------------------------------------------*/
96