1 /* Target-dependent code for SPARC.
3 Copyright (C) 2003-2017 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
21 #include "arch-utils.h"
24 #include "dwarf2-frame.h"
26 #include "frame-base.h"
27 #include "frame-unwind.h"
36 #include "target-descriptions.h"
39 #include "sparc-tdep.h"
40 #include "sparc-ravenscar-thread.h"
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
48 lists changes with respect to the original 32-bit psABI as defined
49 in the "System V ABI, SPARC Processor Supplement".
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
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. */
64 /* The SPARC Floating-Point Quad-Precision format is similar to
65 big-endian IA-64 Quad-Precision format. */
66 #define floatformats_sparc_quad floatformats_ia64_quad
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. */
74 /* Macros to extract fields from SPARC instructions. */
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)
82 #define X_RS1(i) (((i) >> 14) & 0x1f)
83 #define X_RS2(i) ((i) & 0x1f)
84 #define X_I(i) (((i) >> 13) & 1)
85 /* Sign extension macros. */
86 #define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
87 #define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
88 #define X_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
89 #define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
90 /* Macros to identify some instructions. */
91 /* RETURN (RETT in V8) */
92 #define X_RETTURN(i) ((X_OP (i) == 0x2) && (X_OP3 (i) == 0x39))
94 /* Fetch the instruction at PC. Instructions are always big-endian
95 even if the processor operates in little-endian mode. */
98 sparc_fetch_instruction (CORE_ADDR pc)
104 /* If we can't read the instruction at PC, return zero. */
105 if (target_read_memory (pc, buf, sizeof (buf)))
109 for (i = 0; i < sizeof (buf); i++)
110 insn = (insn << 8) | buf[i];
115 /* Return non-zero if the instruction corresponding to PC is an "unimp"
119 sparc_is_unimp_insn (CORE_ADDR pc)
121 const unsigned long insn = sparc_fetch_instruction (pc);
123 return ((insn & 0xc1c00000) == 0);
126 /* Return non-zero if the instruction corresponding to PC is an
127 "annulled" branch, i.e. the annul bit is set. */
130 sparc_is_annulled_branch_insn (CORE_ADDR pc)
132 /* The branch instructions featuring an annul bit can be identified
133 by the following bit patterns:
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).
141 Branch on Integer Register with Prediction (BPr).
143 This leaves out ILLTRAP (OP2=0), SETHI/NOP (OP2=4) and the V8
144 coprocessor branch instructions (Op2=7). */
146 const unsigned long insn = sparc_fetch_instruction (pc);
147 const unsigned op2 = X_OP2 (insn);
149 if ((X_OP (insn) == 0)
150 && ((op2 == 1) || (op2 == 2) || (op2 == 5) || (op2 == 6)
151 || ((op2 == 3) && ((insn & 0x10000000) == 0))))
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."
164 The same website provides the following description of how
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."
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.
180 More information on StackGuard can be found on in:
182 Mike Frantzen and Mike Shuey. "StackGhost: Hardware Facilitated
183 Stack Protection." 2001. Published in USENIX Security Symposium
186 /* Fetch StackGhost Per-Process XOR cookie. */
189 sparc_fetch_wcookie (struct gdbarch *gdbarch)
191 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
192 struct target_ops *ops = ¤t_target;
196 len = target_read (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
200 /* We should have either an 32-bit or an 64-bit cookie. */
201 gdb_assert (len == 4 || len == 8);
203 return extract_unsigned_integer (buf, len, byte_order);
207 /* The functions on this page are intended to be used to classify
208 function arguments. */
210 /* Check whether TYPE is "Integral or Pointer". */
213 sparc_integral_or_pointer_p (const struct type *type)
215 int len = TYPE_LENGTH (type);
217 switch (TYPE_CODE (type))
223 case TYPE_CODE_RANGE:
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);
230 case TYPE_CODE_RVALUE_REF:
231 /* Allow either 32-bit or 64-bit pointers. */
232 return (len == 4 || len == 8);
240 /* Check whether TYPE is "Floating". */
243 sparc_floating_p (const struct type *type)
245 switch (TYPE_CODE (type))
249 int len = TYPE_LENGTH (type);
250 return (len == 4 || len == 8 || len == 16);
259 /* Check whether TYPE is "Complex Floating". */
262 sparc_complex_floating_p (const struct type *type)
264 switch (TYPE_CODE (type))
266 case TYPE_CODE_COMPLEX:
268 int len = TYPE_LENGTH (type);
269 return (len == 8 || len == 16 || len == 32);
278 /* Check whether TYPE is "Structure or Union".
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
285 sparc_structure_or_union_p (const struct type *type)
287 switch (TYPE_CODE (type))
289 case TYPE_CODE_STRUCT:
290 case TYPE_CODE_UNION:
291 case TYPE_CODE_ARRAY:
300 /* Check whether TYPE is returned on registers. */
303 sparc_structure_return_p (const struct type *type)
305 if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_LENGTH (type) <= 8)
307 struct type *t = check_typedef (TYPE_TARGET_TYPE (type));
309 if (sparc_floating_p (t) && TYPE_LENGTH (t) == 8)
313 if (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
315 return sparc_structure_or_union_p (type);
318 /* Check whether TYPE is passed on registers. */
321 sparc_arg_on_registers_p (const struct type *type)
323 if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_LENGTH (type) <= 8)
325 struct type *t = check_typedef (TYPE_TARGET_TYPE (type));
327 if (sparc_floating_p (t) && TYPE_LENGTH (t) == 8)
331 if (sparc_structure_or_union_p (type) || sparc_complex_floating_p (type)
332 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
337 /* Register information. */
338 #define SPARC32_FPU_REGISTERS \
339 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
340 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
341 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
342 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
343 #define SPARC32_CP0_REGISTERS \
344 "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
346 static const char *sparc_core_register_names[] = { SPARC_CORE_REGISTERS };
347 static const char *sparc32_fpu_register_names[] = { SPARC32_FPU_REGISTERS };
348 static const char *sparc32_cp0_register_names[] = { SPARC32_CP0_REGISTERS };
350 static const char *sparc32_register_names[] =
352 SPARC_CORE_REGISTERS,
353 SPARC32_FPU_REGISTERS,
354 SPARC32_CP0_REGISTERS
357 /* Total number of registers. */
358 #define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
360 /* We provide the aliases %d0..%d30 for the floating registers as
361 "psuedo" registers. */
363 static const char *sparc32_pseudo_register_names[] =
365 "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
366 "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
369 /* Total number of pseudo registers. */
370 #define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
372 /* Return the name of pseudo register REGNUM. */
375 sparc32_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
377 regnum -= gdbarch_num_regs (gdbarch);
379 if (regnum < SPARC32_NUM_PSEUDO_REGS)
380 return sparc32_pseudo_register_names[regnum];
382 internal_error (__FILE__, __LINE__,
383 _("sparc32_pseudo_register_name: bad register number %d"),
387 /* Return the name of register REGNUM. */
390 sparc32_register_name (struct gdbarch *gdbarch, int regnum)
392 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
393 return tdesc_register_name (gdbarch, regnum);
395 if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
396 return sparc32_register_names[regnum];
398 return sparc32_pseudo_register_name (gdbarch, regnum);
401 /* Construct types for ISA-specific registers. */
404 sparc_psr_type (struct gdbarch *gdbarch)
406 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
408 if (!tdep->sparc_psr_type)
412 type = arch_flags_type (gdbarch, "builtin_type_sparc_psr", 32);
413 append_flags_type_flag (type, 5, "ET");
414 append_flags_type_flag (type, 6, "PS");
415 append_flags_type_flag (type, 7, "S");
416 append_flags_type_flag (type, 12, "EF");
417 append_flags_type_flag (type, 13, "EC");
419 tdep->sparc_psr_type = type;
422 return tdep->sparc_psr_type;
426 sparc_fsr_type (struct gdbarch *gdbarch)
428 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
430 if (!tdep->sparc_fsr_type)
434 type = arch_flags_type (gdbarch, "builtin_type_sparc_fsr", 32);
435 append_flags_type_flag (type, 0, "NXA");
436 append_flags_type_flag (type, 1, "DZA");
437 append_flags_type_flag (type, 2, "UFA");
438 append_flags_type_flag (type, 3, "OFA");
439 append_flags_type_flag (type, 4, "NVA");
440 append_flags_type_flag (type, 5, "NXC");
441 append_flags_type_flag (type, 6, "DZC");
442 append_flags_type_flag (type, 7, "UFC");
443 append_flags_type_flag (type, 8, "OFC");
444 append_flags_type_flag (type, 9, "NVC");
445 append_flags_type_flag (type, 22, "NS");
446 append_flags_type_flag (type, 23, "NXM");
447 append_flags_type_flag (type, 24, "DZM");
448 append_flags_type_flag (type, 25, "UFM");
449 append_flags_type_flag (type, 26, "OFM");
450 append_flags_type_flag (type, 27, "NVM");
452 tdep->sparc_fsr_type = type;
455 return tdep->sparc_fsr_type;
458 /* Return the GDB type object for the "standard" data type of data in
459 pseudo register REGNUM. */
462 sparc32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
464 regnum -= gdbarch_num_regs (gdbarch);
466 if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
467 return builtin_type (gdbarch)->builtin_double;
469 internal_error (__FILE__, __LINE__,
470 _("sparc32_pseudo_register_type: bad register number %d"),
474 /* Return the GDB type object for the "standard" data type of data in
478 sparc32_register_type (struct gdbarch *gdbarch, int regnum)
480 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
481 return tdesc_register_type (gdbarch, regnum);
483 if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
484 return builtin_type (gdbarch)->builtin_float;
486 if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
487 return builtin_type (gdbarch)->builtin_data_ptr;
489 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
490 return builtin_type (gdbarch)->builtin_func_ptr;
492 if (regnum == SPARC32_PSR_REGNUM)
493 return sparc_psr_type (gdbarch);
495 if (regnum == SPARC32_FSR_REGNUM)
496 return sparc_fsr_type (gdbarch);
498 if (regnum >= gdbarch_num_regs (gdbarch))
499 return sparc32_pseudo_register_type (gdbarch, regnum);
501 return builtin_type (gdbarch)->builtin_int32;
504 static enum register_status
505 sparc32_pseudo_register_read (struct gdbarch *gdbarch,
506 struct regcache *regcache,
507 int regnum, gdb_byte *buf)
509 enum register_status status;
511 regnum -= gdbarch_num_regs (gdbarch);
512 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
514 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
515 status = regcache_raw_read (regcache, regnum, buf);
516 if (status == REG_VALID)
517 status = regcache_raw_read (regcache, regnum + 1, buf + 4);
522 sparc32_pseudo_register_write (struct gdbarch *gdbarch,
523 struct regcache *regcache,
524 int regnum, const gdb_byte *buf)
526 regnum -= gdbarch_num_regs (gdbarch);
527 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
529 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
530 regcache_raw_write (regcache, regnum, buf);
531 regcache_raw_write (regcache, regnum + 1, buf + 4);
534 /* Implement the stack_frame_destroyed_p gdbarch method. */
537 sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
539 /* This function must return true if we are one instruction after an
540 instruction that destroyed the stack frame of the current
541 function. The SPARC instructions used to restore the callers
542 stack frame are RESTORE and RETURN/RETT.
544 Of these RETURN/RETT is a branch instruction and thus we return
545 true if we are in its delay slot.
547 RESTORE is almost always found in the delay slot of a branch
548 instruction that transfers control to the caller, such as JMPL.
549 Thus the next instruction is in the caller frame and we don't
550 need to do anything about it. */
552 unsigned int insn = sparc_fetch_instruction (pc - 4);
554 return X_RETTURN (insn);
559 sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
561 /* The ABI requires double-word alignment. */
562 return address & ~0x7;
566 sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
568 struct value **args, int nargs,
569 struct type *value_type,
570 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
571 struct regcache *regcache)
573 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
578 if (using_struct_return (gdbarch, NULL, value_type))
582 /* This is an UNIMP instruction. */
583 store_unsigned_integer (buf, 4, byte_order,
584 TYPE_LENGTH (value_type) & 0x1fff);
585 write_memory (sp - 8, buf, 4);
593 sparc32_store_arguments (struct regcache *regcache, int nargs,
594 struct value **args, CORE_ADDR sp,
595 int struct_return, CORE_ADDR struct_addr)
597 struct gdbarch *gdbarch = regcache->arch ();
598 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
599 /* Number of words in the "parameter array". */
600 int num_elements = 0;
604 for (i = 0; i < nargs; i++)
606 struct type *type = value_type (args[i]);
607 int len = TYPE_LENGTH (type);
609 if (!sparc_arg_on_registers_p (type))
611 /* Structure, Union and Quad-Precision Arguments. */
614 /* Use doubleword alignment for these values. That's always
615 correct, and wasting a few bytes shouldn't be a problem. */
618 write_memory (sp, value_contents (args[i]), len);
619 args[i] = value_from_pointer (lookup_pointer_type (type), sp);
622 else if (sparc_floating_p (type))
624 /* Floating arguments. */
625 gdb_assert (len == 4 || len == 8);
626 num_elements += (len / 4);
630 /* Integral and pointer arguments. */
631 gdb_assert (sparc_integral_or_pointer_p (type)
632 || (TYPE_CODE (type) == TYPE_CODE_ARRAY && len <= 8));
633 num_elements += ((len + 3) / 4);
637 /* Always allocate at least six words. */
638 sp -= std::max (6, num_elements) * 4;
640 /* The psABI says that "Software convention requires space for the
641 struct/union return value pointer, even if the word is unused." */
644 /* The psABI says that "Although software convention and the
645 operating system require every stack frame to be doubleword
649 for (i = 0; i < nargs; i++)
651 const bfd_byte *valbuf = value_contents (args[i]);
652 struct type *type = value_type (args[i]);
653 int len = TYPE_LENGTH (type);
658 memset (buf, 0, 4 - len);
659 memcpy (buf + 4 - len, valbuf, len);
664 gdb_assert (len == 4 || len == 8);
668 int regnum = SPARC_O0_REGNUM + element;
670 regcache_cooked_write (regcache, regnum, valbuf);
671 if (len > 4 && element < 5)
672 regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
675 /* Always store the argument in memory. */
676 write_memory (sp + 4 + element * 4, valbuf, len);
680 gdb_assert (element == num_elements);
686 store_unsigned_integer (buf, 4, byte_order, struct_addr);
687 write_memory (sp, buf, 4);
694 sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
695 struct regcache *regcache, CORE_ADDR bp_addr,
696 int nargs, struct value **args, CORE_ADDR sp,
697 int struct_return, CORE_ADDR struct_addr)
699 CORE_ADDR call_pc = (struct_return ? (bp_addr - 12) : (bp_addr - 8));
701 /* Set return address. */
702 regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
704 /* Set up function arguments. */
705 sp = sparc32_store_arguments (regcache, nargs, args, sp,
706 struct_return, struct_addr);
708 /* Allocate the 16-word window save area. */
711 /* Stack should be doubleword aligned at this point. */
712 gdb_assert (sp % 8 == 0);
714 /* Finally, update the stack pointer. */
715 regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
721 /* Use the program counter to determine the contents and size of a
722 breakpoint instruction. Return a pointer to a string of bytes that
723 encode a breakpoint instruction, store the length of the string in
724 *LEN and optionally adjust *PC to point to the correct memory
725 location for inserting the breakpoint. */
726 constexpr gdb_byte sparc_break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
728 typedef BP_MANIPULATION (sparc_break_insn) sparc_breakpoint;
731 /* Allocate and initialize a frame cache. */
733 static struct sparc_frame_cache *
734 sparc_alloc_frame_cache (void)
736 struct sparc_frame_cache *cache;
738 cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
744 /* Frameless until proven otherwise. */
745 cache->frameless_p = 1;
746 cache->frame_offset = 0;
747 cache->saved_regs_mask = 0;
748 cache->copied_regs_mask = 0;
749 cache->struct_return_p = 0;
754 /* GCC generates several well-known sequences of instructions at the begining
755 of each function prologue when compiling with -fstack-check. If one of
756 such sequences starts at START_PC, then return the address of the
757 instruction immediately past this sequence. Otherwise, return START_PC. */
760 sparc_skip_stack_check (const CORE_ADDR start_pc)
762 CORE_ADDR pc = start_pc;
764 int probing_loop = 0;
766 /* With GCC, all stack checking sequences begin with the same two
767 instructions, plus an optional one in the case of a probing loop:
769 sethi <some immediate>, %g1
774 sethi <some immediate>, %g1
775 sethi <some immediate>, %g4
780 sethi <some immediate>, %g1
782 sethi <some immediate>, %g4
784 If the optional instruction is found (setting g4), assume that a
785 probing loop will follow. */
787 /* sethi <some immediate>, %g1 */
788 insn = sparc_fetch_instruction (pc);
790 if (!(X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 1))
793 /* optional: sethi <some immediate>, %g4 */
794 insn = sparc_fetch_instruction (pc);
796 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
799 insn = sparc_fetch_instruction (pc);
803 /* sub %sp, %g1, %g1 */
804 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
805 && X_RD (insn) == 1 && X_RS1 (insn) == 14 && X_RS2 (insn) == 1))
808 insn = sparc_fetch_instruction (pc);
811 /* optional: sethi <some immediate>, %g4 */
812 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
815 insn = sparc_fetch_instruction (pc);
819 /* First possible sequence:
820 [first two instructions above]
821 clr [%g1 - some immediate] */
823 /* clr [%g1 - some immediate] */
824 if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
825 && X_RS1 (insn) == 1 && X_RD (insn) == 0)
827 /* Valid stack-check sequence, return the new PC. */
831 /* Second possible sequence: A small number of probes.
832 [first two instructions above]
834 add %g1, -<some immediate>, %g1
836 [repeat the two instructions above any (small) number of times]
837 clr [%g1 - some immediate] */
840 else if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
841 && X_RS1 (insn) == 1 && X_RD (insn) == 0)
845 /* add %g1, -<some immediate>, %g1 */
846 insn = sparc_fetch_instruction (pc);
848 if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
849 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
853 insn = sparc_fetch_instruction (pc);
855 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
856 && X_RD (insn) == 0 && X_RS1 (insn) == 1))
860 /* clr [%g1 - some immediate] */
861 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
862 && X_RS1 (insn) == 1 && X_RD (insn) == 0))
865 /* We found a valid stack-check sequence, return the new PC. */
869 /* Third sequence: A probing loop.
870 [first three instructions above]
874 add %g1, -<some immediate>, %g1
878 And an optional last probe for the remainder:
880 clr [%g4 - some immediate] */
884 /* sub %g1, %g4, %g4 */
885 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
886 && X_RD (insn) == 4 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
890 insn = sparc_fetch_instruction (pc);
892 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I(insn)
893 && X_RD (insn) == 0 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
897 insn = sparc_fetch_instruction (pc);
899 if (!(X_OP (insn) == 0 && X_COND (insn) == 0x1))
902 /* add %g1, -<some immediate>, %g1 */
903 insn = sparc_fetch_instruction (pc);
905 if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
906 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
910 insn = sparc_fetch_instruction (pc);
912 if (!(X_OP (insn) == 0 && X_COND (insn) == 0x8))
915 /* clr [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
916 insn = sparc_fetch_instruction (pc);
918 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4
919 && X_RD (insn) == 0 && X_RS1 (insn) == 1
920 && (!X_I(insn) || X_SIMM13 (insn) == 0)))
923 /* We found a valid stack-check sequence, return the new PC. */
925 /* optional: clr [%g4 - some immediate] */
926 insn = sparc_fetch_instruction (pc);
928 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
929 && X_RS1 (insn) == 4 && X_RD (insn) == 0))
935 /* No stack check code in our prologue, return the start_pc. */
939 /* Record the effect of a SAVE instruction on CACHE. */
942 sparc_record_save_insn (struct sparc_frame_cache *cache)
944 /* The frame is set up. */
945 cache->frameless_p = 0;
947 /* The frame pointer contains the CFA. */
948 cache->frame_offset = 0;
950 /* The `local' and `in' registers are all saved. */
951 cache->saved_regs_mask = 0xffff;
953 /* The `out' registers are all renamed. */
954 cache->copied_regs_mask = 0xff;
957 /* Do a full analysis of the prologue at PC and update CACHE accordingly.
958 Bail out early if CURRENT_PC is reached. Return the address where
959 the analysis stopped.
961 We handle both the traditional register window model and the single
962 register window (aka flat) model. */
965 sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
966 CORE_ADDR current_pc, struct sparc_frame_cache *cache)
968 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
973 pc = sparc_skip_stack_check (pc);
975 if (current_pc <= pc)
978 /* We have to handle to "Procedure Linkage Table" (PLT) special. On
979 SPARC the linker usually defines a symbol (typically
980 _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
981 This symbol makes us end up here with PC pointing at the start of
982 the PLT and CURRENT_PC probably pointing at a PLT entry. If we
983 would do our normal prologue analysis, we would probably conclude
984 that we've got a frame when in reality we don't, since the
985 dynamic linker patches up the first PLT with some code that
986 starts with a SAVE instruction. Patch up PC such that it points
987 at the start of our PLT entry. */
988 if (tdep->plt_entry_size > 0 && in_plt_section (current_pc))
989 pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
991 insn = sparc_fetch_instruction (pc);
993 /* Recognize store insns and record their sources. */
994 while (X_OP (insn) == 3
995 && (X_OP3 (insn) == 0x4 /* stw */
996 || X_OP3 (insn) == 0x7 /* std */
997 || X_OP3 (insn) == 0xe) /* stx */
998 && X_RS1 (insn) == SPARC_SP_REGNUM)
1000 int regnum = X_RD (insn);
1002 /* Recognize stores into the corresponding stack slots. */
1003 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1005 && X_SIMM13 (insn) == (X_OP3 (insn) == 0xe
1006 ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
1007 : (regnum - SPARC_L0_REGNUM) * 4))
1008 || (!X_I (insn) && regnum == SPARC_L0_REGNUM)))
1010 cache->saved_regs_mask |= (1 << (regnum - SPARC_L0_REGNUM));
1011 if (X_OP3 (insn) == 0x7)
1012 cache->saved_regs_mask |= (1 << (regnum + 1 - SPARC_L0_REGNUM));
1017 insn = sparc_fetch_instruction (pc + offset);
1020 /* Recognize a SETHI insn and record its destination. */
1021 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
1026 insn = sparc_fetch_instruction (pc + offset);
1029 /* Allow for an arithmetic operation on DEST or %g1. */
1030 if (X_OP (insn) == 2 && X_I (insn)
1031 && (X_RD (insn) == 1 || X_RD (insn) == dest))
1035 insn = sparc_fetch_instruction (pc + offset);
1038 /* Check for the SAVE instruction that sets up the frame. */
1039 if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
1041 sparc_record_save_insn (cache);
1046 /* Check for an arithmetic operation on %sp. */
1047 if (X_OP (insn) == 2
1048 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
1049 && X_RS1 (insn) == SPARC_SP_REGNUM
1050 && X_RD (insn) == SPARC_SP_REGNUM)
1054 cache->frame_offset = X_SIMM13 (insn);
1055 if (X_OP3 (insn) == 0)
1056 cache->frame_offset = -cache->frame_offset;
1060 insn = sparc_fetch_instruction (pc + offset);
1062 /* Check for an arithmetic operation that sets up the frame. */
1063 if (X_OP (insn) == 2
1064 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
1065 && X_RS1 (insn) == SPARC_SP_REGNUM
1066 && X_RD (insn) == SPARC_FP_REGNUM)
1068 cache->frameless_p = 0;
1069 cache->frame_offset = 0;
1070 /* We could check that the amount subtracted to %sp above is the
1071 same as the one added here, but this seems superfluous. */
1072 cache->copied_regs_mask |= 0x40;
1075 insn = sparc_fetch_instruction (pc + offset);
1078 /* Check for a move (or) operation that copies the return register. */
1079 if (X_OP (insn) == 2
1080 && X_OP3 (insn) == 0x2
1082 && X_RS1 (insn) == SPARC_G0_REGNUM
1083 && X_RS2 (insn) == SPARC_O7_REGNUM
1084 && X_RD (insn) == SPARC_I7_REGNUM)
1086 cache->copied_regs_mask |= 0x80;
1097 sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1099 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1100 return frame_unwind_register_unsigned (this_frame, tdep->pc_regnum);
1103 /* Return PC of first real instruction of the function starting at
1107 sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1109 struct symtab_and_line sal;
1110 CORE_ADDR func_start, func_end;
1111 struct sparc_frame_cache cache;
1113 /* This is the preferred method, find the end of the prologue by
1114 using the debugging information. */
1115 if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
1117 sal = find_pc_line (func_start, 0);
1119 if (sal.end < func_end
1120 && start_pc <= sal.end)
1124 start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
1126 /* The psABI says that "Although the first 6 words of arguments
1127 reside in registers, the standard stack frame reserves space for
1128 them.". It also suggests that a function may use that space to
1129 "write incoming arguments 0 to 5" into that space, and that's
1130 indeed what GCC seems to be doing. In that case GCC will
1131 generate debug information that points to the stack slots instead
1132 of the registers, so we should consider the instructions that
1133 write out these incoming arguments onto the stack. */
1137 unsigned long insn = sparc_fetch_instruction (start_pc);
1139 /* Recognize instructions that store incoming arguments into the
1140 corresponding stack slots. */
1141 if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04
1142 && X_I (insn) && X_RS1 (insn) == SPARC_FP_REGNUM)
1144 int regnum = X_RD (insn);
1146 /* Case of arguments still in %o[0..5]. */
1147 if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O5_REGNUM
1148 && !(cache.copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM)))
1149 && X_SIMM13 (insn) == 68 + (regnum - SPARC_O0_REGNUM) * 4)
1155 /* Case of arguments copied into %i[0..5]. */
1156 if (regnum >= SPARC_I0_REGNUM && regnum <= SPARC_I5_REGNUM
1157 && (cache.copied_regs_mask & (1 << (regnum - SPARC_I0_REGNUM)))
1158 && X_SIMM13 (insn) == 68 + (regnum - SPARC_I0_REGNUM) * 4)
1171 /* Normal frames. */
1173 struct sparc_frame_cache *
1174 sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
1176 struct sparc_frame_cache *cache;
1179 return (struct sparc_frame_cache *) *this_cache;
1181 cache = sparc_alloc_frame_cache ();
1182 *this_cache = cache;
1184 cache->pc = get_frame_func (this_frame);
1186 sparc_analyze_prologue (get_frame_arch (this_frame), cache->pc,
1187 get_frame_pc (this_frame), cache);
1189 if (cache->frameless_p)
1191 /* This function is frameless, so %fp (%i6) holds the frame
1192 pointer for our calling frame. Use %sp (%o6) as this frame's
1195 get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1199 /* For normal frames, %fp (%i6) holds the frame pointer, the
1200 base address for the current stack frame. */
1202 get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
1205 cache->base += cache->frame_offset;
1207 if (cache->base & 1)
1208 cache->base += BIAS;
1214 sparc32_struct_return_from_sym (struct symbol *sym)
1216 struct type *type = check_typedef (SYMBOL_TYPE (sym));
1217 enum type_code code = TYPE_CODE (type);
1219 if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
1221 type = check_typedef (TYPE_TARGET_TYPE (type));
1222 if (sparc_structure_or_union_p (type)
1223 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1230 struct sparc_frame_cache *
1231 sparc32_frame_cache (struct frame_info *this_frame, void **this_cache)
1233 struct sparc_frame_cache *cache;
1237 return (struct sparc_frame_cache *) *this_cache;
1239 cache = sparc_frame_cache (this_frame, this_cache);
1241 sym = find_pc_function (cache->pc);
1244 cache->struct_return_p = sparc32_struct_return_from_sym (sym);
1248 /* There is no debugging information for this function to
1249 help us determine whether this function returns a struct
1250 or not. So we rely on another heuristic which is to check
1251 the instruction at the return address and see if this is
1252 an "unimp" instruction. If it is, then it is a struct-return
1256 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1258 pc = get_frame_register_unsigned (this_frame, regnum) + 8;
1259 if (sparc_is_unimp_insn (pc))
1260 cache->struct_return_p = 1;
1267 sparc32_frame_this_id (struct frame_info *this_frame, void **this_cache,
1268 struct frame_id *this_id)
1270 struct sparc_frame_cache *cache =
1271 sparc32_frame_cache (this_frame, this_cache);
1273 /* This marks the outermost frame. */
1274 if (cache->base == 0)
1277 (*this_id) = frame_id_build (cache->base, cache->pc);
1280 static struct value *
1281 sparc32_frame_prev_register (struct frame_info *this_frame,
1282 void **this_cache, int regnum)
1284 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1285 struct sparc_frame_cache *cache =
1286 sparc32_frame_cache (this_frame, this_cache);
1288 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
1290 CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
1292 /* If this functions has a Structure, Union or Quad-Precision
1293 return value, we have to skip the UNIMP instruction that encodes
1294 the size of the structure. */
1295 if (cache->struct_return_p)
1299 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1300 pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1301 return frame_unwind_got_constant (this_frame, regnum, pc);
1304 /* Handle StackGhost. */
1306 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1308 if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1310 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1313 /* Read the value in from memory. */
1314 i7 = get_frame_memory_unsigned (this_frame, addr, 4);
1315 return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
1319 /* The previous frame's `local' and `in' registers may have been saved
1320 in the register save area. */
1321 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1322 && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
1324 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1326 return frame_unwind_got_memory (this_frame, regnum, addr);
1329 /* The previous frame's `out' registers may be accessible as the current
1330 frame's `in' registers. */
1331 if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM
1332 && (cache->copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM))))
1333 regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
1335 return frame_unwind_got_register (this_frame, regnum, regnum);
1338 static const struct frame_unwind sparc32_frame_unwind =
1341 default_frame_unwind_stop_reason,
1342 sparc32_frame_this_id,
1343 sparc32_frame_prev_register,
1345 default_frame_sniffer
1350 sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1352 struct sparc_frame_cache *cache =
1353 sparc32_frame_cache (this_frame, this_cache);
1358 static const struct frame_base sparc32_frame_base =
1360 &sparc32_frame_unwind,
1361 sparc32_frame_base_address,
1362 sparc32_frame_base_address,
1363 sparc32_frame_base_address
1366 static struct frame_id
1367 sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1371 sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1374 return frame_id_build (sp, get_frame_pc (this_frame));
1378 /* Extract a function return value of TYPE from REGCACHE, and copy
1379 that into VALBUF. */
1382 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
1385 int len = TYPE_LENGTH (type);
1388 gdb_assert (!sparc_structure_return_p (type));
1390 if (sparc_floating_p (type) || sparc_complex_floating_p (type)
1391 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
1393 /* Floating return values. */
1394 regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
1396 regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
1399 regcache_cooked_read (regcache, SPARC_F2_REGNUM, buf + 8);
1400 regcache_cooked_read (regcache, SPARC_F3_REGNUM, buf + 12);
1404 regcache_cooked_read (regcache, SPARC_F4_REGNUM, buf + 16);
1405 regcache_cooked_read (regcache, SPARC_F5_REGNUM, buf + 20);
1406 regcache_cooked_read (regcache, SPARC_F6_REGNUM, buf + 24);
1407 regcache_cooked_read (regcache, SPARC_F7_REGNUM, buf + 28);
1409 memcpy (valbuf, buf, len);
1413 /* Integral and pointer return values. */
1414 gdb_assert (sparc_integral_or_pointer_p (type));
1416 regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
1419 regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
1420 gdb_assert (len == 8);
1421 memcpy (valbuf, buf, 8);
1425 /* Just stripping off any unused bytes should preserve the
1426 signed-ness just fine. */
1427 memcpy (valbuf, buf + 4 - len, len);
1432 /* Store the function return value of type TYPE from VALBUF into
1436 sparc32_store_return_value (struct type *type, struct regcache *regcache,
1437 const gdb_byte *valbuf)
1439 int len = TYPE_LENGTH (type);
1442 gdb_assert (!sparc_structure_return_p (type));
1444 if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1446 /* Floating return values. */
1447 memcpy (buf, valbuf, len);
1448 regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
1450 regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
1453 regcache_cooked_write (regcache, SPARC_F2_REGNUM, buf + 8);
1454 regcache_cooked_write (regcache, SPARC_F3_REGNUM, buf + 12);
1458 regcache_cooked_write (regcache, SPARC_F4_REGNUM, buf + 16);
1459 regcache_cooked_write (regcache, SPARC_F5_REGNUM, buf + 20);
1460 regcache_cooked_write (regcache, SPARC_F6_REGNUM, buf + 24);
1461 regcache_cooked_write (regcache, SPARC_F7_REGNUM, buf + 28);
1466 /* Integral and pointer return values. */
1467 gdb_assert (sparc_integral_or_pointer_p (type));
1471 gdb_assert (len == 8);
1472 memcpy (buf, valbuf, 8);
1473 regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
1477 /* ??? Do we need to do any sign-extension here? */
1478 memcpy (buf + 4 - len, valbuf, len);
1480 regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
1484 static enum return_value_convention
1485 sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
1486 struct type *type, struct regcache *regcache,
1487 gdb_byte *readbuf, const gdb_byte *writebuf)
1489 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1491 /* The psABI says that "...every stack frame reserves the word at
1492 %fp+64. If a function returns a structure, union, or
1493 quad-precision value, this word should hold the address of the
1494 object into which the return value should be copied." This
1495 guarantees that we can always find the return value, not just
1496 before the function returns. */
1498 if (sparc_structure_return_p (type))
1505 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1506 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1507 read_memory (addr, readbuf, TYPE_LENGTH (type));
1511 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1512 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1513 write_memory (addr, writebuf, TYPE_LENGTH (type));
1516 return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1520 sparc32_extract_return_value (type, regcache, readbuf);
1522 sparc32_store_return_value (type, regcache, writebuf);
1524 return RETURN_VALUE_REGISTER_CONVENTION;
1528 sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
1530 return (sparc_structure_or_union_p (type)
1531 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
1532 || sparc_complex_floating_p (type));
1536 sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
1538 CORE_ADDR pc = get_frame_address_in_block (this_frame);
1539 struct symbol *sym = find_pc_function (pc);
1542 return sparc32_struct_return_from_sym (sym);
1547 sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1548 struct dwarf2_frame_state_reg *reg,
1549 struct frame_info *this_frame)
1555 case SPARC_G0_REGNUM:
1556 /* Since %g0 is always zero, there is no point in saving it, and
1557 people will be inclined omit it from the CFI. Make sure we
1558 don't warn about that. */
1559 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1561 case SPARC_SP_REGNUM:
1562 reg->how = DWARF2_FRAME_REG_CFA;
1564 case SPARC32_PC_REGNUM:
1565 case SPARC32_NPC_REGNUM:
1566 reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1568 if (sparc32_dwarf2_struct_return_p (this_frame))
1570 if (regnum == SPARC32_NPC_REGNUM)
1572 reg->loc.offset = off;
1577 /* Implement the execute_dwarf_cfa_vendor_op method. */
1580 sparc_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
1581 struct dwarf2_frame_state *fs)
1583 /* Only DW_CFA_GNU_window_save is expected on SPARC. */
1584 if (op != DW_CFA_GNU_window_save)
1588 int size = register_size (gdbarch, 0);
1590 fs->regs.alloc_regs (32);
1591 for (reg = 8; reg < 16; reg++)
1593 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_REG;
1594 fs->regs.reg[reg].loc.reg = reg + 16;
1596 for (reg = 16; reg < 32; reg++)
1598 fs->regs.reg[reg].how = DWARF2_FRAME_REG_SAVED_OFFSET;
1599 fs->regs.reg[reg].loc.offset = (reg - 16) * size;
1606 /* The SPARC Architecture doesn't have hardware single-step support,
1607 and most operating systems don't implement it either, so we provide
1608 software single-step mechanism. */
1611 sparc_analyze_control_transfer (struct regcache *regcache,
1612 CORE_ADDR pc, CORE_ADDR *npc)
1614 unsigned long insn = sparc_fetch_instruction (pc);
1615 int conditional_p = X_COND (insn) & 0x7;
1616 int branch_p = 0, fused_p = 0;
1617 long offset = 0; /* Must be signed for sign-extend. */
1619 if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
1621 if ((insn & 0x10000000) == 0)
1623 /* Branch on Integer Register with Prediction (BPr). */
1629 /* Compare and Branch */
1632 offset = 4 * X_DISP10 (insn);
1635 else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1637 /* Branch on Floating-Point Condition Codes (FBfcc). */
1639 offset = 4 * X_DISP22 (insn);
1641 else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1643 /* Branch on Floating-Point Condition Codes with Prediction
1646 offset = 4 * X_DISP19 (insn);
1648 else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1650 /* Branch on Integer Condition Codes (Bicc). */
1652 offset = 4 * X_DISP22 (insn);
1654 else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
1656 /* Branch on Integer Condition Codes with Prediction (BPcc). */
1658 offset = 4 * X_DISP19 (insn);
1660 else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1662 struct frame_info *frame = get_current_frame ();
1664 /* Trap instruction (TRAP). */
1665 return gdbarch_tdep (regcache->arch ())->step_trap (frame,
1669 /* FIXME: Handle DONE and RETRY instructions. */
1675 /* Fused compare-and-branch instructions are non-delayed,
1676 and do not have an annuling capability. So we need to
1677 always set a breakpoint on both the NPC and the branch
1679 gdb_assert (offset != 0);
1682 else if (conditional_p)
1684 /* For conditional branches, return nPC + 4 iff the annul
1686 return (X_A (insn) ? *npc + 4 : 0);
1690 /* For unconditional branches, return the target if its
1691 specified condition is "always" and return nPC + 4 if the
1692 condition is "never". If the annul bit is 1, set *NPC to
1694 if (X_COND (insn) == 0x0)
1695 pc = *npc, offset = 4;
1707 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1712 static std::vector<CORE_ADDR>
1713 sparc_software_single_step (struct regcache *regcache)
1715 struct gdbarch *arch = regcache->arch ();
1716 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1717 CORE_ADDR npc, nnpc;
1719 CORE_ADDR pc, orig_npc;
1720 std::vector<CORE_ADDR> next_pcs;
1722 pc = regcache_raw_get_unsigned (regcache, tdep->pc_regnum);
1723 orig_npc = npc = regcache_raw_get_unsigned (regcache, tdep->npc_regnum);
1725 /* Analyze the instruction at PC. */
1726 nnpc = sparc_analyze_control_transfer (regcache, pc, &npc);
1728 next_pcs.push_back (npc);
1731 next_pcs.push_back (nnpc);
1733 /* Assert that we have set at least one breakpoint, and that
1734 they're not set at the same spot - unless we're going
1735 from here straight to NULL, i.e. a call or jump to 0. */
1736 gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1737 gdb_assert (nnpc != npc || orig_npc == 0);
1743 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1745 struct gdbarch_tdep *tdep = gdbarch_tdep (regcache->arch ());
1747 regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1748 regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1752 /* Iterate over core file register note sections. */
1755 sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
1756 iterate_over_regset_sections_cb *cb,
1758 const struct regcache *regcache)
1760 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1762 cb (".reg", tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
1763 cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
1768 validate_tdesc_registers (const struct target_desc *tdesc,
1769 struct tdesc_arch_data *tdesc_data,
1770 const char *feature_name,
1771 const char *register_names[],
1772 unsigned int registers_num,
1773 unsigned int reg_start)
1776 const struct tdesc_feature *feature;
1778 feature = tdesc_find_feature (tdesc, feature_name);
1779 if (feature == NULL)
1782 for (unsigned int i = 0; i < registers_num; i++)
1783 valid_p &= tdesc_numbered_register (feature, tdesc_data,
1790 static struct gdbarch *
1791 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1793 struct gdbarch_tdep *tdep;
1794 const struct target_desc *tdesc = info.target_desc;
1795 struct gdbarch *gdbarch;
1798 /* If there is already a candidate, use it. */
1799 arches = gdbarch_list_lookup_by_info (arches, &info);
1801 return arches->gdbarch;
1803 /* Allocate space for the new architecture. */
1804 tdep = XCNEW (struct gdbarch_tdep);
1805 gdbarch = gdbarch_alloc (&info, tdep);
1807 tdep->pc_regnum = SPARC32_PC_REGNUM;
1808 tdep->npc_regnum = SPARC32_NPC_REGNUM;
1809 tdep->step_trap = sparc_step_trap;
1810 tdep->fpu_register_names = sparc32_fpu_register_names;
1811 tdep->fpu_registers_num = ARRAY_SIZE (sparc32_fpu_register_names);
1812 tdep->cp0_register_names = sparc32_cp0_register_names;
1813 tdep->cp0_registers_num = ARRAY_SIZE (sparc32_cp0_register_names);
1815 set_gdbarch_long_double_bit (gdbarch, 128);
1816 set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1818 set_gdbarch_wchar_bit (gdbarch, 16);
1819 set_gdbarch_wchar_signed (gdbarch, 1);
1821 set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1822 set_gdbarch_register_name (gdbarch, sparc32_register_name);
1823 set_gdbarch_register_type (gdbarch, sparc32_register_type);
1824 set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1825 set_tdesc_pseudo_register_name (gdbarch, sparc32_pseudo_register_name);
1826 set_tdesc_pseudo_register_type (gdbarch, sparc32_pseudo_register_type);
1827 set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1828 set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1830 /* Register numbers of various important registers. */
1831 set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1832 set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1833 set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1835 /* Call dummy code. */
1836 set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
1837 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1838 set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1839 set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1841 set_gdbarch_return_value (gdbarch, sparc32_return_value);
1842 set_gdbarch_stabs_argument_has_addr
1843 (gdbarch, sparc32_stabs_argument_has_addr);
1845 set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1847 /* Stack grows downward. */
1848 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1850 set_gdbarch_breakpoint_kind_from_pc (gdbarch,
1851 sparc_breakpoint::kind_from_pc);
1852 set_gdbarch_sw_breakpoint_from_kind (gdbarch,
1853 sparc_breakpoint::bp_from_kind);
1855 set_gdbarch_frame_args_skip (gdbarch, 8);
1857 set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1858 set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1860 set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1862 set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1864 frame_base_set_default (gdbarch, &sparc32_frame_base);
1866 /* Hook in the DWARF CFI frame unwinder. */
1867 dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1868 /* Register DWARF vendor CFI handler. */
1869 set_gdbarch_execute_dwarf_cfa_vendor_op (gdbarch,
1870 sparc_execute_dwarf_cfa_vendor_op);
1871 /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1872 StackGhost issues have been resolved. */
1874 /* Hook in ABI-specific overrides, if they have been registered. */
1875 gdbarch_init_osabi (info, gdbarch);
1877 frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1879 if (tdesc_has_registers (tdesc))
1881 struct tdesc_arch_data *tdesc_data = tdesc_data_alloc ();
1883 /* Validate that the descriptor provides the mandatory registers
1884 and allocate their numbers. */
1885 valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
1886 "org.gnu.gdb.sparc.cpu",
1887 sparc_core_register_names,
1888 ARRAY_SIZE (sparc_core_register_names),
1890 valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
1891 "org.gnu.gdb.sparc.fpu",
1892 tdep->fpu_register_names,
1893 tdep->fpu_registers_num,
1895 valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
1896 "org.gnu.gdb.sparc.cp0",
1897 tdep->cp0_register_names,
1898 tdep->cp0_registers_num,
1900 + tdep->fpu_registers_num);
1903 tdesc_data_cleanup (tdesc_data);
1907 /* Target description may have changed. */
1908 info.tdesc_data = tdesc_data;
1909 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
1912 /* If we have register sets, enable the generic core file support. */
1914 set_gdbarch_iterate_over_regset_sections
1915 (gdbarch, sparc_iterate_over_regset_sections);
1917 register_sparc_ravenscar_ops (gdbarch);
1922 /* Helper functions for dealing with register windows. */
1925 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1927 struct gdbarch *gdbarch = regcache->arch ();
1928 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1935 /* Registers are 64-bit. */
1938 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1940 if (regnum == i || regnum == -1)
1942 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1944 /* Handle StackGhost. */
1945 if (i == SPARC_I7_REGNUM)
1947 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1950 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1951 store_unsigned_integer (buf + offset, 8, byte_order,
1955 regcache_raw_supply (regcache, i, buf);
1961 /* Registers are 32-bit. Toss any sign-extension of the stack
1965 /* Clear out the top half of the temporary buffer, and put the
1966 register value in the bottom half if we're in 64-bit mode. */
1967 if (gdbarch_ptr_bit (regcache->arch ()) == 64)
1973 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1975 if (regnum == i || regnum == -1)
1977 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1980 /* Handle StackGhost. */
1981 if (i == SPARC_I7_REGNUM)
1983 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1986 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1987 store_unsigned_integer (buf + offset, 4, byte_order,
1991 regcache_raw_supply (regcache, i, buf);
1998 sparc_collect_rwindow (const struct regcache *regcache,
1999 CORE_ADDR sp, int regnum)
2001 struct gdbarch *gdbarch = regcache->arch ();
2002 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2009 /* Registers are 64-bit. */
2012 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2014 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
2016 regcache_raw_collect (regcache, i, buf);
2018 /* Handle StackGhost. */
2019 if (i == SPARC_I7_REGNUM)
2021 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
2024 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
2025 store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
2028 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
2034 /* Registers are 32-bit. Toss any sign-extension of the stack
2038 /* Only use the bottom half if we're in 64-bit mode. */
2039 if (gdbarch_ptr_bit (regcache->arch ()) == 64)
2042 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2044 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
2046 regcache_raw_collect (regcache, i, buf);
2048 /* Handle StackGhost. */
2049 if (i == SPARC_I7_REGNUM)
2051 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
2054 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
2055 store_unsigned_integer (buf + offset, 4, byte_order,
2059 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
2066 /* Helper functions for dealing with register sets. */
2069 sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
2070 struct regcache *regcache,
2071 int regnum, const void *gregs)
2073 const gdb_byte *regs = (const gdb_byte *) gregs;
2074 gdb_byte zero[4] = { 0 };
2077 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2078 regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
2079 regs + gregmap->r_psr_offset);
2081 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2082 regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
2083 regs + gregmap->r_pc_offset);
2085 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2086 regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
2087 regs + gregmap->r_npc_offset);
2089 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2090 regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
2091 regs + gregmap->r_y_offset);
2093 if (regnum == SPARC_G0_REGNUM || regnum == -1)
2094 regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
2096 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
2098 int offset = gregmap->r_g1_offset;
2100 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
2102 if (regnum == i || regnum == -1)
2103 regcache_raw_supply (regcache, i, regs + offset);
2108 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
2110 /* Not all of the register set variants include Locals and
2111 Inputs. For those that don't, we read them off the stack. */
2112 if (gregmap->r_l0_offset == -1)
2116 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
2117 sparc_supply_rwindow (regcache, sp, regnum);
2121 int offset = gregmap->r_l0_offset;
2123 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2125 if (regnum == i || regnum == -1)
2126 regcache_raw_supply (regcache, i, regs + offset);
2134 sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
2135 const struct regcache *regcache,
2136 int regnum, void *gregs)
2138 gdb_byte *regs = (gdb_byte *) gregs;
2141 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2142 regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
2143 regs + gregmap->r_psr_offset);
2145 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2146 regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
2147 regs + gregmap->r_pc_offset);
2149 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2150 regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
2151 regs + gregmap->r_npc_offset);
2153 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2154 regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
2155 regs + gregmap->r_y_offset);
2157 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
2159 int offset = gregmap->r_g1_offset;
2161 /* %g0 is always zero. */
2162 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
2164 if (regnum == i || regnum == -1)
2165 regcache_raw_collect (regcache, i, regs + offset);
2170 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
2172 /* Not all of the register set variants include Locals and
2173 Inputs. For those that don't, we read them off the stack. */
2174 if (gregmap->r_l0_offset != -1)
2176 int offset = gregmap->r_l0_offset;
2178 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2180 if (regnum == i || regnum == -1)
2181 regcache_raw_collect (regcache, i, regs + offset);
2189 sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
2190 struct regcache *regcache,
2191 int regnum, const void *fpregs)
2193 const gdb_byte *regs = (const gdb_byte *) fpregs;
2196 for (i = 0; i < 32; i++)
2198 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2199 regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
2200 regs + fpregmap->r_f0_offset + (i * 4));
2203 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2204 regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
2205 regs + fpregmap->r_fsr_offset);
2209 sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
2210 const struct regcache *regcache,
2211 int regnum, void *fpregs)
2213 gdb_byte *regs = (gdb_byte *) fpregs;
2216 for (i = 0; i < 32; i++)
2218 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2219 regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
2220 regs + fpregmap->r_f0_offset + (i * 4));
2223 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2224 regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
2225 regs + fpregmap->r_fsr_offset);
2231 /* From <machine/reg.h>. */
2232 const struct sparc_gregmap sparc32_sunos4_gregmap =
2244 const struct sparc_fpregmap sparc32_sunos4_fpregmap =
2250 const struct sparc_fpregmap sparc32_bsd_fpregmap =
2257 _initialize_sparc_tdep (void)
2259 register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);