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"
25 #include "floatformat.h"
27 #include "frame-base.h"
28 #include "frame-unwind.h"
37 #include "target-descriptions.h"
40 #include "sparc-tdep.h"
41 #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)
91 /* Macros to identify some instructions. */
92 /* RETURN (RETT in V8) */
93 #define X_RETTURN(i) ((X_OP (i) == 0x2) && (X_OP3 (i) == 0x39))
95 /* Fetch the instruction at PC. Instructions are always big-endian
96 even if the processor operates in little-endian mode. */
99 sparc_fetch_instruction (CORE_ADDR pc
)
105 /* If we can't read the instruction at PC, return zero. */
106 if (target_read_memory (pc
, buf
, sizeof (buf
)))
110 for (i
= 0; i
< sizeof (buf
); i
++)
111 insn
= (insn
<< 8) | buf
[i
];
116 /* Return non-zero if the instruction corresponding to PC is an "unimp"
120 sparc_is_unimp_insn (CORE_ADDR pc
)
122 const unsigned long insn
= sparc_fetch_instruction (pc
);
124 return ((insn
& 0xc1c00000) == 0);
127 /* Return non-zero if the instruction corresponding to PC is an
128 "annulled" branch, i.e. the annul bit is set. */
131 sparc_is_annulled_branch_insn (CORE_ADDR pc
)
133 /* The branch instructions featuring an annul bit can be identified
134 by the following bit patterns:
137 OP2=1: Branch on Integer Condition Codes with Prediction (BPcc).
138 OP2=2: Branch on Integer Condition Codes (Bcc).
139 OP2=5: Branch on FP Condition Codes with Prediction (FBfcc).
140 OP2=6: Branch on FP Condition Codes (FBcc).
142 Branch on Integer Register with Prediction (BPr).
144 This leaves out ILLTRAP (OP2=0), SETHI/NOP (OP2=4) and the V8
145 coprocessor branch instructions (Op2=7). */
147 const unsigned long insn
= sparc_fetch_instruction (pc
);
148 const unsigned op2
= X_OP2 (insn
);
150 if ((X_OP (insn
) == 0)
151 && ((op2
== 1) || (op2
== 2) || (op2
== 5) || (op2
== 6)
152 || ((op2
== 3) && ((insn
& 0x10000000) == 0))))
158 /* OpenBSD/sparc includes StackGhost, which according to the author's
159 website http://stackghost.cerias.purdue.edu "... transparently and
160 automatically protects applications' stack frames; more
161 specifically, it guards the return pointers. The protection
162 mechanisms require no application source or binary modification and
163 imposes only a negligible performance penalty."
165 The same website provides the following description of how
168 "StackGhost interfaces with the kernel trap handler that would
169 normally write out registers to the stack and the handler that
170 would read them back in. By XORing a cookie into the
171 return-address saved in the user stack when it is actually written
172 to the stack, and then XOR it out when the return-address is pulled
173 from the stack, StackGhost can cause attacker corrupted return
174 pointers to behave in a manner the attacker cannot predict.
175 StackGhost can also use several unused bits in the return pointer
176 to detect a smashed return pointer and abort the process."
178 For GDB this means that whenever we're reading %i7 from a stack
179 frame's window save area, we'll have to XOR the cookie.
181 More information on StackGuard can be found on in:
183 Mike Frantzen and Mike Shuey. "StackGhost: Hardware Facilitated
184 Stack Protection." 2001. Published in USENIX Security Symposium
187 /* Fetch StackGhost Per-Process XOR cookie. */
190 sparc_fetch_wcookie (struct gdbarch
*gdbarch
)
192 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
193 struct target_ops
*ops
= ¤t_target
;
197 len
= target_read (ops
, TARGET_OBJECT_WCOOKIE
, NULL
, buf
, 0, 8);
201 /* We should have either an 32-bit or an 64-bit cookie. */
202 gdb_assert (len
== 4 || len
== 8);
204 return extract_unsigned_integer (buf
, len
, byte_order
);
208 /* The functions on this page are intended to be used to classify
209 function arguments. */
211 /* Check whether TYPE is "Integral or Pointer". */
214 sparc_integral_or_pointer_p (const struct type
*type
)
216 int len
= TYPE_LENGTH (type
);
218 switch (TYPE_CODE (type
))
224 case TYPE_CODE_RANGE
:
225 /* We have byte, half-word, word and extended-word/doubleword
226 integral types. The doubleword is an extension to the
227 original 32-bit ABI by the SCD 2.4.x. */
228 return (len
== 1 || len
== 2 || len
== 4 || len
== 8);
231 case TYPE_CODE_RVALUE_REF
:
232 /* Allow either 32-bit or 64-bit pointers. */
233 return (len
== 4 || len
== 8);
241 /* Check whether TYPE is "Floating". */
244 sparc_floating_p (const struct type
*type
)
246 switch (TYPE_CODE (type
))
250 int len
= TYPE_LENGTH (type
);
251 return (len
== 4 || len
== 8 || len
== 16);
260 /* Check whether TYPE is "Complex Floating". */
263 sparc_complex_floating_p (const struct type
*type
)
265 switch (TYPE_CODE (type
))
267 case TYPE_CODE_COMPLEX
:
269 int len
= TYPE_LENGTH (type
);
270 return (len
== 8 || len
== 16 || len
== 32);
279 /* Check whether TYPE is "Structure or Union".
281 In terms of Ada subprogram calls, arrays are treated the same as
282 struct and union types. So this function also returns non-zero
286 sparc_structure_or_union_p (const struct type
*type
)
288 switch (TYPE_CODE (type
))
290 case TYPE_CODE_STRUCT
:
291 case TYPE_CODE_UNION
:
292 case TYPE_CODE_ARRAY
:
301 /* Check whether TYPE is returned on registers. */
304 sparc_structure_return_p (const struct type
*type
)
306 if (TYPE_CODE (type
) == TYPE_CODE_ARRAY
&& TYPE_LENGTH (type
) <= 8)
308 struct type
*t
= check_typedef (TYPE_TARGET_TYPE (type
));
310 if (sparc_floating_p (t
) && TYPE_LENGTH (t
) == 8)
314 if (sparc_floating_p (type
) && TYPE_LENGTH (type
) == 16)
316 return sparc_structure_or_union_p (type
);
319 /* Check whether TYPE is passed on registers. */
322 sparc_arg_on_registers_p (const struct type
*type
)
324 if (TYPE_CODE (type
) == TYPE_CODE_ARRAY
&& TYPE_LENGTH (type
) <= 8)
326 struct type
*t
= check_typedef (TYPE_TARGET_TYPE (type
));
328 if (sparc_floating_p (t
) && TYPE_LENGTH (t
) == 8)
332 if (sparc_structure_or_union_p (type
) || sparc_complex_floating_p (type
)
333 || (sparc_floating_p (type
) && TYPE_LENGTH (type
) == 16))
338 /* Register information. */
339 #define SPARC32_FPU_REGISTERS \
340 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
341 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
342 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
343 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
344 #define SPARC32_CP0_REGISTERS \
345 "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
347 static const char *sparc_core_register_names
[] = { SPARC_CORE_REGISTERS
};
348 static const char *sparc32_fpu_register_names
[] = { SPARC32_FPU_REGISTERS
};
349 static const char *sparc32_cp0_register_names
[] = { SPARC32_CP0_REGISTERS
};
351 static const char *sparc32_register_names
[] =
353 SPARC_CORE_REGISTERS
,
354 SPARC32_FPU_REGISTERS
,
355 SPARC32_CP0_REGISTERS
358 /* Total number of registers. */
359 #define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
361 /* We provide the aliases %d0..%d30 for the floating registers as
362 "psuedo" registers. */
364 static const char *sparc32_pseudo_register_names
[] =
366 "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
367 "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
370 /* Total number of pseudo registers. */
371 #define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
373 /* Return the name of pseudo register REGNUM. */
376 sparc32_pseudo_register_name (struct gdbarch
*gdbarch
, int regnum
)
378 regnum
-= gdbarch_num_regs (gdbarch
);
380 if (regnum
< SPARC32_NUM_PSEUDO_REGS
)
381 return sparc32_pseudo_register_names
[regnum
];
383 internal_error (__FILE__
, __LINE__
,
384 _("sparc32_pseudo_register_name: bad register number %d"),
388 /* Return the name of register REGNUM. */
391 sparc32_register_name (struct gdbarch
*gdbarch
, int regnum
)
393 if (tdesc_has_registers (gdbarch_target_desc (gdbarch
)))
394 return tdesc_register_name (gdbarch
, regnum
);
396 if (regnum
>= 0 && regnum
< gdbarch_num_regs (gdbarch
))
397 return sparc32_register_names
[regnum
];
399 return sparc32_pseudo_register_name (gdbarch
, regnum
);
402 /* Construct types for ISA-specific registers. */
405 sparc_psr_type (struct gdbarch
*gdbarch
)
407 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
409 if (!tdep
->sparc_psr_type
)
413 type
= arch_flags_type (gdbarch
, "builtin_type_sparc_psr", 32);
414 append_flags_type_flag (type
, 5, "ET");
415 append_flags_type_flag (type
, 6, "PS");
416 append_flags_type_flag (type
, 7, "S");
417 append_flags_type_flag (type
, 12, "EF");
418 append_flags_type_flag (type
, 13, "EC");
420 tdep
->sparc_psr_type
= type
;
423 return tdep
->sparc_psr_type
;
427 sparc_fsr_type (struct gdbarch
*gdbarch
)
429 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
431 if (!tdep
->sparc_fsr_type
)
435 type
= arch_flags_type (gdbarch
, "builtin_type_sparc_fsr", 32);
436 append_flags_type_flag (type
, 0, "NXA");
437 append_flags_type_flag (type
, 1, "DZA");
438 append_flags_type_flag (type
, 2, "UFA");
439 append_flags_type_flag (type
, 3, "OFA");
440 append_flags_type_flag (type
, 4, "NVA");
441 append_flags_type_flag (type
, 5, "NXC");
442 append_flags_type_flag (type
, 6, "DZC");
443 append_flags_type_flag (type
, 7, "UFC");
444 append_flags_type_flag (type
, 8, "OFC");
445 append_flags_type_flag (type
, 9, "NVC");
446 append_flags_type_flag (type
, 22, "NS");
447 append_flags_type_flag (type
, 23, "NXM");
448 append_flags_type_flag (type
, 24, "DZM");
449 append_flags_type_flag (type
, 25, "UFM");
450 append_flags_type_flag (type
, 26, "OFM");
451 append_flags_type_flag (type
, 27, "NVM");
453 tdep
->sparc_fsr_type
= type
;
456 return tdep
->sparc_fsr_type
;
459 /* Return the GDB type object for the "standard" data type of data in
460 pseudo register REGNUM. */
463 sparc32_pseudo_register_type (struct gdbarch
*gdbarch
, int regnum
)
465 regnum
-= gdbarch_num_regs (gdbarch
);
467 if (regnum
>= SPARC32_D0_REGNUM
&& regnum
<= SPARC32_D30_REGNUM
)
468 return builtin_type (gdbarch
)->builtin_double
;
470 internal_error (__FILE__
, __LINE__
,
471 _("sparc32_pseudo_register_type: bad register number %d"),
475 /* Return the GDB type object for the "standard" data type of data in
479 sparc32_register_type (struct gdbarch
*gdbarch
, int regnum
)
481 if (tdesc_has_registers (gdbarch_target_desc (gdbarch
)))
482 return tdesc_register_type (gdbarch
, regnum
);
484 if (regnum
>= SPARC_F0_REGNUM
&& regnum
<= SPARC_F31_REGNUM
)
485 return builtin_type (gdbarch
)->builtin_float
;
487 if (regnum
== SPARC_SP_REGNUM
|| regnum
== SPARC_FP_REGNUM
)
488 return builtin_type (gdbarch
)->builtin_data_ptr
;
490 if (regnum
== SPARC32_PC_REGNUM
|| regnum
== SPARC32_NPC_REGNUM
)
491 return builtin_type (gdbarch
)->builtin_func_ptr
;
493 if (regnum
== SPARC32_PSR_REGNUM
)
494 return sparc_psr_type (gdbarch
);
496 if (regnum
== SPARC32_FSR_REGNUM
)
497 return sparc_fsr_type (gdbarch
);
499 if (regnum
>= gdbarch_num_regs (gdbarch
))
500 return sparc32_pseudo_register_type (gdbarch
, regnum
);
502 return builtin_type (gdbarch
)->builtin_int32
;
505 static enum register_status
506 sparc32_pseudo_register_read (struct gdbarch
*gdbarch
,
507 struct regcache
*regcache
,
508 int regnum
, gdb_byte
*buf
)
510 enum register_status status
;
512 regnum
-= gdbarch_num_regs (gdbarch
);
513 gdb_assert (regnum
>= SPARC32_D0_REGNUM
&& regnum
<= SPARC32_D30_REGNUM
);
515 regnum
= SPARC_F0_REGNUM
+ 2 * (regnum
- SPARC32_D0_REGNUM
);
516 status
= regcache_raw_read (regcache
, regnum
, buf
);
517 if (status
== REG_VALID
)
518 status
= regcache_raw_read (regcache
, regnum
+ 1, buf
+ 4);
523 sparc32_pseudo_register_write (struct gdbarch
*gdbarch
,
524 struct regcache
*regcache
,
525 int regnum
, const gdb_byte
*buf
)
527 regnum
-= gdbarch_num_regs (gdbarch
);
528 gdb_assert (regnum
>= SPARC32_D0_REGNUM
&& regnum
<= SPARC32_D30_REGNUM
);
530 regnum
= SPARC_F0_REGNUM
+ 2 * (regnum
- SPARC32_D0_REGNUM
);
531 regcache_raw_write (regcache
, regnum
, buf
);
532 regcache_raw_write (regcache
, regnum
+ 1, buf
+ 4);
535 /* Implement the stack_frame_destroyed_p gdbarch method. */
538 sparc_stack_frame_destroyed_p (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
540 /* This function must return true if we are one instruction after an
541 instruction that destroyed the stack frame of the current
542 function. The SPARC instructions used to restore the callers
543 stack frame are RESTORE and RETURN/RETT.
545 Of these RETURN/RETT is a branch instruction and thus we return
546 true if we are in its delay slot.
548 RESTORE is almost always found in the delay slot of a branch
549 instruction that transfers control to the caller, such as JMPL.
550 Thus the next instruction is in the caller frame and we don't
551 need to do anything about it. */
553 unsigned int insn
= sparc_fetch_instruction (pc
- 4);
555 return X_RETTURN (insn
);
560 sparc32_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR address
)
562 /* The ABI requires double-word alignment. */
563 return address
& ~0x7;
567 sparc32_push_dummy_code (struct gdbarch
*gdbarch
, CORE_ADDR sp
,
569 struct value
**args
, int nargs
,
570 struct type
*value_type
,
571 CORE_ADDR
*real_pc
, CORE_ADDR
*bp_addr
,
572 struct regcache
*regcache
)
574 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
579 if (using_struct_return (gdbarch
, NULL
, value_type
))
583 /* This is an UNIMP instruction. */
584 store_unsigned_integer (buf
, 4, byte_order
,
585 TYPE_LENGTH (value_type
) & 0x1fff);
586 write_memory (sp
- 8, buf
, 4);
594 sparc32_store_arguments (struct regcache
*regcache
, int nargs
,
595 struct value
**args
, CORE_ADDR sp
,
596 int struct_return
, CORE_ADDR struct_addr
)
598 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
599 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
600 /* Number of words in the "parameter array". */
601 int num_elements
= 0;
605 for (i
= 0; i
< nargs
; i
++)
607 struct type
*type
= value_type (args
[i
]);
608 int len
= TYPE_LENGTH (type
);
610 if (!sparc_arg_on_registers_p (type
))
612 /* Structure, Union and Quad-Precision Arguments. */
615 /* Use doubleword alignment for these values. That's always
616 correct, and wasting a few bytes shouldn't be a problem. */
619 write_memory (sp
, value_contents (args
[i
]), len
);
620 args
[i
] = value_from_pointer (lookup_pointer_type (type
), sp
);
623 else if (sparc_floating_p (type
))
625 /* Floating arguments. */
626 gdb_assert (len
== 4 || len
== 8);
627 num_elements
+= (len
/ 4);
631 /* Integral and pointer arguments. */
632 gdb_assert (sparc_integral_or_pointer_p (type
)
633 || (TYPE_CODE (type
) == TYPE_CODE_ARRAY
&& len
<= 8));
634 num_elements
+= ((len
+ 3) / 4);
638 /* Always allocate at least six words. */
639 sp
-= std::max (6, num_elements
) * 4;
641 /* The psABI says that "Software convention requires space for the
642 struct/union return value pointer, even if the word is unused." */
645 /* The psABI says that "Although software convention and the
646 operating system require every stack frame to be doubleword
650 for (i
= 0; i
< nargs
; i
++)
652 const bfd_byte
*valbuf
= value_contents (args
[i
]);
653 struct type
*type
= value_type (args
[i
]);
654 int len
= TYPE_LENGTH (type
);
659 memset (buf
, 0, 4 - len
);
660 memcpy (buf
+ 4 - len
, valbuf
, len
);
665 gdb_assert (len
== 4 || len
== 8);
669 int regnum
= SPARC_O0_REGNUM
+ element
;
671 regcache_cooked_write (regcache
, regnum
, valbuf
);
672 if (len
> 4 && element
< 5)
673 regcache_cooked_write (regcache
, regnum
+ 1, valbuf
+ 4);
676 /* Always store the argument in memory. */
677 write_memory (sp
+ 4 + element
* 4, valbuf
, len
);
681 gdb_assert (element
== num_elements
);
687 store_unsigned_integer (buf
, 4, byte_order
, struct_addr
);
688 write_memory (sp
, buf
, 4);
695 sparc32_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
696 struct regcache
*regcache
, CORE_ADDR bp_addr
,
697 int nargs
, struct value
**args
, CORE_ADDR sp
,
698 int struct_return
, CORE_ADDR struct_addr
)
700 CORE_ADDR call_pc
= (struct_return
? (bp_addr
- 12) : (bp_addr
- 8));
702 /* Set return address. */
703 regcache_cooked_write_unsigned (regcache
, SPARC_O7_REGNUM
, call_pc
);
705 /* Set up function arguments. */
706 sp
= sparc32_store_arguments (regcache
, nargs
, args
, sp
,
707 struct_return
, struct_addr
);
709 /* Allocate the 16-word window save area. */
712 /* Stack should be doubleword aligned at this point. */
713 gdb_assert (sp
% 8 == 0);
715 /* Finally, update the stack pointer. */
716 regcache_cooked_write_unsigned (regcache
, SPARC_SP_REGNUM
, sp
);
722 /* Use the program counter to determine the contents and size of a
723 breakpoint instruction. Return a pointer to a string of bytes that
724 encode a breakpoint instruction, store the length of the string in
725 *LEN and optionally adjust *PC to point to the correct memory
726 location for inserting the breakpoint. */
727 constexpr gdb_byte sparc_break_insn
[] = { 0x91, 0xd0, 0x20, 0x01 };
729 typedef BP_MANIPULATION (sparc_break_insn
) sparc_breakpoint
;
732 /* Allocate and initialize a frame cache. */
734 static struct sparc_frame_cache
*
735 sparc_alloc_frame_cache (void)
737 struct sparc_frame_cache
*cache
;
739 cache
= FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache
);
745 /* Frameless until proven otherwise. */
746 cache
->frameless_p
= 1;
747 cache
->frame_offset
= 0;
748 cache
->saved_regs_mask
= 0;
749 cache
->copied_regs_mask
= 0;
750 cache
->struct_return_p
= 0;
755 /* GCC generates several well-known sequences of instructions at the begining
756 of each function prologue when compiling with -fstack-check. If one of
757 such sequences starts at START_PC, then return the address of the
758 instruction immediately past this sequence. Otherwise, return START_PC. */
761 sparc_skip_stack_check (const CORE_ADDR start_pc
)
763 CORE_ADDR pc
= start_pc
;
765 int probing_loop
= 0;
767 /* With GCC, all stack checking sequences begin with the same two
768 instructions, plus an optional one in the case of a probing loop:
770 sethi <some immediate>, %g1
775 sethi <some immediate>, %g1
776 sethi <some immediate>, %g4
781 sethi <some immediate>, %g1
783 sethi <some immediate>, %g4
785 If the optional instruction is found (setting g4), assume that a
786 probing loop will follow. */
788 /* sethi <some immediate>, %g1 */
789 insn
= sparc_fetch_instruction (pc
);
791 if (!(X_OP (insn
) == 0 && X_OP2 (insn
) == 0x4 && X_RD (insn
) == 1))
794 /* optional: sethi <some immediate>, %g4 */
795 insn
= sparc_fetch_instruction (pc
);
797 if (X_OP (insn
) == 0 && X_OP2 (insn
) == 0x4 && X_RD (insn
) == 4)
800 insn
= sparc_fetch_instruction (pc
);
804 /* sub %sp, %g1, %g1 */
805 if (!(X_OP (insn
) == 2 && X_OP3 (insn
) == 0x4 && !X_I(insn
)
806 && X_RD (insn
) == 1 && X_RS1 (insn
) == 14 && X_RS2 (insn
) == 1))
809 insn
= sparc_fetch_instruction (pc
);
812 /* optional: sethi <some immediate>, %g4 */
813 if (X_OP (insn
) == 0 && X_OP2 (insn
) == 0x4 && X_RD (insn
) == 4)
816 insn
= sparc_fetch_instruction (pc
);
820 /* First possible sequence:
821 [first two instructions above]
822 clr [%g1 - some immediate] */
824 /* clr [%g1 - some immediate] */
825 if (X_OP (insn
) == 3 && X_OP3(insn
) == 0x4 && X_I(insn
)
826 && X_RS1 (insn
) == 1 && X_RD (insn
) == 0)
828 /* Valid stack-check sequence, return the new PC. */
832 /* Second possible sequence: A small number of probes.
833 [first two instructions above]
835 add %g1, -<some immediate>, %g1
837 [repeat the two instructions above any (small) number of times]
838 clr [%g1 - some immediate] */
841 else if (X_OP (insn
) == 3 && X_OP3(insn
) == 0x4 && !X_I(insn
)
842 && X_RS1 (insn
) == 1 && X_RD (insn
) == 0)
846 /* add %g1, -<some immediate>, %g1 */
847 insn
= sparc_fetch_instruction (pc
);
849 if (!(X_OP (insn
) == 2 && X_OP3(insn
) == 0 && X_I(insn
)
850 && X_RS1 (insn
) == 1 && X_RD (insn
) == 1))
854 insn
= sparc_fetch_instruction (pc
);
856 if (!(X_OP (insn
) == 3 && X_OP3(insn
) == 0x4 && !X_I(insn
)
857 && X_RD (insn
) == 0 && X_RS1 (insn
) == 1))
861 /* clr [%g1 - some immediate] */
862 if (!(X_OP (insn
) == 3 && X_OP3(insn
) == 0x4 && X_I(insn
)
863 && X_RS1 (insn
) == 1 && X_RD (insn
) == 0))
866 /* We found a valid stack-check sequence, return the new PC. */
870 /* Third sequence: A probing loop.
871 [first three instructions above]
875 add %g1, -<some immediate>, %g1
879 And an optional last probe for the remainder:
881 clr [%g4 - some immediate] */
885 /* sub %g1, %g4, %g4 */
886 if (!(X_OP (insn
) == 2 && X_OP3 (insn
) == 0x4 && !X_I(insn
)
887 && X_RD (insn
) == 4 && X_RS1 (insn
) == 1 && X_RS2 (insn
) == 4))
891 insn
= sparc_fetch_instruction (pc
);
893 if (!(X_OP (insn
) == 2 && X_OP3 (insn
) == 0x14 && !X_I(insn
)
894 && X_RD (insn
) == 0 && X_RS1 (insn
) == 1 && X_RS2 (insn
) == 4))
898 insn
= sparc_fetch_instruction (pc
);
900 if (!(X_OP (insn
) == 0 && X_COND (insn
) == 0x1))
903 /* add %g1, -<some immediate>, %g1 */
904 insn
= sparc_fetch_instruction (pc
);
906 if (!(X_OP (insn
) == 2 && X_OP3(insn
) == 0 && X_I(insn
)
907 && X_RS1 (insn
) == 1 && X_RD (insn
) == 1))
911 insn
= sparc_fetch_instruction (pc
);
913 if (!(X_OP (insn
) == 0 && X_COND (insn
) == 0x8))
916 /* clr [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
917 insn
= sparc_fetch_instruction (pc
);
919 if (!(X_OP (insn
) == 3 && X_OP3(insn
) == 0x4
920 && X_RD (insn
) == 0 && X_RS1 (insn
) == 1
921 && (!X_I(insn
) || X_SIMM13 (insn
) == 0)))
924 /* We found a valid stack-check sequence, return the new PC. */
926 /* optional: clr [%g4 - some immediate] */
927 insn
= sparc_fetch_instruction (pc
);
929 if (!(X_OP (insn
) == 3 && X_OP3(insn
) == 0x4 && X_I(insn
)
930 && X_RS1 (insn
) == 4 && X_RD (insn
) == 0))
936 /* No stack check code in our prologue, return the start_pc. */
940 /* Record the effect of a SAVE instruction on CACHE. */
943 sparc_record_save_insn (struct sparc_frame_cache
*cache
)
945 /* The frame is set up. */
946 cache
->frameless_p
= 0;
948 /* The frame pointer contains the CFA. */
949 cache
->frame_offset
= 0;
951 /* The `local' and `in' registers are all saved. */
952 cache
->saved_regs_mask
= 0xffff;
954 /* The `out' registers are all renamed. */
955 cache
->copied_regs_mask
= 0xff;
958 /* Do a full analysis of the prologue at PC and update CACHE accordingly.
959 Bail out early if CURRENT_PC is reached. Return the address where
960 the analysis stopped.
962 We handle both the traditional register window model and the single
963 register window (aka flat) model. */
966 sparc_analyze_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
,
967 CORE_ADDR current_pc
, struct sparc_frame_cache
*cache
)
969 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
974 pc
= sparc_skip_stack_check (pc
);
976 if (current_pc
<= pc
)
979 /* We have to handle to "Procedure Linkage Table" (PLT) special. On
980 SPARC the linker usually defines a symbol (typically
981 _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
982 This symbol makes us end up here with PC pointing at the start of
983 the PLT and CURRENT_PC probably pointing at a PLT entry. If we
984 would do our normal prologue analysis, we would probably conclude
985 that we've got a frame when in reality we don't, since the
986 dynamic linker patches up the first PLT with some code that
987 starts with a SAVE instruction. Patch up PC such that it points
988 at the start of our PLT entry. */
989 if (tdep
->plt_entry_size
> 0 && in_plt_section (current_pc
))
990 pc
= current_pc
- ((current_pc
- pc
) % tdep
->plt_entry_size
);
992 insn
= sparc_fetch_instruction (pc
);
994 /* Recognize store insns and record their sources. */
995 while (X_OP (insn
) == 3
996 && (X_OP3 (insn
) == 0x4 /* stw */
997 || X_OP3 (insn
) == 0x7 /* std */
998 || X_OP3 (insn
) == 0xe) /* stx */
999 && X_RS1 (insn
) == SPARC_SP_REGNUM
)
1001 int regnum
= X_RD (insn
);
1003 /* Recognize stores into the corresponding stack slots. */
1004 if (regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
1006 && X_SIMM13 (insn
) == (X_OP3 (insn
) == 0xe
1007 ? (regnum
- SPARC_L0_REGNUM
) * 8 + BIAS
1008 : (regnum
- SPARC_L0_REGNUM
) * 4))
1009 || (!X_I (insn
) && regnum
== SPARC_L0_REGNUM
)))
1011 cache
->saved_regs_mask
|= (1 << (regnum
- SPARC_L0_REGNUM
));
1012 if (X_OP3 (insn
) == 0x7)
1013 cache
->saved_regs_mask
|= (1 << (regnum
+ 1 - SPARC_L0_REGNUM
));
1018 insn
= sparc_fetch_instruction (pc
+ offset
);
1021 /* Recognize a SETHI insn and record its destination. */
1022 if (X_OP (insn
) == 0 && X_OP2 (insn
) == 0x04)
1027 insn
= sparc_fetch_instruction (pc
+ offset
);
1030 /* Allow for an arithmetic operation on DEST or %g1. */
1031 if (X_OP (insn
) == 2 && X_I (insn
)
1032 && (X_RD (insn
) == 1 || X_RD (insn
) == dest
))
1036 insn
= sparc_fetch_instruction (pc
+ offset
);
1039 /* Check for the SAVE instruction that sets up the frame. */
1040 if (X_OP (insn
) == 2 && X_OP3 (insn
) == 0x3c)
1042 sparc_record_save_insn (cache
);
1047 /* Check for an arithmetic operation on %sp. */
1048 if (X_OP (insn
) == 2
1049 && (X_OP3 (insn
) == 0 || X_OP3 (insn
) == 0x4)
1050 && X_RS1 (insn
) == SPARC_SP_REGNUM
1051 && X_RD (insn
) == SPARC_SP_REGNUM
)
1055 cache
->frame_offset
= X_SIMM13 (insn
);
1056 if (X_OP3 (insn
) == 0)
1057 cache
->frame_offset
= -cache
->frame_offset
;
1061 insn
= sparc_fetch_instruction (pc
+ offset
);
1063 /* Check for an arithmetic operation that sets up the frame. */
1064 if (X_OP (insn
) == 2
1065 && (X_OP3 (insn
) == 0 || X_OP3 (insn
) == 0x4)
1066 && X_RS1 (insn
) == SPARC_SP_REGNUM
1067 && X_RD (insn
) == SPARC_FP_REGNUM
)
1069 cache
->frameless_p
= 0;
1070 cache
->frame_offset
= 0;
1071 /* We could check that the amount subtracted to %sp above is the
1072 same as the one added here, but this seems superfluous. */
1073 cache
->copied_regs_mask
|= 0x40;
1076 insn
= sparc_fetch_instruction (pc
+ offset
);
1079 /* Check for a move (or) operation that copies the return register. */
1080 if (X_OP (insn
) == 2
1081 && X_OP3 (insn
) == 0x2
1083 && X_RS1 (insn
) == SPARC_G0_REGNUM
1084 && X_RS2 (insn
) == SPARC_O7_REGNUM
1085 && X_RD (insn
) == SPARC_I7_REGNUM
)
1087 cache
->copied_regs_mask
|= 0x80;
1098 sparc_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
1100 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
1101 return frame_unwind_register_unsigned (this_frame
, tdep
->pc_regnum
);
1104 /* Return PC of first real instruction of the function starting at
1108 sparc32_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR start_pc
)
1110 struct symtab_and_line sal
;
1111 CORE_ADDR func_start
, func_end
;
1112 struct sparc_frame_cache cache
;
1114 /* This is the preferred method, find the end of the prologue by
1115 using the debugging information. */
1116 if (find_pc_partial_function (start_pc
, NULL
, &func_start
, &func_end
))
1118 sal
= find_pc_line (func_start
, 0);
1120 if (sal
.end
< func_end
1121 && start_pc
<= sal
.end
)
1125 start_pc
= sparc_analyze_prologue (gdbarch
, start_pc
, 0xffffffffUL
, &cache
);
1127 /* The psABI says that "Although the first 6 words of arguments
1128 reside in registers, the standard stack frame reserves space for
1129 them.". It also suggests that a function may use that space to
1130 "write incoming arguments 0 to 5" into that space, and that's
1131 indeed what GCC seems to be doing. In that case GCC will
1132 generate debug information that points to the stack slots instead
1133 of the registers, so we should consider the instructions that
1134 write out these incoming arguments onto the stack. */
1138 unsigned long insn
= sparc_fetch_instruction (start_pc
);
1140 /* Recognize instructions that store incoming arguments into the
1141 corresponding stack slots. */
1142 if (X_OP (insn
) == 3 && (X_OP3 (insn
) & 0x3c) == 0x04
1143 && X_I (insn
) && X_RS1 (insn
) == SPARC_FP_REGNUM
)
1145 int regnum
= X_RD (insn
);
1147 /* Case of arguments still in %o[0..5]. */
1148 if (regnum
>= SPARC_O0_REGNUM
&& regnum
<= SPARC_O5_REGNUM
1149 && !(cache
.copied_regs_mask
& (1 << (regnum
- SPARC_O0_REGNUM
)))
1150 && X_SIMM13 (insn
) == 68 + (regnum
- SPARC_O0_REGNUM
) * 4)
1156 /* Case of arguments copied into %i[0..5]. */
1157 if (regnum
>= SPARC_I0_REGNUM
&& regnum
<= SPARC_I5_REGNUM
1158 && (cache
.copied_regs_mask
& (1 << (regnum
- SPARC_I0_REGNUM
)))
1159 && X_SIMM13 (insn
) == 68 + (regnum
- SPARC_I0_REGNUM
) * 4)
1172 /* Normal frames. */
1174 struct sparc_frame_cache
*
1175 sparc_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
1177 struct sparc_frame_cache
*cache
;
1180 return (struct sparc_frame_cache
*) *this_cache
;
1182 cache
= sparc_alloc_frame_cache ();
1183 *this_cache
= cache
;
1185 cache
->pc
= get_frame_func (this_frame
);
1187 sparc_analyze_prologue (get_frame_arch (this_frame
), cache
->pc
,
1188 get_frame_pc (this_frame
), cache
);
1190 if (cache
->frameless_p
)
1192 /* This function is frameless, so %fp (%i6) holds the frame
1193 pointer for our calling frame. Use %sp (%o6) as this frame's
1196 get_frame_register_unsigned (this_frame
, SPARC_SP_REGNUM
);
1200 /* For normal frames, %fp (%i6) holds the frame pointer, the
1201 base address for the current stack frame. */
1203 get_frame_register_unsigned (this_frame
, SPARC_FP_REGNUM
);
1206 cache
->base
+= cache
->frame_offset
;
1208 if (cache
->base
& 1)
1209 cache
->base
+= BIAS
;
1215 sparc32_struct_return_from_sym (struct symbol
*sym
)
1217 struct type
*type
= check_typedef (SYMBOL_TYPE (sym
));
1218 enum type_code code
= TYPE_CODE (type
);
1220 if (code
== TYPE_CODE_FUNC
|| code
== TYPE_CODE_METHOD
)
1222 type
= check_typedef (TYPE_TARGET_TYPE (type
));
1223 if (sparc_structure_or_union_p (type
)
1224 || (sparc_floating_p (type
) && TYPE_LENGTH (type
) == 16))
1231 struct sparc_frame_cache
*
1232 sparc32_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
1234 struct sparc_frame_cache
*cache
;
1238 return (struct sparc_frame_cache
*) *this_cache
;
1240 cache
= sparc_frame_cache (this_frame
, this_cache
);
1242 sym
= find_pc_function (cache
->pc
);
1245 cache
->struct_return_p
= sparc32_struct_return_from_sym (sym
);
1249 /* There is no debugging information for this function to
1250 help us determine whether this function returns a struct
1251 or not. So we rely on another heuristic which is to check
1252 the instruction at the return address and see if this is
1253 an "unimp" instruction. If it is, then it is a struct-return
1257 (cache
->copied_regs_mask
& 0x80) ? SPARC_I7_REGNUM
: SPARC_O7_REGNUM
;
1259 pc
= get_frame_register_unsigned (this_frame
, regnum
) + 8;
1260 if (sparc_is_unimp_insn (pc
))
1261 cache
->struct_return_p
= 1;
1268 sparc32_frame_this_id (struct frame_info
*this_frame
, void **this_cache
,
1269 struct frame_id
*this_id
)
1271 struct sparc_frame_cache
*cache
=
1272 sparc32_frame_cache (this_frame
, this_cache
);
1274 /* This marks the outermost frame. */
1275 if (cache
->base
== 0)
1278 (*this_id
) = frame_id_build (cache
->base
, cache
->pc
);
1281 static struct value
*
1282 sparc32_frame_prev_register (struct frame_info
*this_frame
,
1283 void **this_cache
, int regnum
)
1285 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1286 struct sparc_frame_cache
*cache
=
1287 sparc32_frame_cache (this_frame
, this_cache
);
1289 if (regnum
== SPARC32_PC_REGNUM
|| regnum
== SPARC32_NPC_REGNUM
)
1291 CORE_ADDR pc
= (regnum
== SPARC32_NPC_REGNUM
) ? 4 : 0;
1293 /* If this functions has a Structure, Union or Quad-Precision
1294 return value, we have to skip the UNIMP instruction that encodes
1295 the size of the structure. */
1296 if (cache
->struct_return_p
)
1300 (cache
->copied_regs_mask
& 0x80) ? SPARC_I7_REGNUM
: SPARC_O7_REGNUM
;
1301 pc
+= get_frame_register_unsigned (this_frame
, regnum
) + 8;
1302 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
1305 /* Handle StackGhost. */
1307 ULONGEST wcookie
= sparc_fetch_wcookie (gdbarch
);
1309 if (wcookie
!= 0 && !cache
->frameless_p
&& regnum
== SPARC_I7_REGNUM
)
1311 CORE_ADDR addr
= cache
->base
+ (regnum
- SPARC_L0_REGNUM
) * 4;
1314 /* Read the value in from memory. */
1315 i7
= get_frame_memory_unsigned (this_frame
, addr
, 4);
1316 return frame_unwind_got_constant (this_frame
, regnum
, i7
^ wcookie
);
1320 /* The previous frame's `local' and `in' registers may have been saved
1321 in the register save area. */
1322 if (regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
1323 && (cache
->saved_regs_mask
& (1 << (regnum
- SPARC_L0_REGNUM
))))
1325 CORE_ADDR addr
= cache
->base
+ (regnum
- SPARC_L0_REGNUM
) * 4;
1327 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
1330 /* The previous frame's `out' registers may be accessible as the current
1331 frame's `in' registers. */
1332 if (regnum
>= SPARC_O0_REGNUM
&& regnum
<= SPARC_O7_REGNUM
1333 && (cache
->copied_regs_mask
& (1 << (regnum
- SPARC_O0_REGNUM
))))
1334 regnum
+= (SPARC_I0_REGNUM
- SPARC_O0_REGNUM
);
1336 return frame_unwind_got_register (this_frame
, regnum
, regnum
);
1339 static const struct frame_unwind sparc32_frame_unwind
=
1342 default_frame_unwind_stop_reason
,
1343 sparc32_frame_this_id
,
1344 sparc32_frame_prev_register
,
1346 default_frame_sniffer
1351 sparc32_frame_base_address (struct frame_info
*this_frame
, void **this_cache
)
1353 struct sparc_frame_cache
*cache
=
1354 sparc32_frame_cache (this_frame
, this_cache
);
1359 static const struct frame_base sparc32_frame_base
=
1361 &sparc32_frame_unwind
,
1362 sparc32_frame_base_address
,
1363 sparc32_frame_base_address
,
1364 sparc32_frame_base_address
1367 static struct frame_id
1368 sparc_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
1372 sp
= get_frame_register_unsigned (this_frame
, SPARC_SP_REGNUM
);
1375 return frame_id_build (sp
, get_frame_pc (this_frame
));
1379 /* Extract a function return value of TYPE from REGCACHE, and copy
1380 that into VALBUF. */
1383 sparc32_extract_return_value (struct type
*type
, struct regcache
*regcache
,
1386 int len
= TYPE_LENGTH (type
);
1389 gdb_assert (!sparc_structure_return_p (type
));
1391 if (sparc_floating_p (type
) || sparc_complex_floating_p (type
)
1392 || TYPE_CODE (type
) == TYPE_CODE_ARRAY
)
1394 /* Floating return values. */
1395 regcache_cooked_read (regcache
, SPARC_F0_REGNUM
, buf
);
1397 regcache_cooked_read (regcache
, SPARC_F1_REGNUM
, buf
+ 4);
1400 regcache_cooked_read (regcache
, SPARC_F2_REGNUM
, buf
+ 8);
1401 regcache_cooked_read (regcache
, SPARC_F3_REGNUM
, buf
+ 12);
1405 regcache_cooked_read (regcache
, SPARC_F4_REGNUM
, buf
+ 16);
1406 regcache_cooked_read (regcache
, SPARC_F5_REGNUM
, buf
+ 20);
1407 regcache_cooked_read (regcache
, SPARC_F6_REGNUM
, buf
+ 24);
1408 regcache_cooked_read (regcache
, SPARC_F7_REGNUM
, buf
+ 28);
1410 memcpy (valbuf
, buf
, len
);
1414 /* Integral and pointer return values. */
1415 gdb_assert (sparc_integral_or_pointer_p (type
));
1417 regcache_cooked_read (regcache
, SPARC_O0_REGNUM
, buf
);
1420 regcache_cooked_read (regcache
, SPARC_O1_REGNUM
, buf
+ 4);
1421 gdb_assert (len
== 8);
1422 memcpy (valbuf
, buf
, 8);
1426 /* Just stripping off any unused bytes should preserve the
1427 signed-ness just fine. */
1428 memcpy (valbuf
, buf
+ 4 - len
, len
);
1433 /* Store the function return value of type TYPE from VALBUF into
1437 sparc32_store_return_value (struct type
*type
, struct regcache
*regcache
,
1438 const gdb_byte
*valbuf
)
1440 int len
= TYPE_LENGTH (type
);
1443 gdb_assert (!sparc_structure_return_p (type
));
1445 if (sparc_floating_p (type
) || sparc_complex_floating_p (type
))
1447 /* Floating return values. */
1448 memcpy (buf
, valbuf
, len
);
1449 regcache_cooked_write (regcache
, SPARC_F0_REGNUM
, buf
);
1451 regcache_cooked_write (regcache
, SPARC_F1_REGNUM
, buf
+ 4);
1454 regcache_cooked_write (regcache
, SPARC_F2_REGNUM
, buf
+ 8);
1455 regcache_cooked_write (regcache
, SPARC_F3_REGNUM
, buf
+ 12);
1459 regcache_cooked_write (regcache
, SPARC_F4_REGNUM
, buf
+ 16);
1460 regcache_cooked_write (regcache
, SPARC_F5_REGNUM
, buf
+ 20);
1461 regcache_cooked_write (regcache
, SPARC_F6_REGNUM
, buf
+ 24);
1462 regcache_cooked_write (regcache
, SPARC_F7_REGNUM
, buf
+ 28);
1467 /* Integral and pointer return values. */
1468 gdb_assert (sparc_integral_or_pointer_p (type
));
1472 gdb_assert (len
== 8);
1473 memcpy (buf
, valbuf
, 8);
1474 regcache_cooked_write (regcache
, SPARC_O1_REGNUM
, buf
+ 4);
1478 /* ??? Do we need to do any sign-extension here? */
1479 memcpy (buf
+ 4 - len
, valbuf
, len
);
1481 regcache_cooked_write (regcache
, SPARC_O0_REGNUM
, buf
);
1485 static enum return_value_convention
1486 sparc32_return_value (struct gdbarch
*gdbarch
, struct value
*function
,
1487 struct type
*type
, struct regcache
*regcache
,
1488 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
1490 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1492 /* The psABI says that "...every stack frame reserves the word at
1493 %fp+64. If a function returns a structure, union, or
1494 quad-precision value, this word should hold the address of the
1495 object into which the return value should be copied." This
1496 guarantees that we can always find the return value, not just
1497 before the function returns. */
1499 if (sparc_structure_return_p (type
))
1506 regcache_cooked_read_unsigned (regcache
, SPARC_SP_REGNUM
, &sp
);
1507 addr
= read_memory_unsigned_integer (sp
+ 64, 4, byte_order
);
1508 read_memory (addr
, readbuf
, TYPE_LENGTH (type
));
1512 regcache_cooked_read_unsigned (regcache
, SPARC_SP_REGNUM
, &sp
);
1513 addr
= read_memory_unsigned_integer (sp
+ 64, 4, byte_order
);
1514 write_memory (addr
, writebuf
, TYPE_LENGTH (type
));
1517 return RETURN_VALUE_ABI_PRESERVES_ADDRESS
;
1521 sparc32_extract_return_value (type
, regcache
, readbuf
);
1523 sparc32_store_return_value (type
, regcache
, writebuf
);
1525 return RETURN_VALUE_REGISTER_CONVENTION
;
1529 sparc32_stabs_argument_has_addr (struct gdbarch
*gdbarch
, struct type
*type
)
1531 return (sparc_structure_or_union_p (type
)
1532 || (sparc_floating_p (type
) && TYPE_LENGTH (type
) == 16)
1533 || sparc_complex_floating_p (type
));
1537 sparc32_dwarf2_struct_return_p (struct frame_info
*this_frame
)
1539 CORE_ADDR pc
= get_frame_address_in_block (this_frame
);
1540 struct symbol
*sym
= find_pc_function (pc
);
1543 return sparc32_struct_return_from_sym (sym
);
1548 sparc32_dwarf2_frame_init_reg (struct gdbarch
*gdbarch
, int regnum
,
1549 struct dwarf2_frame_state_reg
*reg
,
1550 struct frame_info
*this_frame
)
1556 case SPARC_G0_REGNUM
:
1557 /* Since %g0 is always zero, there is no point in saving it, and
1558 people will be inclined omit it from the CFI. Make sure we
1559 don't warn about that. */
1560 reg
->how
= DWARF2_FRAME_REG_SAME_VALUE
;
1562 case SPARC_SP_REGNUM
:
1563 reg
->how
= DWARF2_FRAME_REG_CFA
;
1565 case SPARC32_PC_REGNUM
:
1566 case SPARC32_NPC_REGNUM
:
1567 reg
->how
= DWARF2_FRAME_REG_RA_OFFSET
;
1569 if (sparc32_dwarf2_struct_return_p (this_frame
))
1571 if (regnum
== SPARC32_NPC_REGNUM
)
1573 reg
->loc
.offset
= off
;
1578 /* Implement the execute_dwarf_cfa_vendor_op method. */
1581 sparc_execute_dwarf_cfa_vendor_op (struct gdbarch
*gdbarch
, gdb_byte op
,
1582 struct dwarf2_frame_state
*fs
)
1584 /* Only DW_CFA_GNU_window_save is expected on SPARC. */
1585 if (op
!= DW_CFA_GNU_window_save
)
1589 int size
= register_size (gdbarch
, 0);
1591 fs
->regs
.alloc_regs (32);
1592 for (reg
= 8; reg
< 16; reg
++)
1594 fs
->regs
.reg
[reg
].how
= DWARF2_FRAME_REG_SAVED_REG
;
1595 fs
->regs
.reg
[reg
].loc
.reg
= reg
+ 16;
1597 for (reg
= 16; reg
< 32; reg
++)
1599 fs
->regs
.reg
[reg
].how
= DWARF2_FRAME_REG_SAVED_OFFSET
;
1600 fs
->regs
.reg
[reg
].loc
.offset
= (reg
- 16) * size
;
1607 /* The SPARC Architecture doesn't have hardware single-step support,
1608 and most operating systems don't implement it either, so we provide
1609 software single-step mechanism. */
1612 sparc_analyze_control_transfer (struct regcache
*regcache
,
1613 CORE_ADDR pc
, CORE_ADDR
*npc
)
1615 unsigned long insn
= sparc_fetch_instruction (pc
);
1616 int conditional_p
= X_COND (insn
) & 0x7;
1617 int branch_p
= 0, fused_p
= 0;
1618 long offset
= 0; /* Must be signed for sign-extend. */
1620 if (X_OP (insn
) == 0 && X_OP2 (insn
) == 3)
1622 if ((insn
& 0x10000000) == 0)
1624 /* Branch on Integer Register with Prediction (BPr). */
1630 /* Compare and Branch */
1633 offset
= 4 * X_DISP10 (insn
);
1636 else if (X_OP (insn
) == 0 && X_OP2 (insn
) == 6)
1638 /* Branch on Floating-Point Condition Codes (FBfcc). */
1640 offset
= 4 * X_DISP22 (insn
);
1642 else if (X_OP (insn
) == 0 && X_OP2 (insn
) == 5)
1644 /* Branch on Floating-Point Condition Codes with Prediction
1647 offset
= 4 * X_DISP19 (insn
);
1649 else if (X_OP (insn
) == 0 && X_OP2 (insn
) == 2)
1651 /* Branch on Integer Condition Codes (Bicc). */
1653 offset
= 4 * X_DISP22 (insn
);
1655 else if (X_OP (insn
) == 0 && X_OP2 (insn
) == 1)
1657 /* Branch on Integer Condition Codes with Prediction (BPcc). */
1659 offset
= 4 * X_DISP19 (insn
);
1661 else if (X_OP (insn
) == 2 && X_OP3 (insn
) == 0x3a)
1663 struct frame_info
*frame
= get_current_frame ();
1665 /* Trap instruction (TRAP). */
1666 return gdbarch_tdep (get_regcache_arch (regcache
))->step_trap (frame
,
1670 /* FIXME: Handle DONE and RETRY instructions. */
1676 /* Fused compare-and-branch instructions are non-delayed,
1677 and do not have an annuling capability. So we need to
1678 always set a breakpoint on both the NPC and the branch
1680 gdb_assert (offset
!= 0);
1683 else if (conditional_p
)
1685 /* For conditional branches, return nPC + 4 iff the annul
1687 return (X_A (insn
) ? *npc
+ 4 : 0);
1691 /* For unconditional branches, return the target if its
1692 specified condition is "always" and return nPC + 4 if the
1693 condition is "never". If the annul bit is 1, set *NPC to
1695 if (X_COND (insn
) == 0x0)
1696 pc
= *npc
, offset
= 4;
1708 sparc_step_trap (struct frame_info
*frame
, unsigned long insn
)
1713 static std::vector
<CORE_ADDR
>
1714 sparc_software_single_step (struct regcache
*regcache
)
1716 struct gdbarch
*arch
= get_regcache_arch (regcache
);
1717 struct gdbarch_tdep
*tdep
= gdbarch_tdep (arch
);
1718 CORE_ADDR npc
, nnpc
;
1720 CORE_ADDR pc
, orig_npc
;
1721 std::vector
<CORE_ADDR
> next_pcs
;
1723 pc
= regcache_raw_get_unsigned (regcache
, tdep
->pc_regnum
);
1724 orig_npc
= npc
= regcache_raw_get_unsigned (regcache
, tdep
->npc_regnum
);
1726 /* Analyze the instruction at PC. */
1727 nnpc
= sparc_analyze_control_transfer (regcache
, pc
, &npc
);
1729 next_pcs
.push_back (npc
);
1732 next_pcs
.push_back (nnpc
);
1734 /* Assert that we have set at least one breakpoint, and that
1735 they're not set at the same spot - unless we're going
1736 from here straight to NULL, i.e. a call or jump to 0. */
1737 gdb_assert (npc
!= 0 || nnpc
!= 0 || orig_npc
== 0);
1738 gdb_assert (nnpc
!= npc
|| orig_npc
== 0);
1744 sparc_write_pc (struct regcache
*regcache
, CORE_ADDR pc
)
1746 struct gdbarch_tdep
*tdep
= gdbarch_tdep (get_regcache_arch (regcache
));
1748 regcache_cooked_write_unsigned (regcache
, tdep
->pc_regnum
, pc
);
1749 regcache_cooked_write_unsigned (regcache
, tdep
->npc_regnum
, pc
+ 4);
1753 /* Iterate over core file register note sections. */
1756 sparc_iterate_over_regset_sections (struct gdbarch
*gdbarch
,
1757 iterate_over_regset_sections_cb
*cb
,
1759 const struct regcache
*regcache
)
1761 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
1763 cb (".reg", tdep
->sizeof_gregset
, tdep
->gregset
, NULL
, cb_data
);
1764 cb (".reg2", tdep
->sizeof_fpregset
, tdep
->fpregset
, NULL
, cb_data
);
1769 validate_tdesc_registers (const struct target_desc
*tdesc
,
1770 struct tdesc_arch_data
*tdesc_data
,
1771 const char *feature_name
,
1772 const char *register_names
[],
1773 unsigned int registers_num
,
1774 unsigned int reg_start
)
1777 const struct tdesc_feature
*feature
;
1779 feature
= tdesc_find_feature (tdesc
, feature_name
);
1780 if (feature
== NULL
)
1783 for (unsigned int i
= 0; i
< registers_num
; i
++)
1784 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
1791 static struct gdbarch
*
1792 sparc32_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
1794 struct gdbarch_tdep
*tdep
;
1795 const struct target_desc
*tdesc
= info
.target_desc
;
1796 struct gdbarch
*gdbarch
;
1799 /* If there is already a candidate, use it. */
1800 arches
= gdbarch_list_lookup_by_info (arches
, &info
);
1802 return arches
->gdbarch
;
1804 /* Allocate space for the new architecture. */
1805 tdep
= XCNEW (struct gdbarch_tdep
);
1806 gdbarch
= gdbarch_alloc (&info
, tdep
);
1808 tdep
->pc_regnum
= SPARC32_PC_REGNUM
;
1809 tdep
->npc_regnum
= SPARC32_NPC_REGNUM
;
1810 tdep
->step_trap
= sparc_step_trap
;
1811 tdep
->fpu_register_names
= sparc32_fpu_register_names
;
1812 tdep
->fpu_registers_num
= ARRAY_SIZE (sparc32_fpu_register_names
);
1813 tdep
->cp0_register_names
= sparc32_cp0_register_names
;
1814 tdep
->cp0_registers_num
= ARRAY_SIZE (sparc32_cp0_register_names
);
1816 set_gdbarch_long_double_bit (gdbarch
, 128);
1817 set_gdbarch_long_double_format (gdbarch
, floatformats_sparc_quad
);
1819 set_gdbarch_wchar_bit (gdbarch
, 16);
1820 set_gdbarch_wchar_signed (gdbarch
, 1);
1822 set_gdbarch_num_regs (gdbarch
, SPARC32_NUM_REGS
);
1823 set_gdbarch_register_name (gdbarch
, sparc32_register_name
);
1824 set_gdbarch_register_type (gdbarch
, sparc32_register_type
);
1825 set_gdbarch_num_pseudo_regs (gdbarch
, SPARC32_NUM_PSEUDO_REGS
);
1826 set_tdesc_pseudo_register_name (gdbarch
, sparc32_pseudo_register_name
);
1827 set_tdesc_pseudo_register_type (gdbarch
, sparc32_pseudo_register_type
);
1828 set_gdbarch_pseudo_register_read (gdbarch
, sparc32_pseudo_register_read
);
1829 set_gdbarch_pseudo_register_write (gdbarch
, sparc32_pseudo_register_write
);
1831 /* Register numbers of various important registers. */
1832 set_gdbarch_sp_regnum (gdbarch
, SPARC_SP_REGNUM
); /* %sp */
1833 set_gdbarch_pc_regnum (gdbarch
, SPARC32_PC_REGNUM
); /* %pc */
1834 set_gdbarch_fp0_regnum (gdbarch
, SPARC_F0_REGNUM
); /* %f0 */
1836 /* Call dummy code. */
1837 set_gdbarch_frame_align (gdbarch
, sparc32_frame_align
);
1838 set_gdbarch_call_dummy_location (gdbarch
, ON_STACK
);
1839 set_gdbarch_push_dummy_code (gdbarch
, sparc32_push_dummy_code
);
1840 set_gdbarch_push_dummy_call (gdbarch
, sparc32_push_dummy_call
);
1842 set_gdbarch_return_value (gdbarch
, sparc32_return_value
);
1843 set_gdbarch_stabs_argument_has_addr
1844 (gdbarch
, sparc32_stabs_argument_has_addr
);
1846 set_gdbarch_skip_prologue (gdbarch
, sparc32_skip_prologue
);
1848 /* Stack grows downward. */
1849 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
1851 set_gdbarch_breakpoint_kind_from_pc (gdbarch
,
1852 sparc_breakpoint::kind_from_pc
);
1853 set_gdbarch_sw_breakpoint_from_kind (gdbarch
,
1854 sparc_breakpoint::bp_from_kind
);
1856 set_gdbarch_frame_args_skip (gdbarch
, 8);
1858 set_gdbarch_software_single_step (gdbarch
, sparc_software_single_step
);
1859 set_gdbarch_write_pc (gdbarch
, sparc_write_pc
);
1861 set_gdbarch_dummy_id (gdbarch
, sparc_dummy_id
);
1863 set_gdbarch_unwind_pc (gdbarch
, sparc_unwind_pc
);
1865 frame_base_set_default (gdbarch
, &sparc32_frame_base
);
1867 /* Hook in the DWARF CFI frame unwinder. */
1868 dwarf2_frame_set_init_reg (gdbarch
, sparc32_dwarf2_frame_init_reg
);
1869 /* Register DWARF vendor CFI handler. */
1870 set_gdbarch_execute_dwarf_cfa_vendor_op (gdbarch
,
1871 sparc_execute_dwarf_cfa_vendor_op
);
1872 /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1873 StackGhost issues have been resolved. */
1875 /* Hook in ABI-specific overrides, if they have been registered. */
1876 gdbarch_init_osabi (info
, gdbarch
);
1878 frame_unwind_append_unwinder (gdbarch
, &sparc32_frame_unwind
);
1880 if (tdesc_has_registers (tdesc
))
1882 struct tdesc_arch_data
*tdesc_data
= tdesc_data_alloc ();
1884 /* Validate that the descriptor provides the mandatory registers
1885 and allocate their numbers. */
1886 valid_p
&= validate_tdesc_registers (tdesc
, tdesc_data
,
1887 "org.gnu.gdb.sparc.cpu",
1888 sparc_core_register_names
,
1889 ARRAY_SIZE (sparc_core_register_names
),
1891 valid_p
&= validate_tdesc_registers (tdesc
, tdesc_data
,
1892 "org.gnu.gdb.sparc.fpu",
1893 tdep
->fpu_register_names
,
1894 tdep
->fpu_registers_num
,
1896 valid_p
&= validate_tdesc_registers (tdesc
, tdesc_data
,
1897 "org.gnu.gdb.sparc.cp0",
1898 tdep
->cp0_register_names
,
1899 tdep
->cp0_registers_num
,
1901 + tdep
->fpu_registers_num
);
1904 tdesc_data_cleanup (tdesc_data
);
1908 /* Target description may have changed. */
1909 info
.tdesc_data
= tdesc_data
;
1910 tdesc_use_registers (gdbarch
, tdesc
, tdesc_data
);
1913 /* If we have register sets, enable the generic core file support. */
1915 set_gdbarch_iterate_over_regset_sections
1916 (gdbarch
, sparc_iterate_over_regset_sections
);
1918 register_sparc_ravenscar_ops (gdbarch
);
1923 /* Helper functions for dealing with register windows. */
1926 sparc_supply_rwindow (struct regcache
*regcache
, CORE_ADDR sp
, int regnum
)
1928 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
1929 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1936 /* Registers are 64-bit. */
1939 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
1941 if (regnum
== i
|| regnum
== -1)
1943 target_read_memory (sp
+ ((i
- SPARC_L0_REGNUM
) * 8), buf
, 8);
1945 /* Handle StackGhost. */
1946 if (i
== SPARC_I7_REGNUM
)
1948 ULONGEST wcookie
= sparc_fetch_wcookie (gdbarch
);
1951 i7
= extract_unsigned_integer (buf
+ offset
, 8, byte_order
);
1952 store_unsigned_integer (buf
+ offset
, 8, byte_order
,
1956 regcache_raw_supply (regcache
, i
, buf
);
1962 /* Registers are 32-bit. Toss any sign-extension of the stack
1966 /* Clear out the top half of the temporary buffer, and put the
1967 register value in the bottom half if we're in 64-bit mode. */
1968 if (gdbarch_ptr_bit (get_regcache_arch (regcache
)) == 64)
1974 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
1976 if (regnum
== i
|| regnum
== -1)
1978 target_read_memory (sp
+ ((i
- SPARC_L0_REGNUM
) * 4),
1981 /* Handle StackGhost. */
1982 if (i
== SPARC_I7_REGNUM
)
1984 ULONGEST wcookie
= sparc_fetch_wcookie (gdbarch
);
1987 i7
= extract_unsigned_integer (buf
+ offset
, 4, byte_order
);
1988 store_unsigned_integer (buf
+ offset
, 4, byte_order
,
1992 regcache_raw_supply (regcache
, i
, buf
);
1999 sparc_collect_rwindow (const struct regcache
*regcache
,
2000 CORE_ADDR sp
, int regnum
)
2002 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
2003 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2010 /* Registers are 64-bit. */
2013 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
2015 if (regnum
== -1 || regnum
== SPARC_SP_REGNUM
|| regnum
== i
)
2017 regcache_raw_collect (regcache
, i
, buf
);
2019 /* Handle StackGhost. */
2020 if (i
== SPARC_I7_REGNUM
)
2022 ULONGEST wcookie
= sparc_fetch_wcookie (gdbarch
);
2025 i7
= extract_unsigned_integer (buf
+ offset
, 8, byte_order
);
2026 store_unsigned_integer (buf
, 8, byte_order
, i7
^ wcookie
);
2029 target_write_memory (sp
+ ((i
- SPARC_L0_REGNUM
) * 8), buf
, 8);
2035 /* Registers are 32-bit. Toss any sign-extension of the stack
2039 /* Only use the bottom half if we're in 64-bit mode. */
2040 if (gdbarch_ptr_bit (get_regcache_arch (regcache
)) == 64)
2043 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
2045 if (regnum
== -1 || regnum
== SPARC_SP_REGNUM
|| regnum
== i
)
2047 regcache_raw_collect (regcache
, i
, buf
);
2049 /* Handle StackGhost. */
2050 if (i
== SPARC_I7_REGNUM
)
2052 ULONGEST wcookie
= sparc_fetch_wcookie (gdbarch
);
2055 i7
= extract_unsigned_integer (buf
+ offset
, 4, byte_order
);
2056 store_unsigned_integer (buf
+ offset
, 4, byte_order
,
2060 target_write_memory (sp
+ ((i
- SPARC_L0_REGNUM
) * 4),
2067 /* Helper functions for dealing with register sets. */
2070 sparc32_supply_gregset (const struct sparc_gregmap
*gregmap
,
2071 struct regcache
*regcache
,
2072 int regnum
, const void *gregs
)
2074 const gdb_byte
*regs
= (const gdb_byte
*) gregs
;
2075 gdb_byte zero
[4] = { 0 };
2078 if (regnum
== SPARC32_PSR_REGNUM
|| regnum
== -1)
2079 regcache_raw_supply (regcache
, SPARC32_PSR_REGNUM
,
2080 regs
+ gregmap
->r_psr_offset
);
2082 if (regnum
== SPARC32_PC_REGNUM
|| regnum
== -1)
2083 regcache_raw_supply (regcache
, SPARC32_PC_REGNUM
,
2084 regs
+ gregmap
->r_pc_offset
);
2086 if (regnum
== SPARC32_NPC_REGNUM
|| regnum
== -1)
2087 regcache_raw_supply (regcache
, SPARC32_NPC_REGNUM
,
2088 regs
+ gregmap
->r_npc_offset
);
2090 if (regnum
== SPARC32_Y_REGNUM
|| regnum
== -1)
2091 regcache_raw_supply (regcache
, SPARC32_Y_REGNUM
,
2092 regs
+ gregmap
->r_y_offset
);
2094 if (regnum
== SPARC_G0_REGNUM
|| regnum
== -1)
2095 regcache_raw_supply (regcache
, SPARC_G0_REGNUM
, &zero
);
2097 if ((regnum
>= SPARC_G1_REGNUM
&& regnum
<= SPARC_O7_REGNUM
) || regnum
== -1)
2099 int offset
= gregmap
->r_g1_offset
;
2101 for (i
= SPARC_G1_REGNUM
; i
<= SPARC_O7_REGNUM
; i
++)
2103 if (regnum
== i
|| regnum
== -1)
2104 regcache_raw_supply (regcache
, i
, regs
+ offset
);
2109 if ((regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
) || regnum
== -1)
2111 /* Not all of the register set variants include Locals and
2112 Inputs. For those that don't, we read them off the stack. */
2113 if (gregmap
->r_l0_offset
== -1)
2117 regcache_cooked_read_unsigned (regcache
, SPARC_SP_REGNUM
, &sp
);
2118 sparc_supply_rwindow (regcache
, sp
, regnum
);
2122 int offset
= gregmap
->r_l0_offset
;
2124 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
2126 if (regnum
== i
|| regnum
== -1)
2127 regcache_raw_supply (regcache
, i
, regs
+ offset
);
2135 sparc32_collect_gregset (const struct sparc_gregmap
*gregmap
,
2136 const struct regcache
*regcache
,
2137 int regnum
, void *gregs
)
2139 gdb_byte
*regs
= (gdb_byte
*) gregs
;
2142 if (regnum
== SPARC32_PSR_REGNUM
|| regnum
== -1)
2143 regcache_raw_collect (regcache
, SPARC32_PSR_REGNUM
,
2144 regs
+ gregmap
->r_psr_offset
);
2146 if (regnum
== SPARC32_PC_REGNUM
|| regnum
== -1)
2147 regcache_raw_collect (regcache
, SPARC32_PC_REGNUM
,
2148 regs
+ gregmap
->r_pc_offset
);
2150 if (regnum
== SPARC32_NPC_REGNUM
|| regnum
== -1)
2151 regcache_raw_collect (regcache
, SPARC32_NPC_REGNUM
,
2152 regs
+ gregmap
->r_npc_offset
);
2154 if (regnum
== SPARC32_Y_REGNUM
|| regnum
== -1)
2155 regcache_raw_collect (regcache
, SPARC32_Y_REGNUM
,
2156 regs
+ gregmap
->r_y_offset
);
2158 if ((regnum
>= SPARC_G1_REGNUM
&& regnum
<= SPARC_O7_REGNUM
) || regnum
== -1)
2160 int offset
= gregmap
->r_g1_offset
;
2162 /* %g0 is always zero. */
2163 for (i
= SPARC_G1_REGNUM
; i
<= SPARC_O7_REGNUM
; i
++)
2165 if (regnum
== i
|| regnum
== -1)
2166 regcache_raw_collect (regcache
, i
, regs
+ offset
);
2171 if ((regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
) || regnum
== -1)
2173 /* Not all of the register set variants include Locals and
2174 Inputs. For those that don't, we read them off the stack. */
2175 if (gregmap
->r_l0_offset
!= -1)
2177 int offset
= gregmap
->r_l0_offset
;
2179 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
2181 if (regnum
== i
|| regnum
== -1)
2182 regcache_raw_collect (regcache
, i
, regs
+ offset
);
2190 sparc32_supply_fpregset (const struct sparc_fpregmap
*fpregmap
,
2191 struct regcache
*regcache
,
2192 int regnum
, const void *fpregs
)
2194 const gdb_byte
*regs
= (const gdb_byte
*) fpregs
;
2197 for (i
= 0; i
< 32; i
++)
2199 if (regnum
== (SPARC_F0_REGNUM
+ i
) || regnum
== -1)
2200 regcache_raw_supply (regcache
, SPARC_F0_REGNUM
+ i
,
2201 regs
+ fpregmap
->r_f0_offset
+ (i
* 4));
2204 if (regnum
== SPARC32_FSR_REGNUM
|| regnum
== -1)
2205 regcache_raw_supply (regcache
, SPARC32_FSR_REGNUM
,
2206 regs
+ fpregmap
->r_fsr_offset
);
2210 sparc32_collect_fpregset (const struct sparc_fpregmap
*fpregmap
,
2211 const struct regcache
*regcache
,
2212 int regnum
, void *fpregs
)
2214 gdb_byte
*regs
= (gdb_byte
*) fpregs
;
2217 for (i
= 0; i
< 32; i
++)
2219 if (regnum
== (SPARC_F0_REGNUM
+ i
) || regnum
== -1)
2220 regcache_raw_collect (regcache
, SPARC_F0_REGNUM
+ i
,
2221 regs
+ fpregmap
->r_f0_offset
+ (i
* 4));
2224 if (regnum
== SPARC32_FSR_REGNUM
|| regnum
== -1)
2225 regcache_raw_collect (regcache
, SPARC32_FSR_REGNUM
,
2226 regs
+ fpregmap
->r_fsr_offset
);
2232 /* From <machine/reg.h>. */
2233 const struct sparc_gregmap sparc32_sunos4_gregmap
=
2245 const struct sparc_fpregmap sparc32_sunos4_fpregmap
=
2251 const struct sparc_fpregmap sparc32_bsd_fpregmap
=
2258 _initialize_sparc_tdep (void)
2260 register_gdbarch_init (bfd_arch_sparc
, sparc32_gdbarch_init
);