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