OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [sparc-tdep.h] - Blame information for rev 825

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 227 jeremybenn
/* Target-dependent code for SPARC.
2
 
3
   Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
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
10
   the Free Software Foundation; either version 3 of the License, or
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
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
#ifndef SPARC_TDEP_H
22
#define SPARC_TDEP_H 1
23
 
24
struct frame_info;
25
struct gdbarch;
26
struct regcache;
27
struct regset;
28
struct trad_frame_saved_reg;
29
 
30
/* Register offsets for the general-purpose register set.  */
31
 
32
struct 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
 
47
struct 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
 
55
  /* Register sets.  */
56
  struct regset *gregset;
57
  size_t sizeof_gregset;
58
  struct regset *fpregset;
59
  size_t sizeof_fpregset;
60
 
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;
67
 
68
  /* Alternative location for trap return.  Used for single-stepping.  */
69
  CORE_ADDR (*step_trap) (struct frame_info *frame, unsigned long insn);
70
 
71
  /* ISA-specific data types.  */
72
  struct type *sparc_psr_type;
73
  struct type *sparc_fsr_type;
74
  struct type *sparc64_pstate_type;
75
  struct type *sparc64_fsr_type;
76
  struct type *sparc64_fprs_type;
77
};
78
 
79
/* Register numbers of various important registers.  */
80
 
81
enum sparc_regnum
82
{
83
  SPARC_G0_REGNUM,              /* %g0 */
84
  SPARC_G1_REGNUM,
85
  SPARC_G2_REGNUM,
86
  SPARC_G3_REGNUM,
87
  SPARC_G4_REGNUM,
88
  SPARC_G5_REGNUM,
89
  SPARC_G6_REGNUM,
90
  SPARC_G7_REGNUM,              /* %g7 */
91
  SPARC_O0_REGNUM,              /* %o0 */
92
  SPARC_O1_REGNUM,
93
  SPARC_O2_REGNUM,
94
  SPARC_O3_REGNUM,
95
  SPARC_O4_REGNUM,
96
  SPARC_O5_REGNUM,
97
  SPARC_SP_REGNUM,              /* %sp (%o6) */
98
  SPARC_O7_REGNUM,              /* %o7 */
99
  SPARC_L0_REGNUM,              /* %l0 */
100
  SPARC_L1_REGNUM,
101
  SPARC_L2_REGNUM,
102
  SPARC_L3_REGNUM,
103
  SPARC_L4_REGNUM,
104
  SPARC_L5_REGNUM,
105
  SPARC_L6_REGNUM,
106
  SPARC_L7_REGNUM,              /* %l7 */
107
  SPARC_I0_REGNUM,              /* %i0 */
108
  SPARC_I1_REGNUM,
109
  SPARC_I2_REGNUM,
110
  SPARC_I3_REGNUM,
111
  SPARC_I4_REGNUM,
112
  SPARC_I5_REGNUM,
113
  SPARC_FP_REGNUM,              /* %fp (%i6) */
114
  SPARC_I7_REGNUM,              /* %i7 */
115
  SPARC_F0_REGNUM,              /* %f0 */
116
  SPARC_F1_REGNUM,
117
  SPARC_F31_REGNUM              /* %f31 */
118
  = SPARC_F0_REGNUM + 31
119
};
120
 
121
enum sparc32_regnum
122
{
123
  SPARC32_Y_REGNUM              /* %y */
124
  = SPARC_F31_REGNUM + 1,
125
  SPARC32_PSR_REGNUM,           /* %psr */
126
  SPARC32_WIM_REGNUM,           /* %wim */
127
  SPARC32_TBR_REGNUM,           /* %tbr */
128
  SPARC32_PC_REGNUM,            /* %pc */
129
  SPARC32_NPC_REGNUM,           /* %npc */
130
  SPARC32_FSR_REGNUM,           /* %fsr */
131
  SPARC32_CSR_REGNUM,           /* %csr */
132
 
133
  /* Pseudo registers.  */
134
  SPARC32_D0_REGNUM,            /* %d0 */
135
  SPARC32_D30_REGNUM            /* %d30 */
136
  = SPARC32_D0_REGNUM + 15
137
};
138
 
