summaryrefslogtreecommitdiff
path: root/arch/sparc/include/asm/stack.h
blob: b40a9f355f219f4518a5266fe3932a80981215fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/* SPARC stack layout Macros and structures,
 * mainly taken from BCC (the Bare C compiler for
 * SPARC LEON2/3) sources.
 *
 * (C) Copyright 2007
 * Daniel Hellstrom, Gaisler Research, daniel@gaisler.com.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 *
 */

#ifndef __SPARC_STACK_H__
#define __SPARC_STACK_H__

#include <asm/ptrace.h>

#ifndef __ASSEMBLER__

#ifdef __cplusplus
extern "C" {
#endif

#define PT_REGS_SZ   sizeof(struct pt_regs)

/* A Sparc stack frame */
	struct sparc_stackframe_regs {
		unsigned long sf_locals[8];
		unsigned long sf_ins[6];
		struct sparc_stackframe_regs *sf_fp;
		unsigned long sf_callers_pc;
		char *sf_structptr;
		unsigned long sf_xargs[6];
		unsigned long sf_xxargs[1];
	};
#define SF_REGS_SZ sizeof(struct sparc_stackframe_regs)

/* A register window */
	struct sparc_regwindow_regs {
		unsigned long locals[8];
		unsigned long ins[8];
	};
#define RW_REGS_SZ sizeof(struct sparc_regwindow_regs)

/* A fpu window */
	struct sparc_fpuwindow_regs {
		unsigned long locals[32];
		unsigned long fsr;
		unsigned long lastctx;
	};
#define FW_REGS_SZ sizeof(struct sparc_fpuwindow_regs)

#ifdef __cplusplus
}
#endif
#else
#define PT_REGS_SZ	0x50	/* 20*4 */
#define SF_REGS_SZ	0x60	/* 24*4 */
#define RW_REGS_SZ	0x20	/* 16*4 */
#define FW_REGS_SZ	0x88	/* 34*4 */
#endif				/* !ASM */

/* These are for pt_regs. */
#define PT_PSR		0x0
#define PT_PC		0x4
#define PT_NPC		0x8
#define PT_Y		0xc
#define PT_G0		0x10
#define PT_WIM		PT_G0
#define PT_G1		0x14
#define PT_G2		0x18
#define PT_G3		0x1c
#define PT_G4		0x20
#define PT_G5		0x24
#define PT_G6		0x28
#define PT_G7		0x2c
#define PT_I0		0x30
#define PT_I1		0x34
#define PT_I2		0x38
#define PT_I3		0x3c
#define PT_I4		0x40
#define PT_I5		0x44
#define PT_I6		0x48
#define PT_FP		PT_I6
#define PT_I7		0x4c

/* Stack_frame offsets */
#define SF_L0		0x00
#define SF_L1		0x04
#define SF_L2		0x08
#define SF_L3		0x0c
#define SF_L4		0x10
#define SF_L5		0x14
#define SF_L6		0x18
#define SF_L7		0x1c
#define SF_I0		0x20
#define SF_I1		0x24
#define SF_I2		0x28
#define SF_I3		0x2c
#define SF_I4		0x30
#define SF_I5		0x34
#define SF_FP		0x38
#define SF_PC		0x3c
#define SF_RETP		0x40
#define SF_XARG0	0x44
#define	SF_XARG1	0x48
#define	SF_XARG2	0x4c
#define	SF_XARG3	0x50
#define	SF_XARG4	0x54
#define	SF_XARG5	0x58
#define	SF_XXARG	0x5c

/* Reg_window offsets */
#define RW_L0		0x00
#define RW_L1		0x04
#define RW_L2		0x08
#define RW_L3		0x0c
#define RW_L4		0x10
#define RW_L5		0x14
#define RW_L6		0x18
#define RW_L7		0x1c
#define RW_I0		0x20
#define RW_I1		0x24
#define RW_I2		0x28
#define RW_I3		0x2c
#define RW_I4		0x30
#define RW_I5		0x34
#define RW_I6		0x38
#define RW_I7		0x3c

/* Fpu_window offsets */
#define FW_F0		0x00
#define FW_F2		0x08
#define FW_F4		0x10
#define FW_F6		0x18
#define FW_F8		0x20
#define FW_F10		0x28
#define FW_F12		0x30
#define FW_F14		0x38
#define FW_F16		0x40
#define FW_F18		0x48
#define FW_F20		0x50
#define FW_F22		0x58
#define FW_F24		0x60
#define FW_F26		0x68
#define FW_F28		0x70
#define FW_F30		0x78
#define FW_FSR		0x80

#endif