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