139
 
140
struct sparc_frame_cache
141
{
142
  /* Base address.  */
143
  CORE_ADDR base;
144
  CORE_ADDR pc;
145
 
146
  /* Do we have a frame?  */
147
  int frameless_p;
148
 
149
  /* Do we have a Structure, Union or Quad-Precision return value?.  */
150
  int struct_return_p;
151
 
152
  /* Table of saved registers.  */
153
  struct trad_frame_saved_reg *saved_regs;
154
};
155
 
156
/* Fetch the instruction at PC.  */
157
extern unsigned long sparc_fetch_instruction (CORE_ADDR pc);
158
 
159
/* Fetch StackGhost Per-Process XOR cookie.  */
160
extern ULONGEST sparc_fetch_wcookie (struct gdbarch *gdbarch);
161
 
162
extern CORE_ADDR sparc_analyze_prologue (struct gdbarch *gdbarch,
163
                                         CORE_ADDR pc, CORE_ADDR current_pc,
164
                                         struct sparc_frame_cache *cache);
165
 
166
extern struct sparc_frame_cache *
167
  sparc_frame_cache (struct frame_info *this_frame, void **this_cache);
168
 
169
extern struct sparc_frame_cache *
170
  sparc32_frame_cache (struct frame_info *this_frame, void **this_cache);
171
 
172
 
173
 
174
extern int sparc_software_single_step (struct frame_info *frame);
175
 
176
extern void sparc_supply_rwindow (struct regcache *regcache,
177
                                  CORE_ADDR sp, int regnum);
178
extern void sparc_collect_rwindow (const struct regcache *regcache,
179
                                   CORE_ADDR sp, int regnum);
180
 
181
/* Register offsets for SunOS 4.  */
182
extern const struct sparc_gregset sparc32_sunos4_gregset;
183
 
184
extern void sparc32_supply_gregset (const struct sparc_gregset *gregset,
185
                                    struct regcache *regcache,
186
                                    int regnum, const void *gregs);
187
extern void sparc32_collect_gregset (const struct sparc_gregset *gregset,
188
                                     const struct regcache *regcache,
189
                                     int regnum, void *gregs);
190
extern void sparc32_supply_fpregset (struct regcache *regcache,
191
                                     int regnum, const void *fpregs);
192
extern void sparc32_collect_fpregset (const struct regcache *regcache,
193
                                      int regnum, void *fpregs);
194
 
195
/* Functions and variables exported from sparc-sol2-tdep.c.  */
196
 
197
/* Register offsets for Solaris 2.  */
198
extern const struct sparc_gregset sparc32_sol2_gregset;
199
 
200
extern int sparc_sol2_pc_in_sigtramp (CORE_ADDR pc, char *name);
201
 
202
extern char *sparc_sol2_static_transform_name (char *name);
203
 
204
extern void sparc32_sol2_init_abi (struct gdbarch_info info,
205
                                   struct gdbarch *gdbarch);
206
 
207
/* Functions and variables exported from sparcnbsd-tdep.c.  */
208
 
209
/* Register offsets for NetBSD.  */
210
extern const struct sparc_gregset sparc32nbsd_gregset;
211
 
212
/* Return the address of a system call's alternative return
213
   address.  */
214
extern CORE_ADDR sparcnbsd_step_trap (struct frame_info *frame,
215
                                      unsigned long insn);
216
 
217
extern void sparc32nbsd_elf_init_abi (struct gdbarch_info info,
218
                                      struct gdbarch *gdbarch);
219
 
220
extern struct trad_frame_saved_reg *
221
  sparc32nbsd_sigcontext_saved_regs (struct frame_info *next_frame);
222
 
223
#endif /* sparc-tdep.h */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.