include/opcode/
[deliverable/binutils-gdb.git] / gdb / sparc-tdep.h
CommitLineData
386c036b 1/* Target-dependent code for SPARC.
c139e7d9 2
0b302171 3 Copyright (C) 2003-2004, 2006-2012 Free Software Foundation, Inc.
c139e7d9
DJ
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c139e7d9
DJ
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c139e7d9 19
386c036b
MK
20#ifndef SPARC_TDEP_H
21#define SPARC_TDEP_H 1
22
566626fa 23struct frame_info;
386c036b
MK
24struct gdbarch;
25struct regcache;
a54124c5 26struct regset;
386c036b
MK
27struct trad_frame_saved_reg;
28
29/* Register offsets for the general-purpose register set. */
30
31struct sparc_gregset
32{
33 int r_psr_offset;
34 int r_pc_offset;
35 int r_npc_offset;
36 int r_y_offset;
37 int r_wim_offset;
38 int r_tbr_offset;
39 int r_g1_offset;
40 int r_l0_offset;
41 int r_y_size;
42};
43
44/* SPARC architecture-specific information. */
45
46struct gdbarch_tdep
47{
48 /* Register numbers for the PN and nPC registers. The definitions
49 for (64-bit) UltraSPARC differ from the (32-bit) SPARC
50 definitions. */
51 int pc_regnum;
52 int npc_regnum;
53
a54124c5
MK
54 /* Register sets. */
55 struct regset *gregset;
56 size_t sizeof_gregset;
57 struct regset *fpregset;
58 size_t sizeof_fpregset;
59
386c036b
MK
60 /* Offset of saved PC in jmp_buf. */
61 int jb_pc_offset;
62
63 /* Size of an Procedure Linkage Table (PLT) entry, 0 if we shouldn't
64 treat the PLT special when doing prologue analysis. */
65 size_t plt_entry_size;
c893be75
MK
66
67 /* Alternative location for trap return. Used for single-stepping. */
0b1b3e42 68 CORE_ADDR (*step_trap) (struct frame_info *frame, unsigned long insn);
209bd28e
UW
69
70 /* ISA-specific data types. */
71 struct type *sparc_psr_type;
72 struct type *sparc_fsr_type;
73 struct type *sparc64_pstate_type;
74 struct type *sparc64_fsr_type;
75 struct type *sparc64_fprs_type;
386c036b
MK
76};
77
78/* Register numbers of various important registers. */
79
80enum sparc_regnum
81{
82 SPARC_G0_REGNUM, /* %g0 */
83 SPARC_G1_REGNUM,
84 SPARC_G2_REGNUM,
85 SPARC_G3_REGNUM,
86 SPARC_G4_REGNUM,
87 SPARC_G5_REGNUM,
88 SPARC_G6_REGNUM,
89 SPARC_G7_REGNUM, /* %g7 */
90 SPARC_O0_REGNUM, /* %o0 */
91 SPARC_O1_REGNUM,
92 SPARC_O2_REGNUM,
93 SPARC_O3_REGNUM,
94 SPARC_O4_REGNUM,
95 SPARC_O5_REGNUM,
96 SPARC_SP_REGNUM, /* %sp (%o6) */
97 SPARC_O7_REGNUM, /* %o7 */
98 SPARC_L0_REGNUM, /* %l0 */
99 SPARC_L1_REGNUM,
100 SPARC_L2_REGNUM,
101 SPARC_L3_REGNUM,
102 SPARC_L4_REGNUM,
103 SPARC_L5_REGNUM,
104 SPARC_L6_REGNUM,
105 SPARC_L7_REGNUM, /* %l7 */
106 SPARC_I0_REGNUM, /* %i0 */
107 SPARC_I1_REGNUM,
108 SPARC_I2_REGNUM,
109 SPARC_I3_REGNUM,
110 SPARC_I4_REGNUM,
111 SPARC_I5_REGNUM,
112 SPARC_FP_REGNUM, /* %fp (%i6) */
113 SPARC_I7_REGNUM, /* %i7 */
114 SPARC_F0_REGNUM, /* %f0 */
115 SPARC_F1_REGNUM,
fe10a582
DM
116 SPARC_F2_REGNUM,
117 SPARC_F3_REGNUM,
118 SPARC_F4_REGNUM,
119 SPARC_F5_REGNUM,
120 SPARC_F6_REGNUM,
121 SPARC_F7_REGNUM,
386c036b
MK
122 SPARC_F31_REGNUM /* %f31 */
123 = SPARC_F0_REGNUM + 31
124};
125
126enum sparc32_regnum
127{
128 SPARC32_Y_REGNUM /* %y */
129 = SPARC_F31_REGNUM + 1,
130 SPARC32_PSR_REGNUM, /* %psr */
131 SPARC32_WIM_REGNUM, /* %wim */
132 SPARC32_TBR_REGNUM, /* %tbr */
133 SPARC32_PC_REGNUM, /* %pc */
134 SPARC32_NPC_REGNUM, /* %npc */
135 SPARC32_FSR_REGNUM, /* %fsr */
136 SPARC32_CSR_REGNUM, /* %csr */
137
138 /* Pseudo registers. */
139 SPARC32_D0_REGNUM, /* %d0 */
140 SPARC32_D30_REGNUM /* %d30 */
141 = SPARC32_D0_REGNUM + 15
142};
143\f
144
145struct sparc_frame_cache
146{
147 /* Base address. */
148 CORE_ADDR base;
149 CORE_ADDR pc;
150
151 /* Do we have a frame? */
152 int frameless_p;
153
369c397b
JB
154 /* The offset from the base register to the CFA. */
155 int frame_offset;
156
157 /* Mask of `local' and `in' registers saved in the register save area. */
158 unsigned short int saved_regs_mask;
159
160 /* Mask of `out' registers copied or renamed to their `in' sibling. */
161 unsigned char copied_regs_mask;
162
c378eb4e 163 /* Do we have a Structure, Union or Quad-Precision return value? */
386c036b
MK
164 int struct_return_p;
165
166 /* Table of saved registers. */
167 struct trad_frame_saved_reg *saved_regs;
168};
169
170/* Fetch the instruction at PC. */
171extern unsigned long sparc_fetch_instruction (CORE_ADDR pc);
172
1c800673 173/* Fetch StackGhost Per-Process XOR cookie. */
e17a4113 174extern ULONGEST sparc_fetch_wcookie (struct gdbarch *gdbarch);
1c800673 175
369c397b
JB
176/* Record the effect of a SAVE instruction on CACHE. */
177extern void sparc_record_save_insn (struct sparc_frame_cache *cache);
178
179/* Do a full analysis of the prologue at PC and update CACHE accordingly. */
be8626e0
MD
180extern CORE_ADDR sparc_analyze_prologue (struct gdbarch *gdbarch,
181 CORE_ADDR pc, CORE_ADDR current_pc,
386c036b
MK
182 struct sparc_frame_cache *cache);
183
184extern struct sparc_frame_cache *
236369e7 185 sparc_frame_cache (struct frame_info *this_frame, void **this_cache);
386c036b
MK
186
187extern struct sparc_frame_cache *
236369e7 188 sparc32_frame_cache (struct frame_info *this_frame, void **this_cache);
386c036b
MK
189
190\f
191
0b1b3e42 192extern int sparc_software_single_step (struct frame_info *frame);
386c036b
MK
193
194extern void sparc_supply_rwindow (struct regcache *regcache,
195 CORE_ADDR sp, int regnum);
196extern void sparc_collect_rwindow (const struct regcache *regcache,
197 CORE_ADDR sp, int regnum);
198
199/* Register offsets for SunOS 4. */
200extern const struct sparc_gregset sparc32_sunos4_gregset;
201
202extern void sparc32_supply_gregset (const struct sparc_gregset *gregset,
203 struct regcache *regcache,
204 int regnum, const void *gregs);
205extern void sparc32_collect_gregset (const struct sparc_gregset *gregset,
206 const struct regcache *regcache,
207 int regnum, void *gregs);
208extern void sparc32_supply_fpregset (struct regcache *regcache,
209 int regnum, const void *fpregs);
210extern void sparc32_collect_fpregset (const struct regcache *regcache,
211 int regnum, void *fpregs);
212
213/* Functions and variables exported from sparc-sol2-tdep.c. */
214
215/* Register offsets for Solaris 2. */
216extern const struct sparc_gregset sparc32_sol2_gregset;
217
2c02bd72 218extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name);
386c036b 219
0d5cff50 220extern const char *sparc_sol2_static_transform_name (const char *name);
149ad273 221
386c036b
MK
222extern void sparc32_sol2_init_abi (struct gdbarch_info info,
223 struct gdbarch *gdbarch);
224
225/* Functions and variables exported from sparcnbsd-tdep.c. */
226
227/* Register offsets for NetBSD. */
228extern const struct sparc_gregset sparc32nbsd_gregset;
229
c893be75
MK
230/* Return the address of a system call's alternative return
231 address. */
0b1b3e42
UW
232extern CORE_ADDR sparcnbsd_step_trap (struct frame_info *frame,
233 unsigned long insn);
c893be75 234
19671c2b
MK
235extern void sparc32nbsd_elf_init_abi (struct gdbarch_info info,
236 struct gdbarch *gdbarch);
237
566626fa
MK
238extern struct trad_frame_saved_reg *
239 sparc32nbsd_sigcontext_saved_regs (struct frame_info *next_frame);
240
386c036b 241#endif /* sparc-tdep.h */
This page took 1.233618 seconds and 4 git commands to generate.