1 /* Target-dependent code for SPARC.
3 Copyright (C) 2003-2014 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"
23 #include "dwarf2-frame.h"
24 #include "floatformat.h"
26 #include "frame-base.h"
27 #include "frame-unwind.h"
38 #include "gdb_assert.h"
41 #include "sparc-tdep.h"
42 #include "sparc-ravenscar-thread.h"
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".
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
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. */
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
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. */
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)
92 /* Fetch the instruction at PC. Instructions are always big-endian
93 even if the processor operates in little-endian mode. */
96 sparc_fetch_instruction (CORE_ADDR pc)
102 /* If we can't read the instruction at PC, return zero. */
103 if (target_read_memory (pc, buf, sizeof (buf)))
107 for (i = 0; i < sizeof (buf); i++)
108 insn = (insn << 8) | buf[i];
113 /* Return non-zero if the instruction corresponding to PC is an "unimp"
117 sparc_is_unimp_insn (CORE_ADDR pc)
119 const unsigned long insn = sparc_fetch_instruction (pc);
121 return ((insn & 0xc1c00000) == 0);
124 /* Return non-zero if the instruction corresponding to PC is an
125 "annulled" branch, i.e. the annul bit is set. */
128 sparc_is_annulled_branch_insn (CORE_ADDR pc)
130 /* The branch instructions featuring an annul bit can be identified
131 by the following bit patterns:
134 OP2=1: Branch on Integer Condition Codes with Prediction (BPcc).
135 OP2=2: Branch on Integer Condition Codes (Bcc).
136 OP2=5: Branch on FP Condition Codes with Prediction (FBfcc).
137 OP2=6: Branch on FP Condition Codes (FBcc).
139 Branch on Integer Register with Prediction (BPr).
141 This leaves out ILLTRAP (OP2=0), SETHI/NOP (OP2=4) and the V8
142 coprocessor branch instructions (Op2=7). */
144 const unsigned long insn = sparc_fetch_instruction (pc);
145 const unsigned op2 = X_OP2 (insn);
147 if ((X_OP (insn) == 0)
148 && ((op2 == 1) || (op2 == 2) || (op2 == 5) || (op2 == 6)
149 || ((op2 == 3) && ((insn & 0x10000000) == 0))))
155 /* OpenBSD/sparc includes StackGhost, which according to the author's
156 website http://stackghost.cerias.purdue.edu "... transparently and
157 automatically protects applications' stack frames; more
158 specifically, it guards the return pointers. The protection
159 mechanisms require no application source or binary modification and
160 imposes only a negligible performance penalty."
162 The same website provides the following description of how
165 "StackGhost interfaces with the kernel trap handler that would
166 normally write out registers to the stack and the handler that
167 would read them back in. By XORing a cookie into the
168 return-address saved in the user stack when it is actually written
169 to the stack, and then XOR it out when the return-address is pulled
170 from the stack, StackGhost can cause attacker corrupted return
171 pointers to behave in a manner the attacker cannot predict.
172 StackGhost can also use several unused bits in the return pointer
173 to detect a smashed return pointer and abort the process."
175 For GDB this means that whenever we're reading %i7 from a stack
176 frame's window save area, we'll have to XOR the cookie.
178 More information on StackGuard can be found on in:
180 Mike Frantzen and Mike Shuey. "StackGhost: Hardware Facilitated
181 Stack Protection." 2001. Published in USENIX Security Symposium
184 /* Fetch StackGhost Per-Process XOR cookie. */
187 sparc_fetch_wcookie (struct gdbarch *gdbarch)
189 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
190 struct target_ops *ops = ¤t_target;
194 len = target_read (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
198 /* We should have either an 32-bit or an 64-bit cookie. */
199 gdb_assert (len == 4 || len == 8);
201 return extract_unsigned_integer (buf, len, byte_order);
205 /* The functions on this page are intended to be used to classify
206 function arguments. */
208 /* Check whether TYPE is "Integral or Pointer". */
211 sparc_integral_or_pointer_p (const struct type *type)
213 int len = TYPE_LENGTH (type);
215 switch (TYPE_CODE (type))
221 case TYPE_CODE_RANGE:
222 /* We have byte, half-word, word and extended-word/doubleword
223 integral types. The doubleword is an extension to the
224 original 32-bit ABI by the SCD 2.4.x. */
225 return (len == 1 || len == 2 || len == 4 || len == 8);
228 /* Allow either 32-bit or 64-bit pointers. */
229 return (len == 4 || len == 8);
237 /* Check whether TYPE is "Floating". */
240 sparc_floating_p (const struct type *type)
242 switch (TYPE_CODE (type))
246 int len = TYPE_LENGTH (type);
247 return (len == 4 || len == 8 || len == 16);
256 /* Check whether TYPE is "Complex Floating". */
259 sparc_complex_floating_p (const struct type *type)
261 switch (TYPE_CODE (type))
263 case TYPE_CODE_COMPLEX:
265 int len = TYPE_LENGTH (type);
266 return (len == 8 || len == 16 || len == 32);
275 /* Check whether TYPE is "Structure or Union".
277 In terms of Ada subprogram calls, arrays are treated the same as
278 struct and union types. So this function also returns non-zero
282 sparc_structure_or_union_p (const struct type *type)
284 switch (TYPE_CODE (type))
286 case TYPE_CODE_STRUCT:
287 case TYPE_CODE_UNION:
288 case TYPE_CODE_ARRAY:
297 /* Register information. */
299 static const char *sparc32_register_names[] =
301 "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
302 "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
303 "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
304 "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
306 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
307 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
308 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
309 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
311 "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
314 /* Total number of registers. */
315 #define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
317 /* We provide the aliases %d0..%d30 for the floating registers as
318 "psuedo" registers. */
320 static const char *sparc32_pseudo_register_names[] =
322 "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
323 "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
326 /* Total number of pseudo registers. */
327 #define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
329 /* Return the name of register REGNUM. */
332 sparc32_register_name (struct gdbarch *gdbarch, int regnum)
334 if (regnum >= 0 && regnum < SPARC32_NUM_REGS)
335 return sparc32_register_names[regnum];
337 if (regnum < SPARC32_NUM_REGS + SPARC32_NUM_PSEUDO_REGS)
338 return sparc32_pseudo_register_names[regnum - SPARC32_NUM_REGS];
343 /* Construct types for ISA-specific registers. */
346 sparc_psr_type (struct gdbarch *gdbarch)
348 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
350 if (!tdep->sparc_psr_type)
354 type = arch_flags_type (gdbarch, "builtin_type_sparc_psr", 4);
355 append_flags_type_flag (type, 5, "ET");
356 append_flags_type_flag (type, 6, "PS");
357 append_flags_type_flag (type, 7, "S");
358 append_flags_type_flag (type, 12, "EF");
359 append_flags_type_flag (type, 13, "EC");
361 tdep->sparc_psr_type = type;
364 return tdep->sparc_psr_type;
368 sparc_fsr_type (struct gdbarch *gdbarch)
370 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
372 if (!tdep->sparc_fsr_type)
376 type = arch_flags_type (gdbarch, "builtin_type_sparc_fsr", 4);
377 append_flags_type_flag (type, 0, "NXA");
378 append_flags_type_flag (type, 1, "DZA");
379 append_flags_type_flag (type, 2, "UFA");
380 append_flags_type_flag (type, 3, "OFA");
381 append_flags_type_flag (type, 4, "NVA");
382 append_flags_type_flag (type, 5, "NXC");
383 append_flags_type_flag (type, 6, "DZC");
384 append_flags_type_flag (type, 7, "UFC");
385 append_flags_type_flag (type, 8, "OFC");
386 append_flags_type_flag (type, 9, "NVC");
387 append_flags_type_flag (type, 22, "NS");
388 append_flags_type_flag (type, 23, "NXM");
389 append_flags_type_flag (type, 24, "DZM");
390 append_flags_type_flag (type, 25, "UFM");
391 append_flags_type_flag (type, 26, "OFM");
392 append_flags_type_flag (type, 27, "NVM");
394 tdep->sparc_fsr_type = type;
397 return tdep->sparc_fsr_type;
400 /* Return the GDB type object for the "standard" data type of data in
404 sparc32_register_type (struct gdbarch *gdbarch, int regnum)
406 if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
407 return builtin_type (gdbarch)->builtin_float;
409 if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
410 return builtin_type (gdbarch)->builtin_double;
412 if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
413 return builtin_type (gdbarch)->builtin_data_ptr;
415 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
416 return builtin_type (gdbarch)->builtin_func_ptr;
418 if (regnum == SPARC32_PSR_REGNUM)
419 return sparc_psr_type (gdbarch);
421 if (regnum == SPARC32_FSR_REGNUM)
422 return sparc_fsr_type (gdbarch);
424 return builtin_type (gdbarch)->builtin_int32;
427 static enum register_status
428 sparc32_pseudo_register_read (struct gdbarch *gdbarch,
429 struct regcache *regcache,
430 int regnum, gdb_byte *buf)
432 enum register_status status;
434 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
436 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
437 status = regcache_raw_read (regcache, regnum, buf);
438 if (status == REG_VALID)
439 status = regcache_raw_read (regcache, regnum + 1, buf + 4);
444 sparc32_pseudo_register_write (struct gdbarch *gdbarch,
445 struct regcache *regcache,
446 int regnum, const gdb_byte *buf)
448 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
450 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
451 regcache_raw_write (regcache, regnum, buf);
452 regcache_raw_write (regcache, regnum + 1, buf + 4);
457 sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
459 /* The ABI requires double-word alignment. */
460 return address & ~0x7;
464 sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
466 struct value **args, int nargs,
467 struct type *value_type,
468 CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
469 struct regcache *regcache)
471 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
476 if (using_struct_return (gdbarch, NULL, value_type))
480 /* This is an UNIMP instruction. */
481 store_unsigned_integer (buf, 4, byte_order,
482 TYPE_LENGTH (value_type) & 0x1fff);
483 write_memory (sp - 8, buf, 4);
491 sparc32_store_arguments (struct regcache *regcache, int nargs,
492 struct value **args, CORE_ADDR sp,
493 int struct_return, CORE_ADDR struct_addr)
495 struct gdbarch *gdbarch = get_regcache_arch (regcache);
496 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
497 /* Number of words in the "parameter array". */
498 int num_elements = 0;
502 for (i = 0; i < nargs; i++)
504 struct type *type = value_type (args[i]);
505 int len = TYPE_LENGTH (type);
507 if (sparc_structure_or_union_p (type)
508 || (sparc_floating_p (type) && len == 16)
509 || sparc_complex_floating_p (type))
511 /* Structure, Union and Quad-Precision Arguments. */
514 /* Use doubleword alignment for these values. That's always
515 correct, and wasting a few bytes shouldn't be a problem. */
518 write_memory (sp, value_contents (args[i]), len);
519 args[i] = value_from_pointer (lookup_pointer_type (type), sp);
522 else if (sparc_floating_p (type))
524 /* Floating arguments. */
525 gdb_assert (len == 4 || len == 8);
526 num_elements += (len / 4);
530 /* Integral and pointer arguments. */
531 gdb_assert (sparc_integral_or_pointer_p (type));
534 args[i] = value_cast (builtin_type (gdbarch)->builtin_int32,
536 num_elements += ((len + 3) / 4);
540 /* Always allocate at least six words. */
541 sp -= max (6, num_elements) * 4;
543 /* The psABI says that "Software convention requires space for the
544 struct/union return value pointer, even if the word is unused." */
547 /* The psABI says that "Although software convention and the
548 operating system require every stack frame to be doubleword
552 for (i = 0; i < nargs; i++)
554 const bfd_byte *valbuf = value_contents (args[i]);
555 struct type *type = value_type (args[i]);
556 int len = TYPE_LENGTH (type);
558 gdb_assert (len == 4 || len == 8);
562 int regnum = SPARC_O0_REGNUM + element;
564 regcache_cooked_write (regcache, regnum, valbuf);
565 if (len > 4 && element < 5)
566 regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
569 /* Always store the argument in memory. */
570 write_memory (sp + 4 + element * 4, valbuf, len);
574 gdb_assert (element == num_elements);
580 store_unsigned_integer (buf, 4, byte_order, struct_addr);
581 write_memory (sp, buf, 4);
588 sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
589 struct regcache *regcache, CORE_ADDR bp_addr,
590 int nargs, struct value **args, CORE_ADDR sp,
591 int struct_return, CORE_ADDR struct_addr)
593 CORE_ADDR call_pc = (struct_return ? (bp_addr - 12) : (bp_addr - 8));
595 /* Set return address. */
596 regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
598 /* Set up function arguments. */
599 sp = sparc32_store_arguments (regcache, nargs, args, sp,
600 struct_return, struct_addr);
602 /* Allocate the 16-word window save area. */
605 /* Stack should be doubleword aligned at this point. */
606 gdb_assert (sp % 8 == 0);
608 /* Finally, update the stack pointer. */
609 regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
615 /* Use the program counter to determine the contents and size of a
616 breakpoint instruction. Return a pointer to a string of bytes that
617 encode a breakpoint instruction, store the length of the string in
618 *LEN and optionally adjust *PC to point to the correct memory
619 location for inserting the breakpoint. */
621 static const gdb_byte *
622 sparc_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
624 static const gdb_byte break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
626 *len = sizeof (break_insn);
631 /* Allocate and initialize a frame cache. */
633 static struct sparc_frame_cache *
634 sparc_alloc_frame_cache (void)
636 struct sparc_frame_cache *cache;
638 cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
644 /* Frameless until proven otherwise. */
645 cache->frameless_p = 1;
646 cache->frame_offset = 0;
647 cache->saved_regs_mask = 0;
648 cache->copied_regs_mask = 0;
649 cache->struct_return_p = 0;
654 /* GCC generates several well-known sequences of instructions at the begining
655 of each function prologue when compiling with -fstack-check. If one of
656 such sequences starts at START_PC, then return the address of the
657 instruction immediately past this sequence. Otherwise, return START_PC. */
660 sparc_skip_stack_check (const CORE_ADDR start_pc)
662 CORE_ADDR pc = start_pc;
664 int offset_stack_checking_sequence = 0;
665 int probing_loop = 0;
667 /* With GCC, all stack checking sequences begin with the same two
668 instructions, plus an optional one in the case of a probing loop:
670 sethi <some immediate>, %g1
675 sethi <some immediate>, %g1
676 sethi <some immediate>, %g4
681 sethi <some immediate>, %g1
683 sethi <some immediate>, %g4
685 If the optional instruction is found (setting g4), assume that a
686 probing loop will follow. */
688 /* sethi <some immediate>, %g1 */
689 insn = sparc_fetch_instruction (pc);
691 if (!(X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 1))
694 /* optional: sethi <some immediate>, %g4 */
695 insn = sparc_fetch_instruction (pc);
697 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
700 insn = sparc_fetch_instruction (pc);
704 /* sub %sp, %g1, %g1 */
705 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
706 && X_RD (insn) == 1 && X_RS1 (insn) == 14 && X_RS2 (insn) == 1))
709 insn = sparc_fetch_instruction (pc);
712 /* optional: sethi <some immediate>, %g4 */
713 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
716 insn = sparc_fetch_instruction (pc);
720 /* First possible sequence:
721 [first two instructions above]
722 clr [%g1 - some immediate] */
724 /* clr [%g1 - some immediate] */
725 if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
726 && X_RS1 (insn) == 1 && X_RD (insn) == 0)
728 /* Valid stack-check sequence, return the new PC. */
732 /* Second possible sequence: A small number of probes.
733 [first two instructions above]
735 add %g1, -<some immediate>, %g1
737 [repeat the two instructions above any (small) number of times]
738 clr [%g1 - some immediate] */
741 else if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
742 && X_RS1 (insn) == 1 && X_RD (insn) == 0)
746 /* add %g1, -<some immediate>, %g1 */
747 insn = sparc_fetch_instruction (pc);
749 if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
750 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
754 insn = sparc_fetch_instruction (pc);
756 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
757 && X_RD (insn) == 0 && X_RS1 (insn) == 1))
761 /* clr [%g1 - some immediate] */
762 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
763 && X_RS1 (insn) == 1 && X_RD (insn) == 0))
766 /* We found a valid stack-check sequence, return the new PC. */
770 /* Third sequence: A probing loop.
771 [first three instructions above]
775 add %g1, -<some immediate>, %g1
779 And an optional last probe for the remainder:
781 clr [%g4 - some immediate] */
785 /* sub %g1, %g4, %g4 */
786 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
787 && X_RD (insn) == 4 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
791 insn = sparc_fetch_instruction (pc);
793 if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I(insn)
794 && X_RD (insn) == 0 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
798 insn = sparc_fetch_instruction (pc);
800 if (!(X_OP (insn) == 0 && X_COND (insn) == 0x1))
803 /* add %g1, -<some immediate>, %g1 */
804 insn = sparc_fetch_instruction (pc);
806 if (!(X_OP (insn) == 2 && X_OP3(insn) == 0 && X_I(insn)
807 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
811 insn = sparc_fetch_instruction (pc);
813 if (!(X_OP (insn) == 0 && X_COND (insn) == 0x8))
816 /* clr [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
817 insn = sparc_fetch_instruction (pc);
819 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4
820 && X_RD (insn) == 0 && X_RS1 (insn) == 1
821 && (!X_I(insn) || X_SIMM13 (insn) == 0)))
824 /* We found a valid stack-check sequence, return the new PC. */
826 /* optional: clr [%g4 - some immediate] */
827 insn = sparc_fetch_instruction (pc);
829 if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
830 && X_RS1 (insn) == 4 && X_RD (insn) == 0))
836 /* No stack check code in our prologue, return the start_pc. */
840 /* Record the effect of a SAVE instruction on CACHE. */
843 sparc_record_save_insn (struct sparc_frame_cache *cache)
845 /* The frame is set up. */
846 cache->frameless_p = 0;
848 /* The frame pointer contains the CFA. */
849 cache->frame_offset = 0;
851 /* The `local' and `in' registers are all saved. */
852 cache->saved_regs_mask = 0xffff;
854 /* The `out' registers are all renamed. */
855 cache->copied_regs_mask = 0xff;
858 /* Do a full analysis of the prologue at PC and update CACHE accordingly.
859 Bail out early if CURRENT_PC is reached. Return the address where
860 the analysis stopped.
862 We handle both the traditional register window model and the single
863 register window (aka flat) model. */
866 sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
867 CORE_ADDR current_pc, struct sparc_frame_cache *cache)
869 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
874 pc = sparc_skip_stack_check (pc);
876 if (current_pc <= pc)
879 /* We have to handle to "Procedure Linkage Table" (PLT) special. On
880 SPARC the linker usually defines a symbol (typically
881 _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
882 This symbol makes us end up here with PC pointing at the start of
883 the PLT and CURRENT_PC probably pointing at a PLT entry. If we
884 would do our normal prologue analysis, we would probably conclude
885 that we've got a frame when in reality we don't, since the
886 dynamic linker patches up the first PLT with some code that
887 starts with a SAVE instruction. Patch up PC such that it points
888 at the start of our PLT entry. */
889 if (tdep->plt_entry_size > 0 && in_plt_section (current_pc))
890 pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
892 insn = sparc_fetch_instruction (pc);
894 /* Recognize store insns and record their sources. */
895 while (X_OP (insn) == 3
896 && (X_OP3 (insn) == 0x4 /* stw */
897 || X_OP3 (insn) == 0x7 /* std */
898 || X_OP3 (insn) == 0xe) /* stx */
899 && X_RS1 (insn) == SPARC_SP_REGNUM)
901 int regnum = X_RD (insn);
903 /* Recognize stores into the corresponding stack slots. */
904 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
906 && X_SIMM13 (insn) == (X_OP3 (insn) == 0xe
907 ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
908 : (regnum - SPARC_L0_REGNUM) * 4))
909 || (!X_I (insn) && regnum == SPARC_L0_REGNUM)))
911 cache->saved_regs_mask |= (1 << (regnum - SPARC_L0_REGNUM));
912 if (X_OP3 (insn) == 0x7)
913 cache->saved_regs_mask |= (1 << (regnum + 1 - SPARC_L0_REGNUM));
918 insn = sparc_fetch_instruction (pc + offset);
921 /* Recognize a SETHI insn and record its destination. */
922 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
927 insn = sparc_fetch_instruction (pc + offset);
930 /* Allow for an arithmetic operation on DEST or %g1. */
931 if (X_OP (insn) == 2 && X_I (insn)
932 && (X_RD (insn) == 1 || X_RD (insn) == dest))
936 insn = sparc_fetch_instruction (pc + offset);
939 /* Check for the SAVE instruction that sets up the frame. */
940 if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
942 sparc_record_save_insn (cache);
947 /* Check for an arithmetic operation on %sp. */
949 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
950 && X_RS1 (insn) == SPARC_SP_REGNUM
951 && X_RD (insn) == SPARC_SP_REGNUM)
955 cache->frame_offset = X_SIMM13 (insn);
956 if (X_OP3 (insn) == 0)
957 cache->frame_offset = -cache->frame_offset;
961 insn = sparc_fetch_instruction (pc + offset);
963 /* Check for an arithmetic operation that sets up the frame. */
965 && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
966 && X_RS1 (insn) == SPARC_SP_REGNUM
967 && X_RD (insn) == SPARC_FP_REGNUM)
969 cache->frameless_p = 0;
970 cache->frame_offset = 0;
971 /* We could check that the amount subtracted to %sp above is the
972 same as the one added here, but this seems superfluous. */
973 cache->copied_regs_mask |= 0x40;
976 insn = sparc_fetch_instruction (pc + offset);
979 /* Check for a move (or) operation that copies the return register. */
981 && X_OP3 (insn) == 0x2
983 && X_RS1 (insn) == SPARC_G0_REGNUM
984 && X_RS2 (insn) == SPARC_O7_REGNUM
985 && X_RD (insn) == SPARC_I7_REGNUM)
987 cache->copied_regs_mask |= 0x80;
998 sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1000 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1001 return frame_unwind_register_unsigned (this_frame, tdep->pc_regnum);
1004 /* Return PC of first real instruction of the function starting at
1008 sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1010 struct symtab_and_line sal;
1011 CORE_ADDR func_start, func_end;
1012 struct sparc_frame_cache cache;
1014 /* This is the preferred method, find the end of the prologue by
1015 using the debugging information. */
1016 if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
1018 sal = find_pc_line (func_start, 0);
1020 if (sal.end < func_end
1021 && start_pc <= sal.end)
1025 start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
1027 /* The psABI says that "Although the first 6 words of arguments
1028 reside in registers, the standard stack frame reserves space for
1029 them.". It also suggests that a function may use that space to
1030 "write incoming arguments 0 to 5" into that space, and that's
1031 indeed what GCC seems to be doing. In that case GCC will
1032 generate debug information that points to the stack slots instead
1033 of the registers, so we should consider the instructions that
1034 write out these incoming arguments onto the stack. */
1038 unsigned long insn = sparc_fetch_instruction (start_pc);
1040 /* Recognize instructions that store incoming arguments into the
1041 corresponding stack slots. */
1042 if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04
1043 && X_I (insn) && X_RS1 (insn) == SPARC_FP_REGNUM)
1045 int regnum = X_RD (insn);
1047 /* Case of arguments still in %o[0..5]. */
1048 if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O5_REGNUM
1049 && !(cache.copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM)))
1050 && X_SIMM13 (insn) == 68 + (regnum - SPARC_O0_REGNUM) * 4)
1056 /* Case of arguments copied into %i[0..5]. */
1057 if (regnum >= SPARC_I0_REGNUM && regnum <= SPARC_I5_REGNUM
1058 && (cache.copied_regs_mask & (1 << (regnum - SPARC_I0_REGNUM)))
1059 && X_SIMM13 (insn) == 68 + (regnum - SPARC_I0_REGNUM) * 4)
1072 /* Normal frames. */
1074 struct sparc_frame_cache *
1075 sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
1077 struct sparc_frame_cache *cache;
1082 cache = sparc_alloc_frame_cache ();
1083 *this_cache = cache;
1085 cache->pc = get_frame_func (this_frame);
1087 sparc_analyze_prologue (get_frame_arch (this_frame), cache->pc,
1088 get_frame_pc (this_frame), cache);
1090 if (cache->frameless_p)
1092 /* This function is frameless, so %fp (%i6) holds the frame
1093 pointer for our calling frame. Use %sp (%o6) as this frame's
1096 get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1100 /* For normal frames, %fp (%i6) holds the frame pointer, the
1101 base address for the current stack frame. */
1103 get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
1106 cache->base += cache->frame_offset;
1108 if (cache->base & 1)
1109 cache->base += BIAS;
1115 sparc32_struct_return_from_sym (struct symbol *sym)
1117 struct type *type = check_typedef (SYMBOL_TYPE (sym));
1118 enum type_code code = TYPE_CODE (type);
1120 if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
1122 type = check_typedef (TYPE_TARGET_TYPE (type));
1123 if (sparc_structure_or_union_p (type)
1124 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1131 struct sparc_frame_cache *
1132 sparc32_frame_cache (struct frame_info *this_frame, void **this_cache)
1134 struct sparc_frame_cache *cache;
1140 cache = sparc_frame_cache (this_frame, this_cache);
1142 sym = find_pc_function (cache->pc);
1145 cache->struct_return_p = sparc32_struct_return_from_sym (sym);
1149 /* There is no debugging information for this function to
1150 help us determine whether this function returns a struct
1151 or not. So we rely on another heuristic which is to check
1152 the instruction at the return address and see if this is
1153 an "unimp" instruction. If it is, then it is a struct-return
1157 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1159 pc = get_frame_register_unsigned (this_frame, regnum) + 8;
1160 if (sparc_is_unimp_insn (pc))
1161 cache->struct_return_p = 1;
1168 sparc32_frame_this_id (struct frame_info *this_frame, void **this_cache,
1169 struct frame_id *this_id)
1171 struct sparc_frame_cache *cache =
1172 sparc32_frame_cache (this_frame, this_cache);
1174 /* This marks the outermost frame. */
1175 if (cache->base == 0)
1178 (*this_id) = frame_id_build (cache->base, cache->pc);
1181 static struct value *
1182 sparc32_frame_prev_register (struct frame_info *this_frame,
1183 void **this_cache, int regnum)
1185 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1186 struct sparc_frame_cache *cache =
1187 sparc32_frame_cache (this_frame, this_cache);
1189 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
1191 CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
1193 /* If this functions has a Structure, Union or Quad-Precision
1194 return value, we have to skip the UNIMP instruction that encodes
1195 the size of the structure. */
1196 if (cache->struct_return_p)
1200 (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1201 pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1202 return frame_unwind_got_constant (this_frame, regnum, pc);
1205 /* Handle StackGhost. */
1207 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1209 if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1211 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1214 /* Read the value in from memory. */
1215 i7 = get_frame_memory_unsigned (this_frame, addr, 4);
1216 return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
1220 /* The previous frame's `local' and `in' registers may have been saved
1221 in the register save area. */
1222 if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1223 && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
1225 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1227 return frame_unwind_got_memory (this_frame, regnum, addr);
1230 /* The previous frame's `out' registers may be accessible as the current
1231 frame's `in' registers. */
1232 if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM
1233 && (cache->copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM))))
1234 regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
1236 return frame_unwind_got_register (this_frame, regnum, regnum);
1239 static const struct frame_unwind sparc32_frame_unwind =
1242 default_frame_unwind_stop_reason,
1243 sparc32_frame_this_id,
1244 sparc32_frame_prev_register,
1246 default_frame_sniffer
1251 sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1253 struct sparc_frame_cache *cache =
1254 sparc32_frame_cache (this_frame, this_cache);
1259 static const struct frame_base sparc32_frame_base =
1261 &sparc32_frame_unwind,
1262 sparc32_frame_base_address,
1263 sparc32_frame_base_address,
1264 sparc32_frame_base_address
1267 static struct frame_id
1268 sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1272 sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1275 return frame_id_build (sp, get_frame_pc (this_frame));
1279 /* Extract a function return value of TYPE from REGCACHE, and copy
1280 that into VALBUF. */
1283 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
1286 int len = TYPE_LENGTH (type);
1289 gdb_assert (!sparc_structure_or_union_p (type));
1290 gdb_assert (!(sparc_floating_p (type) && len == 16));
1292 if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1294 /* Floating return values. */
1295 regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
1297 regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
1300 regcache_cooked_read (regcache, SPARC_F2_REGNUM, buf + 8);
1301 regcache_cooked_read (regcache, SPARC_F3_REGNUM, buf + 12);
1305 regcache_cooked_read (regcache, SPARC_F4_REGNUM, buf + 16);
1306 regcache_cooked_read (regcache, SPARC_F5_REGNUM, buf + 20);
1307 regcache_cooked_read (regcache, SPARC_F6_REGNUM, buf + 24);
1308 regcache_cooked_read (regcache, SPARC_F7_REGNUM, buf + 28);
1310 memcpy (valbuf, buf, len);
1314 /* Integral and pointer return values. */
1315 gdb_assert (sparc_integral_or_pointer_p (type));
1317 regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
1320 regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
1321 gdb_assert (len == 8);
1322 memcpy (valbuf, buf, 8);
1326 /* Just stripping off any unused bytes should preserve the
1327 signed-ness just fine. */
1328 memcpy (valbuf, buf + 4 - len, len);
1333 /* Store the function return value of type TYPE from VALBUF into
1337 sparc32_store_return_value (struct type *type, struct regcache *regcache,
1338 const gdb_byte *valbuf)
1340 int len = TYPE_LENGTH (type);
1343 gdb_assert (!sparc_structure_or_union_p (type));
1344 gdb_assert (!(sparc_floating_p (type) && len == 16));
1345 gdb_assert (len <= 8);
1347 if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1349 /* Floating return values. */
1350 memcpy (buf, valbuf, len);
1351 regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
1353 regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
1356 regcache_cooked_write (regcache, SPARC_F2_REGNUM, buf + 8);
1357 regcache_cooked_write (regcache, SPARC_F3_REGNUM, buf + 12);
1361 regcache_cooked_write (regcache, SPARC_F4_REGNUM, buf + 16);
1362 regcache_cooked_write (regcache, SPARC_F5_REGNUM, buf + 20);
1363 regcache_cooked_write (regcache, SPARC_F6_REGNUM, buf + 24);
1364 regcache_cooked_write (regcache, SPARC_F7_REGNUM, buf + 28);
1369 /* Integral and pointer return values. */
1370 gdb_assert (sparc_integral_or_pointer_p (type));
1374 gdb_assert (len == 8);
1375 memcpy (buf, valbuf, 8);
1376 regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
1380 /* ??? Do we need to do any sign-extension here? */
1381 memcpy (buf + 4 - len, valbuf, len);
1383 regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
1387 static enum return_value_convention
1388 sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
1389 struct type *type, struct regcache *regcache,
1390 gdb_byte *readbuf, const gdb_byte *writebuf)
1392 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1394 /* The psABI says that "...every stack frame reserves the word at
1395 %fp+64. If a function returns a structure, union, or
1396 quad-precision value, this word should hold the address of the
1397 object into which the return value should be copied." This
1398 guarantees that we can always find the return value, not just
1399 before the function returns. */
1401 if (sparc_structure_or_union_p (type)
1402 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1409 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1410 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1411 read_memory (addr, readbuf, TYPE_LENGTH (type));
1415 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1416 addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1417 write_memory (addr, writebuf, TYPE_LENGTH (type));
1420 return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1424 sparc32_extract_return_value (type, regcache, readbuf);
1426 sparc32_store_return_value (type, regcache, writebuf);
1428 return RETURN_VALUE_REGISTER_CONVENTION;
1432 sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
1434 return (sparc_structure_or_union_p (type)
1435 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
1436 || sparc_complex_floating_p (type));
1440 sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
1442 CORE_ADDR pc = get_frame_address_in_block (this_frame);
1443 struct symbol *sym = find_pc_function (pc);
1446 return sparc32_struct_return_from_sym (sym);
1451 sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1452 struct dwarf2_frame_state_reg *reg,
1453 struct frame_info *this_frame)
1459 case SPARC_G0_REGNUM:
1460 /* Since %g0 is always zero, there is no point in saving it, and
1461 people will be inclined omit it from the CFI. Make sure we
1462 don't warn about that. */
1463 reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1465 case SPARC_SP_REGNUM:
1466 reg->how = DWARF2_FRAME_REG_CFA;
1468 case SPARC32_PC_REGNUM:
1469 case SPARC32_NPC_REGNUM:
1470 reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1472 if (sparc32_dwarf2_struct_return_p (this_frame))
1474 if (regnum == SPARC32_NPC_REGNUM)
1476 reg->loc.offset = off;
1482 /* The SPARC Architecture doesn't have hardware single-step support,
1483 and most operating systems don't implement it either, so we provide
1484 software single-step mechanism. */
1487 sparc_analyze_control_transfer (struct frame_info *frame,
1488 CORE_ADDR pc, CORE_ADDR *npc)
1490 unsigned long insn = sparc_fetch_instruction (pc);
1491 int conditional_p = X_COND (insn) & 0x7;
1492 int branch_p = 0, fused_p = 0;
1493 long offset = 0; /* Must be signed for sign-extend. */
1495 if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
1497 if ((insn & 0x10000000) == 0)
1499 /* Branch on Integer Register with Prediction (BPr). */
1505 /* Compare and Branch */
1508 offset = 4 * X_DISP10 (insn);
1511 else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1513 /* Branch on Floating-Point Condition Codes (FBfcc). */
1515 offset = 4 * X_DISP22 (insn);
1517 else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1519 /* Branch on Floating-Point Condition Codes with Prediction
1522 offset = 4 * X_DISP19 (insn);
1524 else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1526 /* Branch on Integer Condition Codes (Bicc). */
1528 offset = 4 * X_DISP22 (insn);
1530 else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
1532 /* Branch on Integer Condition Codes with Prediction (BPcc). */
1534 offset = 4 * X_DISP19 (insn);
1536 else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1538 /* Trap instruction (TRAP). */
1539 return gdbarch_tdep (get_frame_arch (frame))->step_trap (frame, insn);
1542 /* FIXME: Handle DONE and RETRY instructions. */
1548 /* Fused compare-and-branch instructions are non-delayed,
1549 and do not have an annuling capability. So we need to
1550 always set a breakpoint on both the NPC and the branch
1552 gdb_assert (offset != 0);
1555 else if (conditional_p)
1557 /* For conditional branches, return nPC + 4 iff the annul
1559 return (X_A (insn) ? *npc + 4 : 0);
1563 /* For unconditional branches, return the target if its
1564 specified condition is "always" and return nPC + 4 if the
1565 condition is "never". If the annul bit is 1, set *NPC to
1567 if (X_COND (insn) == 0x0)
1568 pc = *npc, offset = 4;
1580 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1586 sparc_software_single_step (struct frame_info *frame)
1588 struct gdbarch *arch = get_frame_arch (frame);
1589 struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1590 struct address_space *aspace = get_frame_address_space (frame);
1591 CORE_ADDR npc, nnpc;
1593 CORE_ADDR pc, orig_npc;
1595 pc = get_frame_register_unsigned (frame, tdep->pc_regnum);
1596 orig_npc = npc = get_frame_register_unsigned (frame, tdep->npc_regnum);
1598 /* Analyze the instruction at PC. */
1599 nnpc = sparc_analyze_control_transfer (frame, pc, &npc);
1601 insert_single_step_breakpoint (arch, aspace, npc);
1604 insert_single_step_breakpoint (arch, aspace, nnpc);
1606 /* Assert that we have set at least one breakpoint, and that
1607 they're not set at the same spot - unless we're going
1608 from here straight to NULL, i.e. a call or jump to 0. */
1609 gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1610 gdb_assert (nnpc != npc || orig_npc == 0);
1616 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1618 struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1620 regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1621 regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1625 /* Return the appropriate register set for the core section identified
1626 by SECT_NAME and SECT_SIZE. */
1628 static const struct regset *
1629 sparc_regset_from_core_section (struct gdbarch *gdbarch,
1630 const char *sect_name, size_t sect_size)
1632 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1634 if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
1635 return tdep->gregset;
1637 if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
1638 return tdep->fpregset;
1644 static struct gdbarch *
1645 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1647 struct gdbarch_tdep *tdep;
1648 struct gdbarch *gdbarch;
1650 /* If there is already a candidate, use it. */
1651 arches = gdbarch_list_lookup_by_info (arches, &info);
1653 return arches->gdbarch;
1655 /* Allocate space for the new architecture. */
1656 tdep = XCNEW (struct gdbarch_tdep);
1657 gdbarch = gdbarch_alloc (&info, tdep);
1659 tdep->pc_regnum = SPARC32_PC_REGNUM;
1660 tdep->npc_regnum = SPARC32_NPC_REGNUM;
1661 tdep->step_trap = sparc_step_trap;
1663 set_gdbarch_long_double_bit (gdbarch, 128);
1664 set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1666 set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1667 set_gdbarch_register_name (gdbarch, sparc32_register_name);
1668 set_gdbarch_register_type (gdbarch, sparc32_register_type);
1669 set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1670 set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1671 set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1673 /* Register numbers of various important registers. */
1674 set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1675 set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1676 set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1678 /* Call dummy code. */
1679 set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
1680 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1681 set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1682 set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1684 set_gdbarch_return_value (gdbarch, sparc32_return_value);
1685 set_gdbarch_stabs_argument_has_addr
1686 (gdbarch, sparc32_stabs_argument_has_addr);
1688 set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1690 /* Stack grows downward. */
1691 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1693 set_gdbarch_breakpoint_from_pc (gdbarch, sparc_breakpoint_from_pc);
1695 set_gdbarch_frame_args_skip (gdbarch, 8);
1697 set_gdbarch_print_insn (gdbarch, print_insn_sparc);
1699 set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1700 set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1702 set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1704 set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1706 frame_base_set_default (gdbarch, &sparc32_frame_base);
1708 /* Hook in the DWARF CFI frame unwinder. */
1709 dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1710 /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1711 StackGhost issues have been resolved. */
1713 /* Hook in ABI-specific overrides, if they have been registered. */
1714 gdbarch_init_osabi (info, gdbarch);
1716 frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1718 /* If we have register sets, enable the generic core file support. */
1720 set_gdbarch_regset_from_core_section (gdbarch,
1721 sparc_regset_from_core_section);
1723 register_sparc_ravenscar_ops (gdbarch);
1728 /* Helper functions for dealing with register windows. */
1731 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1733 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1734 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1741 /* Registers are 64-bit. */
1744 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1746 if (regnum == i || regnum == -1)
1748 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1750 /* Handle StackGhost. */
1751 if (i == SPARC_I7_REGNUM)
1753 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1756 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1757 store_unsigned_integer (buf + offset, 8, byte_order,
1761 regcache_raw_supply (regcache, i, buf);
1767 /* Registers are 32-bit. Toss any sign-extension of the stack
1771 /* Clear out the top half of the temporary buffer, and put the
1772 register value in the bottom half if we're in 64-bit mode. */
1773 if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1779 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1781 if (regnum == i || regnum == -1)
1783 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1786 /* Handle StackGhost. */
1787 if (i == SPARC_I7_REGNUM)
1789 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1792 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1793 store_unsigned_integer (buf + offset, 4, byte_order,
1797 regcache_raw_supply (regcache, i, buf);
1804 sparc_collect_rwindow (const struct regcache *regcache,
1805 CORE_ADDR sp, int regnum)
1807 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1808 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1815 /* Registers are 64-bit. */
1818 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1820 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1822 regcache_raw_collect (regcache, i, buf);
1824 /* Handle StackGhost. */
1825 if (i == SPARC_I7_REGNUM)
1827 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1830 i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1831 store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
1834 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1840 /* Registers are 32-bit. Toss any sign-extension of the stack
1844 /* Only use the bottom half if we're in 64-bit mode. */
1845 if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1848 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1850 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1852 regcache_raw_collect (regcache, i, buf);
1854 /* Handle StackGhost. */
1855 if (i == SPARC_I7_REGNUM)
1857 ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1860 i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1861 store_unsigned_integer (buf + offset, 4, byte_order,
1865 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1872 /* Helper functions for dealing with register sets. */
1875 sparc32_supply_gregset (const struct sparc_gregset *gregset,
1876 struct regcache *regcache,
1877 int regnum, const void *gregs)
1879 const gdb_byte *regs = gregs;
1880 gdb_byte zero[4] = { 0 };
1883 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1884 regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
1885 regs + gregset->r_psr_offset);
1887 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1888 regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
1889 regs + gregset->r_pc_offset);
1891 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1892 regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
1893 regs + gregset->r_npc_offset);
1895 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1896 regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
1897 regs + gregset->r_y_offset);
1899 if (regnum == SPARC_G0_REGNUM || regnum == -1)
1900 regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
1902 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1904 int offset = gregset->r_g1_offset;
1906 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1908 if (regnum == i || regnum == -1)
1909 regcache_raw_supply (regcache, i, regs + offset);
1914 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1916 /* Not all of the register set variants include Locals and
1917 Inputs. For those that don't, we read them off the stack. */
1918 if (gregset->r_l0_offset == -1)
1922 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1923 sparc_supply_rwindow (regcache, sp, regnum);
1927 int offset = gregset->r_l0_offset;
1929 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1931 if (regnum == i || regnum == -1)
1932 regcache_raw_supply (regcache, i, regs + offset);
1940 sparc32_collect_gregset (const struct sparc_gregset *gregset,
1941 const struct regcache *regcache,
1942 int regnum, void *gregs)
1944 gdb_byte *regs = gregs;
1947 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1948 regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
1949 regs + gregset->r_psr_offset);
1951 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1952 regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
1953 regs + gregset->r_pc_offset);
1955 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1956 regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
1957 regs + gregset->r_npc_offset);
1959 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1960 regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
1961 regs + gregset->r_y_offset);
1963 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1965 int offset = gregset->r_g1_offset;
1967 /* %g0 is always zero. */
1968 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1970 if (regnum == i || regnum == -1)
1971 regcache_raw_collect (regcache, i, regs + offset);
1976 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1978 /* Not all of the register set variants include Locals and
1979 Inputs. For those that don't, we read them off the stack. */
1980 if (gregset->r_l0_offset != -1)
1982 int offset = gregset->r_l0_offset;
1984 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1986 if (regnum == i || regnum == -1)
1987 regcache_raw_collect (regcache, i, regs + offset);
1995 sparc32_supply_fpregset (const struct sparc_fpregset *fpregset,
1996 struct regcache *regcache,
1997 int regnum, const void *fpregs)
1999 const gdb_byte *regs = fpregs;
2002 for (i = 0; i < 32; i++)
2004 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2005 regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
2006 regs + fpregset->r_f0_offset + (i * 4));
2009 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2010 regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
2011 regs + fpregset->r_fsr_offset);
2015 sparc32_collect_fpregset (const struct sparc_fpregset *fpregset,
2016 const struct regcache *regcache,
2017 int regnum, void *fpregs)
2019 gdb_byte *regs = fpregs;
2022 for (i = 0; i < 32; i++)
2024 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2025 regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
2026 regs + fpregset->r_f0_offset + (i * 4));
2029 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2030 regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
2031 regs + fpregset->r_fsr_offset);
2037 /* From <machine/reg.h>. */
2038 const struct sparc_gregset sparc32_sunos4_gregset =
2050 const struct sparc_fpregset sparc32_sunos4_fpregset =
2056 const struct sparc_fpregset sparc32_bsd_fpregset =
2063 /* Provide a prototype to silence -Wmissing-prototypes. */
2064 void _initialize_sparc_tdep (void);
2067 _initialize_sparc_tdep (void)
2069 register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);