GDBserver self tests
[deliverable/binutils-gdb.git] / gdb / sparc-tdep.c
CommitLineData
386c036b 1/* Target-dependent code for SPARC.
cda5a58a 2
61baf725 3 Copyright (C) 2003-2017 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 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/>. */
c906108c 19
c906108c 20#include "defs.h"
5af923b0 21#include "arch-utils.h"
386c036b 22#include "dis-asm.h"
b41c5a85 23#include "dwarf2.h"
f5a9b87d 24#include "dwarf2-frame.h"
386c036b 25#include "floatformat.h"
c906108c 26#include "frame.h"
386c036b
MK
27#include "frame-base.h"
28#include "frame-unwind.h"
29#include "gdbcore.h"
30#include "gdbtypes.h"
c906108c 31#include "inferior.h"
386c036b
MK
32#include "symtab.h"
33#include "objfiles.h"
34#include "osabi.h"
35#include "regcache.h"
c906108c 36#include "target.h"
3f7b46f2 37#include "target-descriptions.h"
c906108c 38#include "value.h"
c906108c 39
386c036b 40#include "sparc-tdep.h"
e6f9c00b 41#include "sparc-ravenscar-thread.h"
325fac50 42#include <algorithm>
c906108c 43
a54124c5
MK
44struct regset;
45
9eb42ed1
MK
46/* This file implements the SPARC 32-bit ABI as defined by the section
47 "Low-Level System Information" of the SPARC Compliance Definition
48 (SCD) 2.4.1, which is the 32-bit System V psABI for SPARC. The SCD
f2e7c15d 49 lists changes with respect to the original 32-bit psABI as defined
9eb42ed1 50 in the "System V ABI, SPARC Processor Supplement".
386c036b
MK
51
52 Note that if we talk about SunOS, we mean SunOS 4.x, which was
53 BSD-based, which is sometimes (retroactively?) referred to as
54 Solaris 1.x. If we talk about Solaris we mean Solaris 2.x and
55 above (Solaris 7, 8 and 9 are nothing but Solaris 2.7, 2.8 and 2.9
56 suffering from severe version number inflation). Solaris 2.x is
57 also known as SunOS 5.x, since that's what uname(1) says. Solaris
58 2.x is SVR4-based. */
59
60/* Please use the sparc32_-prefix for 32-bit specific code, the
61 sparc64_-prefix for 64-bit specific code and the sparc_-prefix for
62 code that can handle both. The 64-bit specific code lives in
63 sparc64-tdep.c; don't add any here. */
64
65/* The SPARC Floating-Point Quad-Precision format is similar to
7a58cce8 66 big-endian IA-64 Quad-Precision format. */
8da61cc4 67#define floatformats_sparc_quad floatformats_ia64_quad
386c036b
MK
68
69/* The stack pointer is offset from the stack frame by a BIAS of 2047
70 (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC
71 hosts, so undefine it first. */
72#undef BIAS
73#define BIAS 2047
74
75/* Macros to extract fields from SPARC instructions. */
c906108c
SS
76#define X_OP(i) (((i) >> 30) & 0x3)
77#define X_RD(i) (((i) >> 25) & 0x1f)
78#define X_A(i) (((i) >> 29) & 1)
79#define X_COND(i) (((i) >> 25) & 0xf)
80#define X_OP2(i) (((i) >> 22) & 0x7)
81#define X_IMM22(i) ((i) & 0x3fffff)
82#define X_OP3(i) (((i) >> 19) & 0x3f)
075ccec8 83#define X_RS1(i) (((i) >> 14) & 0x1f)
b0b92586 84#define X_RS2(i) ((i) & 0x1f)
c906108c 85#define X_I(i) (((i) >> 13) & 1)
c906108c 86/* Sign extension macros. */
c906108c 87#define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
c906108c 88#define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
8d1b3521 89#define X_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
075ccec8 90#define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
961842b2
JM
91/* Macros to identify some instructions. */
92/* RETURN (RETT in V8) */
93#define X_RETTURN(i) ((X_OP (i) == 0x2) && (X_OP3 (i) == 0x39))
c906108c 94
386c036b
MK
95/* Fetch the instruction at PC. Instructions are always big-endian
96 even if the processor operates in little-endian mode. */
97
98unsigned long
99sparc_fetch_instruction (CORE_ADDR pc)
c906108c 100{
e1613aba 101 gdb_byte buf[4];
386c036b
MK
102 unsigned long insn;
103 int i;
104
690668cc 105 /* If we can't read the instruction at PC, return zero. */
8defab1a 106 if (target_read_memory (pc, buf, sizeof (buf)))
690668cc 107 return 0;
c906108c 108
386c036b
MK
109 insn = 0;
110 for (i = 0; i < sizeof (buf); i++)
111 insn = (insn << 8) | buf[i];
112 return insn;
113}
42cdca6c
MK
114\f
115
5465445a
JB
116/* Return non-zero if the instruction corresponding to PC is an "unimp"
117 instruction. */
118
119static int
120sparc_is_unimp_insn (CORE_ADDR pc)
121{
122 const unsigned long insn = sparc_fetch_instruction (pc);
123
124 return ((insn & 0xc1c00000) == 0);
125}
126
d0b5971a
JM
127/* Return non-zero if the instruction corresponding to PC is an
128 "annulled" branch, i.e. the annul bit is set. */
129
130int
131sparc_is_annulled_branch_insn (CORE_ADDR pc)
132{
133 /* The branch instructions featuring an annul bit can be identified
134 by the following bit patterns:
135
136 OP=0
137 OP2=1: Branch on Integer Condition Codes with Prediction (BPcc).
138 OP2=2: Branch on Integer Condition Codes (Bcc).
139 OP2=5: Branch on FP Condition Codes with Prediction (FBfcc).
140 OP2=6: Branch on FP Condition Codes (FBcc).
141 OP2=3 && Bit28=0:
142 Branch on Integer Register with Prediction (BPr).
143
144 This leaves out ILLTRAP (OP2=0), SETHI/NOP (OP2=4) and the V8
145 coprocessor branch instructions (Op2=7). */
146
147 const unsigned long insn = sparc_fetch_instruction (pc);
148 const unsigned op2 = X_OP2 (insn);
149
150 if ((X_OP (insn) == 0)
151 && ((op2 == 1) || (op2 == 2) || (op2 == 5) || (op2 == 6)
152 || ((op2 == 3) && ((insn & 0x10000000) == 0))))
153 return X_A (insn);
154 else
155 return 0;
156}
157
42cdca6c
MK
158/* OpenBSD/sparc includes StackGhost, which according to the author's
159 website http://stackghost.cerias.purdue.edu "... transparently and
160 automatically protects applications' stack frames; more
161 specifically, it guards the return pointers. The protection
162 mechanisms require no application source or binary modification and
163 imposes only a negligible performance penalty."
164
165 The same website provides the following description of how
166 StackGhost works:
167
168 "StackGhost interfaces with the kernel trap handler that would
169 normally write out registers to the stack and the handler that
170 would read them back in. By XORing a cookie into the
171 return-address saved in the user stack when it is actually written
172 to the stack, and then XOR it out when the return-address is pulled
173 from the stack, StackGhost can cause attacker corrupted return
174 pointers to behave in a manner the attacker cannot predict.
175 StackGhost can also use several unused bits in the return pointer
176 to detect a smashed return pointer and abort the process."
177
178 For GDB this means that whenever we're reading %i7 from a stack
179 frame's window save area, we'll have to XOR the cookie.
180
181 More information on StackGuard can be found on in:
182
c378eb4e 183 Mike Frantzen and Mike Shuey. "StackGhost: Hardware Facilitated
42cdca6c
MK
184 Stack Protection." 2001. Published in USENIX Security Symposium
185 '01. */
186
187/* Fetch StackGhost Per-Process XOR cookie. */
188
189ULONGEST
e17a4113 190sparc_fetch_wcookie (struct gdbarch *gdbarch)
42cdca6c 191{
e17a4113 192 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
baf92889 193 struct target_ops *ops = &current_target;
e1613aba 194 gdb_byte buf[8];
baf92889
MK
195 int len;
196
13547ab6 197 len = target_read (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
baf92889
MK
198 if (len == -1)
199 return 0;
42cdca6c 200
baf92889
MK
201 /* We should have either an 32-bit or an 64-bit cookie. */
202 gdb_assert (len == 4 || len == 8);
203
e17a4113 204 return extract_unsigned_integer (buf, len, byte_order);
baf92889 205}
386c036b 206\f
baf92889 207
386c036b
MK
208/* The functions on this page are intended to be used to classify
209 function arguments. */
c906108c 210
386c036b 211/* Check whether TYPE is "Integral or Pointer". */
c906108c 212
386c036b
MK
213static int
214sparc_integral_or_pointer_p (const struct type *type)
c906108c 215{
80ad1639
MK
216 int len = TYPE_LENGTH (type);
217
386c036b 218 switch (TYPE_CODE (type))
c906108c 219 {
386c036b
MK
220 case TYPE_CODE_INT:
221 case TYPE_CODE_BOOL:
222 case TYPE_CODE_CHAR:
223 case TYPE_CODE_ENUM:
224 case TYPE_CODE_RANGE:
80ad1639
MK
225 /* We have byte, half-word, word and extended-word/doubleword
226 integral types. The doubleword is an extension to the
227 original 32-bit ABI by the SCD 2.4.x. */
228 return (len == 1 || len == 2 || len == 4 || len == 8);
386c036b
MK
229 case TYPE_CODE_PTR:
230 case TYPE_CODE_REF:
aa006118 231 case TYPE_CODE_RVALUE_REF:
80ad1639
MK
232 /* Allow either 32-bit or 64-bit pointers. */
233 return (len == 4 || len == 8);
386c036b
MK
234 default:
235 break;
236 }
c906108c 237
386c036b
MK
238 return 0;
239}
c906108c 240
386c036b 241/* Check whether TYPE is "Floating". */
c906108c 242
386c036b
MK
243static int
244sparc_floating_p (const struct type *type)
245{
246 switch (TYPE_CODE (type))
c906108c 247 {
386c036b
MK
248 case TYPE_CODE_FLT:
249 {
250 int len = TYPE_LENGTH (type);
251 return (len == 4 || len == 8 || len == 16);
252 }
253 default:
254 break;
255 }
256
257 return 0;
258}
c906108c 259
fe10a582
DM
260/* Check whether TYPE is "Complex Floating". */
261
262static int
263sparc_complex_floating_p (const struct type *type)
264{
265 switch (TYPE_CODE (type))
266 {
267 case TYPE_CODE_COMPLEX:
268 {
269 int len = TYPE_LENGTH (type);
270 return (len == 8 || len == 16 || len == 32);
271 }
272 default:
273 break;
274 }
275
276 return 0;
277}
278
0497f5b0
JB
279/* Check whether TYPE is "Structure or Union".
280
281 In terms of Ada subprogram calls, arrays are treated the same as
282 struct and union types. So this function also returns non-zero
283 for array types. */
c906108c 284
386c036b
MK
285static int
286sparc_structure_or_union_p (const struct type *type)
287{
288 switch (TYPE_CODE (type))
289 {
290 case TYPE_CODE_STRUCT:
291 case TYPE_CODE_UNION:
0497f5b0 292 case TYPE_CODE_ARRAY:
386c036b
MK
293 return 1;
294 default:
295 break;
c906108c 296 }
386c036b
MK
297
298 return 0;
c906108c 299}
386c036b 300
1933fd8e
VM
301/* Check whether TYPE is returned on registers. */
302
303static bool
304sparc_structure_return_p (const struct type *type)
305{
306 if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_LENGTH (type) <= 8)
307 {
308 struct type *t = check_typedef (TYPE_TARGET_TYPE (type));
309
310 if (sparc_floating_p (t) && TYPE_LENGTH (t) == 8)
311 return true;
312 return false;
313 }
314 if (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
315 return true;
316 return sparc_structure_or_union_p (type);
317}
318
319/* Check whether TYPE is passed on registers. */
320
321static bool
322sparc_arg_on_registers_p (const struct type *type)
323{
324 if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_LENGTH (type) <= 8)
325 {
326 struct type *t = check_typedef (TYPE_TARGET_TYPE (type));
327
328 if (sparc_floating_p (t) && TYPE_LENGTH (t) == 8)
329 return false;
330 return true;
331 }
332 if (sparc_structure_or_union_p (type) || sparc_complex_floating_p (type)
333 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
334 return false;
335 return true;
336}
337
386c036b 338/* Register information. */
7a36499a
IR
339#define SPARC32_FPU_REGISTERS \
340 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
341 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
342 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
343 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
344#define SPARC32_CP0_REGISTERS \
345 "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
386c036b 346
3f7b46f2
IR
347static const char *sparc_core_register_names[] = { SPARC_CORE_REGISTERS };
348static const char *sparc32_fpu_register_names[] = { SPARC32_FPU_REGISTERS };
349static const char *sparc32_cp0_register_names[] = { SPARC32_CP0_REGISTERS };
350
386c036b 351static const char *sparc32_register_names[] =
5af923b0 352{
7a36499a
IR
353 SPARC_CORE_REGISTERS,
354 SPARC32_FPU_REGISTERS,
355 SPARC32_CP0_REGISTERS
5af923b0
MS
356};
357
386c036b
MK
358/* Total number of registers. */
359#define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
c906108c 360
386c036b
MK
361/* We provide the aliases %d0..%d30 for the floating registers as
362 "psuedo" registers. */
363
364static const char *sparc32_pseudo_register_names[] =
365{
366 "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
367 "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
368};
369
370/* Total number of pseudo registers. */
371#define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
372
7a36499a
IR
373/* Return the name of pseudo register REGNUM. */
374
375static const char *
376sparc32_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
377{
378 regnum -= gdbarch_num_regs (gdbarch);
379
380 if (regnum < SPARC32_NUM_PSEUDO_REGS)
381 return sparc32_pseudo_register_names[regnum];
382
383 internal_error (__FILE__, __LINE__,
384 _("sparc32_pseudo_register_name: bad register number %d"),
385 regnum);
386}
387
386c036b
MK
388/* Return the name of register REGNUM. */
389
390static const char *
d93859e2 391sparc32_register_name (struct gdbarch *gdbarch, int regnum)
386c036b 392{
3f7b46f2
IR
393 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
394 return tdesc_register_name (gdbarch, regnum);
395
7a36499a 396 if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
386c036b
MK
397 return sparc32_register_names[regnum];
398
7a36499a 399 return sparc32_pseudo_register_name (gdbarch, regnum);
386c036b 400}
2d457077 401\f
209bd28e 402/* Construct types for ISA-specific registers. */
2d457077 403
209bd28e
UW
404static struct type *
405sparc_psr_type (struct gdbarch *gdbarch)
406{
407 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2d457077 408
209bd28e
UW
409 if (!tdep->sparc_psr_type)
410 {
411 struct type *type;
2d457077 412
e9bb382b 413 type = arch_flags_type (gdbarch, "builtin_type_sparc_psr", 4);
209bd28e
UW
414 append_flags_type_flag (type, 5, "ET");
415 append_flags_type_flag (type, 6, "PS");
416 append_flags_type_flag (type, 7, "S");
417 append_flags_type_flag (type, 12, "EF");
418 append_flags_type_flag (type, 13, "EC");
2d457077 419
209bd28e
UW
420 tdep->sparc_psr_type = type;
421 }
422
423 return tdep->sparc_psr_type;
424}
425
426static struct type *
427sparc_fsr_type (struct gdbarch *gdbarch)
2d457077 428{
209bd28e
UW
429 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
430
431 if (!tdep->sparc_fsr_type)
432 {
433 struct type *type;
434
e9bb382b 435 type = arch_flags_type (gdbarch, "builtin_type_sparc_fsr", 4);
209bd28e
UW
436 append_flags_type_flag (type, 0, "NXA");
437 append_flags_type_flag (type, 1, "DZA");
438 append_flags_type_flag (type, 2, "UFA");
439 append_flags_type_flag (type, 3, "OFA");
440 append_flags_type_flag (type, 4, "NVA");
441 append_flags_type_flag (type, 5, "NXC");
442 append_flags_type_flag (type, 6, "DZC");
443 append_flags_type_flag (type, 7, "UFC");
444 append_flags_type_flag (type, 8, "OFC");
445 append_flags_type_flag (type, 9, "NVC");
446 append_flags_type_flag (type, 22, "NS");
447 append_flags_type_flag (type, 23, "NXM");
448 append_flags_type_flag (type, 24, "DZM");
449 append_flags_type_flag (type, 25, "UFM");
450 append_flags_type_flag (type, 26, "OFM");
451 append_flags_type_flag (type, 27, "NVM");
452
453 tdep->sparc_fsr_type = type;
454 }
455
456 return tdep->sparc_fsr_type;
2d457077 457}
386c036b 458
7a36499a
IR
459/* Return the GDB type object for the "standard" data type of data in
460 pseudo register REGNUM. */
461
462static struct type *
463sparc32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
464{
465 regnum -= gdbarch_num_regs (gdbarch);
466
467 if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
468 return builtin_type (gdbarch)->builtin_double;
469
470 internal_error (__FILE__, __LINE__,
471 _("sparc32_pseudo_register_type: bad register number %d"),
472 regnum);
473}
474
386c036b 475/* Return the GDB type object for the "standard" data type of data in
c378eb4e 476 register REGNUM. */
386c036b
MK
477
478static struct type *
479sparc32_register_type (struct gdbarch *gdbarch, int regnum)
480{
3f7b46f2
IR
481 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
482 return tdesc_register_type (gdbarch, regnum);
483
386c036b 484 if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
0dfff4cb 485 return builtin_type (gdbarch)->builtin_float;
386c036b 486
386c036b 487 if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
0dfff4cb 488 return builtin_type (gdbarch)->builtin_data_ptr;
386c036b
MK
489
490 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
0dfff4cb 491 return builtin_type (gdbarch)->builtin_func_ptr;
386c036b 492
2d457077 493 if (regnum == SPARC32_PSR_REGNUM)
209bd28e 494 return sparc_psr_type (gdbarch);
2d457077
MK
495
496 if (regnum == SPARC32_FSR_REGNUM)
209bd28e 497 return sparc_fsr_type (gdbarch);
2d457077 498
7a36499a
IR
499 if (regnum >= gdbarch_num_regs (gdbarch))
500 return sparc32_pseudo_register_type (gdbarch, regnum);
501
df4df182 502 return builtin_type (gdbarch)->builtin_int32;
386c036b
MK
503}
504
05d1431c 505static enum register_status
386c036b
MK
506sparc32_pseudo_register_read (struct gdbarch *gdbarch,
507 struct regcache *regcache,
e1613aba 508 int regnum, gdb_byte *buf)
386c036b 509{
05d1431c
PA
510 enum register_status status;
511
7a36499a 512 regnum -= gdbarch_num_regs (gdbarch);
386c036b
MK
513 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
514
515 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
05d1431c
PA
516 status = regcache_raw_read (regcache, regnum, buf);
517 if (status == REG_VALID)
518 status = regcache_raw_read (regcache, regnum + 1, buf + 4);
519 return status;
386c036b
MK
520}
521
522static void
523sparc32_pseudo_register_write (struct gdbarch *gdbarch,
524 struct regcache *regcache,
e1613aba 525 int regnum, const gdb_byte *buf)
386c036b 526{
7a36499a 527 regnum -= gdbarch_num_regs (gdbarch);
386c036b
MK
528 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
529
530 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
531 regcache_raw_write (regcache, regnum, buf);
e1613aba 532 regcache_raw_write (regcache, regnum + 1, buf + 4);
386c036b
MK
533}
534\f
c9cf6e20 535/* Implement the stack_frame_destroyed_p gdbarch method. */
961842b2
JM
536
537int
c9cf6e20 538sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
961842b2
JM
539{
540 /* This function must return true if we are one instruction after an
541 instruction that destroyed the stack frame of the current
542 function. The SPARC instructions used to restore the callers
543 stack frame are RESTORE and RETURN/RETT.
544
545 Of these RETURN/RETT is a branch instruction and thus we return
546 true if we are in its delay slot.
547
548 RESTORE is almost always found in the delay slot of a branch
549 instruction that transfers control to the caller, such as JMPL.
550 Thus the next instruction is in the caller frame and we don't
551 need to do anything about it. */
552
553 unsigned int insn = sparc_fetch_instruction (pc - 4);
554
555 return X_RETTURN (insn);
556}
557\f
386c036b 558
49a45ecf
JB
559static CORE_ADDR
560sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
561{
562 /* The ABI requires double-word alignment. */
563 return address & ~0x7;
564}
565
386c036b
MK
566static CORE_ADDR
567sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
82585c72 568 CORE_ADDR funcaddr,
386c036b
MK
569 struct value **args, int nargs,
570 struct type *value_type,
e4fd649a
UW
571 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
572 struct regcache *regcache)
c906108c 573{
e17a4113
UW
574 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
575
386c036b
MK
576 *bp_addr = sp - 4;
577 *real_pc = funcaddr;
578
d80b854b 579 if (using_struct_return (gdbarch, NULL, value_type))
c906108c 580 {
e1613aba 581 gdb_byte buf[4];
386c036b
MK
582
583 /* This is an UNIMP instruction. */
e17a4113
UW
584 store_unsigned_integer (buf, 4, byte_order,
585 TYPE_LENGTH (value_type) & 0x1fff);
386c036b
MK
586 write_memory (sp - 8, buf, 4);
587 return sp - 8;
c906108c
SS
588 }
589
386c036b
MK
590 return sp - 4;
591}
592
593static CORE_ADDR
594sparc32_store_arguments (struct regcache *regcache, int nargs,
595 struct value **args, CORE_ADDR sp,
596 int struct_return, CORE_ADDR struct_addr)
597{
df4df182 598 struct gdbarch *gdbarch = get_regcache_arch (regcache);
e17a4113 599 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
386c036b
MK
600 /* Number of words in the "parameter array". */
601 int num_elements = 0;
602 int element = 0;
603 int i;
604
605 for (i = 0; i < nargs; i++)
c906108c 606 {
4991999e 607 struct type *type = value_type (args[i]);
386c036b
MK
608 int len = TYPE_LENGTH (type);
609
1933fd8e 610 if (!sparc_arg_on_registers_p (type))
c906108c 611 {
386c036b
MK
612 /* Structure, Union and Quad-Precision Arguments. */
613 sp -= len;
614
615 /* Use doubleword alignment for these values. That's always
616 correct, and wasting a few bytes shouldn't be a problem. */
617 sp &= ~0x7;
618
0fd88904 619 write_memory (sp, value_contents (args[i]), len);
386c036b
MK
620 args[i] = value_from_pointer (lookup_pointer_type (type), sp);
621 num_elements++;
622 }
623 else if (sparc_floating_p (type))
624 {
625 /* Floating arguments. */
626 gdb_assert (len == 4 || len == 8);
627 num_elements += (len / 4);
c906108c 628 }
c5aa993b
JM
629 else
630 {
386c036b 631 /* Integral and pointer arguments. */
1933fd8e
VM
632 gdb_assert (sparc_integral_or_pointer_p (type)
633 || (TYPE_CODE (type) == TYPE_CODE_ARRAY && len <= 8));
386c036b 634 num_elements += ((len + 3) / 4);
c5aa993b 635 }
c906108c 636 }
c906108c 637
386c036b 638 /* Always allocate at least six words. */
325fac50 639 sp -= std::max (6, num_elements) * 4;
c906108c 640
386c036b
MK
641 /* The psABI says that "Software convention requires space for the
642 struct/union return value pointer, even if the word is unused." */
643 sp -= 4;
c906108c 644
386c036b
MK
645 /* The psABI says that "Although software convention and the
646 operating system require every stack frame to be doubleword
647 aligned." */
648 sp &= ~0x7;
c906108c 649
386c036b 650 for (i = 0; i < nargs; i++)
c906108c 651 {
0fd88904 652 const bfd_byte *valbuf = value_contents (args[i]);
4991999e 653 struct type *type = value_type (args[i]);
386c036b 654 int len = TYPE_LENGTH (type);
1933fd8e
VM
655 gdb_byte buf[4];
656
657 if (len < 4)
658 {
659 memset (buf, 0, 4 - len);
660 memcpy (buf + 4 - len, valbuf, len);
661 valbuf = buf;
662 len = 4;
663 }
c906108c 664
386c036b 665 gdb_assert (len == 4 || len == 8);
c906108c 666
386c036b
MK
667 if (element < 6)
668 {
669 int regnum = SPARC_O0_REGNUM + element;
c906108c 670
386c036b
MK
671 regcache_cooked_write (regcache, regnum, valbuf);
672 if (len > 4 && element < 5)
673 regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
674 }
5af923b0 675
386c036b
MK
676 /* Always store the argument in memory. */
677 write_memory (sp + 4 + element * 4, valbuf, len);
678 element += len / 4;
679 }
c906108c 680
386c036b 681 gdb_assert (element == num_elements);
c906108c 682
386c036b 683 if (struct_return)
c906108c 684 {
e1613aba 685 gdb_byte buf[4];
c906108c 686
e17a4113 687 store_unsigned_integer (buf, 4, byte_order, struct_addr);
386c036b
MK
688 write_memory (sp, buf, 4);
689 }
c906108c 690
386c036b 691 return sp;
c906108c
SS
692}
693
386c036b 694static CORE_ADDR
7d9b040b 695sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
386c036b
MK
696 struct regcache *regcache, CORE_ADDR bp_addr,
697 int nargs, struct value **args, CORE_ADDR sp,
698 int struct_return, CORE_ADDR struct_addr)
c906108c 699{
386c036b
MK
700 CORE_ADDR call_pc = (struct_return ? (bp_addr - 12) : (bp_addr - 8));
701
702 /* Set return address. */
703 regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
704
705 /* Set up function arguments. */
706 sp = sparc32_store_arguments (regcache, nargs, args, sp,
707 struct_return, struct_addr);
708
709 /* Allocate the 16-word window save area. */
710 sp -= 16 * 4;
c906108c 711
386c036b
MK
712 /* Stack should be doubleword aligned at this point. */
713 gdb_assert (sp % 8 == 0);
c906108c 714
386c036b
MK
715 /* Finally, update the stack pointer. */
716 regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
717
718 return sp;
719}
720\f
c906108c 721
386c036b
MK
722/* Use the program counter to determine the contents and size of a
723 breakpoint instruction. Return a pointer to a string of bytes that
724 encode a breakpoint instruction, store the length of the string in
725 *LEN and optionally adjust *PC to point to the correct memory
726 location for inserting the breakpoint. */
04180708 727constexpr gdb_byte sparc_break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
c5aa993b 728
04180708 729typedef BP_MANIPULATION (sparc_break_insn) sparc_breakpoint;
386c036b 730\f
c906108c 731
386c036b 732/* Allocate and initialize a frame cache. */
c906108c 733
386c036b
MK
734static struct sparc_frame_cache *
735sparc_alloc_frame_cache (void)
736{
737 struct sparc_frame_cache *cache;
c906108c 738
386c036b 739 cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
c906108c 740
386c036b
MK
741 /* Base address. */
742 cache->base = 0;
743 cache->pc = 0;
c906108c 744
386c036b
MK
745 /* Frameless until proven otherwise. */
746 cache->frameless_p = 1;
369c397b
JB
747 cache->frame_offset = 0;
748 cache->saved_regs_mask = 0;
749 cache->copied_regs_mask = 0;
386c036b
MK
750 cache->struct_return_p = 0;
751
752 return cache;
753}
754
b0b92586
JB
755/* GCC generates several well-known sequences of instructions at the begining
756 of each function prologue when compiling with -fstack-check. If one of
757 such sequences starts at START_PC, then return the address of the
758 instruction immediately past this sequence. Otherwise, return START_PC. */
759
760static CORE_ADDR
761sparc_skip_stack_check (const CORE_ADDR start_pc)
762{
763 CORE_ADDR pc = start_pc;
764 unsigned long insn;
2067c8d4 765 int probing_loop = 0;
b0b92586
JB
766
767 /* With GCC, all stack checking sequences begin with the same two
2067c8d4 768 instructions, plus an optional one in the case of a probing loop:
b0b92586 769
2067c8d4
JG
770 sethi <some immediate>, %g1
771 sub %sp, %g1, %g1
772
773 or:
774
775 sethi <some immediate>, %g1
776 sethi <some immediate>, %g4
777 sub %sp, %g1, %g1
778
779 or:
780
781 sethi <some immediate>, %g1
782 sub %sp, %g1, %g1
783 sethi <some immediate>, %g4
784
785 If the optional instruction is found (setting g4), assume that a
786 probing loop will follow. */
787
788 /* sethi <some immediate>, %g1 */
b0b92586
JB
789 insn = sparc_fetch_instruction (pc);
790 pc = pc + 4;
791 if (!(X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 1))
792 return start_pc;
793
2067c8d4 794 /* optional: sethi <some immediate>, %g4 */
b0b92586
JB
795 insn = sparc_fetch_instruction (pc);
796 pc = pc + 4;
2067c8d4
JG
797 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
798 {
799 probing_loop = 1;
800 insn = sparc_fetch_instruction (pc);
801 pc = pc + 4;
802 }
803
804 /* sub %sp, %g1, %g1 */
b0b92586
JB
805 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
806 && X_RD (insn) == 1 && X_RS1 (insn) == 14 && X_RS2 (insn) == 1))
807 return start_pc;
808
809 insn = sparc_fetch_instruction (pc);
810 pc = pc + 4;
811
2067c8d4
JG
812 /* optional: sethi <some immediate>, %g4 */
813 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
814 {
815 probing_loop = 1;
816 insn = sparc_fetch_instruction (pc);
817 pc = pc + 4;
818 }
819
b0b92586
JB
820 /* First possible sequence:
821 [first two instructions above]
822 clr [%g1 - some immediate] */
823
824 /* clr [%g1 - some immediate] */
825 if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
826 && X_RS1 (insn) == 1 && X_RD (insn) == 0)
827 {
828 /* Valid stack-check sequence, return the new PC. */
829 return pc;
830 }
831
832 /* Second possible sequence: A small number of probes.
833 [first two instructions above]
834 clr [%g1]
835 add %g1, -<some immediate>, %g1
836 clr [%g1]
837 [repeat the two instructions above any (small) number of times]
838 clr [%g1 - some immediate] */
839
840 /* clr [%g1] */
841 else if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
842 && X_RS1 (insn) == 1 && X_RD (insn) == 0)
843 {
844 while (1)
845 {
846 /* add %g1, -<some immediate>, %g1 */
847 insn = sparc_fetch_instruction (pc);
848 pc = pc + 4;
849 if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
850 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
851 break;
852
853 /* clr [%g1] */
854 insn = sparc_fetch_instruction (pc);
855 pc = pc + 4;
856 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
857 && X_RD (insn) == 0 && X_RS1 (insn) == 1))
858 return start_pc;
859 }
860
861 /* clr [%g1 - some immediate] */
862 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
863 && X_RS1 (insn) == 1 && X_RD (insn) == 0))
864 return start_pc;
865
866 /* We found a valid stack-check sequence, return the new PC. */
867 return pc;
868 }
869
870 /* Third sequence: A probing loop.
2067c8d4 871 [first three instructions above]
b0b92586
JB
872 sub %g1, %g4, %g4
873 cmp %g1, %g4
874 be <disp>
875 add %g1, -<some immediate>, %g1
876 ba <disp>
877 clr [%g1]
2067c8d4
JG
878
879 And an optional last probe for the remainder:
880
b0b92586
JB
881 clr [%g4 - some immediate] */
882
2067c8d4 883 if (probing_loop)
b0b92586
JB
884 {
885 /* sub %g1, %g4, %g4 */
b0b92586
JB
886 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
887 && X_RD (insn) == 4 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
888 return start_pc;
889
890 /* cmp %g1, %g4 */
891 insn = sparc_fetch_instruction (pc);
892 pc = pc + 4;
893 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I(insn)
894 && X_RD (insn) == 0 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
895 return start_pc;
896
897 /* be <disp> */
898 insn = sparc_fetch_instruction (pc);
899 pc = pc + 4;
900 if (!(X_OP (insn) == 0 && X_COND (insn) == 0x1))
901 return start_pc;
902
903 /* add %g1, -<some immediate>, %g1 */
904 insn = sparc_fetch_instruction (pc);
905 pc = pc + 4;
906 if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
907 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
908 return start_pc;
909
910 /* ba <disp> */
911 insn = sparc_fetch_instruction (pc);
912 pc = pc + 4;
913 if (!(X_OP (insn) == 0 && X_COND (insn) == 0x8))
914 return start_pc;
915
2067c8d4 916 /* clr [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
b0b92586
JB
917 insn = sparc_fetch_instruction (pc);
918 pc = pc + 4;
2067c8d4
JG
919 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4
920 && X_RD (insn) == 0 && X_RS1 (insn) == 1
921 && (!X_I(insn) || X_SIMM13 (insn) == 0)))
b0b92586
JB
922 return start_pc;
923
2067c8d4
JG
924 /* We found a valid stack-check sequence, return the new PC. */
925
926 /* optional: clr [%g4 - some immediate] */
b0b92586
JB
927 insn = sparc_fetch_instruction (pc);
928 pc = pc + 4;
929 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
930 && X_RS1 (insn) == 4 && X_RD (insn) == 0))
2067c8d4
JG
931 return pc - 4;
932 else
933 return pc;
b0b92586
JB
934 }
935
936 /* No stack check code in our prologue, return the start_pc. */
937 return start_pc;
938}
939
369c397b
JB
940/* Record the effect of a SAVE instruction on CACHE. */
941
942void
943sparc_record_save_insn (struct sparc_frame_cache *cache)
944{
945 /* The frame is set up. */
946 cache->frameless_p = 0;
947
948 /* The frame pointer contains the CFA. */
949 cache->frame_offset = 0;
950
951 /* The `local' and `in' registers are all saved. */
952 cache->saved_regs_mask = 0xffff;
953
954 /* The `out' registers are all renamed. */
955 cache->copied_regs_mask = 0xff;
956}
957
958/* Do a full analysis of the prologue at PC and update CACHE accordingly.
959 Bail out early if CURRENT_PC is reached. Return the address where
960 the analysis stopped.
961
962 We handle both the traditional register window model and the single
963 register window (aka flat) model. */
964
386c036b 965CORE_ADDR
be8626e0
MD
966sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
967 CORE_ADDR current_pc, struct sparc_frame_cache *cache)
c906108c 968{
be8626e0 969 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
386c036b
MK
970 unsigned long insn;
971 int offset = 0;
c906108c 972 int dest = -1;
c906108c 973
b0b92586
JB
974 pc = sparc_skip_stack_check (pc);
975
386c036b
MK
976 if (current_pc <= pc)
977 return current_pc;
978
979 /* We have to handle to "Procedure Linkage Table" (PLT) special. On
980 SPARC the linker usually defines a symbol (typically
981 _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
982 This symbol makes us end up here with PC pointing at the start of
983 the PLT and CURRENT_PC probably pointing at a PLT entry. If we
984 would do our normal prologue analysis, we would probably conclude
985 that we've got a frame when in reality we don't, since the
986 dynamic linker patches up the first PLT with some code that
987 starts with a SAVE instruction. Patch up PC such that it points
988 at the start of our PLT entry. */
3e5d3a5a 989 if (tdep->plt_entry_size > 0 && in_plt_section (current_pc))
386c036b 990 pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
c906108c 991
386c036b
MK
992 insn = sparc_fetch_instruction (pc);
993
369c397b
JB
994 /* Recognize store insns and record their sources. */
995 while (X_OP (insn) == 3
996 && (X_OP3 (insn) == 0x4 /* stw */
997 || X_OP3 (insn) == 0x7 /* std */
998 || X_OP3 (insn) == 0xe) /* stx */
999 && X_RS1 (insn) == SPARC_SP_REGNUM)
1000 {
1001 int regnum = X_RD (insn);
1002
1003 /* Recognize stores into the corresponding stack slots. */
1004 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1005 && ((X_I (insn)
1006 && X_SIMM13 (insn) == (X_OP3 (insn) == 0xe
1007 ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
1008 : (regnum - SPARC_L0_REGNUM) * 4))
1009 || (!X_I (insn) && regnum == SPARC_L0_REGNUM)))
1010 {
1011 cache->saved_regs_mask |= (1 << (regnum - SPARC_L0_REGNUM));
1012 if (X_OP3 (insn) == 0x7)
1013 cache->saved_regs_mask |= (1 << (regnum + 1 - SPARC_L0_REGNUM));
1014 }
1015
1016 offset += 4;
1017
1018 insn = sparc_fetch_instruction (pc + offset);
1019 }
1020
386c036b
MK
1021 /* Recognize a SETHI insn and record its destination. */
1022 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
c906108c
SS
1023 {
1024 dest = X_RD (insn);
386c036b
MK
1025 offset += 4;
1026
369c397b 1027 insn = sparc_fetch_instruction (pc + offset);
c906108c
SS
1028 }
1029
386c036b
MK
1030 /* Allow for an arithmetic operation on DEST or %g1. */
1031 if (X_OP (insn) == 2 && X_I (insn)
c906108c
SS
1032 && (X_RD (insn) == 1 || X_RD (insn) == dest))
1033 {
386c036b 1034 offset += 4;
c906108c 1035
369c397b 1036 insn = sparc_fetch_instruction (pc + offset);
c906108c 1037 }
c906108c 1038
386c036b
MK
1039 /* Check for the SAVE instruction that sets up the frame. */
1040 if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
c906108c 1041 {
369c397b
JB
1042 sparc_record_save_insn (cache);
1043 offset += 4;
1044 return pc + offset;
1045 }
1046
1047 /* Check for an arithmetic operation on %sp. */
1048 if (X_OP (insn) == 2
1049 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
1050 && X_RS1 (insn) == SPARC_SP_REGNUM
1051 && X_RD (insn) == SPARC_SP_REGNUM)
1052 {
1053 if (X_I (insn))
1054 {
1055 cache->frame_offset = X_SIMM13 (insn);
1056 if (X_OP3 (insn) == 0)
1057 cache->frame_offset = -cache->frame_offset;
1058 }
1059 offset += 4;
1060
1061 insn = sparc_fetch_instruction (pc + offset);
1062
1063 /* Check for an arithmetic operation that sets up the frame. */
1064 if (X_OP (insn) == 2
1065 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
1066 && X_RS1 (insn) == SPARC_SP_REGNUM
1067 && X_RD (insn) == SPARC_FP_REGNUM)
1068 {
1069 cache->frameless_p = 0;
1070 cache->frame_offset = 0;
1071 /* We could check that the amount subtracted to %sp above is the
1072 same as the one added here, but this seems superfluous. */
1073 cache->copied_regs_mask |= 0x40;
1074 offset += 4;
1075
1076 insn = sparc_fetch_instruction (pc + offset);
1077 }
1078
1079 /* Check for a move (or) operation that copies the return register. */
1080 if (X_OP (insn) == 2
1081 && X_OP3 (insn) == 0x2
1082 && !X_I (insn)
1083 && X_RS1 (insn) == SPARC_G0_REGNUM
1084 && X_RS2 (insn) == SPARC_O7_REGNUM
1085 && X_RD (insn) == SPARC_I7_REGNUM)
1086 {
1087 cache->copied_regs_mask |= 0x80;
1088 offset += 4;
1089 }
1090
1091 return pc + offset;
c906108c
SS
1092 }
1093
1094 return pc;
1095}
1096
386c036b 1097static CORE_ADDR
236369e7 1098sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
386c036b
MK
1099{
1100 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
236369e7 1101 return frame_unwind_register_unsigned (this_frame, tdep->pc_regnum);
386c036b
MK
1102}
1103
1104/* Return PC of first real instruction of the function starting at
1105 START_PC. */
f510d44e 1106
386c036b 1107static CORE_ADDR
6093d2eb 1108sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
c906108c 1109{
f510d44e
DM
1110 struct symtab_and_line sal;
1111 CORE_ADDR func_start, func_end;
386c036b 1112 struct sparc_frame_cache cache;
f510d44e
DM
1113
1114 /* This is the preferred method, find the end of the prologue by
1115 using the debugging information. */
1116 if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
1117 {
1118 sal = find_pc_line (func_start, 0);
1119
1120 if (sal.end < func_end
1121 && start_pc <= sal.end)
1122 return sal.end;
1123 }
1124
be8626e0 1125 start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
075ccec8
MK
1126
1127 /* The psABI says that "Although the first 6 words of arguments
1128 reside in registers, the standard stack frame reserves space for
1129 them.". It also suggests that a function may use that space to
1130 "write incoming arguments 0 to 5" into that space, and that's
1131 indeed what GCC seems to be doing. In that case GCC will
1132 generate debug information that points to the stack slots instead
1133 of the registers, so we should consider the instructions that
369c397b 1134 write out these incoming arguments onto the stack. */
075ccec8 1135
369c397b 1136 while (1)
075ccec8
MK
1137 {
1138 unsigned long insn = sparc_fetch_instruction (start_pc);
1139
369c397b
JB
1140 /* Recognize instructions that store incoming arguments into the
1141 corresponding stack slots. */
1142 if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04
1143 && X_I (insn) && X_RS1 (insn) == SPARC_FP_REGNUM)
075ccec8 1144 {
369c397b
JB
1145 int regnum = X_RD (insn);
1146
1147 /* Case of arguments still in %o[0..5]. */
1148 if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O5_REGNUM
1149 && !(cache.copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM)))
1150 && X_SIMM13 (insn) == 68 + (regnum - SPARC_O0_REGNUM) * 4)
1151 {
1152 start_pc += 4;
1153 continue;
1154 }
1155
1156 /* Case of arguments copied into %i[0..5]. */
1157 if (regnum >= SPARC_I0_REGNUM && regnum <= SPARC_I5_REGNUM
1158 && (cache.copied_regs_mask & (1 << (regnum - SPARC_I0_REGNUM)))
1159 && X_SIMM13 (insn) == 68 + (regnum - SPARC_I0_REGNUM) * 4)
1160 {
1161 start_pc += 4;
1162 continue;
1163 }
075ccec8
MK
1164 }
1165
1166 break;
1167 }
1168
1169 return start_pc;
c906108c
SS
1170}
1171
386c036b 1172/* Normal frames. */
9319a2fe 1173
386c036b 1174struct sparc_frame_cache *
236369e7 1175sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
9319a2fe 1176{
386c036b 1177 struct sparc_frame_cache *cache;
9319a2fe 1178
386c036b 1179 if (*this_cache)
19ba03f4 1180 return (struct sparc_frame_cache *) *this_cache;
c906108c 1181
386c036b
MK
1182 cache = sparc_alloc_frame_cache ();
1183 *this_cache = cache;
c906108c 1184
236369e7 1185 cache->pc = get_frame_func (this_frame);
386c036b 1186 if (cache->pc != 0)
236369e7
JB
1187 sparc_analyze_prologue (get_frame_arch (this_frame), cache->pc,
1188 get_frame_pc (this_frame), cache);
386c036b
MK
1189
1190 if (cache->frameless_p)
c906108c 1191 {
cbeae229
MK
1192 /* This function is frameless, so %fp (%i6) holds the frame
1193 pointer for our calling frame. Use %sp (%o6) as this frame's
1194 base address. */
1195 cache->base =
236369e7 1196 get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
cbeae229
MK
1197 }
1198 else
1199 {
1200 /* For normal frames, %fp (%i6) holds the frame pointer, the
1201 base address for the current stack frame. */
1202 cache->base =
236369e7 1203 get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
c906108c 1204 }
c906108c 1205
369c397b
JB
1206 cache->base += cache->frame_offset;
1207
5b2d44a0
MK
1208 if (cache->base & 1)
1209 cache->base += BIAS;
1210
386c036b 1211 return cache;
c906108c 1212}
c906108c 1213
aff37fc1
DM
1214static int
1215sparc32_struct_return_from_sym (struct symbol *sym)
1216{
1217 struct type *type = check_typedef (SYMBOL_TYPE (sym));
1218 enum type_code code = TYPE_CODE (type);
1219
1220 if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
1221 {
1222 type = check_typedef (TYPE_TARGET_TYPE (type));
1223 if (sparc_structure_or_union_p (type)
1224 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1225 return 1;
1226 }
1227
1228 return 0;
1229}
1230
386c036b 1231struct sparc_frame_cache *
236369e7 1232sparc32_frame_cache (struct frame_info *this_frame, void **this_cache)
c906108c 1233{
386c036b
MK
1234 struct sparc_frame_cache *cache;
1235 struct symbol *sym;
c906108c 1236
386c036b 1237 if (*this_cache)
19ba03f4 1238 return (struct sparc_frame_cache *) *this_cache;
c906108c 1239
236369e7 1240 cache = sparc_frame_cache (this_frame, this_cache);
c906108c 1241
386c036b
MK
1242 sym = find_pc_function (cache->pc);
1243 if (sym)
c906108c 1244 {
aff37fc1 1245 cache->struct_return_p = sparc32_struct_return_from_sym (sym);
c906108c 1246 }
5465445a
JB
1247 else
1248 {
1249 /* There is no debugging information for this function to
1250 help us determine whether this function returns a struct
1251 or not. So we rely on another heuristic which is to check
1252 the instruction at the return address and see if this is
1253 an "unimp" instruction. If it is, then it is a struct-return
1254 function. */
1255 CORE_ADDR pc;
369c397b
JB
1256 int regnum =
1257 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
5465445a 1258
236369e7 1259 pc = get_frame_register_unsigned (this_frame, regnum) + 8;
5465445a
JB
1260 if (sparc_is_unimp_insn (pc))
1261 cache->struct_return_p = 1;
1262 }
c906108c 1263
386c036b
MK
1264 return cache;
1265}
1266
1267static void
236369e7 1268sparc32_frame_this_id (struct frame_info *this_frame, void **this_cache,
386c036b
MK
1269 struct frame_id *this_id)
1270{
1271 struct sparc_frame_cache *cache =
236369e7 1272 sparc32_frame_cache (this_frame, this_cache);
386c036b
MK
1273
1274 /* This marks the outermost frame. */
1275 if (cache->base == 0)
1276 return;
1277
1278 (*this_id) = frame_id_build (cache->base, cache->pc);
1279}
c906108c 1280
236369e7
JB
1281static struct value *
1282sparc32_frame_prev_register (struct frame_info *this_frame,
1283 void **this_cache, int regnum)
386c036b 1284{
e17a4113 1285 struct gdbarch *gdbarch = get_frame_arch (this_frame);
386c036b 1286 struct sparc_frame_cache *cache =
236369e7 1287 sparc32_frame_cache (this_frame, this_cache);
c906108c 1288
386c036b 1289 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
c906108c 1290 {
236369e7 1291 CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
386c036b 1292
236369e7
JB
1293 /* If this functions has a Structure, Union or Quad-Precision
1294 return value, we have to skip the UNIMP instruction that encodes
1295 the size of the structure. */
1296 if (cache->struct_return_p)
1297 pc += 4;
386c036b 1298
369c397b
JB
1299 regnum =
1300 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
236369e7
JB
1301 pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1302 return frame_unwind_got_constant (this_frame, regnum, pc);
c906108c
SS
1303 }
1304
42cdca6c
MK
1305 /* Handle StackGhost. */
1306 {
e17a4113 1307 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
42cdca6c
MK
1308
1309 if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1310 {
236369e7
JB
1311 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1312 ULONGEST i7;
1313
1314 /* Read the value in from memory. */
1315 i7 = get_frame_memory_unsigned (this_frame, addr, 4);
1316 return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
42cdca6c
MK
1317 }
1318 }
1319
369c397b 1320 /* The previous frame's `local' and `in' registers may have been saved
386c036b 1321 in the register save area. */
369c397b
JB
1322 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1323 && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
c906108c 1324 {
236369e7 1325 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
386c036b 1326
236369e7 1327 return frame_unwind_got_memory (this_frame, regnum, addr);
386c036b 1328 }
c906108c 1329
369c397b
JB
1330 /* The previous frame's `out' registers may be accessible as the current
1331 frame's `in' registers. */
1332 if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM
1333 && (cache->copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM))))
386c036b 1334 regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
5af923b0 1335
236369e7 1336 return frame_unwind_got_register (this_frame, regnum, regnum);
386c036b 1337}
c906108c 1338
386c036b
MK
1339static const struct frame_unwind sparc32_frame_unwind =
1340{
1341 NORMAL_FRAME,
8fbca658 1342 default_frame_unwind_stop_reason,
386c036b 1343 sparc32_frame_this_id,
236369e7
JB
1344 sparc32_frame_prev_register,
1345 NULL,
1346 default_frame_sniffer
386c036b 1347};
386c036b 1348\f
c906108c 1349
386c036b 1350static CORE_ADDR
236369e7 1351sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
386c036b
MK
1352{
1353 struct sparc_frame_cache *cache =
236369e7 1354 sparc32_frame_cache (this_frame, this_cache);
c906108c 1355
386c036b
MK
1356 return cache->base;
1357}
c906108c 1358
386c036b
MK
1359static const struct frame_base sparc32_frame_base =
1360{
1361 &sparc32_frame_unwind,
1362 sparc32_frame_base_address,
1363 sparc32_frame_base_address,
1364 sparc32_frame_base_address
1365};
c906108c 1366
386c036b 1367static struct frame_id
236369e7 1368sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
386c036b
MK
1369{
1370 CORE_ADDR sp;
5af923b0 1371
236369e7 1372 sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
5b2d44a0
MK
1373 if (sp & 1)
1374 sp += BIAS;
236369e7 1375 return frame_id_build (sp, get_frame_pc (this_frame));
386c036b
MK
1376}
1377\f
c906108c 1378
3923a2b2
MK
1379/* Extract a function return value of TYPE from REGCACHE, and copy
1380 that into VALBUF. */
5af923b0 1381
386c036b
MK
1382static void
1383sparc32_extract_return_value (struct type *type, struct regcache *regcache,
e1613aba 1384 gdb_byte *valbuf)
386c036b
MK
1385{
1386 int len = TYPE_LENGTH (type);
fe10a582 1387 gdb_byte buf[32];
c906108c 1388
1933fd8e 1389 gdb_assert (!sparc_structure_return_p (type));
c906108c 1390
1933fd8e
VM
1391 if (sparc_floating_p (type) || sparc_complex_floating_p (type)
1392 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
5af923b0 1393 {
386c036b
MK
1394 /* Floating return values. */
1395 regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
1396 if (len > 4)
1397 regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
fe10a582
DM
1398 if (len > 8)
1399 {
1400 regcache_cooked_read (regcache, SPARC_F2_REGNUM, buf + 8);
1401 regcache_cooked_read (regcache, SPARC_F3_REGNUM, buf + 12);
1402 }
1403 if (len > 16)
1404 {
1405 regcache_cooked_read (regcache, SPARC_F4_REGNUM, buf + 16);
1406 regcache_cooked_read (regcache, SPARC_F5_REGNUM, buf + 20);
1407 regcache_cooked_read (regcache, SPARC_F6_REGNUM, buf + 24);
1408 regcache_cooked_read (regcache, SPARC_F7_REGNUM, buf + 28);
1409 }
386c036b 1410 memcpy (valbuf, buf, len);
5af923b0
MS
1411 }
1412 else
1413 {
386c036b
MK
1414 /* Integral and pointer return values. */
1415 gdb_assert (sparc_integral_or_pointer_p (type));
c906108c 1416
386c036b
MK
1417 regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
1418 if (len > 4)
1419 {
1420 regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
1421 gdb_assert (len == 8);
1422 memcpy (valbuf, buf, 8);
1423 }
1424 else
1425 {
1426 /* Just stripping off any unused bytes should preserve the
1427 signed-ness just fine. */
1428 memcpy (valbuf, buf + 4 - len, len);
1429 }
1430 }
1431}
c906108c 1432
3923a2b2
MK
1433/* Store the function return value of type TYPE from VALBUF into
1434 REGCACHE. */
c906108c 1435
386c036b
MK
1436static void
1437sparc32_store_return_value (struct type *type, struct regcache *regcache,
e1613aba 1438 const gdb_byte *valbuf)
386c036b
MK
1439{
1440 int len = TYPE_LENGTH (type);
1933fd8e 1441 gdb_byte buf[32];
c906108c 1442
1933fd8e 1443 gdb_assert (!sparc_structure_return_p (type));
c906108c 1444
fe10a582 1445 if (sparc_floating_p (type) || sparc_complex_floating_p (type))
386c036b
MK
1446 {
1447 /* Floating return values. */
1448 memcpy (buf, valbuf, len);
1449 regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
1450 if (len > 4)
1451 regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
fe10a582
DM
1452 if (len > 8)
1453 {
1454 regcache_cooked_write (regcache, SPARC_F2_REGNUM, buf + 8);
1455 regcache_cooked_write (regcache, SPARC_F3_REGNUM, buf + 12);
1456 }
1457 if (len > 16)
1458 {
1459 regcache_cooked_write (regcache, SPARC_F4_REGNUM, buf + 16);
1460 regcache_cooked_write (regcache, SPARC_F5_REGNUM, buf + 20);
1461 regcache_cooked_write (regcache, SPARC_F6_REGNUM, buf + 24);
1462 regcache_cooked_write (regcache, SPARC_F7_REGNUM, buf + 28);
1463 }
386c036b
MK
1464 }
1465 else
c906108c 1466 {
386c036b
MK
1467 /* Integral and pointer return values. */
1468 gdb_assert (sparc_integral_or_pointer_p (type));
1469
1470 if (len > 4)
2757dd86 1471 {
386c036b
MK
1472 gdb_assert (len == 8);
1473 memcpy (buf, valbuf, 8);
1474 regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
2757dd86
AC
1475 }
1476 else
1477 {
386c036b
MK
1478 /* ??? Do we need to do any sign-extension here? */
1479 memcpy (buf + 4 - len, valbuf, len);
2757dd86 1480 }
386c036b 1481 regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
c906108c
SS
1482 }
1483}
1484
b9d4c5ed 1485static enum return_value_convention
6a3a010b 1486sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
c055b101
CV
1487 struct type *type, struct regcache *regcache,
1488 gdb_byte *readbuf, const gdb_byte *writebuf)
b9d4c5ed 1489{
e17a4113
UW
1490 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1491
0a8f48b9
MK
1492 /* The psABI says that "...every stack frame reserves the word at
1493 %fp+64. If a function returns a structure, union, or
1494 quad-precision value, this word should hold the address of the
1495 object into which the return value should be copied." This
1496 guarantees that we can always find the return value, not just
1497 before the function returns. */
1498
1933fd8e 1499 if (sparc_structure_return_p (type))
0a8f48b9 1500 {
bbfdfe1c
DM
1501 ULONGEST sp;
1502 CORE_ADDR addr;
1503
0a8f48b9
MK
1504 if (readbuf)
1505 {
0a8f48b9 1506 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
e17a4113 1507 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
0a8f48b9
MK
1508 read_memory (addr, readbuf, TYPE_LENGTH (type));
1509 }
bbfdfe1c
DM
1510 if (writebuf)
1511 {
1512 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1513 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1514 write_memory (addr, writebuf, TYPE_LENGTH (type));
1515 }
0a8f48b9
MK
1516
1517 return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1518 }
b9d4c5ed
MK
1519
1520 if (readbuf)
1521 sparc32_extract_return_value (type, regcache, readbuf);
1522 if (writebuf)
1523 sparc32_store_return_value (type, regcache, writebuf);
1524
1525 return RETURN_VALUE_REGISTER_CONVENTION;
1526}
1527
386c036b
MK
1528static int
1529sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
c906108c 1530{
386c036b 1531 return (sparc_structure_or_union_p (type)
fe10a582
DM
1532 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
1533 || sparc_complex_floating_p (type));
386c036b 1534}
c906108c 1535
aff37fc1 1536static int
4a4e5149 1537sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
aff37fc1 1538{
236369e7 1539 CORE_ADDR pc = get_frame_address_in_block (this_frame);
aff37fc1
DM
1540 struct symbol *sym = find_pc_function (pc);
1541
1542 if (sym)
1543 return sparc32_struct_return_from_sym (sym);
1544 return 0;
1545}
1546
f5a9b87d
DM
1547static void
1548sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
aff37fc1 1549 struct dwarf2_frame_state_reg *reg,
4a4e5149 1550 struct frame_info *this_frame)
f5a9b87d 1551{
aff37fc1
DM
1552 int off;
1553
f5a9b87d
DM
1554 switch (regnum)
1555 {
1556 case SPARC_G0_REGNUM:
1557 /* Since %g0 is always zero, there is no point in saving it, and
1558 people will be inclined omit it from the CFI. Make sure we
1559 don't warn about that. */
1560 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1561 break;
1562 case SPARC_SP_REGNUM:
1563 reg->how = DWARF2_FRAME_REG_CFA;
1564 break;
1565 case SPARC32_PC_REGNUM:
f5a9b87d
DM
1566 case SPARC32_NPC_REGNUM:
1567 reg->how = DWARF2_FRAME_REG_RA_OFFSET;
aff37fc1 1568 off = 8;
4a4e5149 1569 if (sparc32_dwarf2_struct_return_p (this_frame))
aff37fc1
DM
1570 off += 4;
1571 if (regnum == SPARC32_NPC_REGNUM)
1572 off += 4;
1573 reg->loc.offset = off;
f5a9b87d
DM
1574 break;
1575 }
1576}
1577
b41c5a85
JW
1578/* Implement the execute_dwarf_cfa_vendor_op method. */
1579
1580static bool
1581sparc_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
1582 struct dwarf2_frame_state *fs)
1583{
1584 /* Only DW_CFA_GNU_window_save is expected on SPARC. */
1585 if (op != DW_CFA_GNU_window_save)
1586 return false;
1587
1588 uint64_t reg;
1589 int size = register_size (gdbarch, 0);
1590
1c90d9f0 1591 fs->regs.alloc_regs (32);
b41c5a85
JW
1592 for (reg = 8; reg < 16; reg++)
1593 {
1594 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
1595 fs->regs.reg[reg].loc.reg = reg + 16;
1596 }
1597 for (reg = 16; reg < 32; reg++)
1598 {
1599 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
1600 fs->regs.reg[reg].loc.offset = (reg - 16) * size;
1601 }
1602
1603 return true;
1604}
1605
386c036b
MK
1606\f
1607/* The SPARC Architecture doesn't have hardware single-step support,
1608 and most operating systems don't implement it either, so we provide
1609 software single-step mechanism. */
c906108c 1610
386c036b 1611static CORE_ADDR
cd76b525 1612sparc_analyze_control_transfer (struct regcache *regcache,
c893be75 1613 CORE_ADDR pc, CORE_ADDR *npc)
386c036b
MK
1614{
1615 unsigned long insn = sparc_fetch_instruction (pc);
1616 int conditional_p = X_COND (insn) & 0x7;
8d1b3521 1617 int branch_p = 0, fused_p = 0;
386c036b 1618 long offset = 0; /* Must be signed for sign-extend. */
c906108c 1619
8d1b3521 1620 if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
c906108c 1621 {
8d1b3521
DM
1622 if ((insn & 0x10000000) == 0)
1623 {
1624 /* Branch on Integer Register with Prediction (BPr). */
1625 branch_p = 1;
1626 conditional_p = 1;
1627 }
1628 else
1629 {
1630 /* Compare and Branch */
1631 branch_p = 1;
1632 fused_p = 1;
1633 offset = 4 * X_DISP10 (insn);
1634 }
c906108c 1635 }
386c036b 1636 else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
c906108c 1637 {
386c036b
MK
1638 /* Branch on Floating-Point Condition Codes (FBfcc). */
1639 branch_p = 1;
1640 offset = 4 * X_DISP22 (insn);
c906108c 1641 }
386c036b
MK
1642 else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1643 {
1644 /* Branch on Floating-Point Condition Codes with Prediction
1645 (FBPfcc). */
1646 branch_p = 1;
1647 offset = 4 * X_DISP19 (insn);
1648 }
1649 else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1650 {
1651 /* Branch on Integer Condition Codes (Bicc). */
1652 branch_p = 1;
1653 offset = 4 * X_DISP22 (insn);
1654 }
1655 else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
c906108c 1656 {
386c036b
MK
1657 /* Branch on Integer Condition Codes with Prediction (BPcc). */
1658 branch_p = 1;
1659 offset = 4 * X_DISP19 (insn);
c906108c 1660 }
c893be75
MK
1661 else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1662 {
cd76b525
YQ
1663 struct frame_info *frame = get_current_frame ();
1664
c893be75 1665 /* Trap instruction (TRAP). */
cd76b525
YQ
1666 return gdbarch_tdep (get_regcache_arch (regcache))->step_trap (frame,
1667 insn);
c893be75 1668 }
386c036b
MK
1669
1670 /* FIXME: Handle DONE and RETRY instructions. */
1671
386c036b 1672 if (branch_p)
c906108c 1673 {
8d1b3521
DM
1674 if (fused_p)
1675 {
1676 /* Fused compare-and-branch instructions are non-delayed,
1677 and do not have an annuling capability. So we need to
1678 always set a breakpoint on both the NPC and the branch
1679 target address. */
1680 gdb_assert (offset != 0);
1681 return pc + offset;
1682 }
1683 else if (conditional_p)
c906108c 1684 {
386c036b
MK
1685 /* For conditional branches, return nPC + 4 iff the annul
1686 bit is 1. */
1687 return (X_A (insn) ? *npc + 4 : 0);
c906108c
SS
1688 }
1689 else
1690 {
386c036b
MK
1691 /* For unconditional branches, return the target if its
1692 specified condition is "always" and return nPC + 4 if the
1693 condition is "never". If the annul bit is 1, set *NPC to
1694 zero. */
1695 if (X_COND (insn) == 0x0)
1696 pc = *npc, offset = 4;
1697 if (X_A (insn))
1698 *npc = 0;
1699
386c036b 1700 return pc + offset;
c906108c
SS
1701 }
1702 }
386c036b
MK
1703
1704 return 0;
c906108c
SS
1705}
1706
c893be75 1707static CORE_ADDR
0b1b3e42 1708sparc_step_trap (struct frame_info *frame, unsigned long insn)
c893be75
MK
1709{
1710 return 0;
1711}
1712
a0ff9e1a 1713static std::vector<CORE_ADDR>
f5ea389a 1714sparc_software_single_step (struct regcache *regcache)
386c036b 1715{
cd76b525 1716 struct gdbarch *arch = get_regcache_arch (regcache);
c893be75 1717 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
8181d85f 1718 CORE_ADDR npc, nnpc;
c906108c 1719
e0cd558a 1720 CORE_ADDR pc, orig_npc;
a0ff9e1a 1721 std::vector<CORE_ADDR> next_pcs;
c906108c 1722
cd76b525
YQ
1723 pc = regcache_raw_get_unsigned (regcache, tdep->pc_regnum);
1724 orig_npc = npc = regcache_raw_get_unsigned (regcache, tdep->npc_regnum);
c906108c 1725
e0cd558a 1726 /* Analyze the instruction at PC. */
cd76b525 1727 nnpc = sparc_analyze_control_transfer (regcache, pc, &npc);
e0cd558a 1728 if (npc != 0)
a0ff9e1a 1729 next_pcs.push_back (npc);
8181d85f 1730
e0cd558a 1731 if (nnpc != 0)
a0ff9e1a 1732 next_pcs.push_back (nnpc);
c906108c 1733
e0cd558a
UW
1734 /* Assert that we have set at least one breakpoint, and that
1735 they're not set at the same spot - unless we're going
1736 from here straight to NULL, i.e. a call or jump to 0. */
1737 gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1738 gdb_assert (nnpc != npc || orig_npc == 0);
e6590a1b 1739
93f9a11f 1740 return next_pcs;
386c036b
MK
1741}
1742
1743static void
61a1198a 1744sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
386c036b 1745{
61a1198a 1746 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
386c036b 1747
61a1198a
UW
1748 regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1749 regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
386c036b
MK
1750}
1751\f
5af923b0 1752
e5139de8 1753/* Iterate over core file register note sections. */
a54124c5 1754
e5139de8
AA
1755static void
1756sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
1757 iterate_over_regset_sections_cb *cb,
1758 void *cb_data,
1759 const struct regcache *regcache)
a54124c5
MK
1760{
1761 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1762
e5139de8
AA
1763 cb (".reg", tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
1764 cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
a54124c5
MK
1765}
1766\f
1767
3f7b46f2
IR
1768static int
1769validate_tdesc_registers (const struct target_desc *tdesc,
1770 struct tdesc_arch_data *tdesc_data,
1771 const char *feature_name,
1772 const char *register_names[],
1773 unsigned int registers_num,
1774 unsigned int reg_start)
1775{
1776 int valid_p = 1;
1777 const struct tdesc_feature *feature;
1778
1779 feature = tdesc_find_feature (tdesc, feature_name);
1780 if (feature == NULL)
1781 return 0;
1782
1783 for (unsigned int i = 0; i < registers_num; i++)
1784 valid_p &= tdesc_numbered_register (feature, tdesc_data,
1785 reg_start + i,
1786 register_names[i]);
1787
1788 return valid_p;
1789}
1790
386c036b
MK
1791static struct gdbarch *
1792sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1793{
1794 struct gdbarch_tdep *tdep;
3f7b46f2 1795 const struct target_desc *tdesc = info.target_desc;
386c036b 1796 struct gdbarch *gdbarch;
3f7b46f2 1797 int valid_p = 1;
c906108c 1798
386c036b
MK
1799 /* If there is already a candidate, use it. */
1800 arches = gdbarch_list_lookup_by_info (arches, &info);
1801 if (arches != NULL)
1802 return arches->gdbarch;
c906108c 1803
386c036b 1804 /* Allocate space for the new architecture. */
41bf6aca 1805 tdep = XCNEW (struct gdbarch_tdep);
386c036b 1806 gdbarch = gdbarch_alloc (&info, tdep);
5af923b0 1807
386c036b
MK
1808 tdep->pc_regnum = SPARC32_PC_REGNUM;
1809 tdep->npc_regnum = SPARC32_NPC_REGNUM;
c893be75 1810 tdep->step_trap = sparc_step_trap;
3f7b46f2
IR
1811 tdep->fpu_register_names = sparc32_fpu_register_names;
1812 tdep->fpu_registers_num = ARRAY_SIZE (sparc32_fpu_register_names);
1813 tdep->cp0_register_names = sparc32_cp0_register_names;
1814 tdep->cp0_registers_num = ARRAY_SIZE (sparc32_cp0_register_names);
386c036b
MK
1815
1816 set_gdbarch_long_double_bit (gdbarch, 128);
8da61cc4 1817 set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
386c036b 1818
53375380
PA
1819 set_gdbarch_wchar_bit (gdbarch, 16);
1820 set_gdbarch_wchar_signed (gdbarch, 1);
1821
386c036b
MK
1822 set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1823 set_gdbarch_register_name (gdbarch, sparc32_register_name);
1824 set_gdbarch_register_type (gdbarch, sparc32_register_type);
1825 set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
3f7b46f2
IR
1826 set_tdesc_pseudo_register_name (gdbarch, sparc32_pseudo_register_name);
1827 set_tdesc_pseudo_register_type (gdbarch, sparc32_pseudo_register_type);
386c036b
MK
1828 set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1829 set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1830
1831 /* Register numbers of various important registers. */
1832 set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1833 set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1834 set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1835
1836 /* Call dummy code. */
49a45ecf 1837 set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
386c036b
MK
1838 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1839 set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1840 set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1841
b9d4c5ed 1842 set_gdbarch_return_value (gdbarch, sparc32_return_value);
386c036b
MK
1843 set_gdbarch_stabs_argument_has_addr
1844 (gdbarch, sparc32_stabs_argument_has_addr);
1845
1846 set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1847
1848 /* Stack grows downward. */
1849 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
c906108c 1850
04180708
YQ
1851 set_gdbarch_breakpoint_kind_from_pc (gdbarch,
1852 sparc_breakpoint::kind_from_pc);
1853 set_gdbarch_sw_breakpoint_from_kind (gdbarch,
1854 sparc_breakpoint::bp_from_kind);
c906108c 1855
386c036b 1856 set_gdbarch_frame_args_skip (gdbarch, 8);
5af923b0 1857
386c036b
MK
1858 set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1859 set_gdbarch_write_pc (gdbarch, sparc_write_pc);
c906108c 1860
236369e7 1861 set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
c906108c 1862
386c036b 1863 set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
c906108c 1864
386c036b
MK
1865 frame_base_set_default (gdbarch, &sparc32_frame_base);
1866
f5a9b87d
DM
1867 /* Hook in the DWARF CFI frame unwinder. */
1868 dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
b41c5a85
JW
1869 /* Register DWARF vendor CFI handler. */
1870 set_gdbarch_execute_dwarf_cfa_vendor_op (gdbarch,
1871 sparc_execute_dwarf_cfa_vendor_op);
f5a9b87d
DM
1872 /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1873 StackGhost issues have been resolved. */
1874
b2a0b9b2
DM
1875 /* Hook in ABI-specific overrides, if they have been registered. */
1876 gdbarch_init_osabi (info, gdbarch);
1877
236369e7 1878 frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
c906108c 1879
3f7b46f2
IR
1880 if (tdesc_has_registers (tdesc))
1881 {
1882 struct tdesc_arch_data *tdesc_data = tdesc_data_alloc ();
1883
1884 /* Validate that the descriptor provides the mandatory registers
1885 and allocate their numbers. */
1886 valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
1887 "org.gnu.gdb.sparc.cpu",
1888 sparc_core_register_names,
1889 ARRAY_SIZE (sparc_core_register_names),
1890 SPARC_G0_REGNUM);
1891 valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
1892 "org.gnu.gdb.sparc.fpu",
1893 tdep->fpu_register_names,
1894 tdep->fpu_registers_num,
1895 SPARC_F0_REGNUM);
1896 valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
1897 "org.gnu.gdb.sparc.cp0",
1898 tdep->cp0_register_names,
1899 tdep->cp0_registers_num,
1291063d
JM
1900 SPARC_F0_REGNUM
1901 + tdep->fpu_registers_num);
3f7b46f2
IR
1902 if (!valid_p)
1903 {
1904 tdesc_data_cleanup (tdesc_data);
1905 return NULL;
1906 }
1907
1908 /* Target description may have changed. */
0dba2a6c 1909 info.tdesc_data = tdesc_data;
3f7b46f2
IR
1910 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
1911 }
1912
a54124c5 1913 /* If we have register sets, enable the generic core file support. */
4c72d57a 1914 if (tdep->gregset)
e5139de8
AA
1915 set_gdbarch_iterate_over_regset_sections
1916 (gdbarch, sparc_iterate_over_regset_sections);
a54124c5 1917
7e35103a
JB
1918 register_sparc_ravenscar_ops (gdbarch);
1919
386c036b
MK
1920 return gdbarch;
1921}
1922\f
1923/* Helper functions for dealing with register windows. */
1924
1925void
1926sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
c906108c 1927{
e17a4113
UW
1928 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1929 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
386c036b 1930 int offset = 0;
e1613aba 1931 gdb_byte buf[8];
386c036b
MK
1932 int i;
1933
1934 if (sp & 1)
1935 {
1936 /* Registers are 64-bit. */
1937 sp += BIAS;
c906108c 1938
386c036b
MK
1939 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1940 {
1941 if (regnum == i || regnum == -1)
1942 {
1943 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
f700a364
MK
1944
1945 /* Handle StackGhost. */
1946 if (i == SPARC_I7_REGNUM)
1947 {
e17a4113
UW
1948 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1949 ULONGEST i7;
f700a364 1950
e17a4113
UW
1951 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1952 store_unsigned_integer (buf + offset, 8, byte_order,
1953 i7 ^ wcookie);
f700a364
MK
1954 }
1955
386c036b
MK
1956 regcache_raw_supply (regcache, i, buf);
1957 }
1958 }
1959 }
1960 else
c906108c 1961 {
386c036b
MK
1962 /* Registers are 32-bit. Toss any sign-extension of the stack
1963 pointer. */
1964 sp &= 0xffffffffUL;
c906108c 1965
386c036b
MK
1966 /* Clear out the top half of the temporary buffer, and put the
1967 register value in the bottom half if we're in 64-bit mode. */
e6d4f032 1968 if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
c906108c 1969 {
386c036b
MK
1970 memset (buf, 0, 4);
1971 offset = 4;
1972 }
c906108c 1973
386c036b
MK
1974 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1975 {
1976 if (regnum == i || regnum == -1)
1977 {
1978 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1979 buf + offset, 4);
42cdca6c
MK
1980
1981 /* Handle StackGhost. */
1982 if (i == SPARC_I7_REGNUM)
1983 {
e17a4113
UW
1984 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1985 ULONGEST i7;
42cdca6c 1986
e17a4113
UW
1987 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1988 store_unsigned_integer (buf + offset, 4, byte_order,
1989 i7 ^ wcookie);
42cdca6c
MK
1990 }
1991
386c036b
MK
1992 regcache_raw_supply (regcache, i, buf);
1993 }
c906108c
SS
1994 }
1995 }
c906108c 1996}
c906108c
SS
1997
1998void
386c036b
MK
1999sparc_collect_rwindow (const struct regcache *regcache,
2000 CORE_ADDR sp, int regnum)
c906108c 2001{
e17a4113
UW
2002 struct gdbarch *gdbarch = get_regcache_arch (regcache);
2003 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
386c036b 2004 int offset = 0;
e1613aba 2005 gdb_byte buf[8];
386c036b 2006 int i;
5af923b0 2007
386c036b 2008 if (sp & 1)
5af923b0 2009 {
386c036b
MK
2010 /* Registers are 64-bit. */
2011 sp += BIAS;
c906108c 2012
386c036b
MK
2013 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2014 {
2015 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
2016 {
2017 regcache_raw_collect (regcache, i, buf);
f700a364
MK
2018
2019 /* Handle StackGhost. */
2020 if (i == SPARC_I7_REGNUM)
2021 {
e17a4113
UW
2022 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
2023 ULONGEST i7;
f700a364 2024
e17a4113
UW
2025 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
2026 store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
f700a364
MK
2027 }
2028
386c036b
MK
2029 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
2030 }
2031 }
5af923b0
MS
2032 }
2033 else
2034 {
386c036b
MK
2035 /* Registers are 32-bit. Toss any sign-extension of the stack
2036 pointer. */
2037 sp &= 0xffffffffUL;
2038
2039 /* Only use the bottom half if we're in 64-bit mode. */
e6d4f032 2040 if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
386c036b
MK
2041 offset = 4;
2042
2043 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2044 {
2045 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
2046 {
2047 regcache_raw_collect (regcache, i, buf);
42cdca6c
MK
2048
2049 /* Handle StackGhost. */
2050 if (i == SPARC_I7_REGNUM)
2051 {
e17a4113
UW
2052 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
2053 ULONGEST i7;
42cdca6c 2054
e17a4113
UW
2055 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
2056 store_unsigned_integer (buf + offset, 4, byte_order,
2057 i7 ^ wcookie);
42cdca6c
MK
2058 }
2059
386c036b
MK
2060 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
2061 buf + offset, 4);
2062 }
2063 }
5af923b0 2064 }
c906108c
SS
2065}
2066
386c036b
MK
2067/* Helper functions for dealing with register sets. */
2068
c906108c 2069void
b4fd25c9 2070sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
386c036b
MK
2071 struct regcache *regcache,
2072 int regnum, const void *gregs)
c906108c 2073{
19ba03f4 2074 const gdb_byte *regs = (const gdb_byte *) gregs;
22e74ef9 2075 gdb_byte zero[4] = { 0 };
386c036b 2076 int i;
5af923b0 2077
386c036b
MK
2078 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2079 regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
b4fd25c9 2080 regs + gregmap->r_psr_offset);
c906108c 2081
386c036b
MK
2082 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2083 regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
b4fd25c9 2084 regs + gregmap->r_pc_offset);
5af923b0 2085
386c036b
MK
2086 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2087 regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
b4fd25c9 2088 regs + gregmap->r_npc_offset);
5af923b0 2089
386c036b
MK
2090 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2091 regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
b4fd25c9 2092 regs + gregmap->r_y_offset);
5af923b0 2093
386c036b 2094 if (regnum == SPARC_G0_REGNUM || regnum == -1)
22e74ef9 2095 regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
5af923b0 2096
386c036b 2097 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
c906108c 2098 {
b4fd25c9 2099 int offset = gregmap->r_g1_offset;
386c036b
MK
2100
2101 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
2102 {
2103 if (regnum == i || regnum == -1)
2104 regcache_raw_supply (regcache, i, regs + offset);
2105 offset += 4;
2106 }
c906108c 2107 }
386c036b
MK
2108
2109 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
c906108c 2110 {
386c036b
MK
2111 /* Not all of the register set variants include Locals and
2112 Inputs. For those that don't, we read them off the stack. */
b4fd25c9 2113 if (gregmap->r_l0_offset == -1)
386c036b
MK
2114 {
2115 ULONGEST sp;
2116
2117 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
2118 sparc_supply_rwindow (regcache, sp, regnum);
2119 }
2120 else
2121 {
b4fd25c9 2122 int offset = gregmap->r_l0_offset;
386c036b
MK
2123
2124 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2125 {
2126 if (regnum == i || regnum == -1)
2127 regcache_raw_supply (regcache, i, regs + offset);
2128 offset += 4;
2129 }
2130 }
c906108c
SS
2131 }
2132}
2133
c5aa993b 2134void
b4fd25c9 2135sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
386c036b
MK
2136 const struct regcache *regcache,
2137 int regnum, void *gregs)
c906108c 2138{
19ba03f4 2139 gdb_byte *regs = (gdb_byte *) gregs;
386c036b 2140 int i;
c5aa993b 2141
386c036b
MK
2142 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2143 regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
b4fd25c9 2144 regs + gregmap->r_psr_offset);
60054393 2145
386c036b
MK
2146 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2147 regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
b4fd25c9 2148 regs + gregmap->r_pc_offset);
386c036b
MK
2149
2150 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2151 regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
b4fd25c9 2152 regs + gregmap->r_npc_offset);
5af923b0 2153
386c036b
MK
2154 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2155 regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
b4fd25c9 2156 regs + gregmap->r_y_offset);
386c036b
MK
2157
2158 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
5af923b0 2159 {
b4fd25c9 2160 int offset = gregmap->r_g1_offset;
386c036b
MK
2161
2162 /* %g0 is always zero. */
2163 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
2164 {
2165 if (regnum == i || regnum == -1)
2166 regcache_raw_collect (regcache, i, regs + offset);
2167 offset += 4;
2168 }
5af923b0 2169 }
386c036b
MK
2170
2171 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
5af923b0 2172 {
386c036b
MK
2173 /* Not all of the register set variants include Locals and
2174 Inputs. For those that don't, we read them off the stack. */
b4fd25c9 2175 if (gregmap->r_l0_offset != -1)
386c036b 2176 {
b4fd25c9 2177 int offset = gregmap->r_l0_offset;
386c036b
MK
2178
2179 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2180 {
2181 if (regnum == i || regnum == -1)
2182 regcache_raw_collect (regcache, i, regs + offset);
2183 offset += 4;
2184 }
2185 }
5af923b0 2186 }
c906108c
SS
2187}
2188
c906108c 2189void
b4fd25c9 2190sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
db75c717 2191 struct regcache *regcache,
386c036b 2192 int regnum, const void *fpregs)
c906108c 2193{
19ba03f4 2194 const gdb_byte *regs = (const gdb_byte *) fpregs;
386c036b 2195 int i;
60054393 2196
386c036b 2197 for (i = 0; i < 32; i++)
c906108c 2198 {
386c036b 2199 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
db75c717 2200 regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
b4fd25c9 2201 regs + fpregmap->r_f0_offset + (i * 4));
c906108c 2202 }
5af923b0 2203
386c036b 2204 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
db75c717 2205 regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
b4fd25c9 2206 regs + fpregmap->r_fsr_offset);
c906108c
SS
2207}
2208
386c036b 2209void
b4fd25c9 2210sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
db75c717 2211 const struct regcache *regcache,
386c036b 2212 int regnum, void *fpregs)
c906108c 2213{
19ba03f4 2214 gdb_byte *regs = (gdb_byte *) fpregs;
386c036b 2215 int i;
c906108c 2216
386c036b
MK
2217 for (i = 0; i < 32; i++)
2218 {
2219 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
db75c717 2220 regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
b4fd25c9 2221 regs + fpregmap->r_f0_offset + (i * 4));
386c036b 2222 }
c906108c 2223
386c036b 2224 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
db75c717 2225 regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
b4fd25c9 2226 regs + fpregmap->r_fsr_offset);
c906108c 2227}
c906108c 2228\f
c906108c 2229
386c036b 2230/* SunOS 4. */
c906108c 2231
386c036b 2232/* From <machine/reg.h>. */
b4fd25c9 2233const struct sparc_gregmap sparc32_sunos4_gregmap =
c906108c 2234{
386c036b
MK
2235 0 * 4, /* %psr */
2236 1 * 4, /* %pc */
2237 2 * 4, /* %npc */
2238 3 * 4, /* %y */
2239 -1, /* %wim */
2240 -1, /* %tbr */
2241 4 * 4, /* %g1 */
2242 -1 /* %l0 */
2243};
db75c717 2244
b4fd25c9 2245const struct sparc_fpregmap sparc32_sunos4_fpregmap =
db75c717
DM
2246{
2247 0 * 4, /* %f0 */
2248 33 * 4, /* %fsr */
2249};
2250
b4fd25c9 2251const struct sparc_fpregmap sparc32_bsd_fpregmap =
db75c717
DM
2252{
2253 0 * 4, /* %f0 */
2254 32 * 4, /* %fsr */
2255};
386c036b 2256\f
c906108c 2257
386c036b
MK
2258/* Provide a prototype to silence -Wmissing-prototypes. */
2259void _initialize_sparc_tdep (void);
c906108c
SS
2260
2261void
386c036b 2262_initialize_sparc_tdep (void)
c906108c 2263{
386c036b 2264 register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
ef3cf062 2265}
This page took 2.026188 seconds and 4 git commands to generate.