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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [gdb/] [sparc-tdep.h] - Blame information for rev 309

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

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

powered by: WebSVN 2.1.0

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