]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/sparc-tdep.c
1f08865f9aaf08a4b41a7d3cbf09f89702a47962
[thirdparty/binutils-gdb.git] / gdb / sparc-tdep.c
1 /* Target-dependent code for SPARC.
2
3 Copyright (C) 2003-2017 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "arch-utils.h"
22 #include "dis-asm.h"
23 #include "dwarf2.h"
24 #include "dwarf2-frame.h"
25 #include "floatformat.h"
26 #include "frame.h"
27 #include "frame-base.h"
28 #include "frame-unwind.h"
29 #include "gdbcore.h"
30 #include "gdbtypes.h"
31 #include "inferior.h"
32 #include "symtab.h"
33 #include "objfiles.h"
34 #include "osabi.h"
35 #include "regcache.h"
36 #include "target.h"
37 #include "target-descriptions.h"
38 #include "value.h"
39
40 #include "sparc-tdep.h"
41 #include "sparc-ravenscar-thread.h"
42 #include <algorithm>
43
44 struct regset;
45
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
49 lists changes with respect to the original 32-bit psABI as defined
50 in the "System V ABI, SPARC Processor Supplement".
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
66 big-endian IA-64 Quad-Precision format. */
67 #define floatformats_sparc_quad floatformats_ia64_quad
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. */
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)
83 #define X_RS1(i) (((i) >> 14) & 0x1f)
84 #define X_RS2(i) ((i) & 0x1f)
85 #define X_I(i) (((i) >> 13) & 1)
86 /* Sign extension macros. */
87 #define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
88 #define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
89 #define X_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
90 #define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
91 /* Macros to identify some instructions. */
92 /* RETURN (RETT in V8) */
93 #define X_RETTURN(i) ((X_OP (i) == 0x2) && (X_OP3 (i) == 0x39))
94
95 /* Fetch the instruction at PC. Instructions are always big-endian
96 even if the processor operates in little-endian mode. */
97
98 unsigned long
99 sparc_fetch_instruction (CORE_ADDR pc)
100 {
101 gdb_byte buf[4];
102 unsigned long insn;
103 int i;
104
105 /* If we can't read the instruction at PC, return zero. */
106 if (target_read_memory (pc, buf, sizeof (buf)))
107 return 0;
108
109 insn = 0;
110 for (i = 0; i < sizeof (buf); i++)
111 insn = (insn << 8) | buf[i];
112 return insn;
113 }
114 \f
115
116 /* Return non-zero if the instruction corresponding to PC is an "unimp"
117 instruction. */
118
119 static int
120 sparc_is_unimp_insn (CORE_ADDR pc)
121 {
122 const unsigned long insn = sparc_fetch_instruction (pc);
123
124 return ((insn & 0xc1c00000) == 0);
125 }
126
127 /* Return non-zero if the instruction corresponding to PC is an
128 "annulled" branch, i.e. the annul bit is set. */
129
130 int
131 sparc_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
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
183 Mike Frantzen and Mike Shuey. "StackGhost: Hardware Facilitated
184 Stack Protection." 2001. Published in USENIX Security Symposium
185 '01. */
186
187 /* Fetch StackGhost Per-Process XOR cookie. */
188
189 ULONGEST
190 sparc_fetch_wcookie (struct gdbarch *gdbarch)
191 {
192 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
193 struct target_ops *ops = &current_target;
194 gdb_byte buf[8];
195 int len;
196
197 len = target_read (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
198 if (len == -1)
199 return 0;
200
201 /* We should have either an 32-bit or an 64-bit cookie. */
202 gdb_assert (len == 4 || len == 8);
203
204 return extract_unsigned_integer (buf, len, byte_order);
205 }
206 \f
207
208 /* The functions on this page are intended to be used to classify
209 function arguments. */
210
211 /* Check whether TYPE is "Integral or Pointer". */
212
213 static int
214 sparc_integral_or_pointer_p (const struct type *type)
215 {
216 int len = TYPE_LENGTH (type);
217
218 switch (TYPE_CODE (type))
219 {
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:
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);
229 case TYPE_CODE_PTR:
230 case TYPE_CODE_REF:
231 case TYPE_CODE_RVALUE_REF:
232 /* Allow either 32-bit or 64-bit pointers. */
233 return (len == 4 || len == 8);
234 default:
235 break;
236 }
237
238 return 0;
239 }
240
241 /* Check whether TYPE is "Floating". */
242
243 static int
244 sparc_floating_p (const struct type *type)
245 {
246 switch (TYPE_CODE (type))
247 {
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 }
259
260 /* Check whether TYPE is "Complex Floating". */
261
262 static int
263 sparc_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
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. */
284
285 static int
286 sparc_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:
292 case TYPE_CODE_ARRAY:
293 return 1;
294 default:
295 break;
296 }
297
298 return 0;
299 }
300
301 /* Check whether TYPE is returned on registers. */
302
303 static bool
304 sparc_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
321 static bool
322 sparc_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
338 /* Register information. */
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"
346
347 static const char *sparc_core_register_names[] = { SPARC_CORE_REGISTERS };
348 static const char *sparc32_fpu_register_names[] = { SPARC32_FPU_REGISTERS };
349 static const char *sparc32_cp0_register_names[] = { SPARC32_CP0_REGISTERS };
350
351 static const char *sparc32_register_names[] =
352 {
353 SPARC_CORE_REGISTERS,
354 SPARC32_FPU_REGISTERS,
355 SPARC32_CP0_REGISTERS
356 };
357
358 /* Total number of registers. */
359 #define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
360
361 /* We provide the aliases %d0..%d30 for the floating registers as
362 "psuedo" registers. */
363
364 static 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
373 /* Return the name of pseudo register REGNUM. */
374
375 static const char *
376 sparc32_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
388 /* Return the name of register REGNUM. */
389
390 static const char *
391 sparc32_register_name (struct gdbarch *gdbarch, int regnum)
392 {
393 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
394 return tdesc_register_name (gdbarch, regnum);
395
396 if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
397 return sparc32_register_names[regnum];
398
399 return sparc32_pseudo_register_name (gdbarch, regnum);
400 }
401 \f
402 /* Construct types for ISA-specific registers. */
403
404 static struct type *
405 sparc_psr_type (struct gdbarch *gdbarch)
406 {
407 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
408
409 if (!tdep->sparc_psr_type)
410 {
411 struct type *type;
412
413 type = arch_flags_type (gdbarch, "builtin_type_sparc_psr", 4);
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");
419
420 tdep->sparc_psr_type = type;
421 }
422
423 return tdep->sparc_psr_type;
424 }
425
426 static struct type *
427 sparc_fsr_type (struct gdbarch *gdbarch)
428 {
429 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
430
431 if (!tdep->sparc_fsr_type)
432 {
433 struct type *type;
434
435 type = arch_flags_type (gdbarch, "builtin_type_sparc_fsr", 4);
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;
457 }
458
459 /* Return the GDB type object for the "standard" data type of data in
460 pseudo register REGNUM. */
461
462 static struct type *
463 sparc32_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
475 /* Return the GDB type object for the "standard" data type of data in
476 register REGNUM. */
477
478 static struct type *
479 sparc32_register_type (struct gdbarch *gdbarch, int regnum)
480 {
481 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
482 return tdesc_register_type (gdbarch, regnum);
483
484 if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
485 return builtin_type (gdbarch)->builtin_float;
486
487 if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
488 return builtin_type (gdbarch)->builtin_data_ptr;
489
490 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
491 return builtin_type (gdbarch)->builtin_func_ptr;
492
493 if (regnum == SPARC32_PSR_REGNUM)
494 return sparc_psr_type (gdbarch);
495
496 if (regnum == SPARC32_FSR_REGNUM)
497 return sparc_fsr_type (gdbarch);
498
499 if (regnum >= gdbarch_num_regs (gdbarch))
500 return sparc32_pseudo_register_type (gdbarch, regnum);
501
502 return builtin_type (gdbarch)->builtin_int32;
503 }
504
505 static enum register_status
506 sparc32_pseudo_register_read (struct gdbarch *gdbarch,
507 struct regcache *regcache,
508 int regnum, gdb_byte *buf)
509 {
510 enum register_status status;
511
512 regnum -= gdbarch_num_regs (gdbarch);
513 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
514
515 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
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;
520 }
521
522 static void
523 sparc32_pseudo_register_write (struct gdbarch *gdbarch,
524 struct regcache *regcache,
525 int regnum, const gdb_byte *buf)
526 {
527 regnum -= gdbarch_num_regs (gdbarch);
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);
532 regcache_raw_write (regcache, regnum + 1, buf + 4);
533 }
534 \f
535 /* Implement the stack_frame_destroyed_p gdbarch method. */
536
537 int
538 sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
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
558
559 static CORE_ADDR
560 sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
561 {
562 /* The ABI requires double-word alignment. */
563 return address & ~0x7;
564 }
565
566 static CORE_ADDR
567 sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
568 CORE_ADDR funcaddr,
569 struct value **args, int nargs,
570 struct type *value_type,
571 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
572 struct regcache *regcache)
573 {
574 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
575
576 *bp_addr = sp - 4;
577 *real_pc = funcaddr;
578
579 if (using_struct_return (gdbarch, NULL, value_type))
580 {
581 gdb_byte buf[4];
582
583 /* This is an UNIMP instruction. */
584 store_unsigned_integer (buf, 4, byte_order,
585 TYPE_LENGTH (value_type) & 0x1fff);
586 write_memory (sp - 8, buf, 4);
587 return sp - 8;
588 }
589
590 return sp - 4;
591 }
592
593 static CORE_ADDR
594 sparc32_store_arguments (struct regcache *regcache, int nargs,
595 struct value **args, CORE_ADDR sp,
596 int struct_return, CORE_ADDR struct_addr)
597 {
598 struct gdbarch *gdbarch = get_regcache_arch (regcache);
599 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
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++)
606 {
607 struct type *type = value_type (args[i]);
608 int len = TYPE_LENGTH (type);
609
610 if (!sparc_arg_on_registers_p (type))
611 {
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
619 write_memory (sp, value_contents (args[i]), len);
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);
628 }
629 else
630 {
631 /* Integral and pointer arguments. */
632 gdb_assert (sparc_integral_or_pointer_p (type)
633 || (TYPE_CODE (type) == TYPE_CODE_ARRAY && len <= 8));
634 num_elements += ((len + 3) / 4);
635 }
636 }
637
638 /* Always allocate at least six words. */
639 sp -= std::max (6, num_elements) * 4;
640
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;
644
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;
649
650 for (i = 0; i < nargs; i++)
651 {
652 const bfd_byte *valbuf = value_contents (args[i]);
653 struct type *type = value_type (args[i]);
654 int len = TYPE_LENGTH (type);
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 }
664
665 gdb_assert (len == 4 || len == 8);
666
667 if (element < 6)
668 {
669 int regnum = SPARC_O0_REGNUM + element;
670
671 regcache_cooked_write (regcache, regnum, valbuf);
672 if (len > 4 && element < 5)
673 regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
674 }
675
676 /* Always store the argument in memory. */
677 write_memory (sp + 4 + element * 4, valbuf, len);
678 element += len / 4;
679 }
680
681 gdb_assert (element == num_elements);
682
683 if (struct_return)
684 {
685 gdb_byte buf[4];
686
687 store_unsigned_integer (buf, 4, byte_order, struct_addr);
688 write_memory (sp, buf, 4);
689 }
690
691 return sp;
692 }
693
694 static CORE_ADDR
695 sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
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)
699 {
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;
711
712 /* Stack should be doubleword aligned at this point. */
713 gdb_assert (sp % 8 == 0);
714
715 /* Finally, update the stack pointer. */
716 regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
717
718 return sp;
719 }
720 \f
721
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. */
727 constexpr gdb_byte sparc_break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
728
729 typedef BP_MANIPULATION (sparc_break_insn) sparc_breakpoint;
730 \f
731
732 /* Allocate and initialize a frame cache. */
733
734 static struct sparc_frame_cache *
735 sparc_alloc_frame_cache (void)
736 {
737 struct sparc_frame_cache *cache;
738
739 cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
740
741 /* Base address. */
742 cache->base = 0;
743 cache->pc = 0;
744
745 /* Frameless until proven otherwise. */
746 cache->frameless_p = 1;
747 cache->frame_offset = 0;
748 cache->saved_regs_mask = 0;
749 cache->copied_regs_mask = 0;
750 cache->struct_return_p = 0;
751
752 return cache;
753 }
754
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
760 static CORE_ADDR
761 sparc_skip_stack_check (const CORE_ADDR start_pc)
762 {
763 CORE_ADDR pc = start_pc;
764 unsigned long insn;
765 int probing_loop = 0;
766
767 /* With GCC, all stack checking sequences begin with the same two
768 instructions, plus an optional one in the case of a probing loop:
769
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 */
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
794 /* optional: sethi <some immediate>, %g4 */
795 insn = sparc_fetch_instruction (pc);
796 pc = pc + 4;
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 */
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
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
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.
871 [first three instructions above]
872 sub %g1, %g4, %g4
873 cmp %g1, %g4
874 be <disp>
875 add %g1, -<some immediate>, %g1
876 ba <disp>
877 clr [%g1]
878
879 And an optional last probe for the remainder:
880
881 clr [%g4 - some immediate] */
882
883 if (probing_loop)
884 {
885 /* sub %g1, %g4, %g4 */
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
916 /* clr [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
917 insn = sparc_fetch_instruction (pc);
918 pc = pc + 4;
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)))
922 return start_pc;
923
924 /* We found a valid stack-check sequence, return the new PC. */
925
926 /* optional: clr [%g4 - some immediate] */
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))
931 return pc - 4;
932 else
933 return pc;
934 }
935
936 /* No stack check code in our prologue, return the start_pc. */
937 return start_pc;
938 }
939
940 /* Record the effect of a SAVE instruction on CACHE. */
941
942 void
943 sparc_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
965 CORE_ADDR
966 sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
967 CORE_ADDR current_pc, struct sparc_frame_cache *cache)
968 {
969 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
970 unsigned long insn;
971 int offset = 0;
972 int dest = -1;
973
974 pc = sparc_skip_stack_check (pc);
975
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. */
989 if (tdep->plt_entry_size > 0 && in_plt_section (current_pc))
990 pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
991
992 insn = sparc_fetch_instruction (pc);
993
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
1021 /* Recognize a SETHI insn and record its destination. */
1022 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
1023 {
1024 dest = X_RD (insn);
1025 offset += 4;
1026
1027 insn = sparc_fetch_instruction (pc + offset);
1028 }
1029
1030 /* Allow for an arithmetic operation on DEST or %g1. */
1031 if (X_OP (insn) == 2 && X_I (insn)
1032 && (X_RD (insn) == 1 || X_RD (insn) == dest))
1033 {
1034 offset += 4;
1035
1036 insn = sparc_fetch_instruction (pc + offset);
1037 }
1038
1039 /* Check for the SAVE instruction that sets up the frame. */
1040 if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
1041 {
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;
1092 }
1093
1094 return pc;
1095 }
1096
1097 static CORE_ADDR
1098 sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1099 {
1100 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1101 return frame_unwind_register_unsigned (this_frame, tdep->pc_regnum);
1102 }
1103
1104 /* Return PC of first real instruction of the function starting at
1105 START_PC. */
1106
1107 static CORE_ADDR
1108 sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1109 {
1110 struct symtab_and_line sal;
1111 CORE_ADDR func_start, func_end;
1112 struct sparc_frame_cache cache;
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
1125 start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
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
1134 write out these incoming arguments onto the stack. */
1135
1136 while (1)
1137 {
1138 unsigned long insn = sparc_fetch_instruction (start_pc);
1139
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)
1144 {
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 }
1164 }
1165
1166 break;
1167 }
1168
1169 return start_pc;
1170 }
1171
1172 /* Normal frames. */
1173
1174 struct sparc_frame_cache *
1175 sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
1176 {
1177 struct sparc_frame_cache *cache;
1178
1179 if (*this_cache)
1180 return (struct sparc_frame_cache *) *this_cache;
1181
1182 cache = sparc_alloc_frame_cache ();
1183 *this_cache = cache;
1184
1185 cache->pc = get_frame_func (this_frame);
1186 if (cache->pc != 0)
1187 sparc_analyze_prologue (get_frame_arch (this_frame), cache->pc,
1188 get_frame_pc (this_frame), cache);
1189
1190 if (cache->frameless_p)
1191 {
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 =
1196 get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
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 =
1203 get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
1204 }
1205
1206 cache->base += cache->frame_offset;
1207
1208 if (cache->base & 1)
1209 cache->base += BIAS;
1210
1211 return cache;
1212 }
1213
1214 static int
1215 sparc32_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
1231 struct sparc_frame_cache *
1232 sparc32_frame_cache (struct frame_info *this_frame, void **this_cache)
1233 {
1234 struct sparc_frame_cache *cache;
1235 struct symbol *sym;
1236
1237 if (*this_cache)
1238 return (struct sparc_frame_cache *) *this_cache;
1239
1240 cache = sparc_frame_cache (this_frame, this_cache);
1241
1242 sym = find_pc_function (cache->pc);
1243 if (sym)
1244 {
1245 cache->struct_return_p = sparc32_struct_return_from_sym (sym);
1246 }
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;
1256 int regnum =
1257 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1258
1259 pc = get_frame_register_unsigned (this_frame, regnum) + 8;
1260 if (sparc_is_unimp_insn (pc))
1261 cache->struct_return_p = 1;
1262 }
1263
1264 return cache;
1265 }
1266
1267 static void
1268 sparc32_frame_this_id (struct frame_info *this_frame, void **this_cache,
1269 struct frame_id *this_id)
1270 {
1271 struct sparc_frame_cache *cache =
1272 sparc32_frame_cache (this_frame, this_cache);
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 }
1280
1281 static struct value *
1282 sparc32_frame_prev_register (struct frame_info *this_frame,
1283 void **this_cache, int regnum)
1284 {
1285 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1286 struct sparc_frame_cache *cache =
1287 sparc32_frame_cache (this_frame, this_cache);
1288
1289 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
1290 {
1291 CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
1292
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;
1298
1299 regnum =
1300 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1301 pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1302 return frame_unwind_got_constant (this_frame, regnum, pc);
1303 }
1304
1305 /* Handle StackGhost. */
1306 {
1307 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1308
1309 if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1310 {
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);
1317 }
1318 }
1319
1320 /* The previous frame's `local' and `in' registers may have been saved
1321 in the register save area. */
1322 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1323 && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
1324 {
1325 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1326
1327 return frame_unwind_got_memory (this_frame, regnum, addr);
1328 }
1329
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))))
1334 regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
1335
1336 return frame_unwind_got_register (this_frame, regnum, regnum);
1337 }
1338
1339 static const struct frame_unwind sparc32_frame_unwind =
1340 {
1341 NORMAL_FRAME,
1342 default_frame_unwind_stop_reason,
1343 sparc32_frame_this_id,
1344 sparc32_frame_prev_register,
1345 NULL,
1346 default_frame_sniffer
1347 };
1348 \f
1349
1350 static CORE_ADDR
1351 sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1352 {
1353 struct sparc_frame_cache *cache =
1354 sparc32_frame_cache (this_frame, this_cache);
1355
1356 return cache->base;
1357 }
1358
1359 static 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 };
1366
1367 static struct frame_id
1368 sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1369 {
1370 CORE_ADDR sp;
1371
1372 sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1373 if (sp & 1)
1374 sp += BIAS;
1375 return frame_id_build (sp, get_frame_pc (this_frame));
1376 }
1377 \f
1378
1379 /* Extract a function return value of TYPE from REGCACHE, and copy
1380 that into VALBUF. */
1381
1382 static void
1383 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
1384 gdb_byte *valbuf)
1385 {
1386 int len = TYPE_LENGTH (type);
1387 gdb_byte buf[32];
1388
1389 gdb_assert (!sparc_structure_return_p (type));
1390
1391 if (sparc_floating_p (type) || sparc_complex_floating_p (type)
1392 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
1393 {
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);
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 }
1410 memcpy (valbuf, buf, len);
1411 }
1412 else
1413 {
1414 /* Integral and pointer return values. */
1415 gdb_assert (sparc_integral_or_pointer_p (type));
1416
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 }
1432
1433 /* Store the function return value of type TYPE from VALBUF into
1434 REGCACHE. */
1435
1436 static void
1437 sparc32_store_return_value (struct type *type, struct regcache *regcache,
1438 const gdb_byte *valbuf)
1439 {
1440 int len = TYPE_LENGTH (type);
1441 gdb_byte buf[32];
1442
1443 gdb_assert (!sparc_structure_return_p (type));
1444
1445 if (sparc_floating_p (type) || sparc_complex_floating_p (type))
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);
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 }
1464 }
1465 else
1466 {
1467 /* Integral and pointer return values. */
1468 gdb_assert (sparc_integral_or_pointer_p (type));
1469
1470 if (len > 4)
1471 {
1472 gdb_assert (len == 8);
1473 memcpy (buf, valbuf, 8);
1474 regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
1475 }
1476 else
1477 {
1478 /* ??? Do we need to do any sign-extension here? */
1479 memcpy (buf + 4 - len, valbuf, len);
1480 }
1481 regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
1482 }
1483 }
1484
1485 static enum return_value_convention
1486 sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
1487 struct type *type, struct regcache *regcache,
1488 gdb_byte *readbuf, const gdb_byte *writebuf)
1489 {
1490 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1491
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
1499 if (sparc_structure_return_p (type))
1500 {
1501 ULONGEST sp;
1502 CORE_ADDR addr;
1503
1504 if (readbuf)
1505 {
1506 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1507 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1508 read_memory (addr, readbuf, TYPE_LENGTH (type));
1509 }
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 }
1516
1517 return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1518 }
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
1528 static int
1529 sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
1530 {
1531 return (sparc_structure_or_union_p (type)
1532 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
1533 || sparc_complex_floating_p (type));
1534 }
1535
1536 static int
1537 sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
1538 {
1539 CORE_ADDR pc = get_frame_address_in_block (this_frame);
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
1547 static void
1548 sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1549 struct dwarf2_frame_state_reg *reg,
1550 struct frame_info *this_frame)
1551 {
1552 int off;
1553
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:
1566 case SPARC32_NPC_REGNUM:
1567 reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1568 off = 8;
1569 if (sparc32_dwarf2_struct_return_p (this_frame))
1570 off += 4;
1571 if (regnum == SPARC32_NPC_REGNUM)
1572 off += 4;
1573 reg->loc.offset = off;
1574 break;
1575 }
1576 }
1577
1578 /* Implement the execute_dwarf_cfa_vendor_op method. */
1579
1580 static bool
1581 sparc_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
1591 fs->regs.alloc_regs (32);
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
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. */
1610
1611 static CORE_ADDR
1612 sparc_analyze_control_transfer (struct regcache *regcache,
1613 CORE_ADDR pc, CORE_ADDR *npc)
1614 {
1615 unsigned long insn = sparc_fetch_instruction (pc);
1616 int conditional_p = X_COND (insn) & 0x7;
1617 int branch_p = 0, fused_p = 0;
1618 long offset = 0; /* Must be signed for sign-extend. */
1619
1620 if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
1621 {
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 }
1635 }
1636 else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1637 {
1638 /* Branch on Floating-Point Condition Codes (FBfcc). */
1639 branch_p = 1;
1640 offset = 4 * X_DISP22 (insn);
1641 }
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)
1656 {
1657 /* Branch on Integer Condition Codes with Prediction (BPcc). */
1658 branch_p = 1;
1659 offset = 4 * X_DISP19 (insn);
1660 }
1661 else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1662 {
1663 struct frame_info *frame = get_current_frame ();
1664
1665 /* Trap instruction (TRAP). */
1666 return gdbarch_tdep (get_regcache_arch (regcache))->step_trap (frame,
1667 insn);
1668 }
1669
1670 /* FIXME: Handle DONE and RETRY instructions. */
1671
1672 if (branch_p)
1673 {
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)
1684 {
1685 /* For conditional branches, return nPC + 4 iff the annul
1686 bit is 1. */
1687 return (X_A (insn) ? *npc + 4 : 0);
1688 }
1689 else
1690 {
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
1700 return pc + offset;
1701 }
1702 }
1703
1704 return 0;
1705 }
1706
1707 static CORE_ADDR
1708 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1709 {
1710 return 0;
1711 }
1712
1713 static std::vector<CORE_ADDR>
1714 sparc_software_single_step (struct regcache *regcache)
1715 {
1716 struct gdbarch *arch = get_regcache_arch (regcache);
1717 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1718 CORE_ADDR npc, nnpc;
1719
1720 CORE_ADDR pc, orig_npc;
1721 std::vector<CORE_ADDR> next_pcs;
1722
1723 pc = regcache_raw_get_unsigned (regcache, tdep->pc_regnum);
1724 orig_npc = npc = regcache_raw_get_unsigned (regcache, tdep->npc_regnum);
1725
1726 /* Analyze the instruction at PC. */
1727 nnpc = sparc_analyze_control_transfer (regcache, pc, &npc);
1728 if (npc != 0)
1729 next_pcs.push_back (npc);
1730
1731 if (nnpc != 0)
1732 next_pcs.push_back (nnpc);
1733
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);
1739
1740 return next_pcs;
1741 }
1742
1743 static void
1744 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1745 {
1746 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1747
1748 regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1749 regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1750 }
1751 \f
1752
1753 /* Iterate over core file register note sections. */
1754
1755 static void
1756 sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
1757 iterate_over_regset_sections_cb *cb,
1758 void *cb_data,
1759 const struct regcache *regcache)
1760 {
1761 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1762
1763 cb (".reg", tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
1764 cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
1765 }
1766 \f
1767
1768 static int
1769 validate_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
1791 static struct gdbarch *
1792 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1793 {
1794 struct gdbarch_tdep *tdep;
1795 const struct target_desc *tdesc = info.target_desc;
1796 struct gdbarch *gdbarch;
1797 int valid_p = 1;
1798
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;
1803
1804 /* Allocate space for the new architecture. */
1805 tdep = XCNEW (struct gdbarch_tdep);
1806 gdbarch = gdbarch_alloc (&info, tdep);
1807
1808 tdep->pc_regnum = SPARC32_PC_REGNUM;
1809 tdep->npc_regnum = SPARC32_NPC_REGNUM;
1810 tdep->step_trap = sparc_step_trap;
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);
1815
1816 set_gdbarch_long_double_bit (gdbarch, 128);
1817 set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1818
1819 set_gdbarch_wchar_bit (gdbarch, 16);
1820 set_gdbarch_wchar_signed (gdbarch, 1);
1821
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);
1826 set_tdesc_pseudo_register_name (gdbarch, sparc32_pseudo_register_name);
1827 set_tdesc_pseudo_register_type (gdbarch, sparc32_pseudo_register_type);
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. */
1837 set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
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
1842 set_gdbarch_return_value (gdbarch, sparc32_return_value);
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);
1850
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);
1855
1856 set_gdbarch_frame_args_skip (gdbarch, 8);
1857
1858 set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1859 set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1860
1861 set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1862
1863 set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1864
1865 frame_base_set_default (gdbarch, &sparc32_frame_base);
1866
1867 /* Hook in the DWARF CFI frame unwinder. */
1868 dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1869 /* Register DWARF vendor CFI handler. */
1870 set_gdbarch_execute_dwarf_cfa_vendor_op (gdbarch,
1871 sparc_execute_dwarf_cfa_vendor_op);
1872 /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1873 StackGhost issues have been resolved. */
1874
1875 /* Hook in ABI-specific overrides, if they have been registered. */
1876 gdbarch_init_osabi (info, gdbarch);
1877
1878 frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1879
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,
1900 SPARC_F0_REGNUM
1901 + tdep->fpu_registers_num);
1902 if (!valid_p)
1903 {
1904 tdesc_data_cleanup (tdesc_data);
1905 return NULL;
1906 }
1907
1908 /* Target description may have changed. */
1909 info.tdesc_data = tdesc_data;
1910 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
1911 }
1912
1913 /* If we have register sets, enable the generic core file support. */
1914 if (tdep->gregset)
1915 set_gdbarch_iterate_over_regset_sections
1916 (gdbarch, sparc_iterate_over_regset_sections);
1917
1918 register_sparc_ravenscar_ops (gdbarch);
1919
1920 return gdbarch;
1921 }
1922 \f
1923 /* Helper functions for dealing with register windows. */
1924
1925 void
1926 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1927 {
1928 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1929 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1930 int offset = 0;
1931 gdb_byte buf[8];
1932 int i;
1933
1934 if (sp & 1)
1935 {
1936 /* Registers are 64-bit. */
1937 sp += BIAS;
1938
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);
1944
1945 /* Handle StackGhost. */
1946 if (i == SPARC_I7_REGNUM)
1947 {
1948 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1949 ULONGEST i7;
1950
1951 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1952 store_unsigned_integer (buf + offset, 8, byte_order,
1953 i7 ^ wcookie);
1954 }
1955
1956 regcache_raw_supply (regcache, i, buf);
1957 }
1958 }
1959 }
1960 else
1961 {
1962 /* Registers are 32-bit. Toss any sign-extension of the stack
1963 pointer. */
1964 sp &= 0xffffffffUL;
1965
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. */
1968 if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1969 {
1970 memset (buf, 0, 4);
1971 offset = 4;
1972 }
1973
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);
1980
1981 /* Handle StackGhost. */
1982 if (i == SPARC_I7_REGNUM)
1983 {
1984 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1985 ULONGEST i7;
1986
1987 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1988 store_unsigned_integer (buf + offset, 4, byte_order,
1989 i7 ^ wcookie);
1990 }
1991
1992 regcache_raw_supply (regcache, i, buf);
1993 }
1994 }
1995 }
1996 }
1997
1998 void
1999 sparc_collect_rwindow (const struct regcache *regcache,
2000 CORE_ADDR sp, int regnum)
2001 {
2002 struct gdbarch *gdbarch = get_regcache_arch (regcache);
2003 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2004 int offset = 0;
2005 gdb_byte buf[8];
2006 int i;
2007
2008 if (sp & 1)
2009 {
2010 /* Registers are 64-bit. */
2011 sp += BIAS;
2012
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);
2018
2019 /* Handle StackGhost. */
2020 if (i == SPARC_I7_REGNUM)
2021 {
2022 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
2023 ULONGEST i7;
2024
2025 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
2026 store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
2027 }
2028
2029 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
2030 }
2031 }
2032 }
2033 else
2034 {
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. */
2040 if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
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);
2048
2049 /* Handle StackGhost. */
2050 if (i == SPARC_I7_REGNUM)
2051 {
2052 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
2053 ULONGEST i7;
2054
2055 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
2056 store_unsigned_integer (buf + offset, 4, byte_order,
2057 i7 ^ wcookie);
2058 }
2059
2060 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
2061 buf + offset, 4);
2062 }
2063 }
2064 }
2065 }
2066
2067 /* Helper functions for dealing with register sets. */
2068
2069 void
2070 sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
2071 struct regcache *regcache,
2072 int regnum, const void *gregs)
2073 {
2074 const gdb_byte *regs = (const gdb_byte *) gregs;
2075 gdb_byte zero[4] = { 0 };
2076 int i;
2077
2078 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2079 regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
2080 regs + gregmap->r_psr_offset);
2081
2082 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2083 regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
2084 regs + gregmap->r_pc_offset);
2085
2086 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2087 regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
2088 regs + gregmap->r_npc_offset);
2089
2090 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2091 regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
2092 regs + gregmap->r_y_offset);
2093
2094 if (regnum == SPARC_G0_REGNUM || regnum == -1)
2095 regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
2096
2097 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
2098 {
2099 int offset = gregmap->r_g1_offset;
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 }
2107 }
2108
2109 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
2110 {
2111 /* Not all of the register set variants include Locals and
2112 Inputs. For those that don't, we read them off the stack. */
2113 if (gregmap->r_l0_offset == -1)
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 {
2122 int offset = gregmap->r_l0_offset;
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 }
2131 }
2132 }
2133
2134 void
2135 sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
2136 const struct regcache *regcache,
2137 int regnum, void *gregs)
2138 {
2139 gdb_byte *regs = (gdb_byte *) gregs;
2140 int i;
2141
2142 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2143 regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
2144 regs + gregmap->r_psr_offset);
2145
2146 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2147 regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
2148 regs + gregmap->r_pc_offset);
2149
2150 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2151 regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
2152 regs + gregmap->r_npc_offset);
2153
2154 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2155 regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
2156 regs + gregmap->r_y_offset);
2157
2158 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
2159 {
2160 int offset = gregmap->r_g1_offset;
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 }
2169 }
2170
2171 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
2172 {
2173 /* Not all of the register set variants include Locals and
2174 Inputs. For those that don't, we read them off the stack. */
2175 if (gregmap->r_l0_offset != -1)
2176 {
2177 int offset = gregmap->r_l0_offset;
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 }
2186 }
2187 }
2188
2189 void
2190 sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
2191 struct regcache *regcache,
2192 int regnum, const void *fpregs)
2193 {
2194 const gdb_byte *regs = (const gdb_byte *) fpregs;
2195 int i;
2196
2197 for (i = 0; i < 32; i++)
2198 {
2199 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2200 regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
2201 regs + fpregmap->r_f0_offset + (i * 4));
2202 }
2203
2204 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2205 regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
2206 regs + fpregmap->r_fsr_offset);
2207 }
2208
2209 void
2210 sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
2211 const struct regcache *regcache,
2212 int regnum, void *fpregs)
2213 {
2214 gdb_byte *regs = (gdb_byte *) fpregs;
2215 int i;
2216
2217 for (i = 0; i < 32; i++)
2218 {
2219 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2220 regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
2221 regs + fpregmap->r_f0_offset + (i * 4));
2222 }
2223
2224 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2225 regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
2226 regs + fpregmap->r_fsr_offset);
2227 }
2228 \f
2229
2230 /* SunOS 4. */
2231
2232 /* From <machine/reg.h>. */
2233 const struct sparc_gregmap sparc32_sunos4_gregmap =
2234 {
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 };
2244
2245 const struct sparc_fpregmap sparc32_sunos4_fpregmap =
2246 {
2247 0 * 4, /* %f0 */
2248 33 * 4, /* %fsr */
2249 };
2250
2251 const struct sparc_fpregmap sparc32_bsd_fpregmap =
2252 {
2253 0 * 4, /* %f0 */
2254 32 * 4, /* %fsr */
2255 };
2256 \f
2257
2258 /* Provide a prototype to silence -Wmissing-prototypes. */
2259 void _initialize_sparc_tdep (void);
2260
2261 void
2262 _initialize_sparc_tdep (void)
2263 {
2264 register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
2265 }