1 /* Target-dependent code for UltraSPARC.
3 Copyright (C) 2003-2023 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"
22 #include "dwarf2/frame.h"
24 #include "frame-base.h"
25 #include "frame-unwind.h"
33 #include "target-descriptions.h"
36 #include "sparc64-tdep.h"
37 #include <forward_list>
39 /* This file implements the SPARC 64-bit ABI as defined by the
40 section "Low-Level System Information" of the SPARC Compliance
41 Definition (SCD) 2.4.1, which is the 64-bit System V psABI for
44 /* Please use the sparc32_-prefix for 32-bit specific code, the
45 sparc64_-prefix for 64-bit specific code and the sparc_-prefix for
46 code can handle both. */
48 /* The M7 processor supports an Application Data Integrity (ADI) feature
49 that detects invalid data accesses. When software allocates memory and
50 enables ADI on the allocated memory, it chooses a 4-bit version number,
51 sets the version in the upper 4 bits of the 64-bit pointer to that data,
52 and stores the 4-bit version in every cacheline of the object. Hardware
53 saves the latter in spare bits in the cache and memory hierarchy. On each
54 load and store, the processor compares the upper 4 VA (virtual address) bits
55 to the cacheline's version. If there is a mismatch, the processor generates
56 a version mismatch trap which can be either precise or disrupting.
57 The trap is an error condition which the kernel delivers to the process
60 The upper 4 bits of the VA represent a version and are not part of the
61 true address. The processor clears these bits and sign extends bit 59
62 to generate the true address.
64 Note that 32-bit applications cannot use ADI. */
68 #include "cli/cli-utils.h"
72 #define MAX_PROC_NAME_SIZE sizeof("/proc/99999/lwp/9999/adi/lstatus")
74 /* ELF Auxiliary vectors */
76 #define AT_ADI_BLKSZ 34
79 #define AT_ADI_NBITS 35
81 #ifndef AT_ADI_UEONADI
82 #define AT_ADI_UEONADI 36
85 /* ADI command list. */
86 static struct cmd_list_element
*sparc64adilist
= NULL
;
88 /* ADI stat settings. */
91 /* The ADI block size. */
92 unsigned long blksize
;
94 /* Number of bits used for an ADI version tag which can be
95 used together with the shift value for an ADI version tag
96 to encode or extract the ADI version value in a pointer. */
99 /* The maximum ADI version tag value supported. */
102 /* ADI version tag file. */
105 /* ADI availability check has been done. */
106 bool checked_avail
= false;
108 /* ADI is available. */
109 bool is_avail
= false;
113 /* Per-process ADI stat info. */
115 struct sparc64_adi_info
117 sparc64_adi_info (pid_t pid_
)
121 /* The process identifier. */
125 adi_stat_t stat
= {};
129 static std::forward_list
<sparc64_adi_info
> adi_proc_list
;
132 /* Get ADI info for process PID, creating one if it doesn't exist. */
134 static sparc64_adi_info
*
135 get_adi_info_proc (pid_t pid
)
137 auto found
= std::find_if (adi_proc_list
.begin (), adi_proc_list
.end (),
138 [&pid
] (const sparc64_adi_info
&info
)
140 return info
.pid
== pid
;
143 if (found
== adi_proc_list
.end ())
145 adi_proc_list
.emplace_front (pid
);
146 return &adi_proc_list
.front ();
155 get_adi_info (pid_t pid
)
157 sparc64_adi_info
*proc
;
159 proc
= get_adi_info_proc (pid
);
163 /* Is called when GDB is no longer debugging process PID. It
164 deletes data structure that keeps track of the ADI stat. */
167 sparc64_forget_process (pid_t pid
)
169 fileio_error target_errno
;
171 for (auto pit
= adi_proc_list
.before_begin (),
172 it
= std::next (pit
);
173 it
!= adi_proc_list
.end ();
176 if ((*it
).pid
== pid
)
178 if ((*it
).stat
.tag_fd
> 0)
179 target_fileio_close ((*it
).stat
.tag_fd
, &target_errno
);
180 adi_proc_list
.erase_after (pit
);
189 /* Read attributes of a maps entry in /proc/[pid]/adi/maps. */
192 read_maps_entry (const char *line
,
193 ULONGEST
*addr
, ULONGEST
*endaddr
)
195 const char *p
= line
;
197 *addr
= strtoulst (p
, &p
, 16);
201 *endaddr
= strtoulst (p
, &p
, 16);
204 /* Check if ADI is available. */
209 pid_t pid
= inferior_ptid
.pid ();
210 sparc64_adi_info
*proc
= get_adi_info_proc (pid
);
213 if (proc
->stat
.checked_avail
)
214 return proc
->stat
.is_avail
;
216 proc
->stat
.checked_avail
= true;
217 if (target_auxv_search (AT_ADI_BLKSZ
, &value
) <= 0)
219 proc
->stat
.blksize
= value
;
220 target_auxv_search (AT_ADI_NBITS
, &value
);
221 proc
->stat
.nbits
= value
;
222 proc
->stat
.max_version
= (1 << proc
->stat
.nbits
) - 2;
223 proc
->stat
.is_avail
= true;
225 return proc
->stat
.is_avail
;
228 /* Normalize a versioned address - a VA with ADI bits (63-60) set. */
231 adi_normalize_address (CORE_ADDR addr
)
233 adi_stat_t ast
= get_adi_info (inferior_ptid
.pid ());
237 /* Clear upper bits. */
238 addr
&= ((uint64_t) -1) >> ast
.nbits
;
241 CORE_ADDR signbit
= (uint64_t) 1 << (64 - ast
.nbits
- 1);
242 return (addr
^ signbit
) - signbit
;
247 /* Align a normalized address - a VA with bit 59 sign extended into
251 adi_align_address (CORE_ADDR naddr
)
253 adi_stat_t ast
= get_adi_info (inferior_ptid
.pid ());
255 return (naddr
- (naddr
% ast
.blksize
)) / ast
.blksize
;
258 /* Convert a byte count to count at a ratio of 1:adi_blksz. */
261 adi_convert_byte_count (CORE_ADDR naddr
, int nbytes
, CORE_ADDR locl
)
263 adi_stat_t ast
= get_adi_info (inferior_ptid
.pid ());
265 return ((naddr
+ nbytes
+ ast
.blksize
- 1) / ast
.blksize
) - locl
;
268 /* The /proc/[pid]/adi/tags file, which allows gdb to get/set ADI
269 version in a target process, maps linearly to the address space
270 of the target process at a ratio of 1:adi_blksz.
272 A read (or write) at offset K in the file returns (or modifies)
273 the ADI version tag stored in the cacheline containing address
274 K * adi_blksz, encoded as 1 version tag per byte. The allowed
275 version tag values are between 0 and adi_stat.max_version. */
280 pid_t pid
= inferior_ptid
.pid ();
281 sparc64_adi_info
*proc
= get_adi_info_proc (pid
);
283 if (proc
->stat
.tag_fd
!= 0)
284 return proc
->stat
.tag_fd
;
286 char cl_name
[MAX_PROC_NAME_SIZE
];
287 snprintf (cl_name
, sizeof(cl_name
), "/proc/%ld/adi/tags", (long) pid
);
288 fileio_error target_errno
;
289 proc
->stat
.tag_fd
= target_fileio_open (NULL
, cl_name
, O_RDWR
|O_EXCL
,
290 false, 0, &target_errno
);
291 return proc
->stat
.tag_fd
;
294 /* Check if an address set is ADI enabled, using /proc/[pid]/adi/maps
295 which was exported by the kernel and contains the currently ADI
296 mapped memory regions and their access permissions. */
299 adi_is_addr_mapped (CORE_ADDR vaddr
, size_t cnt
)
301 char filename
[MAX_PROC_NAME_SIZE
];
304 pid_t pid
= inferior_ptid
.pid ();
305 snprintf (filename
, sizeof filename
, "/proc/%ld/adi/maps", (long) pid
);
306 gdb::unique_xmalloc_ptr
<char> data
307 = target_fileio_read_stralloc (NULL
, filename
);
310 adi_stat_t adi_stat
= get_adi_info (pid
);
312 for (char *line
= strtok_r (data
.get (), "\n", &saveptr
);
314 line
= strtok_r (NULL
, "\n", &saveptr
))
316 ULONGEST addr
, endaddr
;
318 read_maps_entry (line
, &addr
, &endaddr
);
320 while (((vaddr
+ i
) * adi_stat
.blksize
) >= addr
321 && ((vaddr
+ i
) * adi_stat
.blksize
) < endaddr
)
329 warning (_("unable to open /proc file '%s'"), filename
);
334 /* Read ADI version tag value for memory locations starting at "VADDR"
335 for "SIZE" number of bytes. */
338 adi_read_versions (CORE_ADDR vaddr
, size_t size
, gdb_byte
*tags
)
340 int fd
= adi_tag_fd ();
344 if (!adi_is_addr_mapped (vaddr
, size
))
346 adi_stat_t ast
= get_adi_info (inferior_ptid
.pid ());
347 error(_("Address at %s is not in ADI maps"),
348 paddress (current_inferior ()->arch (), vaddr
* ast
.blksize
));
351 fileio_error target_errno
;
352 return target_fileio_pread (fd
, tags
, size
, vaddr
, &target_errno
);
355 /* Write ADI version tag for memory locations starting at "VADDR" for
356 "SIZE" number of bytes to "TAGS". */
359 adi_write_versions (CORE_ADDR vaddr
, size_t size
, unsigned char *tags
)
361 int fd
= adi_tag_fd ();
365 if (!adi_is_addr_mapped (vaddr
, size
))
367 adi_stat_t ast
= get_adi_info (inferior_ptid
.pid ());
368 error(_("Address at %s is not in ADI maps"),
369 paddress (current_inferior ()->arch (), vaddr
* ast
.blksize
));
372 fileio_error target_errno
;
373 return target_fileio_pwrite (fd
, tags
, size
, vaddr
, &target_errno
);
376 /* Print ADI version tag value in "TAGS" for memory locations starting
377 at "VADDR" with number of "CNT". */
380 adi_print_versions (CORE_ADDR vaddr
, size_t cnt
, gdb_byte
*tags
)
383 const int maxelts
= 8; /* # of elements per line */
385 adi_stat_t adi_stat
= get_adi_info (inferior_ptid
.pid ());
391 paddress (current_inferior ()->arch (),
392 vaddr
* adi_stat
.blksize
));
393 for (int i
= maxelts
; i
> 0 && cnt
> 0; i
--, cnt
--)
395 if (tags
[v_idx
] == 0xff) /* no version tag */
398 gdb_printf ("%1X", tags
[v_idx
]);
409 do_examine (CORE_ADDR start
, int bcnt
)
411 CORE_ADDR vaddr
= adi_normalize_address (start
);
413 CORE_ADDR vstart
= adi_align_address (vaddr
);
414 int cnt
= adi_convert_byte_count (vaddr
, bcnt
, vstart
);
415 gdb::byte_vector
buf (cnt
);
416 int read_cnt
= adi_read_versions (vstart
, cnt
, buf
.data ());
418 error (_("No ADI information"));
419 else if (read_cnt
< cnt
)
420 error(_("No ADI information at %s"),
421 paddress (current_inferior ()->arch (), vaddr
));
423 adi_print_versions (vstart
, cnt
, buf
.data ());
427 do_assign (CORE_ADDR start
, size_t bcnt
, int version
)
429 CORE_ADDR vaddr
= adi_normalize_address (start
);
431 CORE_ADDR vstart
= adi_align_address (vaddr
);
432 int cnt
= adi_convert_byte_count (vaddr
, bcnt
, vstart
);
433 std::vector
<unsigned char> buf (cnt
, version
);
434 int set_cnt
= adi_write_versions (vstart
, cnt
, buf
.data ());
437 error (_("No ADI information"));
438 else if (set_cnt
< cnt
)
439 error(_("No ADI information at %s"),
440 paddress (current_inferior ()->arch (), vaddr
));
443 /* ADI examine version tag command.
447 adi (examine|x)[/COUNT] [ADDR] */
450 adi_examine_command (const char *args
, int from_tty
)
452 /* make sure program is active and adi is available */
453 if (!target_has_execution ())
454 error (_("ADI command requires a live process/thread"));
456 if (!adi_available ())
457 error (_("No ADI information"));
460 const char *p
= args
;
464 cnt
= get_number (&p
);
467 CORE_ADDR next_address
= 0;
468 if (p
!= 0 && *p
!= 0)
469 next_address
= parse_and_eval_address (p
);
470 if (!cnt
|| !next_address
)
471 error (_("Usage: adi examine|x[/COUNT] [ADDR]"));
473 do_examine (next_address
, cnt
);
476 /* ADI assign version tag command.
480 adi (assign|a)[/COUNT] ADDR = VERSION */
483 adi_assign_command (const char *args
, int from_tty
)
485 static const char *adi_usage
486 = N_("Usage: adi assign|a[/COUNT] ADDR = VERSION");
488 /* make sure program is active and adi is available */
489 if (!target_has_execution ())
490 error (_("ADI command requires a live process/thread"));
492 if (!adi_available ())
493 error (_("No ADI information"));
495 const char *exp
= args
;
497 error_no_arg (_(adi_usage
));
499 char *q
= (char *) strchr (exp
, '=');
503 error ("%s", _(adi_usage
));
506 const char *p
= args
;
507 if (exp
&& *exp
== '/')
510 cnt
= get_number (&p
);
513 CORE_ADDR next_address
= 0;
514 if (p
!= 0 && *p
!= 0)
515 next_address
= parse_and_eval_address (p
);
517 error ("%s", _(adi_usage
));
520 if (q
!= NULL
) /* parse version tag */
522 adi_stat_t ast
= get_adi_info (inferior_ptid
.pid ());
523 version
= parse_and_eval_long (q
);
524 if (version
< 0 || version
> ast
.max_version
)
525 error (_("Invalid ADI version tag %d"), version
);
528 do_assign (next_address
, cnt
, version
);
531 void _initialize_sparc64_adi_tdep ();
533 _initialize_sparc64_adi_tdep ()
535 add_basic_prefix_cmd ("adi", class_support
,
536 _("ADI version related commands."),
537 &sparc64adilist
, 0, &cmdlist
);
538 cmd_list_element
*adi_examine_cmd
539 = add_cmd ("examine", class_support
, adi_examine_command
,
540 _("Examine ADI versions."), &sparc64adilist
);
541 add_alias_cmd ("x", adi_examine_cmd
, no_class
, 1, &sparc64adilist
);
542 add_cmd ("assign", class_support
, adi_assign_command
,
543 _("Assign ADI versions."), &sparc64adilist
);
548 /* The functions on this page are intended to be used to classify
549 function arguments. */
551 /* Check whether TYPE is "Integral or Pointer". */
554 sparc64_integral_or_pointer_p (const struct type
*type
)
556 switch (type
->code ())
562 case TYPE_CODE_RANGE
:
564 int len
= type
->length ();
565 gdb_assert (len
== 1 || len
== 2 || len
== 4 || len
== 8);
570 case TYPE_CODE_RVALUE_REF
:
572 int len
= type
->length ();
573 gdb_assert (len
== 8);
583 /* Check whether TYPE is "Floating". */
586 sparc64_floating_p (const struct type
*type
)
588 switch (type
->code ())
592 int len
= type
->length ();
593 gdb_assert (len
== 4 || len
== 8 || len
== 16);
603 /* Check whether TYPE is "Complex Floating". */
606 sparc64_complex_floating_p (const struct type
*type
)
608 switch (type
->code ())
610 case TYPE_CODE_COMPLEX
:
612 int len
= type
->length ();
613 gdb_assert (len
== 8 || len
== 16 || len
== 32);
623 /* Check whether TYPE is "Structure or Union".
625 In terms of Ada subprogram calls, arrays are treated the same as
626 struct and union types. So this function also returns non-zero
630 sparc64_structure_or_union_p (const struct type
*type
)
632 switch (type
->code ())
634 case TYPE_CODE_STRUCT
:
635 case TYPE_CODE_UNION
:
636 case TYPE_CODE_ARRAY
:
646 /* Construct types for ISA-specific registers. */
649 sparc64_pstate_type (struct gdbarch
*gdbarch
)
651 sparc_gdbarch_tdep
*tdep
= gdbarch_tdep
<sparc_gdbarch_tdep
> (gdbarch
);
653 if (!tdep
->sparc64_pstate_type
)
657 type
= arch_flags_type (gdbarch
, "builtin_type_sparc64_pstate", 64);
658 append_flags_type_flag (type
, 0, "AG");
659 append_flags_type_flag (type
, 1, "IE");
660 append_flags_type_flag (type
, 2, "PRIV");
661 append_flags_type_flag (type
, 3, "AM");
662 append_flags_type_flag (type
, 4, "PEF");
663 append_flags_type_flag (type
, 5, "RED");
664 append_flags_type_flag (type
, 8, "TLE");
665 append_flags_type_flag (type
, 9, "CLE");
666 append_flags_type_flag (type
, 10, "PID0");
667 append_flags_type_flag (type
, 11, "PID1");
669 tdep
->sparc64_pstate_type
= type
;
672 return tdep
->sparc64_pstate_type
;
676 sparc64_ccr_type (struct gdbarch
*gdbarch
)
678 sparc_gdbarch_tdep
*tdep
= gdbarch_tdep
<sparc_gdbarch_tdep
> (gdbarch
);
680 if (tdep
->sparc64_ccr_type
== NULL
)
684 type
= arch_flags_type (gdbarch
, "builtin_type_sparc64_ccr", 64);
685 append_flags_type_flag (type
, 0, "icc.c");
686 append_flags_type_flag (type
, 1, "icc.v");
687 append_flags_type_flag (type
, 2, "icc.z");
688 append_flags_type_flag (type
, 3, "icc.n");
689 append_flags_type_flag (type
, 4, "xcc.c");
690 append_flags_type_flag (type
, 5, "xcc.v");
691 append_flags_type_flag (type
, 6, "xcc.z");
692 append_flags_type_flag (type
, 7, "xcc.n");
694 tdep
->sparc64_ccr_type
= type
;
697 return tdep
->sparc64_ccr_type
;
701 sparc64_fsr_type (struct gdbarch
*gdbarch
)
703 sparc_gdbarch_tdep
*tdep
= gdbarch_tdep
<sparc_gdbarch_tdep
> (gdbarch
);
705 if (!tdep
->sparc64_fsr_type
)
709 type
= arch_flags_type (gdbarch
, "builtin_type_sparc64_fsr", 64);
710 append_flags_type_flag (type
, 0, "NXC");
711 append_flags_type_flag (type
, 1, "DZC");
712 append_flags_type_flag (type
, 2, "UFC");
713 append_flags_type_flag (type
, 3, "OFC");
714 append_flags_type_flag (type
, 4, "NVC");
715 append_flags_type_flag (type
, 5, "NXA");
716 append_flags_type_flag (type
, 6, "DZA");
717 append_flags_type_flag (type
, 7, "UFA");
718 append_flags_type_flag (type
, 8, "OFA");
719 append_flags_type_flag (type
, 9, "NVA");
720 append_flags_type_flag (type
, 22, "NS");
721 append_flags_type_flag (type
, 23, "NXM");
722 append_flags_type_flag (type
, 24, "DZM");
723 append_flags_type_flag (type
, 25, "UFM");
724 append_flags_type_flag (type
, 26, "OFM");
725 append_flags_type_flag (type
, 27, "NVM");
727 tdep
->sparc64_fsr_type
= type
;
730 return tdep
->sparc64_fsr_type
;
734 sparc64_fprs_type (struct gdbarch
*gdbarch
)
736 sparc_gdbarch_tdep
*tdep
= gdbarch_tdep
<sparc_gdbarch_tdep
> (gdbarch
);
738 if (!tdep
->sparc64_fprs_type
)
742 type
= arch_flags_type (gdbarch
, "builtin_type_sparc64_fprs", 64);
743 append_flags_type_flag (type
, 0, "DL");
744 append_flags_type_flag (type
, 1, "DU");
745 append_flags_type_flag (type
, 2, "FEF");
747 tdep
->sparc64_fprs_type
= type
;
750 return tdep
->sparc64_fprs_type
;
754 /* Register information. */
755 #define SPARC64_FPU_REGISTERS \
756 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
757 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
758 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
759 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
760 "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \
761 "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62"
762 #define SPARC64_CP0_REGISTERS \
764 /* FIXME: Give "state" a name until we start using register groups. */ \
770 static const char * const sparc64_fpu_register_names
[] = {
771 SPARC64_FPU_REGISTERS
773 static const char * const sparc64_cp0_register_names
[] = {
774 SPARC64_CP0_REGISTERS
777 static const char * const sparc64_register_names
[] =
779 SPARC_CORE_REGISTERS
,
780 SPARC64_FPU_REGISTERS
,
781 SPARC64_CP0_REGISTERS
784 /* Total number of registers. */
785 #define SPARC64_NUM_REGS ARRAY_SIZE (sparc64_register_names)
787 /* We provide the aliases %d0..%d62 and %q0..%q60 for the floating
788 registers as "psuedo" registers. */
790 static const char * const sparc64_pseudo_register_names
[] =
792 "cwp", "pstate", "asi", "ccr",
794 "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
795 "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30",
796 "d32", "d34", "d36", "d38", "d40", "d42", "d44", "d46",
797 "d48", "d50", "d52", "d54", "d56", "d58", "d60", "d62",
799 "q0", "q4", "q8", "q12", "q16", "q20", "q24", "q28",
800 "q32", "q36", "q40", "q44", "q48", "q52", "q56", "q60",
803 /* Total number of pseudo registers. */
804 #define SPARC64_NUM_PSEUDO_REGS ARRAY_SIZE (sparc64_pseudo_register_names)
806 /* Return the name of pseudo register REGNUM. */
809 sparc64_pseudo_register_name (struct gdbarch
*gdbarch
, int regnum
)
811 regnum
-= gdbarch_num_regs (gdbarch
);
813 gdb_assert (regnum
< SPARC64_NUM_PSEUDO_REGS
);
814 return sparc64_pseudo_register_names
[regnum
];
817 /* Return the name of register REGNUM. */
820 sparc64_register_name (struct gdbarch
*gdbarch
, int regnum
)
822 if (tdesc_has_registers (gdbarch_target_desc (gdbarch
)))
823 return tdesc_register_name (gdbarch
, regnum
);
825 if (regnum
>= 0 && regnum
< gdbarch_num_regs (gdbarch
))
826 return sparc64_register_names
[regnum
];
828 return sparc64_pseudo_register_name (gdbarch
, regnum
);
831 /* Return the GDB type object for the "standard" data type of data in
832 pseudo register REGNUM. */
835 sparc64_pseudo_register_type (struct gdbarch
*gdbarch
, int regnum
)
837 regnum
-= gdbarch_num_regs (gdbarch
);
839 if (regnum
== SPARC64_CWP_REGNUM
)
840 return builtin_type (gdbarch
)->builtin_int64
;
841 if (regnum
== SPARC64_PSTATE_REGNUM
)
842 return sparc64_pstate_type (gdbarch
);
843 if (regnum
== SPARC64_ASI_REGNUM
)
844 return builtin_type (gdbarch
)->builtin_int64
;
845 if (regnum
== SPARC64_CCR_REGNUM
)
846 return sparc64_ccr_type (gdbarch
);
847 if (regnum
>= SPARC64_D0_REGNUM
&& regnum
<= SPARC64_D62_REGNUM
)
848 return builtin_type (gdbarch
)->builtin_double
;
849 if (regnum
>= SPARC64_Q0_REGNUM
&& regnum
<= SPARC64_Q60_REGNUM
)
850 return builtin_type (gdbarch
)->builtin_long_double
;
852 internal_error (_("sparc64_pseudo_register_type: bad register number %d"),
856 /* Return the GDB type object for the "standard" data type of data in
860 sparc64_register_type (struct gdbarch
*gdbarch
, int regnum
)
862 if (tdesc_has_registers (gdbarch_target_desc (gdbarch
)))
863 return tdesc_register_type (gdbarch
, regnum
);
866 if (regnum
== SPARC_SP_REGNUM
|| regnum
== SPARC_FP_REGNUM
)
867 return builtin_type (gdbarch
)->builtin_data_ptr
;
868 if (regnum
>= SPARC_G0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
)
869 return builtin_type (gdbarch
)->builtin_int64
;
870 if (regnum
>= SPARC_F0_REGNUM
&& regnum
<= SPARC_F31_REGNUM
)
871 return builtin_type (gdbarch
)->builtin_float
;
872 if (regnum
>= SPARC64_F32_REGNUM
&& regnum
<= SPARC64_F62_REGNUM
)
873 return builtin_type (gdbarch
)->builtin_double
;
874 if (regnum
== SPARC64_PC_REGNUM
|| regnum
== SPARC64_NPC_REGNUM
)
875 return builtin_type (gdbarch
)->builtin_func_ptr
;
876 /* This raw register contains the contents of %cwp, %pstate, %asi
877 and %ccr as laid out in a %tstate register. */
878 if (regnum
== SPARC64_STATE_REGNUM
)
879 return builtin_type (gdbarch
)->builtin_int64
;
880 if (regnum
== SPARC64_FSR_REGNUM
)
881 return sparc64_fsr_type (gdbarch
);
882 if (regnum
== SPARC64_FPRS_REGNUM
)
883 return sparc64_fprs_type (gdbarch
);
884 /* "Although Y is a 64-bit register, its high-order 32 bits are
885 reserved and always read as 0." */
886 if (regnum
== SPARC64_Y_REGNUM
)
887 return builtin_type (gdbarch
)->builtin_int64
;
889 /* Pseudo registers. */
890 if (regnum
>= gdbarch_num_regs (gdbarch
))
891 return sparc64_pseudo_register_type (gdbarch
, regnum
);
893 internal_error (_("invalid regnum"));
896 static enum register_status
897 sparc64_pseudo_register_read (struct gdbarch
*gdbarch
,
898 readable_regcache
*regcache
,
899 int regnum
, gdb_byte
*buf
)
901 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
902 enum register_status status
;
904 regnum
-= gdbarch_num_regs (gdbarch
);
906 if (regnum
>= SPARC64_D0_REGNUM
&& regnum
<= SPARC64_D30_REGNUM
)
908 regnum
= SPARC_F0_REGNUM
+ 2 * (regnum
- SPARC64_D0_REGNUM
);
909 status
= regcache
->raw_read (regnum
, buf
);
910 if (status
== REG_VALID
)
911 status
= regcache
->raw_read (regnum
+ 1, buf
+ 4);
914 else if (regnum
>= SPARC64_D32_REGNUM
&& regnum
<= SPARC64_D62_REGNUM
)
916 regnum
= SPARC64_F32_REGNUM
+ (regnum
- SPARC64_D32_REGNUM
);
917 return regcache
->raw_read (regnum
, buf
);
919 else if (regnum
>= SPARC64_Q0_REGNUM
&& regnum
<= SPARC64_Q28_REGNUM
)
921 regnum
= SPARC_F0_REGNUM
+ 4 * (regnum
- SPARC64_Q0_REGNUM
);
923 status
= regcache
->raw_read (regnum
, buf
);
924 if (status
== REG_VALID
)
925 status
= regcache
->raw_read (regnum
+ 1, buf
+ 4);
926 if (status
== REG_VALID
)
927 status
= regcache
->raw_read (regnum
+ 2, buf
+ 8);
928 if (status
== REG_VALID
)
929 status
= regcache
->raw_read (regnum
+ 3, buf
+ 12);
933 else if (regnum
>= SPARC64_Q32_REGNUM
&& regnum
<= SPARC64_Q60_REGNUM
)
935 regnum
= SPARC64_F32_REGNUM
+ 2 * (regnum
- SPARC64_Q32_REGNUM
);
937 status
= regcache
->raw_read (regnum
, buf
);
938 if (status
== REG_VALID
)
939 status
= regcache
->raw_read (regnum
+ 1, buf
+ 8);
943 else if (regnum
== SPARC64_CWP_REGNUM
944 || regnum
== SPARC64_PSTATE_REGNUM
945 || regnum
== SPARC64_ASI_REGNUM
946 || regnum
== SPARC64_CCR_REGNUM
)
950 status
= regcache
->raw_read (SPARC64_STATE_REGNUM
, &state
);
951 if (status
!= REG_VALID
)
956 case SPARC64_CWP_REGNUM
:
957 state
= (state
>> 0) & ((1 << 5) - 1);
959 case SPARC64_PSTATE_REGNUM
:
960 state
= (state
>> 8) & ((1 << 12) - 1);
962 case SPARC64_ASI_REGNUM
:
963 state
= (state
>> 24) & ((1 << 8) - 1);
965 case SPARC64_CCR_REGNUM
:
966 state
= (state
>> 32) & ((1 << 8) - 1);
969 store_unsigned_integer (buf
, 8, byte_order
, state
);
976 sparc64_pseudo_register_write (struct gdbarch
*gdbarch
,
977 struct regcache
*regcache
,
978 int regnum
, const gdb_byte
*buf
)
980 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
982 regnum
-= gdbarch_num_regs (gdbarch
);
984 if (regnum
>= SPARC64_D0_REGNUM
&& regnum
<= SPARC64_D30_REGNUM
)
986 regnum
= SPARC_F0_REGNUM
+ 2 * (regnum
- SPARC64_D0_REGNUM
);
987 regcache
->raw_write (regnum
, buf
);
988 regcache
->raw_write (regnum
+ 1, buf
+ 4);
990 else if (regnum
>= SPARC64_D32_REGNUM
&& regnum
<= SPARC64_D62_REGNUM
)
992 regnum
= SPARC64_F32_REGNUM
+ (regnum
- SPARC64_D32_REGNUM
);
993 regcache
->raw_write (regnum
, buf
);
995 else if (regnum
>= SPARC64_Q0_REGNUM
&& regnum
<= SPARC64_Q28_REGNUM
)
997 regnum
= SPARC_F0_REGNUM
+ 4 * (regnum
- SPARC64_Q0_REGNUM
);
998 regcache
->raw_write (regnum
, buf
);
999 regcache
->raw_write (regnum
+ 1, buf
+ 4);
1000 regcache
->raw_write (regnum
+ 2, buf
+ 8);
1001 regcache
->raw_write (regnum
+ 3, buf
+ 12);
1003 else if (regnum
>= SPARC64_Q32_REGNUM
&& regnum
<= SPARC64_Q60_REGNUM
)
1005 regnum
= SPARC64_F32_REGNUM
+ 2 * (regnum
- SPARC64_Q32_REGNUM
);
1006 regcache
->raw_write (regnum
, buf
);
1007 regcache
->raw_write (regnum
+ 1, buf
+ 8);
1009 else if (regnum
== SPARC64_CWP_REGNUM
1010 || regnum
== SPARC64_PSTATE_REGNUM
1011 || regnum
== SPARC64_ASI_REGNUM
1012 || regnum
== SPARC64_CCR_REGNUM
)
1014 ULONGEST state
, bits
;
1016 regcache_raw_read_unsigned (regcache
, SPARC64_STATE_REGNUM
, &state
);
1017 bits
= extract_unsigned_integer (buf
, 8, byte_order
);
1020 case SPARC64_CWP_REGNUM
:
1021 state
|= ((bits
& ((1 << 5) - 1)) << 0);
1023 case SPARC64_PSTATE_REGNUM
:
1024 state
|= ((bits
& ((1 << 12) - 1)) << 8);
1026 case SPARC64_ASI_REGNUM
:
1027 state
|= ((bits
& ((1 << 8) - 1)) << 24);
1029 case SPARC64_CCR_REGNUM
:
1030 state
|= ((bits
& ((1 << 8) - 1)) << 32);
1033 regcache_raw_write_unsigned (regcache
, SPARC64_STATE_REGNUM
, state
);
1038 /* Return PC of first real instruction of the function starting at
1042 sparc64_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR start_pc
)
1044 struct symtab_and_line sal
;
1045 CORE_ADDR func_start
, func_end
;
1046 struct sparc_frame_cache cache
;
1048 /* This is the preferred method, find the end of the prologue by
1049 using the debugging information. */
1050 if (find_pc_partial_function (start_pc
, NULL
, &func_start
, &func_end
))
1052 sal
= find_pc_line (func_start
, 0);
1054 if (sal
.end
< func_end
1055 && start_pc
<= sal
.end
)
1059 return sparc_analyze_prologue (gdbarch
, start_pc
, 0xffffffffffffffffULL
,
1063 /* Normal frames. */
1065 static struct sparc_frame_cache
*
1066 sparc64_frame_cache (frame_info_ptr this_frame
, void **this_cache
)
1068 return sparc_frame_cache (this_frame
, this_cache
);
1072 sparc64_frame_this_id (frame_info_ptr this_frame
, void **this_cache
,
1073 struct frame_id
*this_id
)
1075 struct sparc_frame_cache
*cache
=
1076 sparc64_frame_cache (this_frame
, this_cache
);
1078 /* This marks the outermost frame. */
1079 if (cache
->base
== 0)
1082 (*this_id
) = frame_id_build (cache
->base
, cache
->pc
);
1085 static struct value
*
1086 sparc64_frame_prev_register (frame_info_ptr this_frame
, void **this_cache
,
1089 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1090 struct sparc_frame_cache
*cache
=
1091 sparc64_frame_cache (this_frame
, this_cache
);
1093 if (regnum
== SPARC64_PC_REGNUM
|| regnum
== SPARC64_NPC_REGNUM
)
1095 CORE_ADDR pc
= (regnum
== SPARC64_NPC_REGNUM
) ? 4 : 0;
1098 (cache
->copied_regs_mask
& 0x80) ? SPARC_I7_REGNUM
: SPARC_O7_REGNUM
;
1099 pc
+= get_frame_register_unsigned (this_frame
, regnum
) + 8;
1100 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
1103 /* Handle StackGhost. */
1105 ULONGEST wcookie
= sparc_fetch_wcookie (gdbarch
);
1107 if (wcookie
!= 0 && !cache
->frameless_p
&& regnum
== SPARC_I7_REGNUM
)
1109 CORE_ADDR addr
= cache
->base
+ (regnum
- SPARC_L0_REGNUM
) * 8;
1112 /* Read the value in from memory. */
1113 i7
= get_frame_memory_unsigned (this_frame
, addr
, 8);
1114 return frame_unwind_got_constant (this_frame
, regnum
, i7
^ wcookie
);
1118 /* The previous frame's `local' and `in' registers may have been saved
1119 in the register save area. */
1120 if (regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
1121 && (cache
->saved_regs_mask
& (1 << (regnum
- SPARC_L0_REGNUM
))))
1123 CORE_ADDR addr
= cache
->base
+ (regnum
- SPARC_L0_REGNUM
) * 8;
1125 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
1128 /* The previous frame's `out' registers may be accessible as the current
1129 frame's `in' registers. */
1130 if (regnum
>= SPARC_O0_REGNUM
&& regnum
<= SPARC_O7_REGNUM
1131 && (cache
->copied_regs_mask
& (1 << (regnum
- SPARC_O0_REGNUM
))))
1132 regnum
+= (SPARC_I0_REGNUM
- SPARC_O0_REGNUM
);
1134 return frame_unwind_got_register (this_frame
, regnum
, regnum
);
1137 static const struct frame_unwind sparc64_frame_unwind
=
1141 default_frame_unwind_stop_reason
,
1142 sparc64_frame_this_id
,
1143 sparc64_frame_prev_register
,
1145 default_frame_sniffer
1150 sparc64_frame_base_address (frame_info_ptr this_frame
, void **this_cache
)
1152 struct sparc_frame_cache
*cache
=
1153 sparc64_frame_cache (this_frame
, this_cache
);
1158 static const struct frame_base sparc64_frame_base
=
1160 &sparc64_frame_unwind
,
1161 sparc64_frame_base_address
,
1162 sparc64_frame_base_address
,
1163 sparc64_frame_base_address
1166 /* Check whether TYPE must be 16-byte aligned. */
1169 sparc64_16_byte_align_p (struct type
*type
)
1171 if (type
->code () == TYPE_CODE_ARRAY
)
1173 struct type
*t
= check_typedef (type
->target_type ());
1175 if (sparc64_floating_p (t
))
1178 if (sparc64_floating_p (type
) && type
->length () == 16)
1181 if (sparc64_structure_or_union_p (type
))
1185 for (i
= 0; i
< type
->num_fields (); i
++)
1187 struct type
*subtype
= check_typedef (type
->field (i
).type ());
1189 if (sparc64_16_byte_align_p (subtype
))
1197 /* Store floating fields of element ELEMENT of an "parameter array"
1198 that has type TYPE and is stored at BITPOS in VALBUF in the
1199 appropriate registers of REGCACHE. This function can be called
1200 recursively and therefore handles floating types in addition to
1204 sparc64_store_floating_fields (struct regcache
*regcache
, struct type
*type
,
1205 const gdb_byte
*valbuf
, int element
, int bitpos
)
1207 struct gdbarch
*gdbarch
= regcache
->arch ();
1208 int len
= type
->length ();
1210 gdb_assert (element
< 16);
1212 if (type
->code () == TYPE_CODE_ARRAY
)
1215 int regnum
= SPARC_F0_REGNUM
+ element
* 2 + bitpos
/ 32;
1217 valbuf
+= bitpos
/ 8;
1220 memset (buf
, 0, 8 - len
);
1221 memcpy (buf
+ 8 - len
, valbuf
, len
);
1225 for (int n
= 0; n
< (len
+ 3) / 4; n
++)
1226 regcache
->cooked_write (regnum
+ n
, valbuf
+ n
* 4);
1228 else if (sparc64_floating_p (type
)
1229 || (sparc64_complex_floating_p (type
) && len
<= 16))
1235 gdb_assert (bitpos
== 0);
1236 gdb_assert ((element
% 2) == 0);
1238 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_Q0_REGNUM
+ element
/ 2;
1239 regcache
->cooked_write (regnum
, valbuf
);
1243 gdb_assert (bitpos
== 0 || bitpos
== 64);
1245 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_D0_REGNUM
1246 + element
+ bitpos
/ 64;
1247 regcache
->cooked_write (regnum
, valbuf
+ (bitpos
/ 8));
1251 gdb_assert (len
== 4);
1252 gdb_assert (bitpos
% 32 == 0 && bitpos
>= 0 && bitpos
< 128);
1254 regnum
= SPARC_F0_REGNUM
+ element
* 2 + bitpos
/ 32;
1255 regcache
->cooked_write (regnum
, valbuf
+ (bitpos
/ 8));
1258 else if (sparc64_structure_or_union_p (type
))
1262 for (i
= 0; i
< type
->num_fields (); i
++)
1264 struct type
*subtype
= check_typedef (type
->field (i
).type ());
1265 int subpos
= bitpos
+ type
->field (i
).loc_bitpos ();
1267 sparc64_store_floating_fields (regcache
, subtype
, valbuf
,
1271 /* GCC has an interesting bug. If TYPE is a structure that has
1272 a single `float' member, GCC doesn't treat it as a structure
1273 at all, but rather as an ordinary `float' argument. This
1274 argument will be stored in %f1, as required by the psABI.
1275 However, as a member of a structure the psABI requires it to
1276 be stored in %f0. This bug is present in GCC 3.3.2, but
1277 probably in older releases to. To appease GCC, if a
1278 structure has only a single `float' member, we store its
1279 value in %f1 too (we already have stored in %f0). */
1280 if (type
->num_fields () == 1)
1282 struct type
*subtype
= check_typedef (type
->field (0).type ());
1284 if (sparc64_floating_p (subtype
) && subtype
->length () == 4)
1285 regcache
->cooked_write (SPARC_F1_REGNUM
, valbuf
);
1290 /* Fetch floating fields from a variable of type TYPE from the
1291 appropriate registers for BITPOS in REGCACHE and store it at BITPOS
1292 in VALBUF. This function can be called recursively and therefore
1293 handles floating types in addition to structures. */
1296 sparc64_extract_floating_fields (struct regcache
*regcache
, struct type
*type
,
1297 gdb_byte
*valbuf
, int bitpos
)
1299 struct gdbarch
*gdbarch
= regcache
->arch ();
1301 if (type
->code () == TYPE_CODE_ARRAY
)
1303 int len
= type
->length ();
1304 int regnum
= SPARC_F0_REGNUM
+ bitpos
/ 32;
1306 valbuf
+= bitpos
/ 8;
1310 regcache
->cooked_read (regnum
, buf
);
1311 memcpy (valbuf
, buf
+ 4 - len
, len
);
1314 for (int i
= 0; i
< (len
+ 3) / 4; i
++)
1315 regcache
->cooked_read (regnum
+ i
, valbuf
+ i
* 4);
1317 else if (sparc64_floating_p (type
))
1319 int len
= type
->length ();
1324 gdb_assert (bitpos
== 0 || bitpos
== 128);
1326 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_Q0_REGNUM
1328 regcache
->cooked_read (regnum
, valbuf
+ (bitpos
/ 8));
1332 gdb_assert (bitpos
% 64 == 0 && bitpos
>= 0 && bitpos
< 256);
1334 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_D0_REGNUM
+ bitpos
/ 64;
1335 regcache
->cooked_read (regnum
, valbuf
+ (bitpos
/ 8));
1339 gdb_assert (len
== 4);
1340 gdb_assert (bitpos
% 32 == 0 && bitpos
>= 0 && bitpos
< 256);
1342 regnum
= SPARC_F0_REGNUM
+ bitpos
/ 32;
1343 regcache
->cooked_read (regnum
, valbuf
+ (bitpos
/ 8));
1346 else if (sparc64_structure_or_union_p (type
))
1350 for (i
= 0; i
< type
->num_fields (); i
++)
1352 struct type
*subtype
= check_typedef (type
->field (i
).type ());
1353 int subpos
= bitpos
+ type
->field (i
).loc_bitpos ();
1355 sparc64_extract_floating_fields (regcache
, subtype
, valbuf
, subpos
);
1360 /* Store the NARGS arguments ARGS and STRUCT_ADDR (if STRUCT_RETURN is
1361 non-zero) in REGCACHE and on the stack (starting from address SP). */
1364 sparc64_store_arguments (struct regcache
*regcache
, int nargs
,
1365 struct value
**args
, CORE_ADDR sp
,
1366 function_call_return_method return_method
,
1367 CORE_ADDR struct_addr
)
1369 struct gdbarch
*gdbarch
= regcache
->arch ();
1370 /* Number of extended words in the "parameter array". */
1371 int num_elements
= 0;
1375 /* Take BIAS into account. */
1378 /* First we calculate the number of extended words in the "parameter
1379 array". While doing so we also convert some of the arguments. */
1381 if (return_method
== return_method_struct
)
1384 for (i
= 0; i
< nargs
; i
++)
1386 struct type
*type
= args
[i
]->type ();
1387 int len
= type
->length ();
1389 if (sparc64_structure_or_union_p (type
)
1390 || (sparc64_complex_floating_p (type
) && len
== 32))
1392 /* Structure or Union arguments. */
1395 if (num_elements
% 2 && sparc64_16_byte_align_p (type
))
1397 num_elements
+= ((len
+ 7) / 8);
1401 /* The psABI says that "Structures or unions larger than
1402 sixteen bytes are copied by the caller and passed
1403 indirectly; the caller will pass the address of a
1404 correctly aligned structure value. This sixty-four
1405 bit address will occupy one word in the parameter
1406 array, and may be promoted to an %o register like any
1407 other pointer value." Allocate memory for these
1408 values on the stack. */
1411 /* Use 16-byte alignment for these values. That's
1412 always correct, and wasting a few bytes shouldn't be
1416 write_memory (sp
, args
[i
]->contents ().data (), len
);
1417 args
[i
] = value_from_pointer (lookup_pointer_type (type
), sp
);
1421 else if (sparc64_floating_p (type
) || sparc64_complex_floating_p (type
))
1423 /* Floating arguments. */
1426 /* The psABI says that "Each quad-precision parameter
1427 value will be assigned to two extended words in the
1431 /* The psABI says that "Long doubles must be
1432 quad-aligned, and thus a hole might be introduced
1433 into the parameter array to force alignment." Skip
1434 an element if necessary. */
1435 if ((num_elements
% 2) && sparc64_16_byte_align_p (type
))
1443 /* Integral and pointer arguments. */
1444 gdb_assert (sparc64_integral_or_pointer_p (type
));
1446 /* The psABI says that "Each argument value of integral type
1447 smaller than an extended word will be widened by the
1448 caller to an extended word according to the signed-ness
1449 of the argument type." */
1451 args
[i
] = value_cast (builtin_type (gdbarch
)->builtin_int64
,
1457 /* Allocate the "parameter array". */
1458 sp
-= num_elements
* 8;
1460 /* The psABI says that "Every stack frame must be 16-byte aligned." */
1463 /* Now we store the arguments in to the "parameter array". Some
1464 Integer or Pointer arguments and Structure or Union arguments
1465 will be passed in %o registers. Some Floating arguments and
1466 floating members of structures are passed in floating-point
1467 registers. However, for functions with variable arguments,
1468 floating arguments are stored in an %0 register, and for
1469 functions without a prototype floating arguments are stored in
1470 both a floating-point and an %o registers, or a floating-point
1471 register and memory. To simplify the logic here we always pass
1472 arguments in memory, an %o register, and a floating-point
1473 register if appropriate. This should be no problem since the
1474 contents of any unused memory or registers in the "parameter
1475 array" are undefined. */
1477 if (return_method
== return_method_struct
)
1479 regcache_cooked_write_unsigned (regcache
, SPARC_O0_REGNUM
, struct_addr
);
1483 for (i
= 0; i
< nargs
; i
++)
1485 const gdb_byte
*valbuf
= args
[i
]->contents ().data ();
1486 struct type
*type
= args
[i
]->type ();
1487 int len
= type
->length ();
1491 if (sparc64_structure_or_union_p (type
)
1492 || (sparc64_complex_floating_p (type
) && len
== 32))
1494 /* Structure, Union or long double Complex arguments. */
1495 gdb_assert (len
<= 16);
1496 memset (buf
, 0, sizeof (buf
));
1497 memcpy (buf
, valbuf
, len
);
1500 if (element
% 2 && sparc64_16_byte_align_p (type
))
1505 regnum
= SPARC_O0_REGNUM
+ element
;
1506 if (len
> 8 && element
< 5)
1507 regcache
->cooked_write (regnum
+ 1, valbuf
+ 8);
1511 sparc64_store_floating_fields (regcache
, type
, valbuf
, element
, 0);
1513 else if (sparc64_complex_floating_p (type
))
1515 /* Float Complex or double Complex arguments. */
1518 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_D0_REGNUM
+ element
;
1522 if (regnum
< gdbarch_num_regs (gdbarch
) + SPARC64_D30_REGNUM
)
1523 regcache
->cooked_write (regnum
+ 1, valbuf
+ 8);
1524 if (regnum
< gdbarch_num_regs (gdbarch
) + SPARC64_D10_REGNUM
)
1525 regcache
->cooked_write (SPARC_O0_REGNUM
+ element
+ 1,
1530 else if (sparc64_floating_p (type
))
1532 /* Floating arguments. */
1538 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_Q0_REGNUM
1544 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_D0_REGNUM
1549 /* The psABI says "Each single-precision parameter value
1550 will be assigned to one extended word in the
1551 parameter array, and right-justified within that
1552 word; the left half (even float register) is
1553 undefined." Even though the psABI says that "the
1554 left half is undefined", set it to zero here. */
1556 memcpy (buf
+ 4, valbuf
, 4);
1560 regnum
= gdbarch_num_regs (gdbarch
) + SPARC64_D0_REGNUM
1566 /* Integral and pointer arguments. */
1567 gdb_assert (len
== 8);
1569 regnum
= SPARC_O0_REGNUM
+ element
;
1574 regcache
->cooked_write (regnum
, valbuf
);
1576 /* If we're storing the value in a floating-point register,
1577 also store it in the corresponding %0 register(s). */
1578 if (regnum
>= gdbarch_num_regs (gdbarch
))
1580 regnum
-= gdbarch_num_regs (gdbarch
);
1582 if (regnum
>= SPARC64_D0_REGNUM
&& regnum
<= SPARC64_D10_REGNUM
)
1584 gdb_assert (element
< 6);
1585 regnum
= SPARC_O0_REGNUM
+ element
;
1586 regcache
->cooked_write (regnum
, valbuf
);
1588 else if (regnum
>= SPARC64_Q0_REGNUM
&& regnum
<= SPARC64_Q8_REGNUM
)
1590 gdb_assert (element
< 5);
1591 regnum
= SPARC_O0_REGNUM
+ element
;
1592 regcache
->cooked_write (regnum
, valbuf
);
1593 regcache
->cooked_write (regnum
+ 1, valbuf
+ 8);
1598 /* Always store the argument in memory. */
1599 write_memory (sp
+ element
* 8, valbuf
, len
);
1600 element
+= ((len
+ 7) / 8);
1603 gdb_assert (element
== num_elements
);
1605 /* Take BIAS into account. */
1611 sparc64_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR address
)
1613 /* The ABI requires 16-byte alignment. */
1614 return address
& ~0xf;
1618 sparc64_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
1619 struct regcache
*regcache
, CORE_ADDR bp_addr
,
1620 int nargs
, struct value
**args
, CORE_ADDR sp
,
1621 function_call_return_method return_method
,
1622 CORE_ADDR struct_addr
)
1624 /* Set return address. */
1625 regcache_cooked_write_unsigned (regcache
, SPARC_O7_REGNUM
, bp_addr
- 8);
1627 /* Set up function arguments. */
1628 sp
= sparc64_store_arguments (regcache
, nargs
, args
, sp
, return_method
,
1631 /* Allocate the register save area. */
1634 /* Stack should be 16-byte aligned at this point. */
1635 gdb_assert ((sp
+ BIAS
) % 16 == 0);
1637 /* Finally, update the stack pointer. */
1638 regcache_cooked_write_unsigned (regcache
, SPARC_SP_REGNUM
, sp
);
1644 /* Extract from an array REGBUF containing the (raw) register state, a
1645 function return value of TYPE, and copy that into VALBUF. */
1648 sparc64_extract_return_value (struct type
*type
, struct regcache
*regcache
,
1651 int len
= type
->length ();
1655 if (sparc64_structure_or_union_p (type
))
1657 /* Structure or Union return values. */
1658 gdb_assert (len
<= 32);
1660 for (i
= 0; i
< ((len
+ 7) / 8); i
++)
1661 regcache
->cooked_read (SPARC_O0_REGNUM
+ i
, buf
+ i
* 8);
1662 if (type
->code () != TYPE_CODE_UNION
)
1663 sparc64_extract_floating_fields (regcache
, type
, buf
, 0);
1664 memcpy (valbuf
, buf
, len
);
1666 else if (sparc64_floating_p (type
) || sparc64_complex_floating_p (type
))
1668 /* Floating return values. */
1669 for (i
= 0; i
< len
/ 4; i
++)
1670 regcache
->cooked_read (SPARC_F0_REGNUM
+ i
, buf
+ i
* 4);
1671 memcpy (valbuf
, buf
, len
);
1673 else if (type
->code () == TYPE_CODE_ARRAY
)
1675 /* Small arrays are returned the same way as small structures. */
1676 gdb_assert (len
<= 32);
1678 for (i
= 0; i
< ((len
+ 7) / 8); i
++)
1679 regcache
->cooked_read (SPARC_O0_REGNUM
+ i
, buf
+ i
* 8);
1680 memcpy (valbuf
, buf
, len
);
1684 /* Integral and pointer return values. */
1685 gdb_assert (sparc64_integral_or_pointer_p (type
));
1687 /* Just stripping off any unused bytes should preserve the
1688 signed-ness just fine. */
1689 regcache
->cooked_read (SPARC_O0_REGNUM
, buf
);
1690 memcpy (valbuf
, buf
+ 8 - len
, len
);
1694 /* Write into the appropriate registers a function return value stored
1695 in VALBUF of type TYPE. */
1698 sparc64_store_return_value (struct type
*type
, struct regcache
*regcache
,
1699 const gdb_byte
*valbuf
)
1701 int len
= type
->length ();
1705 if (sparc64_structure_or_union_p (type
))
1707 /* Structure or Union return values. */
1708 gdb_assert (len
<= 32);
1710 /* Simplify matters by storing the complete value (including
1711 floating members) into %o0 and %o1. Floating members are
1712 also store in the appropriate floating-point registers. */
1713 memset (buf
, 0, sizeof (buf
));
1714 memcpy (buf
, valbuf
, len
);
1715 for (i
= 0; i
< ((len
+ 7) / 8); i
++)
1716 regcache
->cooked_write (SPARC_O0_REGNUM
+ i
, buf
+ i
* 8);
1717 if (type
->code () != TYPE_CODE_UNION
)
1718 sparc64_store_floating_fields (regcache
, type
, buf
, 0, 0);
1720 else if (sparc64_floating_p (type
) || sparc64_complex_floating_p (type
))
1722 /* Floating return values. */
1723 memcpy (buf
, valbuf
, len
);
1724 for (i
= 0; i
< len
/ 4; i
++)
1725 regcache
->cooked_write (SPARC_F0_REGNUM
+ i
, buf
+ i
* 4);
1727 else if (type
->code () == TYPE_CODE_ARRAY
)
1729 /* Small arrays are returned the same way as small structures. */
1730 gdb_assert (len
<= 32);
1732 memset (buf
, 0, sizeof (buf
));
1733 memcpy (buf
, valbuf
, len
);
1734 for (i
= 0; i
< ((len
+ 7) / 8); i
++)
1735 regcache
->cooked_write (SPARC_O0_REGNUM
+ i
, buf
+ i
* 8);
1739 /* Integral and pointer return values. */
1740 gdb_assert (sparc64_integral_or_pointer_p (type
));
1742 /* ??? Do we need to do any sign-extension here? */
1744 memcpy (buf
+ 8 - len
, valbuf
, len
);
1745 regcache
->cooked_write (SPARC_O0_REGNUM
, buf
);
1749 static enum return_value_convention
1750 sparc64_return_value (struct gdbarch
*gdbarch
, struct value
*function
,
1751 struct type
*type
, struct regcache
*regcache
,
1752 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
1754 if (type
->length () > 32)
1755 return RETURN_VALUE_STRUCT_CONVENTION
;
1758 sparc64_extract_return_value (type
, regcache
, readbuf
);
1760 sparc64_store_return_value (type
, regcache
, writebuf
);
1762 return RETURN_VALUE_REGISTER_CONVENTION
;
1767 sparc64_dwarf2_frame_init_reg (struct gdbarch
*gdbarch
, int regnum
,
1768 struct dwarf2_frame_state_reg
*reg
,
1769 frame_info_ptr this_frame
)
1773 case SPARC_G0_REGNUM
:
1774 /* Since %g0 is always zero, there is no point in saving it, and
1775 people will be inclined omit it from the CFI. Make sure we
1776 don't warn about that. */
1777 reg
->how
= DWARF2_FRAME_REG_SAME_VALUE
;
1779 case SPARC_SP_REGNUM
:
1780 reg
->how
= DWARF2_FRAME_REG_CFA
;
1782 case SPARC64_PC_REGNUM
:
1783 reg
->how
= DWARF2_FRAME_REG_RA_OFFSET
;
1784 reg
->loc
.offset
= 8;
1786 case SPARC64_NPC_REGNUM
:
1787 reg
->how
= DWARF2_FRAME_REG_RA_OFFSET
;
1788 reg
->loc
.offset
= 12;
1793 /* sparc64_addr_bits_remove - remove useless address bits */
1796 sparc64_addr_bits_remove (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
1798 return adi_normalize_address (addr
);
1802 sparc64_init_abi (struct gdbarch_info info
, struct gdbarch
*gdbarch
)
1804 sparc_gdbarch_tdep
*tdep
= gdbarch_tdep
<sparc_gdbarch_tdep
> (gdbarch
);
1806 tdep
->pc_regnum
= SPARC64_PC_REGNUM
;
1807 tdep
->npc_regnum
= SPARC64_NPC_REGNUM
;
1808 tdep
->fpu_register_names
= sparc64_fpu_register_names
;
1809 tdep
->fpu_registers_num
= ARRAY_SIZE (sparc64_fpu_register_names
);
1810 tdep
->cp0_register_names
= sparc64_cp0_register_names
;
1811 tdep
->cp0_registers_num
= ARRAY_SIZE (sparc64_cp0_register_names
);
1813 /* This is what all the fuss is about. */
1814 set_gdbarch_long_bit (gdbarch
, 64);
1815 set_gdbarch_long_long_bit (gdbarch
, 64);
1816 set_gdbarch_ptr_bit (gdbarch
, 64);
1818 set_gdbarch_wchar_bit (gdbarch
, 16);
1819 set_gdbarch_wchar_signed (gdbarch
, 0);
1821 set_gdbarch_num_regs (gdbarch
, SPARC64_NUM_REGS
);
1822 set_gdbarch_register_name (gdbarch
, sparc64_register_name
);
1823 set_gdbarch_register_type (gdbarch
, sparc64_register_type
);
1824 set_gdbarch_num_pseudo_regs (gdbarch
, SPARC64_NUM_PSEUDO_REGS
);
1825 set_tdesc_pseudo_register_name (gdbarch
, sparc64_pseudo_register_name
);
1826 set_tdesc_pseudo_register_type (gdbarch
, sparc64_pseudo_register_type
);
1827 set_gdbarch_pseudo_register_read (gdbarch
, sparc64_pseudo_register_read
);
1828 set_gdbarch_pseudo_register_write (gdbarch
, sparc64_pseudo_register_write
);
1830 /* Register numbers of various important registers. */
1831 set_gdbarch_pc_regnum (gdbarch
, SPARC64_PC_REGNUM
); /* %pc */
1833 /* Call dummy code. */
1834 set_gdbarch_frame_align (gdbarch
, sparc64_frame_align
);
1835 set_gdbarch_call_dummy_location (gdbarch
, AT_ENTRY_POINT
);
1836 set_gdbarch_push_dummy_code (gdbarch
, NULL
);
1837 set_gdbarch_push_dummy_call (gdbarch
, sparc64_push_dummy_call
);
1839 set_gdbarch_return_value (gdbarch
, sparc64_return_value
);
1840 set_gdbarch_return_value_as_value (gdbarch
, default_gdbarch_return_value
);
1841 set_gdbarch_stabs_argument_has_addr
1842 (gdbarch
, default_stabs_argument_has_addr
);
1844 set_gdbarch_skip_prologue (gdbarch
, sparc64_skip_prologue
);
1845 set_gdbarch_stack_frame_destroyed_p (gdbarch
, sparc_stack_frame_destroyed_p
);
1847 /* Hook in the DWARF CFI frame unwinder. */
1848 dwarf2_frame_set_init_reg (gdbarch
, sparc64_dwarf2_frame_init_reg
);
1849 /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1850 StackGhost issues have been resolved. */
1852 frame_unwind_append_unwinder (gdbarch
, &sparc64_frame_unwind
);
1853 frame_base_set_default (gdbarch
, &sparc64_frame_base
);
1855 set_gdbarch_addr_bits_remove (gdbarch
, sparc64_addr_bits_remove
);
1859 /* Helper functions for dealing with register sets. */
1861 #define TSTATE_CWP 0x000000000000001fULL
1862 #define TSTATE_ICC 0x0000000f00000000ULL
1863 #define TSTATE_XCC 0x000000f000000000ULL
1865 #define PSR_S 0x00000080
1867 #define PSR_ICC 0x00f00000
1869 #define PSR_VERS 0x0f000000
1871 #define PSR_IMPL 0xf0000000
1873 #define PSR_V8PLUS 0xff000000
1874 #define PSR_XCC 0x000f0000
1877 sparc64_supply_gregset (const struct sparc_gregmap
*gregmap
,
1878 struct regcache
*regcache
,
1879 int regnum
, const void *gregs
)
1881 struct gdbarch
*gdbarch
= regcache
->arch ();
1882 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1883 int sparc32
= (gdbarch_ptr_bit (gdbarch
) == 32);
1884 const gdb_byte
*regs
= (const gdb_byte
*) gregs
;
1885 gdb_byte zero
[8] = { 0 };
1890 if (regnum
== SPARC32_PSR_REGNUM
|| regnum
== -1)
1892 int offset
= gregmap
->r_tstate_offset
;
1893 ULONGEST tstate
, psr
;
1896 tstate
= extract_unsigned_integer (regs
+ offset
, 8, byte_order
);
1897 psr
= ((tstate
& TSTATE_CWP
) | PSR_S
| ((tstate
& TSTATE_ICC
) >> 12)
1898 | ((tstate
& TSTATE_XCC
) >> 20) | PSR_V8PLUS
);
1899 store_unsigned_integer (buf
, 4, byte_order
, psr
);
1900 regcache
->raw_supply (SPARC32_PSR_REGNUM
, buf
);
1903 if (regnum
== SPARC32_PC_REGNUM
|| regnum
== -1)
1904 regcache
->raw_supply (SPARC32_PC_REGNUM
,
1905 regs
+ gregmap
->r_pc_offset
+ 4);
1907 if (regnum
== SPARC32_NPC_REGNUM
|| regnum
== -1)
1908 regcache
->raw_supply (SPARC32_NPC_REGNUM
,
1909 regs
+ gregmap
->r_npc_offset
+ 4);
1911 if (regnum
== SPARC32_Y_REGNUM
|| regnum
== -1)
1913 int offset
= gregmap
->r_y_offset
+ 8 - gregmap
->r_y_size
;
1914 regcache
->raw_supply (SPARC32_Y_REGNUM
, regs
+ offset
);
1919 if (regnum
== SPARC64_STATE_REGNUM
|| regnum
== -1)
1920 regcache
->raw_supply (SPARC64_STATE_REGNUM
,
1921 regs
+ gregmap
->r_tstate_offset
);
1923 if (regnum
== SPARC64_PC_REGNUM
|| regnum
== -1)
1924 regcache
->raw_supply (SPARC64_PC_REGNUM
,
1925 regs
+ gregmap
->r_pc_offset
);
1927 if (regnum
== SPARC64_NPC_REGNUM
|| regnum
== -1)
1928 regcache
->raw_supply (SPARC64_NPC_REGNUM
,
1929 regs
+ gregmap
->r_npc_offset
);
1931 if (regnum
== SPARC64_Y_REGNUM
|| regnum
== -1)
1936 memcpy (buf
+ 8 - gregmap
->r_y_size
,
1937 regs
+ gregmap
->r_y_offset
, gregmap
->r_y_size
);
1938 regcache
->raw_supply (SPARC64_Y_REGNUM
, buf
);
1941 if ((regnum
== SPARC64_FPRS_REGNUM
|| regnum
== -1)
1942 && gregmap
->r_fprs_offset
!= -1)
1943 regcache
->raw_supply (SPARC64_FPRS_REGNUM
,
1944 regs
+ gregmap
->r_fprs_offset
);
1947 if (regnum
== SPARC_G0_REGNUM
|| regnum
== -1)
1948 regcache
->raw_supply (SPARC_G0_REGNUM
, &zero
);
1950 if ((regnum
>= SPARC_G1_REGNUM
&& regnum
<= SPARC_O7_REGNUM
) || regnum
== -1)
1952 int offset
= gregmap
->r_g1_offset
;
1957 for (i
= SPARC_G1_REGNUM
; i
<= SPARC_O7_REGNUM
; i
++)
1959 if (regnum
== i
|| regnum
== -1)
1960 regcache
->raw_supply (i
, regs
+ offset
);
1965 if ((regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
) || regnum
== -1)
1967 /* Not all of the register set variants include Locals and
1968 Inputs. For those that don't, we read them off the stack. */
1969 if (gregmap
->r_l0_offset
== -1)
1973 regcache_cooked_read_unsigned (regcache
, SPARC_SP_REGNUM
, &sp
);
1974 sparc_supply_rwindow (regcache
, sp
, regnum
);
1978 int offset
= gregmap
->r_l0_offset
;
1983 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
1985 if (regnum
== i
|| regnum
== -1)
1986 regcache
->raw_supply (i
, regs
+ offset
);
1994 sparc64_collect_gregset (const struct sparc_gregmap
*gregmap
,
1995 const struct regcache
*regcache
,
1996 int regnum
, void *gregs
)
1998 struct gdbarch
*gdbarch
= regcache
->arch ();
1999 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2000 int sparc32
= (gdbarch_ptr_bit (gdbarch
) == 32);
2001 gdb_byte
*regs
= (gdb_byte
*) gregs
;
2006 if (regnum
== SPARC32_PSR_REGNUM
|| regnum
== -1)
2008 int offset
= gregmap
->r_tstate_offset
;
2009 ULONGEST tstate
, psr
;
2012 tstate
= extract_unsigned_integer (regs
+ offset
, 8, byte_order
);
2013 regcache
->raw_collect (SPARC32_PSR_REGNUM
, buf
);
2014 psr
= extract_unsigned_integer (buf
, 4, byte_order
);
2015 tstate
|= (psr
& PSR_ICC
) << 12;
2016 if ((psr
& (PSR_VERS
| PSR_IMPL
)) == PSR_V8PLUS
)
2017 tstate
|= (psr
& PSR_XCC
) << 20;
2018 store_unsigned_integer (buf
, 8, byte_order
, tstate
);
2019 memcpy (regs
+ offset
, buf
, 8);
2022 if (regnum
== SPARC32_PC_REGNUM
|| regnum
== -1)
2023 regcache
->raw_collect (SPARC32_PC_REGNUM
,
2024 regs
+ gregmap
->r_pc_offset
+ 4);
2026 if (regnum
== SPARC32_NPC_REGNUM
|| regnum
== -1)
2027 regcache
->raw_collect (SPARC32_NPC_REGNUM
,
2028 regs
+ gregmap
->r_npc_offset
+ 4);
2030 if (regnum
== SPARC32_Y_REGNUM
|| regnum
== -1)
2032 int offset
= gregmap
->r_y_offset
+ 8 - gregmap
->r_y_size
;
2033 regcache
->raw_collect (SPARC32_Y_REGNUM
, regs
+ offset
);
2038 if (regnum
== SPARC64_STATE_REGNUM
|| regnum
== -1)
2039 regcache
->raw_collect (SPARC64_STATE_REGNUM
,
2040 regs
+ gregmap
->r_tstate_offset
);
2042 if (regnum
== SPARC64_PC_REGNUM
|| regnum
== -1)
2043 regcache
->raw_collect (SPARC64_PC_REGNUM
,
2044 regs
+ gregmap
->r_pc_offset
);
2046 if (regnum
== SPARC64_NPC_REGNUM
|| regnum
== -1)
2047 regcache
->raw_collect (SPARC64_NPC_REGNUM
,
2048 regs
+ gregmap
->r_npc_offset
);
2050 if (regnum
== SPARC64_Y_REGNUM
|| regnum
== -1)
2054 regcache
->raw_collect (SPARC64_Y_REGNUM
, buf
);
2055 memcpy (regs
+ gregmap
->r_y_offset
,
2056 buf
+ 8 - gregmap
->r_y_size
, gregmap
->r_y_size
);
2059 if ((regnum
== SPARC64_FPRS_REGNUM
|| regnum
== -1)
2060 && gregmap
->r_fprs_offset
!= -1)
2061 regcache
->raw_collect (SPARC64_FPRS_REGNUM
,
2062 regs
+ gregmap
->r_fprs_offset
);
2066 if ((regnum
>= SPARC_G1_REGNUM
&& regnum
<= SPARC_O7_REGNUM
) || regnum
== -1)
2068 int offset
= gregmap
->r_g1_offset
;
2073 /* %g0 is always zero. */
2074 for (i
= SPARC_G1_REGNUM
; i
<= SPARC_O7_REGNUM
; i
++)
2076 if (regnum
== i
|| regnum
== -1)
2077 regcache
->raw_collect (i
, regs
+ offset
);
2082 if ((regnum
>= SPARC_L0_REGNUM
&& regnum
<= SPARC_I7_REGNUM
) || regnum
== -1)
2084 /* Not all of the register set variants include Locals and
2085 Inputs. For those that don't, we read them off the stack. */
2086 if (gregmap
->r_l0_offset
!= -1)
2088 int offset
= gregmap
->r_l0_offset
;
2093 for (i
= SPARC_L0_REGNUM
; i
<= SPARC_I7_REGNUM
; i
++)
2095 if (regnum
== i
|| regnum
== -1)
2096 regcache
->raw_collect (i
, regs
+ offset
);
2104 sparc64_supply_fpregset (const struct sparc_fpregmap
*fpregmap
,
2105 struct regcache
*regcache
,
2106 int regnum
, const void *fpregs
)
2108 int sparc32
= (gdbarch_ptr_bit (regcache
->arch ()) == 32);
2109 const gdb_byte
*regs
= (const gdb_byte
*) fpregs
;
2112 for (i
= 0; i
< 32; i
++)
2114 if (regnum
== (SPARC_F0_REGNUM
+ i
) || regnum
== -1)
2115 regcache
->raw_supply (SPARC_F0_REGNUM
+ i
,
2116 regs
+ fpregmap
->r_f0_offset
+ (i
* 4));
2121 if (regnum
== SPARC32_FSR_REGNUM
|| regnum
== -1)
2122 regcache
->raw_supply (SPARC32_FSR_REGNUM
,
2123 regs
+ fpregmap
->r_fsr_offset
);
2127 for (i
= 0; i
< 16; i
++)
2129 if (regnum
== (SPARC64_F32_REGNUM
+ i
) || regnum
== -1)
2130 regcache
->raw_supply
2131 (SPARC64_F32_REGNUM
+ i
,
2132 regs
+ fpregmap
->r_f0_offset
+ (32 * 4) + (i
* 8));
2135 if (regnum
== SPARC64_FSR_REGNUM
|| regnum
== -1)
2136 regcache
->raw_supply (SPARC64_FSR_REGNUM
,
2137 regs
+ fpregmap
->r_fsr_offset
);
2142 sparc64_collect_fpregset (const struct sparc_fpregmap
*fpregmap
,
2143 const struct regcache
*regcache
,
2144 int regnum
, void *fpregs
)
2146 int sparc32
= (gdbarch_ptr_bit (regcache
->arch ()) == 32);
2147 gdb_byte
*regs
= (gdb_byte
*) fpregs
;
2150 for (i
= 0; i
< 32; i
++)
2152 if (regnum
== (SPARC_F0_REGNUM
+ i
) || regnum
== -1)
2153 regcache
->raw_collect (SPARC_F0_REGNUM
+ i
,
2154 regs
+ fpregmap
->r_f0_offset
+ (i
* 4));
2159 if (regnum
== SPARC32_FSR_REGNUM
|| regnum
== -1)
2160 regcache
->raw_collect (SPARC32_FSR_REGNUM
,
2161 regs
+ fpregmap
->r_fsr_offset
);
2165 for (i
= 0; i
< 16; i
++)
2167 if (regnum
== (SPARC64_F32_REGNUM
+ i
) || regnum
== -1)
2168 regcache
->raw_collect (SPARC64_F32_REGNUM
+ i
,
2169 (regs
+ fpregmap
->r_f0_offset
2170 + (32 * 4) + (i
* 8)));
2173 if (regnum
== SPARC64_FSR_REGNUM
|| regnum
== -1)
2174 regcache
->raw_collect (SPARC64_FSR_REGNUM
,
2175 regs
+ fpregmap
->r_fsr_offset
);
2179 const struct sparc_fpregmap sparc64_bsd_fpregmap
=