libvex_s390x_common.h revision 8f943afc22a6a683b78271836c8ddc462b4824a9
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