Use scoped_switch_to_sym_language_if_auto in symtab.c to switch language.
[external/binutils.git] / gdb / sparc64-tdep.c
1 /* Target-dependent code for UltraSPARC.
2
3    Copyright (C) 2003-2018 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "arch-utils.h"
22 #include "dwarf2-frame.h"
23 #include "frame.h"
24 #include "frame-base.h"
25 #include "frame-unwind.h"
26 #include "gdbcore.h"
27 #include "gdbtypes.h"
28 #include "inferior.h"
29 #include "symtab.h"
30 #include "objfiles.h"
31 #include "osabi.h"
32 #include "regcache.h"
33 #include "target-descriptions.h"
34 #include "target.h"
35 #include "value.h"
36
37 #include "sparc64-tdep.h"
38
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
42    SPARC.  */
43
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.  */
47 \f
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
58    as a SIGSEGV signal.
59
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.
63
64    Note that 32-bit applications cannot use ADI. */
65
66
67 #include <algorithm>
68 #include "cli/cli-utils.h"
69 #include "gdbcmd.h"
70 #include "auxv.h"
71
72 #define MAX_PROC_NAME_SIZE sizeof("/proc/99999/lwp/9999/adi/lstatus")
73
74 /* ELF Auxiliary vectors */
75 #ifndef AT_ADI_BLKSZ
76 #define AT_ADI_BLKSZ    34
77 #endif
78 #ifndef AT_ADI_NBITS
79 #define AT_ADI_NBITS    35
80 #endif
81 #ifndef AT_ADI_UEONADI
82 #define AT_ADI_UEONADI  36
83 #endif
84
85 /* ADI command list.  */
86 static struct cmd_list_element *sparc64adilist = NULL;
87
88 /* ADI stat settings.  */
89 typedef struct
90 {
91   /* The ADI block size.  */
92   unsigned long blksize;
93
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.  */
97   unsigned long nbits;
98
99   /* The maximum ADI version tag value supported.  */
100   int max_version;
101
102   /* ADI version tag file.  */
103   int tag_fd = 0;
104
105   /* ADI availability check has been done.  */
106   bool checked_avail = false;
107
108   /* ADI is available.  */
109   bool is_avail = false;
110
111 } adi_stat_t;
112
113 /* Per-process ADI stat info.  */
114
115 typedef struct sparc64_adi_info
116 {
117   sparc64_adi_info (pid_t pid_)
118     : pid (pid_)
119   {}
120
121   /* The process identifier.  */
122   pid_t pid;
123
124   /* The ADI stat.  */
125   adi_stat_t stat = {};
126
127 } sparc64_adi_info;
128
129 static std::forward_list<sparc64_adi_info> adi_proc_list;
130
131
132 /* Get ADI info for process PID, creating one if it doesn't exist.  */
133
134 static sparc64_adi_info * 
135 get_adi_info_proc (pid_t pid)
136 {
137   auto found = std::find_if (adi_proc_list.begin (), adi_proc_list.end (),
138                              [&pid] (const sparc64_adi_info &info)
139                              {
140                                return info.pid == pid;
141                              });
142
143   if (found == adi_proc_list.end ())
144     {
145       adi_proc_list.emplace_front (pid);
146       return &adi_proc_list.front ();
147     }
148   else
149     {
150       return &(*found);
151     }
152 }
153
154 static adi_stat_t 
155 get_adi_info (pid_t pid)
156 {
157   sparc64_adi_info *proc;
158
159   proc = get_adi_info_proc (pid);
160   return proc->stat;
161 }
162
163 /* Is called when GDB is no longer debugging process PID.  It
164    deletes data structure that keeps track of the ADI stat.  */
165
166 void
167 sparc64_forget_process (pid_t pid)
168 {
169   int target_errno;
170
171   for (auto pit = adi_proc_list.before_begin (),
172          it = std::next (pit);
173        it != adi_proc_list.end ();
174        )
175     {
176       if ((*it).pid == pid)
177         {
178           if ((*it).stat.tag_fd > 0) 
179             target_fileio_close ((*it).stat.tag_fd, &target_errno);
180           adi_proc_list.erase_after (pit);
181           break;
182         }
183       else
184         pit = it++;
185     }
186
187 }
188
189 static void
190 info_adi_command (const char *args, int from_tty)
191 {
192   printf_unfiltered ("\"adi\" must be followed by \"examine\" "
193                      "or \"assign\".\n");
194   help_list (sparc64adilist, "adi ", all_commands, gdb_stdout);
195 }
196
197 /* Read attributes of a maps entry in /proc/[pid]/adi/maps.  */
198
199 static void
200 read_maps_entry (const char *line,
201               ULONGEST *addr, ULONGEST *endaddr)
202 {
203   const char *p = line;
204
205   *addr = strtoulst (p, &p, 16);
206   if (*p == '-')
207     p++;
208
209   *endaddr = strtoulst (p, &p, 16);
210 }
211
212 /* Check if ADI is available.  */
213
214 static bool
215 adi_available (void)
216 {
217   pid_t pid = inferior_ptid.pid ();
218   sparc64_adi_info *proc = get_adi_info_proc (pid);
219   CORE_ADDR value;
220
221   if (proc->stat.checked_avail)
222     return proc->stat.is_avail;
223
224   proc->stat.checked_avail = true;
225   if (target_auxv_search (current_top_target (), AT_ADI_BLKSZ, &value) <= 0)
226     return false;
227   proc->stat.blksize = value;
228   target_auxv_search (current_top_target (), AT_ADI_NBITS, &value);
229   proc->stat.nbits = value;
230   proc->stat.max_version = (1 << proc->stat.nbits) - 2;
231   proc->stat.is_avail = true;
232
233   return proc->stat.is_avail;
234 }
235
236 /* Normalize a versioned address - a VA with ADI bits (63-60) set.  */
237
238 static CORE_ADDR
239 adi_normalize_address (CORE_ADDR addr)
240 {
241   adi_stat_t ast = get_adi_info (inferior_ptid.pid ());
242
243   if (ast.nbits)
244     {
245       /* Clear upper bits.  */
246       addr &= ((uint64_t) -1) >> ast.nbits;
247
248       /* Sign extend.  */
249       CORE_ADDR signbit = (uint64_t) 1 << (64 - ast.nbits - 1);
250       return (addr ^ signbit) - signbit;
251     }
252   return addr;
253 }
254
255 /* Align a normalized address - a VA with bit 59 sign extended into 
256    ADI bits.  */
257
258 static CORE_ADDR
259 adi_align_address (CORE_ADDR naddr)
260 {
261   adi_stat_t ast = get_adi_info (inferior_ptid.pid ());
262
263   return (naddr - (naddr % ast.blksize)) / ast.blksize;
264 }
265
266 /* Convert a byte count to count at a ratio of 1:adi_blksz.  */
267
268 static int
269 adi_convert_byte_count (CORE_ADDR naddr, int nbytes, CORE_ADDR locl)
270 {
271   adi_stat_t ast = get_adi_info (inferior_ptid.pid ());
272
273   return ((naddr + nbytes + ast.blksize - 1) / ast.blksize) - locl;
274 }
275
276 /* The /proc/[pid]/adi/tags file, which allows gdb to get/set ADI
277    version in a target process, maps linearly to the address space
278    of the target process at a ratio of 1:adi_blksz.
279
280    A read (or write) at offset K in the file returns (or modifies)
281    the ADI version tag stored in the cacheline containing address
282    K * adi_blksz, encoded as 1 version tag per byte.  The allowed
283    version tag values are between 0 and adi_stat.max_version.  */
284
285 static int
286 adi_tag_fd (void)
287 {
288   pid_t pid = inferior_ptid.pid ();
289   sparc64_adi_info *proc = get_adi_info_proc (pid);
290
291   if (proc->stat.tag_fd != 0)
292     return proc->stat.tag_fd;
293
294   char cl_name[MAX_PROC_NAME_SIZE];
295   snprintf (cl_name, sizeof(cl_name), "/proc/%ld/adi/tags", (long) pid);
296   int target_errno;
297   proc->stat.tag_fd = target_fileio_open (NULL, cl_name, O_RDWR|O_EXCL, 
298                                           0, &target_errno);
299   return proc->stat.tag_fd;
300 }
301
302 /* Check if an address set is ADI enabled, using /proc/[pid]/adi/maps
303    which was exported by the kernel and contains the currently ADI
304    mapped memory regions and their access permissions.  */
305
306 static bool
307 adi_is_addr_mapped (CORE_ADDR vaddr, size_t cnt)
308 {
309   char filename[MAX_PROC_NAME_SIZE];
310   size_t i = 0;
311
312   pid_t pid = inferior_ptid.pid ();
313   snprintf (filename, sizeof filename, "/proc/%ld/adi/maps", (long) pid);
314   gdb::unique_xmalloc_ptr<char> data
315     = target_fileio_read_stralloc (NULL, filename);
316   if (data)
317     {
318       adi_stat_t adi_stat = get_adi_info (pid);
319       char *line;
320       for (line = strtok (data.get (), "\n"); line; line = strtok (NULL, "\n"))
321         {
322           ULONGEST addr, endaddr;
323
324           read_maps_entry (line, &addr, &endaddr);
325
326           while (((vaddr + i) * adi_stat.blksize) >= addr
327                  && ((vaddr + i) * adi_stat.blksize) < endaddr)
328             {
329               if (++i == cnt)
330                 return true;
331             }
332         }
333       }
334     else
335       warning (_("unable to open /proc file '%s'"), filename);
336
337   return false;
338 }
339
340 /* Read ADI version tag value for memory locations starting at "VADDR"
341    for "SIZE" number of bytes.  */
342
343 static int
344 adi_read_versions (CORE_ADDR vaddr, size_t size, gdb_byte *tags)
345 {
346   int fd = adi_tag_fd ();
347   if (fd == -1)
348     return -1;
349
350   if (!adi_is_addr_mapped (vaddr, size))
351     {
352       adi_stat_t ast = get_adi_info (inferior_ptid.pid ());
353       error(_("Address at %s is not in ADI maps"),
354             paddress (target_gdbarch (), vaddr * ast.blksize));
355     }
356
357   int target_errno;
358   return target_fileio_pread (fd, tags, size, vaddr, &target_errno);
359 }
360
361 /* Write ADI version tag for memory locations starting at "VADDR" for
362  "SIZE" number of bytes to "TAGS".  */
363
364 static int
365 adi_write_versions (CORE_ADDR vaddr, size_t size, unsigned char *tags)
366 {
367   int fd = adi_tag_fd ();
368   if (fd == -1)
369     return -1;
370
371   if (!adi_is_addr_mapped (vaddr, size))
372     {
373       adi_stat_t ast = get_adi_info (inferior_ptid.pid ());
374       error(_("Address at %s is not in ADI maps"),
375             paddress (target_gdbarch (), vaddr * ast.blksize));
376     }
377
378   int target_errno;
379   return target_fileio_pwrite (fd, tags, size, vaddr, &target_errno);
380 }
381
382 /* Print ADI version tag value in "TAGS" for memory locations starting
383    at "VADDR" with number of "CNT".  */
384
385 static void
386 adi_print_versions (CORE_ADDR vaddr, size_t cnt, gdb_byte *tags)
387 {
388   int v_idx = 0;
389   const int maxelts = 8;  /* # of elements per line */
390
391   adi_stat_t adi_stat = get_adi_info (inferior_ptid.pid ());
392
393   while (cnt > 0)
394     {
395       QUIT;
396       printf_filtered ("%s:\t",
397                        paddress (target_gdbarch (), vaddr * adi_stat.blksize));
398       for (int i = maxelts; i > 0 && cnt > 0; i--, cnt--)
399         {
400           if (tags[v_idx] == 0xff)    /* no version tag */
401             printf_filtered ("-");
402           else
403             printf_filtered ("%1X", tags[v_idx]);
404           if (cnt > 1)
405             printf_filtered (" ");
406           ++v_idx;
407         }
408       printf_filtered ("\n");
409       gdb_flush (gdb_stdout);
410       vaddr += maxelts;
411     }
412 }
413
414 static void
415 do_examine (CORE_ADDR start, int bcnt)
416 {
417   CORE_ADDR vaddr = adi_normalize_address (start);
418
419   CORE_ADDR vstart = adi_align_address (vaddr);
420   int cnt = adi_convert_byte_count (vaddr, bcnt, vstart);
421   gdb::def_vector<gdb_byte> buf (cnt);
422   int read_cnt = adi_read_versions (vstart, cnt, buf.data ());
423   if (read_cnt == -1)
424     error (_("No ADI information"));
425   else if (read_cnt < cnt)
426     error(_("No ADI information at %s"), paddress (target_gdbarch (), vaddr));
427
428   adi_print_versions (vstart, cnt, buf.data ());
429 }
430
431 static void
432 do_assign (CORE_ADDR start, size_t bcnt, int version)
433 {
434   CORE_ADDR vaddr = adi_normalize_address (start);
435
436   CORE_ADDR vstart = adi_align_address (vaddr);
437   int cnt = adi_convert_byte_count (vaddr, bcnt, vstart);
438   std::vector<unsigned char> buf (cnt, version);
439   int set_cnt = adi_write_versions (vstart, cnt, buf.data ());
440
441   if (set_cnt == -1)
442     error (_("No ADI information"));
443   else if (set_cnt < cnt)
444     error(_("No ADI information at %s"), paddress (target_gdbarch (), vaddr));
445
446 }
447
448 /* ADI examine version tag command.
449
450    Command syntax:
451
452      adi (examine|x)[/COUNT] [ADDR] */
453
454 static void
455 adi_examine_command (const char *args, int from_tty)
456 {
457   /* make sure program is active and adi is available */
458   if (!target_has_execution)
459     error (_("ADI command requires a live process/thread"));
460
461   if (!adi_available ())
462     error (_("No ADI information"));
463
464   int cnt = 1;
465   const char *p = args;
466   if (p && *p == '/')
467     {
468       p++;
469       cnt = get_number (&p);
470     }
471
472   CORE_ADDR next_address = 0;
473   if (p != 0 && *p != 0)
474     next_address = parse_and_eval_address (p);
475   if (!cnt || !next_address)
476     error (_("Usage: adi examine|x[/COUNT] [ADDR]"));
477
478   do_examine (next_address, cnt);
479 }
480
481 /* ADI assign version tag command.
482
483    Command syntax:
484
485      adi (assign|a)[/COUNT] ADDR = VERSION  */
486
487 static void
488 adi_assign_command (const char *args, int from_tty)
489 {
490   static const char *adi_usage
491     = N_("Usage: adi assign|a[/COUNT] ADDR = VERSION");
492
493   /* make sure program is active and adi is available */
494   if (!target_has_execution)
495     error (_("ADI command requires a live process/thread"));
496
497   if (!adi_available ())
498     error (_("No ADI information"));
499
500   const char *exp = args;
501   if (exp == 0)
502     error_no_arg (_(adi_usage));
503
504   char *q = (char *) strchr (exp, '=');
505   if (q)
506     *q++ = 0;
507   else
508     error ("%s", _(adi_usage));
509
510   size_t cnt = 1;
511   const char *p = args;
512   if (exp && *exp == '/')
513     {
514       p = exp + 1;
515       cnt = get_number (&p);
516     }
517
518   CORE_ADDR next_address = 0;
519   if (p != 0 && *p != 0)
520     next_address = parse_and_eval_address (p);
521   else
522     error ("%s", _(adi_usage));
523
524   int version = 0;
525   if (q != NULL)           /* parse version tag */
526     {
527       adi_stat_t ast = get_adi_info (inferior_ptid.pid ());
528       version = parse_and_eval_long (q);
529       if (version < 0 || version > ast.max_version)
530         error (_("Invalid ADI version tag %d"), version);
531     }
532
533   do_assign (next_address, cnt, version);
534 }
535
536 void
537 _initialize_sparc64_adi_tdep (void)
538 {
539
540   add_prefix_cmd ("adi", class_support, info_adi_command,
541                   _("ADI version related commands."),
542                   &sparc64adilist, "adi ", 0, &cmdlist);
543   add_cmd ("examine", class_support, adi_examine_command,
544            _("Examine ADI versions."), &sparc64adilist);
545   add_alias_cmd ("x", "examine", no_class, 1, &sparc64adilist);
546   add_cmd ("assign", class_support, adi_assign_command,
547            _("Assign ADI versions."), &sparc64adilist);
548
549 }
550 \f
551
552 /* The functions on this page are intended to be used to classify
553    function arguments.  */
554
555 /* Check whether TYPE is "Integral or Pointer".  */
556
557 static int
558 sparc64_integral_or_pointer_p (const struct type *type)
559 {
560   switch (TYPE_CODE (type))
561     {
562     case TYPE_CODE_INT:
563     case TYPE_CODE_BOOL:
564     case TYPE_CODE_CHAR:
565     case TYPE_CODE_ENUM:
566     case TYPE_CODE_RANGE:
567       {
568         int len = TYPE_LENGTH (type);
569         gdb_assert (len == 1 || len == 2 || len == 4 || len == 8);
570       }
571       return 1;
572     case TYPE_CODE_PTR:
573     case TYPE_CODE_REF:
574     case TYPE_CODE_RVALUE_REF:
575       {
576         int len = TYPE_LENGTH (type);
577         gdb_assert (len == 8);
578       }
579       return 1;
580     default:
581       break;
582     }
583
584   return 0;
585 }
586
587 /* Check whether TYPE is "Floating".  */
588
589 static int
590 sparc64_floating_p (const struct type *type)
591 {
592   switch (TYPE_CODE (type))
593     {
594     case TYPE_CODE_FLT:
595       {
596         int len = TYPE_LENGTH (type);
597         gdb_assert (len == 4 || len == 8 || len == 16);
598       }
599       return 1;
600     default:
601       break;
602     }
603
604   return 0;
605 }
606
607 /* Check whether TYPE is "Complex Floating".  */
608
609 static int
610 sparc64_complex_floating_p (const struct type *type)
611 {
612   switch (TYPE_CODE (type))
613     {
614     case TYPE_CODE_COMPLEX:
615       {
616         int len = TYPE_LENGTH (type);
617         gdb_assert (len == 8 || len == 16 || len == 32);
618       }
619       return 1;
620     default:
621       break;
622     }
623
624   return 0;
625 }
626
627 /* Check whether TYPE is "Structure or Union".
628
629    In terms of Ada subprogram calls, arrays are treated the same as
630    struct and union types.  So this function also returns non-zero
631    for array types.  */
632
633 static int
634 sparc64_structure_or_union_p (const struct type *type)
635 {
636   switch (TYPE_CODE (type))
637     {
638     case TYPE_CODE_STRUCT:
639     case TYPE_CODE_UNION:
640     case TYPE_CODE_ARRAY:
641       return 1;
642     default:
643       break;
644     }
645
646   return 0;
647 }
648 \f
649
650 /* Construct types for ISA-specific registers.  */
651
652 static struct type *
653 sparc64_pstate_type (struct gdbarch *gdbarch)
654 {
655   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
656
657   if (!tdep->sparc64_pstate_type)
658     {
659       struct type *type;
660
661       type = arch_flags_type (gdbarch, "builtin_type_sparc64_pstate", 64);
662       append_flags_type_flag (type, 0, "AG");
663       append_flags_type_flag (type, 1, "IE");
664       append_flags_type_flag (type, 2, "PRIV");
665       append_flags_type_flag (type, 3, "AM");
666       append_flags_type_flag (type, 4, "PEF");
667       append_flags_type_flag (type, 5, "RED");
668       append_flags_type_flag (type, 8, "TLE");
669       append_flags_type_flag (type, 9, "CLE");
670       append_flags_type_flag (type, 10, "PID0");
671       append_flags_type_flag (type, 11, "PID1");
672
673       tdep->sparc64_pstate_type = type;
674     }
675
676   return tdep->sparc64_pstate_type;
677 }
678
679 static struct type *
680 sparc64_ccr_type (struct gdbarch *gdbarch)
681 {
682   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
683
684   if (tdep->sparc64_ccr_type == NULL)
685     {
686       struct type *type;
687
688       type = arch_flags_type (gdbarch, "builtin_type_sparc64_ccr", 64);
689       append_flags_type_flag (type, 0, "icc.c");
690       append_flags_type_flag (type, 1, "icc.v");
691       append_flags_type_flag (type, 2, "icc.z");
692       append_flags_type_flag (type, 3, "icc.n");
693       append_flags_type_flag (type, 4, "xcc.c");
694       append_flags_type_flag (type, 5, "xcc.v");
695       append_flags_type_flag (type, 6, "xcc.z");
696       append_flags_type_flag (type, 7, "xcc.n");
697
698       tdep->sparc64_ccr_type = type;
699     }
700
701   return tdep->sparc64_ccr_type;
702 }
703
704 static struct type *
705 sparc64_fsr_type (struct gdbarch *gdbarch)
706 {
707   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
708
709   if (!tdep->sparc64_fsr_type)
710     {
711       struct type *type;
712
713       type = arch_flags_type (gdbarch, "builtin_type_sparc64_fsr", 64);
714       append_flags_type_flag (type, 0, "NXC");
715       append_flags_type_flag (type, 1, "DZC");
716       append_flags_type_flag (type, 2, "UFC");
717       append_flags_type_flag (type, 3, "OFC");
718       append_flags_type_flag (type, 4, "NVC");
719       append_flags_type_flag (type, 5, "NXA");
720       append_flags_type_flag (type, 6, "DZA");
721       append_flags_type_flag (type, 7, "UFA");
722       append_flags_type_flag (type, 8, "OFA");
723       append_flags_type_flag (type, 9, "NVA");
724       append_flags_type_flag (type, 22, "NS");
725       append_flags_type_flag (type, 23, "NXM");
726       append_flags_type_flag (type, 24, "DZM");
727       append_flags_type_flag (type, 25, "UFM");
728       append_flags_type_flag (type, 26, "OFM");
729       append_flags_type_flag (type, 27, "NVM");
730
731       tdep->sparc64_fsr_type = type;
732     }
733
734   return tdep->sparc64_fsr_type;
735 }
736
737 static struct type *
738 sparc64_fprs_type (struct gdbarch *gdbarch)
739 {
740   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
741
742   if (!tdep->sparc64_fprs_type)
743     {
744       struct type *type;
745
746       type = arch_flags_type (gdbarch, "builtin_type_sparc64_fprs", 64);
747       append_flags_type_flag (type, 0, "DL");
748       append_flags_type_flag (type, 1, "DU");
749       append_flags_type_flag (type, 2, "FEF");
750
751       tdep->sparc64_fprs_type = type;
752     }
753
754   return tdep->sparc64_fprs_type;
755 }
756
757
758 /* Register information.  */
759 #define SPARC64_FPU_REGISTERS                             \
760   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",         \
761   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",   \
762   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
763   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
764   "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \
765   "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62"
766 #define SPARC64_CP0_REGISTERS                                             \
767   "pc", "npc",                                                            \
768   /* FIXME: Give "state" a name until we start using register groups.  */ \
769   "state",                                                                \
770   "fsr",                                                                  \
771   "fprs",                                                                 \
772   "y"
773
774 static const char *sparc64_fpu_register_names[] = { SPARC64_FPU_REGISTERS };
775 static const char *sparc64_cp0_register_names[] = { SPARC64_CP0_REGISTERS };
776
777 static const char *sparc64_register_names[] =
778 {
779   SPARC_CORE_REGISTERS,
780   SPARC64_FPU_REGISTERS,
781   SPARC64_CP0_REGISTERS
782 };
783
784 /* Total number of registers.  */
785 #define SPARC64_NUM_REGS ARRAY_SIZE (sparc64_register_names)
786
787 /* We provide the aliases %d0..%d62 and %q0..%q60 for the floating
788    registers as "psuedo" registers.  */
789
790 static const char *sparc64_pseudo_register_names[] =
791 {
792   "cwp", "pstate", "asi", "ccr",
793
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",
798
799   "q0", "q4", "q8", "q12", "q16", "q20", "q24", "q28",
800   "q32", "q36", "q40", "q44", "q48", "q52", "q56", "q60",
801 };
802
803 /* Total number of pseudo registers.  */
804 #define SPARC64_NUM_PSEUDO_REGS ARRAY_SIZE (sparc64_pseudo_register_names)
805
806 /* Return the name of pseudo register REGNUM.  */
807
808 static const char *
809 sparc64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
810 {
811   regnum -= gdbarch_num_regs (gdbarch);
812
813   if (regnum < SPARC64_NUM_PSEUDO_REGS)
814     return sparc64_pseudo_register_names[regnum];
815
816   internal_error (__FILE__, __LINE__,
817                   _("sparc64_pseudo_register_name: bad register number %d"),
818                   regnum);
819 }
820
821 /* Return the name of register REGNUM.  */
822
823 static const char *
824 sparc64_register_name (struct gdbarch *gdbarch, int regnum)
825 {
826   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
827     return tdesc_register_name (gdbarch, regnum);
828
829   if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
830     return sparc64_register_names[regnum];
831
832   return sparc64_pseudo_register_name (gdbarch, regnum);
833 }
834
835 /* Return the GDB type object for the "standard" data type of data in
836    pseudo register REGNUM.  */
837
838 static struct type *
839 sparc64_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
840 {
841   regnum -= gdbarch_num_regs (gdbarch);
842
843   if (regnum == SPARC64_CWP_REGNUM)
844     return builtin_type (gdbarch)->builtin_int64;
845   if (regnum == SPARC64_PSTATE_REGNUM)
846     return sparc64_pstate_type (gdbarch);
847   if (regnum == SPARC64_ASI_REGNUM)
848     return builtin_type (gdbarch)->builtin_int64;
849   if (regnum == SPARC64_CCR_REGNUM)
850     return sparc64_ccr_type (gdbarch);
851   if (regnum >= SPARC64_D0_REGNUM && regnum <= SPARC64_D62_REGNUM)
852     return builtin_type (gdbarch)->builtin_double;
853   if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q60_REGNUM)
854     return builtin_type (gdbarch)->builtin_long_double;
855
856   internal_error (__FILE__, __LINE__,
857                   _("sparc64_pseudo_register_type: bad register number %d"),
858                   regnum);
859 }
860
861 /* Return the GDB type object for the "standard" data type of data in
862    register REGNUM.  */
863
864 static struct type *
865 sparc64_register_type (struct gdbarch *gdbarch, int regnum)
866 {
867   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
868     return tdesc_register_type (gdbarch, regnum);
869
870   /* Raw registers.  */
871   if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
872     return builtin_type (gdbarch)->builtin_data_ptr;
873   if (regnum >= SPARC_G0_REGNUM && regnum <= SPARC_I7_REGNUM)
874     return builtin_type (gdbarch)->builtin_int64;
875   if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
876     return builtin_type (gdbarch)->builtin_float;
877   if (regnum >= SPARC64_F32_REGNUM && regnum <= SPARC64_F62_REGNUM)
878     return builtin_type (gdbarch)->builtin_double;
879   if (regnum == SPARC64_PC_REGNUM || regnum == SPARC64_NPC_REGNUM)
880     return builtin_type (gdbarch)->builtin_func_ptr;
881   /* This raw register contains the contents of %cwp, %pstate, %asi
882      and %ccr as laid out in a %tstate register.  */
883   if (regnum == SPARC64_STATE_REGNUM)
884     return builtin_type (gdbarch)->builtin_int64;
885   if (regnum == SPARC64_FSR_REGNUM)
886     return sparc64_fsr_type (gdbarch);
887   if (regnum == SPARC64_FPRS_REGNUM)
888     return sparc64_fprs_type (gdbarch);
889   /* "Although Y is a 64-bit register, its high-order 32 bits are
890      reserved and always read as 0."  */
891   if (regnum == SPARC64_Y_REGNUM)
892     return builtin_type (gdbarch)->builtin_int64;
893
894   /* Pseudo registers.  */
895   if (regnum >= gdbarch_num_regs (gdbarch))
896     return sparc64_pseudo_register_type (gdbarch, regnum);
897
898   internal_error (__FILE__, __LINE__, _("invalid regnum"));
899 }
900
901 static enum register_status
902 sparc64_pseudo_register_read (struct gdbarch *gdbarch,
903                               readable_regcache *regcache,
904                               int regnum, gdb_byte *buf)
905 {
906   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
907   enum register_status status;
908
909   regnum -= gdbarch_num_regs (gdbarch);
910
911   if (regnum >= SPARC64_D0_REGNUM && regnum <= SPARC64_D30_REGNUM)
912     {
913       regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC64_D0_REGNUM);
914       status = regcache->raw_read (regnum, buf);
915       if (status == REG_VALID)
916         status = regcache->raw_read (regnum + 1, buf + 4);
917       return status;
918     }
919   else if (regnum >= SPARC64_D32_REGNUM && regnum <= SPARC64_D62_REGNUM)
920     {
921       regnum = SPARC64_F32_REGNUM + (regnum - SPARC64_D32_REGNUM);
922       return regcache->raw_read (regnum, buf);
923     }
924   else if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q28_REGNUM)
925     {
926       regnum = SPARC_F0_REGNUM + 4 * (regnum - SPARC64_Q0_REGNUM);
927
928       status = regcache->raw_read (regnum, buf);
929       if (status == REG_VALID)
930         status = regcache->raw_read (regnum + 1, buf + 4);
931       if (status == REG_VALID)
932         status = regcache->raw_read (regnum + 2, buf + 8);
933       if (status == REG_VALID)
934         status = regcache->raw_read (regnum + 3, buf + 12);
935
936       return status;
937     }
938   else if (regnum >= SPARC64_Q32_REGNUM && regnum <= SPARC64_Q60_REGNUM)
939     {
940       regnum = SPARC64_F32_REGNUM + 2 * (regnum - SPARC64_Q32_REGNUM);
941
942       status = regcache->raw_read (regnum, buf);
943       if (status == REG_VALID)
944         status = regcache->raw_read (regnum + 1, buf + 8);
945
946       return status;
947     }
948   else if (regnum == SPARC64_CWP_REGNUM
949            || regnum == SPARC64_PSTATE_REGNUM
950            || regnum == SPARC64_ASI_REGNUM
951            || regnum == SPARC64_CCR_REGNUM)
952     {
953       ULONGEST state;
954
955       status = regcache->raw_read (SPARC64_STATE_REGNUM, &state);
956       if (status != REG_VALID)
957         return status;
958
959       switch (regnum)
960         {
961         case SPARC64_CWP_REGNUM:
962           state = (state >> 0) & ((1 << 5) - 1);
963           break;
964         case SPARC64_PSTATE_REGNUM:
965           state = (state >> 8) & ((1 << 12) - 1);
966           break;
967         case SPARC64_ASI_REGNUM:
968           state = (state >> 24) & ((1 << 8) - 1);
969           break;
970         case SPARC64_CCR_REGNUM:
971           state = (state >> 32) & ((1 << 8) - 1);
972           break;
973         }
974       store_unsigned_integer (buf, 8, byte_order, state);
975     }
976
977   return REG_VALID;
978 }
979
980 static void
981 sparc64_pseudo_register_write (struct gdbarch *gdbarch,
982                                struct regcache *regcache,
983                                int regnum, const gdb_byte *buf)
984 {
985   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
986
987   regnum -= gdbarch_num_regs (gdbarch);
988
989   if (regnum >= SPARC64_D0_REGNUM && regnum <= SPARC64_D30_REGNUM)
990     {
991       regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC64_D0_REGNUM);
992       regcache->raw_write (regnum, buf);
993       regcache->raw_write (regnum + 1, buf + 4);
994     }
995   else if (regnum >= SPARC64_D32_REGNUM && regnum <= SPARC64_D62_REGNUM)
996     {
997       regnum = SPARC64_F32_REGNUM + (regnum - SPARC64_D32_REGNUM);
998       regcache->raw_write (regnum, buf);
999     }
1000   else if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q28_REGNUM)
1001     {
1002       regnum = SPARC_F0_REGNUM + 4 * (regnum - SPARC64_Q0_REGNUM);
1003       regcache->raw_write (regnum, buf);
1004       regcache->raw_write (regnum + 1, buf + 4);
1005       regcache->raw_write (regnum + 2, buf + 8);
1006       regcache->raw_write (regnum + 3, buf + 12);
1007     }
1008   else if (regnum >= SPARC64_Q32_REGNUM && regnum <= SPARC64_Q60_REGNUM)
1009     {
1010       regnum = SPARC64_F32_REGNUM + 2 * (regnum - SPARC64_Q32_REGNUM);
1011       regcache->raw_write (regnum, buf);
1012       regcache->raw_write (regnum + 1, buf + 8);
1013     }
1014   else if (regnum == SPARC64_CWP_REGNUM
1015            || regnum == SPARC64_PSTATE_REGNUM
1016            || regnum == SPARC64_ASI_REGNUM
1017            || regnum == SPARC64_CCR_REGNUM)
1018     {
1019       ULONGEST state, bits;
1020
1021       regcache_raw_read_unsigned (regcache, SPARC64_STATE_REGNUM, &state);
1022       bits = extract_unsigned_integer (buf, 8, byte_order);
1023       switch (regnum)
1024         {
1025         case SPARC64_CWP_REGNUM:
1026           state |= ((bits & ((1 << 5) - 1)) << 0);
1027           break;
1028         case SPARC64_PSTATE_REGNUM:
1029           state |= ((bits & ((1 << 12) - 1)) << 8);
1030           break;
1031         case SPARC64_ASI_REGNUM:
1032           state |= ((bits & ((1 << 8) - 1)) << 24);
1033           break;
1034         case SPARC64_CCR_REGNUM:
1035           state |= ((bits & ((1 << 8) - 1)) << 32);
1036           break;
1037         }
1038       regcache_raw_write_unsigned (regcache, SPARC64_STATE_REGNUM, state);
1039     }
1040 }
1041 \f
1042
1043 /* Return PC of first real instruction of the function starting at
1044    START_PC.  */
1045
1046 static CORE_ADDR
1047 sparc64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1048 {
1049   struct symtab_and_line sal;
1050   CORE_ADDR func_start, func_end;
1051   struct sparc_frame_cache cache;
1052
1053   /* This is the preferred method, find the end of the prologue by
1054      using the debugging information.  */
1055   if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
1056     {
1057       sal = find_pc_line (func_start, 0);
1058
1059       if (sal.end < func_end
1060           && start_pc <= sal.end)
1061         return sal.end;
1062     }
1063
1064   return sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffULL,
1065                                  &cache);
1066 }
1067
1068 /* Normal frames.  */
1069
1070 static struct sparc_frame_cache *
1071 sparc64_frame_cache (struct frame_info *this_frame, void **this_cache)
1072 {
1073   return sparc_frame_cache (this_frame, this_cache);
1074 }
1075
1076 static void
1077 sparc64_frame_this_id (struct frame_info *this_frame, void **this_cache,
1078                        struct frame_id *this_id)
1079 {
1080   struct sparc_frame_cache *cache =
1081     sparc64_frame_cache (this_frame, this_cache);
1082
1083   /* This marks the outermost frame.  */
1084   if (cache->base == 0)
1085     return;
1086
1087   (*this_id) = frame_id_build (cache->base, cache->pc);
1088 }
1089
1090 static struct value *
1091 sparc64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1092                              int regnum)
1093 {
1094   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1095   struct sparc_frame_cache *cache =
1096     sparc64_frame_cache (this_frame, this_cache);
1097
1098   if (regnum == SPARC64_PC_REGNUM || regnum == SPARC64_NPC_REGNUM)
1099     {
1100       CORE_ADDR pc = (regnum == SPARC64_NPC_REGNUM) ? 4 : 0;
1101
1102       regnum =
1103         (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1104       pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1105       return frame_unwind_got_constant (this_frame, regnum, pc);
1106     }
1107
1108   /* Handle StackGhost.  */
1109   {
1110     ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1111
1112     if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1113       {
1114         CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
1115         ULONGEST i7;
1116
1117         /* Read the value in from memory.  */
1118         i7 = get_frame_memory_unsigned (this_frame, addr, 8);
1119         return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
1120       }
1121   }
1122
1123   /* The previous frame's `local' and `in' registers may have been saved
1124      in the register save area.  */
1125   if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1126       && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
1127     {
1128       CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
1129
1130       return frame_unwind_got_memory (this_frame, regnum, addr);
1131     }
1132
1133   /* The previous frame's `out' registers may be accessible as the current
1134      frame's `in' registers.  */
1135   if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM
1136       && (cache->copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM))))
1137     regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
1138
1139   return frame_unwind_got_register (this_frame, regnum, regnum);
1140 }
1141
1142 static const struct frame_unwind sparc64_frame_unwind =
1143 {
1144   NORMAL_FRAME,
1145   default_frame_unwind_stop_reason,
1146   sparc64_frame_this_id,
1147   sparc64_frame_prev_register,
1148   NULL,
1149   default_frame_sniffer
1150 };
1151 \f
1152
1153 static CORE_ADDR
1154 sparc64_frame_base_address (struct frame_info *this_frame, void **this_cache)
1155 {
1156   struct sparc_frame_cache *cache =
1157     sparc64_frame_cache (this_frame, this_cache);
1158
1159   return cache->base;
1160 }
1161
1162 static const struct frame_base sparc64_frame_base =
1163 {
1164   &sparc64_frame_unwind,
1165   sparc64_frame_base_address,
1166   sparc64_frame_base_address,
1167   sparc64_frame_base_address
1168 };
1169 \f
1170 /* Check whether TYPE must be 16-byte aligned.  */
1171
1172 static int
1173 sparc64_16_byte_align_p (struct type *type)
1174 {
1175   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1176     {
1177       struct type *t = check_typedef (TYPE_TARGET_TYPE (type));
1178
1179       if (sparc64_floating_p (t))
1180         return 1;
1181     }
1182   if (sparc64_floating_p (type) && TYPE_LENGTH (type) == 16)
1183     return 1;
1184
1185   if (sparc64_structure_or_union_p (type))
1186     {
1187       int i;
1188
1189       for (i = 0; i < TYPE_NFIELDS (type); i++)
1190         {
1191           struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
1192
1193           if (sparc64_16_byte_align_p (subtype))
1194             return 1;
1195         }
1196     }
1197
1198   return 0;
1199 }
1200
1201 /* Store floating fields of element ELEMENT of an "parameter array"
1202    that has type TYPE and is stored at BITPOS in VALBUF in the
1203    apropriate registers of REGCACHE.  This function can be called
1204    recursively and therefore handles floating types in addition to
1205    structures.  */
1206
1207 static void
1208 sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
1209                                const gdb_byte *valbuf, int element, int bitpos)
1210 {
1211   struct gdbarch *gdbarch = regcache->arch ();
1212   int len = TYPE_LENGTH (type);
1213
1214   gdb_assert (element < 16);
1215
1216   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1217     {
1218       gdb_byte buf[8];
1219       int regnum = SPARC_F0_REGNUM + element * 2 + bitpos / 32;
1220
1221       valbuf += bitpos / 8;
1222       if (len < 8)
1223         {
1224           memset (buf, 0, 8 - len);
1225           memcpy (buf + 8 - len, valbuf, len);
1226           valbuf = buf;
1227           len = 8;
1228         }
1229       for (int n = 0; n < (len + 3) / 4; n++)
1230         regcache->cooked_write (regnum + n, valbuf + n * 4);
1231     }
1232   else if (sparc64_floating_p (type)
1233       || (sparc64_complex_floating_p (type) && len <= 16))
1234     {
1235       int regnum;
1236
1237       if (len == 16)
1238         {
1239           gdb_assert (bitpos == 0);
1240           gdb_assert ((element % 2) == 0);
1241
1242           regnum = gdbarch_num_regs (gdbarch) + SPARC64_Q0_REGNUM + element / 2;
1243           regcache->cooked_write (regnum, valbuf);
1244         }
1245       else if (len == 8)
1246         {
1247           gdb_assert (bitpos == 0 || bitpos == 64);
1248
1249           regnum = gdbarch_num_regs (gdbarch) + SPARC64_D0_REGNUM
1250                    + element + bitpos / 64;
1251           regcache->cooked_write (regnum, valbuf + (bitpos / 8));
1252         }
1253       else
1254         {
1255           gdb_assert (len == 4);
1256           gdb_assert (bitpos % 32 == 0 && bitpos >= 0 && bitpos < 128);
1257
1258           regnum = SPARC_F0_REGNUM + element * 2 + bitpos / 32;
1259           regcache->cooked_write (regnum, valbuf + (bitpos / 8));
1260         }
1261     }
1262   else if (sparc64_structure_or_union_p (type))
1263     {
1264       int i;
1265
1266       for (i = 0; i < TYPE_NFIELDS (type); i++)
1267         {
1268           struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
1269           int subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
1270
1271           sparc64_store_floating_fields (regcache, subtype, valbuf,
1272                                          element, subpos);
1273         }
1274
1275       /* GCC has an interesting bug.  If TYPE is a structure that has
1276          a single `float' member, GCC doesn't treat it as a structure
1277          at all, but rather as an ordinary `float' argument.  This
1278          argument will be stored in %f1, as required by the psABI.
1279          However, as a member of a structure the psABI requires it to
1280          be stored in %f0.  This bug is present in GCC 3.3.2, but
1281          probably in older releases to.  To appease GCC, if a
1282          structure has only a single `float' member, we store its
1283          value in %f1 too (we already have stored in %f0).  */
1284       if (TYPE_NFIELDS (type) == 1)
1285         {
1286           struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, 0));
1287
1288           if (sparc64_floating_p (subtype) && TYPE_LENGTH (subtype) == 4)
1289             regcache->cooked_write (SPARC_F1_REGNUM, valbuf);
1290         }
1291     }
1292 }
1293
1294 /* Fetch floating fields from a variable of type TYPE from the
1295    appropriate registers for BITPOS in REGCACHE and store it at BITPOS
1296    in VALBUF.  This function can be called recursively and therefore
1297    handles floating types in addition to structures.  */
1298
1299 static void
1300 sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
1301                                  gdb_byte *valbuf, int bitpos)
1302 {
1303   struct gdbarch *gdbarch = regcache->arch ();
1304
1305   if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1306     {
1307       int len = TYPE_LENGTH (type);
1308       int regnum =  SPARC_F0_REGNUM + bitpos / 32;
1309
1310       valbuf += bitpos / 8;
1311       if (len < 4)
1312         {
1313           gdb_byte buf[4];
1314           regcache->cooked_read (regnum, buf);
1315           memcpy (valbuf, buf + 4 - len, len);
1316         }
1317       else
1318         for (int i = 0; i < (len + 3) / 4; i++)
1319           regcache->cooked_read (regnum + i, valbuf + i * 4);
1320     }
1321   else if (sparc64_floating_p (type))
1322     {
1323       int len = TYPE_LENGTH (type);
1324       int regnum;
1325
1326       if (len == 16)
1327         {
1328           gdb_assert (bitpos == 0 || bitpos == 128);
1329
1330           regnum = gdbarch_num_regs (gdbarch) + SPARC64_Q0_REGNUM
1331                    + bitpos / 128;
1332           regcache->cooked_read (regnum, valbuf + (bitpos / 8));
1333         }
1334       else if (len == 8)
1335         {
1336           gdb_assert (bitpos % 64 == 0 && bitpos >= 0 && bitpos < 256);
1337
1338           regnum = gdbarch_num_regs (gdbarch) + SPARC64_D0_REGNUM + bitpos / 64;
1339           regcache->cooked_read (regnum, valbuf + (bitpos / 8));
1340         }
1341       else
1342         {
1343           gdb_assert (len == 4);
1344           gdb_assert (bitpos % 32 == 0 && bitpos >= 0 && bitpos < 256);
1345
1346           regnum = SPARC_F0_REGNUM + bitpos / 32;
1347           regcache->cooked_read (regnum, valbuf + (bitpos / 8));
1348         }
1349     }
1350   else if (sparc64_structure_or_union_p (type))
1351     {
1352       int i;
1353
1354       for (i = 0; i < TYPE_NFIELDS (type); i++)
1355         {
1356           struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
1357           int subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
1358
1359           sparc64_extract_floating_fields (regcache, subtype, valbuf, subpos);
1360         }
1361     }
1362 }
1363
1364 /* Store the NARGS arguments ARGS and STRUCT_ADDR (if STRUCT_RETURN is
1365    non-zero) in REGCACHE and on the stack (starting from address SP).  */
1366
1367 static CORE_ADDR
1368 sparc64_store_arguments (struct regcache *regcache, int nargs,
1369                          struct value **args, CORE_ADDR sp,
1370                          function_call_return_method return_method,
1371                          CORE_ADDR struct_addr)
1372 {
1373   struct gdbarch *gdbarch = regcache->arch ();
1374   /* Number of extended words in the "parameter array".  */
1375   int num_elements = 0;
1376   int element = 0;
1377   int i;
1378
1379   /* Take BIAS into account.  */
1380   sp += BIAS;
1381
1382   /* First we calculate the number of extended words in the "parameter
1383      array".  While doing so we also convert some of the arguments.  */
1384
1385   if (return_method == return_method_struct)
1386     num_elements++;
1387
1388   for (i = 0; i < nargs; i++)
1389     {
1390       struct type *type = value_type (args[i]);
1391       int len = TYPE_LENGTH (type);
1392
1393       if (sparc64_structure_or_union_p (type)
1394           || (sparc64_complex_floating_p (type) && len == 32))
1395         {
1396           /* Structure or Union arguments.  */
1397           if (len <= 16)
1398             {
1399               if (num_elements % 2 && sparc64_16_byte_align_p (type))
1400                 num_elements++;
1401               num_elements += ((len + 7) / 8);
1402             }
1403           else
1404             {
1405               /* The psABI says that "Structures or unions larger than
1406                  sixteen bytes are copied by the caller and passed
1407                  indirectly; the caller will pass the address of a
1408                  correctly aligned structure value.  This sixty-four
1409                  bit address will occupy one word in the parameter
1410                  array, and may be promoted to an %o register like any
1411                  other pointer value."  Allocate memory for these
1412                  values on the stack.  */
1413               sp -= len;
1414
1415               /* Use 16-byte alignment for these values.  That's
1416                  always correct, and wasting a few bytes shouldn't be
1417                  a problem.  */
1418               sp &= ~0xf;
1419
1420               write_memory (sp, value_contents (args[i]), len);
1421               args[i] = value_from_pointer (lookup_pointer_type (type), sp);
1422               num_elements++;
1423             }
1424         }
1425       else if (sparc64_floating_p (type) || sparc64_complex_floating_p (type))
1426         {
1427           /* Floating arguments.  */
1428           if (len == 16)
1429             {
1430               /* The psABI says that "Each quad-precision parameter
1431                  value will be assigned to two extended words in the
1432                  parameter array.  */
1433               num_elements += 2;
1434
1435               /* The psABI says that "Long doubles must be
1436                  quad-aligned, and thus a hole might be introduced
1437                  into the parameter array to force alignment."  Skip
1438                  an element if necessary.  */
1439               if ((num_elements % 2) && sparc64_16_byte_align_p (type))
1440                 num_elements++;
1441             }
1442           else
1443             num_elements++;
1444         }
1445       else
1446         {
1447           /* Integral and pointer arguments.  */
1448           gdb_assert (sparc64_integral_or_pointer_p (type));
1449
1450           /* The psABI says that "Each argument value of integral type
1451              smaller than an extended word will be widened by the
1452              caller to an extended word according to the signed-ness
1453              of the argument type."  */
1454           if (len < 8)
1455             args[i] = value_cast (builtin_type (gdbarch)->builtin_int64,
1456                                   args[i]);
1457           num_elements++;
1458         }
1459     }
1460
1461   /* Allocate the "parameter array".  */
1462   sp -= num_elements * 8;
1463
1464   /* The psABI says that "Every stack frame must be 16-byte aligned."  */
1465   sp &= ~0xf;
1466
1467   /* Now we store the arguments in to the "paramater array".  Some
1468      Integer or Pointer arguments and Structure or Union arguments
1469      will be passed in %o registers.  Some Floating arguments and
1470      floating members of structures are passed in floating-point
1471      registers.  However, for functions with variable arguments,
1472      floating arguments are stored in an %0 register, and for
1473      functions without a prototype floating arguments are stored in
1474      both a floating-point and an %o registers, or a floating-point
1475      register and memory.  To simplify the logic here we always pass
1476      arguments in memory, an %o register, and a floating-point
1477      register if appropriate.  This should be no problem since the
1478      contents of any unused memory or registers in the "parameter
1479      array" are undefined.  */
1480
1481   if (return_method == return_method_struct)
1482     {
1483       regcache_cooked_write_unsigned (regcache, SPARC_O0_REGNUM, struct_addr);
1484       element++;
1485     }
1486
1487   for (i = 0; i < nargs; i++)
1488     {
1489       const gdb_byte *valbuf = value_contents (args[i]);
1490       struct type *type = value_type (args[i]);
1491       int len = TYPE_LENGTH (type);
1492       int regnum = -1;
1493       gdb_byte buf[16];
1494
1495       if (sparc64_structure_or_union_p (type)
1496           || (sparc64_complex_floating_p (type) && len == 32))
1497         {
1498           /* Structure, Union or long double Complex arguments.  */
1499           gdb_assert (len <= 16);
1500           memset (buf, 0, sizeof (buf));
1501           memcpy (buf, valbuf, len);
1502           valbuf = buf;
1503
1504           if (element % 2 && sparc64_16_byte_align_p (type))
1505             element++;
1506
1507           if (element < 6)
1508             {
1509               regnum = SPARC_O0_REGNUM + element;
1510               if (len > 8 && element < 5)
1511                 regcache->cooked_write (regnum + 1, valbuf + 8);
1512             }
1513
1514           if (element < 16)
1515             sparc64_store_floating_fields (regcache, type, valbuf, element, 0);
1516         }
1517       else if (sparc64_complex_floating_p (type))
1518         {
1519           /* Float Complex or double Complex arguments.  */
1520           if (element < 16)
1521             {
1522               regnum = gdbarch_num_regs (gdbarch) + SPARC64_D0_REGNUM + element;
1523
1524               if (len == 16)
1525                 {
1526                   if (regnum < gdbarch_num_regs (gdbarch) + SPARC64_D30_REGNUM)
1527                     regcache->cooked_write (regnum + 1, valbuf + 8);
1528                   if (regnum < gdbarch_num_regs (gdbarch) + SPARC64_D10_REGNUM)
1529                     regcache->cooked_write (SPARC_O0_REGNUM + element + 1,
1530                                             valbuf + 8);
1531                 }
1532             }
1533         }
1534       else if (sparc64_floating_p (type))
1535         {
1536           /* Floating arguments.  */
1537           if (len == 16)
1538             {
1539               if (element % 2)
1540                 element++;
1541               if (element < 16)
1542                 regnum = gdbarch_num_regs (gdbarch) + SPARC64_Q0_REGNUM
1543                          + element / 2;
1544             }
1545           else if (len == 8)
1546             {
1547               if (element < 16)
1548                 regnum = gdbarch_num_regs (gdbarch) + SPARC64_D0_REGNUM
1549                          + element;
1550             }
1551           else if (len == 4)
1552             {
1553               /* The psABI says "Each single-precision parameter value
1554                  will be assigned to one extended word in the
1555                  parameter array, and right-justified within that
1556                  word; the left half (even float register) is
1557                  undefined."  Even though the psABI says that "the
1558                  left half is undefined", set it to zero here.  */
1559               memset (buf, 0, 4);
1560               memcpy (buf + 4, valbuf, 4);
1561               valbuf = buf;
1562               len = 8;
1563               if (element < 16)
1564                 regnum = gdbarch_num_regs (gdbarch) + SPARC64_D0_REGNUM
1565                          + element;
1566             }
1567         }
1568       else
1569         {
1570           /* Integral and pointer arguments.  */
1571           gdb_assert (len == 8);
1572           if (element < 6)
1573             regnum = SPARC_O0_REGNUM + element;
1574         }
1575
1576       if (regnum != -1)
1577         {
1578           regcache->cooked_write (regnum, valbuf);
1579
1580           /* If we're storing the value in a floating-point register,
1581              also store it in the corresponding %0 register(s).  */
1582           if (regnum >= gdbarch_num_regs (gdbarch))
1583             {
1584               regnum -= gdbarch_num_regs (gdbarch);
1585
1586               if (regnum >= SPARC64_D0_REGNUM && regnum <= SPARC64_D10_REGNUM)
1587                 {
1588                   gdb_assert (element < 6);
1589                   regnum = SPARC_O0_REGNUM + element;
1590                   regcache->cooked_write (regnum, valbuf);
1591                 }
1592               else if (regnum >= SPARC64_Q0_REGNUM && regnum <= SPARC64_Q8_REGNUM)
1593                 {
1594                   gdb_assert (element < 5);
1595                   regnum = SPARC_O0_REGNUM + element;
1596                   regcache->cooked_write (regnum, valbuf);
1597                   regcache->cooked_write (regnum + 1, valbuf + 8);
1598                 }
1599             }
1600         }
1601
1602       /* Always store the argument in memory.  */
1603       write_memory (sp + element * 8, valbuf, len);
1604       element += ((len + 7) / 8);
1605     }
1606
1607   gdb_assert (element == num_elements);
1608
1609   /* Take BIAS into account.  */
1610   sp -= BIAS;
1611   return sp;
1612 }
1613
1614 static CORE_ADDR
1615 sparc64_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
1616 {
1617   /* The ABI requires 16-byte alignment.  */
1618   return address & ~0xf;
1619 }
1620
1621 static CORE_ADDR
1622 sparc64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1623                          struct regcache *regcache, CORE_ADDR bp_addr,
1624                          int nargs, struct value **args, CORE_ADDR sp,
1625                          function_call_return_method return_method,
1626                          CORE_ADDR struct_addr)
1627 {
1628   /* Set return address.  */
1629   regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, bp_addr - 8);
1630
1631   /* Set up function arguments.  */
1632   sp = sparc64_store_arguments (regcache, nargs, args, sp, return_method,
1633                                 struct_addr);
1634
1635   /* Allocate the register save area.  */
1636   sp -= 16 * 8;
1637
1638   /* Stack should be 16-byte aligned at this point.  */
1639   gdb_assert ((sp + BIAS) % 16 == 0);
1640
1641   /* Finally, update the stack pointer.  */
1642   regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
1643
1644   return sp + BIAS;
1645 }
1646 \f
1647
1648 /* Extract from an array REGBUF containing the (raw) register state, a
1649    function return value of TYPE, and copy that into VALBUF.  */
1650
1651 static void
1652 sparc64_extract_return_value (struct type *type, struct regcache *regcache,
1653                               gdb_byte *valbuf)
1654 {
1655   int len = TYPE_LENGTH (type);
1656   gdb_byte buf[32];
1657   int i;
1658
1659   if (sparc64_structure_or_union_p (type))
1660     {
1661       /* Structure or Union return values.  */
1662       gdb_assert (len <= 32);
1663
1664       for (i = 0; i < ((len + 7) / 8); i++)
1665         regcache->cooked_read (SPARC_O0_REGNUM + i, buf + i * 8);
1666       if (TYPE_CODE (type) != TYPE_CODE_UNION)
1667         sparc64_extract_floating_fields (regcache, type, buf, 0);
1668       memcpy (valbuf, buf, len);
1669     }
1670   else if (sparc64_floating_p (type) || sparc64_complex_floating_p (type))
1671     {
1672       /* Floating return values.  */
1673       for (i = 0; i < len / 4; i++)
1674         regcache->cooked_read (SPARC_F0_REGNUM + i, buf + i * 4);
1675       memcpy (valbuf, buf, len);
1676     }
1677   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1678     {
1679       /* Small arrays are returned the same way as small structures.  */
1680       gdb_assert (len <= 32);
1681
1682       for (i = 0; i < ((len + 7) / 8); i++)
1683         regcache->cooked_read (SPARC_O0_REGNUM + i, buf + i * 8);
1684       memcpy (valbuf, buf, len);
1685     }
1686   else
1687     {
1688       /* Integral and pointer return values.  */
1689       gdb_assert (sparc64_integral_or_pointer_p (type));
1690
1691       /* Just stripping off any unused bytes should preserve the
1692          signed-ness just fine.  */
1693       regcache->cooked_read (SPARC_O0_REGNUM, buf);
1694       memcpy (valbuf, buf + 8 - len, len);
1695     }
1696 }
1697
1698 /* Write into the appropriate registers a function return value stored
1699    in VALBUF of type TYPE.  */
1700
1701 static void
1702 sparc64_store_return_value (struct type *type, struct regcache *regcache,
1703                             const gdb_byte *valbuf)
1704 {
1705   int len = TYPE_LENGTH (type);
1706   gdb_byte buf[16];
1707   int i;
1708
1709   if (sparc64_structure_or_union_p (type))
1710     {
1711       /* Structure or Union return values.  */
1712       gdb_assert (len <= 32);
1713
1714       /* Simplify matters by storing the complete value (including
1715          floating members) into %o0 and %o1.  Floating members are
1716          also store in the appropriate floating-point registers.  */
1717       memset (buf, 0, sizeof (buf));
1718       memcpy (buf, valbuf, len);
1719       for (i = 0; i < ((len + 7) / 8); i++)
1720         regcache->cooked_write (SPARC_O0_REGNUM + i, buf + i * 8);
1721       if (TYPE_CODE (type) != TYPE_CODE_UNION)
1722         sparc64_store_floating_fields (regcache, type, buf, 0, 0);
1723     }
1724   else if (sparc64_floating_p (type) || sparc64_complex_floating_p (type))
1725     {
1726       /* Floating return values.  */
1727       memcpy (buf, valbuf, len);
1728       for (i = 0; i < len / 4; i++)
1729         regcache->cooked_write (SPARC_F0_REGNUM + i, buf + i * 4);
1730     }
1731   else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1732     {
1733       /* Small arrays are returned the same way as small structures.  */
1734       gdb_assert (len <= 32);
1735
1736       memset (buf, 0, sizeof (buf));
1737       memcpy (buf, valbuf, len);
1738       for (i = 0; i < ((len + 7) / 8); i++)
1739         regcache->cooked_write (SPARC_O0_REGNUM + i, buf + i * 8);
1740     }
1741   else
1742     {
1743       /* Integral and pointer return values.  */
1744       gdb_assert (sparc64_integral_or_pointer_p (type));
1745
1746       /* ??? Do we need to do any sign-extension here?  */
1747       memset (buf, 0, 8);
1748       memcpy (buf + 8 - len, valbuf, len);
1749       regcache->cooked_write (SPARC_O0_REGNUM, buf);
1750     }
1751 }
1752
1753 static enum return_value_convention
1754 sparc64_return_value (struct gdbarch *gdbarch, struct value *function,
1755                       struct type *type, struct regcache *regcache,
1756                       gdb_byte *readbuf, const gdb_byte *writebuf)
1757 {
1758   if (TYPE_LENGTH (type) > 32)
1759     return RETURN_VALUE_STRUCT_CONVENTION;
1760
1761   if (readbuf)
1762     sparc64_extract_return_value (type, regcache, readbuf);
1763   if (writebuf)
1764     sparc64_store_return_value (type, regcache, writebuf);
1765
1766   return RETURN_VALUE_REGISTER_CONVENTION;
1767 }
1768 \f
1769
1770 static void
1771 sparc64_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1772                                struct dwarf2_frame_state_reg *reg,
1773                                struct frame_info *this_frame)
1774 {
1775   switch (regnum)
1776     {
1777     case SPARC_G0_REGNUM:
1778       /* Since %g0 is always zero, there is no point in saving it, and
1779          people will be inclined omit it from the CFI.  Make sure we
1780          don't warn about that.  */
1781       reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1782       break;
1783     case SPARC_SP_REGNUM:
1784       reg->how = DWARF2_FRAME_REG_CFA;
1785       break;
1786     case SPARC64_PC_REGNUM:
1787       reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1788       reg->loc.offset = 8;
1789       break;
1790     case SPARC64_NPC_REGNUM:
1791       reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1792       reg->loc.offset = 12;
1793       break;
1794     }
1795 }
1796
1797 /* sparc64_addr_bits_remove - remove useless address bits  */
1798
1799 static CORE_ADDR
1800 sparc64_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
1801 {
1802   return adi_normalize_address (addr);
1803 }
1804
1805 void
1806 sparc64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1807 {
1808   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1809
1810   tdep->pc_regnum = SPARC64_PC_REGNUM;
1811   tdep->npc_regnum = SPARC64_NPC_REGNUM;
1812   tdep->fpu_register_names = sparc64_fpu_register_names;
1813   tdep->fpu_registers_num = ARRAY_SIZE (sparc64_fpu_register_names);
1814   tdep->cp0_register_names = sparc64_cp0_register_names;
1815   tdep->cp0_registers_num = ARRAY_SIZE (sparc64_cp0_register_names);
1816
1817   /* This is what all the fuss is about.  */
1818   set_gdbarch_long_bit (gdbarch, 64);
1819   set_gdbarch_long_long_bit (gdbarch, 64);
1820   set_gdbarch_ptr_bit (gdbarch, 64);
1821
1822   set_gdbarch_wchar_bit (gdbarch, 16);
1823   set_gdbarch_wchar_signed (gdbarch, 0);
1824
1825   set_gdbarch_num_regs (gdbarch, SPARC64_NUM_REGS);
1826   set_gdbarch_register_name (gdbarch, sparc64_register_name);
1827   set_gdbarch_register_type (gdbarch, sparc64_register_type);
1828   set_gdbarch_num_pseudo_regs (gdbarch, SPARC64_NUM_PSEUDO_REGS);
1829   set_tdesc_pseudo_register_name (gdbarch, sparc64_pseudo_register_name);
1830   set_tdesc_pseudo_register_type (gdbarch, sparc64_pseudo_register_type);
1831   set_gdbarch_pseudo_register_read (gdbarch, sparc64_pseudo_register_read);
1832   set_gdbarch_pseudo_register_write (gdbarch, sparc64_pseudo_register_write);
1833
1834   /* Register numbers of various important registers.  */
1835   set_gdbarch_pc_regnum (gdbarch, SPARC64_PC_REGNUM); /* %pc */
1836
1837   /* Call dummy code.  */
1838   set_gdbarch_frame_align (gdbarch, sparc64_frame_align);
1839   set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
1840   set_gdbarch_push_dummy_code (gdbarch, NULL);
1841   set_gdbarch_push_dummy_call (gdbarch, sparc64_push_dummy_call);
1842
1843   set_gdbarch_return_value (gdbarch, sparc64_return_value);
1844   set_gdbarch_stabs_argument_has_addr
1845     (gdbarch, default_stabs_argument_has_addr);
1846
1847   set_gdbarch_skip_prologue (gdbarch, sparc64_skip_prologue);
1848   set_gdbarch_stack_frame_destroyed_p (gdbarch, sparc_stack_frame_destroyed_p);
1849
1850   /* Hook in the DWARF CFI frame unwinder.  */
1851   dwarf2_frame_set_init_reg (gdbarch, sparc64_dwarf2_frame_init_reg);
1852   /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1853      StackGhost issues have been resolved.  */
1854
1855   frame_unwind_append_unwinder (gdbarch, &sparc64_frame_unwind);
1856   frame_base_set_default (gdbarch, &sparc64_frame_base);
1857
1858   set_gdbarch_addr_bits_remove (gdbarch, sparc64_addr_bits_remove);
1859 }
1860 \f
1861
1862 /* Helper functions for dealing with register sets.  */
1863
1864 #define TSTATE_CWP      0x000000000000001fULL
1865 #define TSTATE_ICC      0x0000000f00000000ULL
1866 #define TSTATE_XCC      0x000000f000000000ULL
1867
1868 #define PSR_S           0x00000080
1869 #ifndef PSR_ICC
1870 #define PSR_ICC         0x00f00000
1871 #endif
1872 #define PSR_VERS        0x0f000000
1873 #ifndef PSR_IMPL
1874 #define PSR_IMPL        0xf0000000
1875 #endif
1876 #define PSR_V8PLUS      0xff000000
1877 #define PSR_XCC         0x000f0000
1878
1879 void
1880 sparc64_supply_gregset (const struct sparc_gregmap *gregmap,
1881                         struct regcache *regcache,
1882                         int regnum, const void *gregs)
1883 {
1884   struct gdbarch *gdbarch = regcache->arch ();
1885   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1886   int sparc32 = (gdbarch_ptr_bit (gdbarch) == 32);
1887   const gdb_byte *regs = (const gdb_byte *) gregs;
1888   gdb_byte zero[8] = { 0 };
1889   int i;
1890
1891   if (sparc32)
1892     {
1893       if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1894         {
1895           int offset = gregmap->r_tstate_offset;
1896           ULONGEST tstate, psr;
1897           gdb_byte buf[4];
1898
1899           tstate = extract_unsigned_integer (regs + offset, 8, byte_order);
1900           psr = ((tstate & TSTATE_CWP) | PSR_S | ((tstate & TSTATE_ICC) >> 12)
1901                  | ((tstate & TSTATE_XCC) >> 20) | PSR_V8PLUS);
1902           store_unsigned_integer (buf, 4, byte_order, psr);
1903           regcache->raw_supply (SPARC32_PSR_REGNUM, buf);
1904         }
1905
1906       if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1907         regcache->raw_supply (SPARC32_PC_REGNUM,
1908                               regs + gregmap->r_pc_offset + 4);
1909
1910       if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1911         regcache->raw_supply (SPARC32_NPC_REGNUM,
1912                               regs + gregmap->r_npc_offset + 4);
1913
1914       if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1915         {
1916           int offset = gregmap->r_y_offset + 8 - gregmap->r_y_size;
1917           regcache->raw_supply (SPARC32_Y_REGNUM, regs + offset);
1918         }
1919     }
1920   else
1921     {
1922       if (regnum == SPARC64_STATE_REGNUM || regnum == -1)
1923         regcache->raw_supply (SPARC64_STATE_REGNUM,
1924                               regs + gregmap->r_tstate_offset);
1925
1926       if (regnum == SPARC64_PC_REGNUM || regnum == -1)
1927         regcache->raw_supply (SPARC64_PC_REGNUM,
1928                               regs + gregmap->r_pc_offset);
1929
1930       if (regnum == SPARC64_NPC_REGNUM || regnum == -1)
1931         regcache->raw_supply (SPARC64_NPC_REGNUM,
1932                               regs + gregmap->r_npc_offset);
1933
1934       if (regnum == SPARC64_Y_REGNUM || regnum == -1)
1935         {
1936           gdb_byte buf[8];
1937
1938           memset (buf, 0, 8);
1939           memcpy (buf + 8 - gregmap->r_y_size,
1940                   regs + gregmap->r_y_offset, gregmap->r_y_size);
1941           regcache->raw_supply (SPARC64_Y_REGNUM, buf);
1942         }
1943
1944       if ((regnum == SPARC64_FPRS_REGNUM || regnum == -1)
1945           && gregmap->r_fprs_offset != -1)
1946         regcache->raw_supply (SPARC64_FPRS_REGNUM,
1947                               regs + gregmap->r_fprs_offset);
1948     }
1949
1950   if (regnum == SPARC_G0_REGNUM || regnum == -1)
1951     regcache->raw_supply (SPARC_G0_REGNUM, &zero);
1952
1953   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1954     {
1955       int offset = gregmap->r_g1_offset;
1956
1957       if (sparc32)
1958         offset += 4;
1959
1960       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1961         {
1962           if (regnum == i || regnum == -1)
1963             regcache->raw_supply (i, regs + offset);
1964           offset += 8;
1965         }
1966     }
1967
1968   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1969     {
1970       /* Not all of the register set variants include Locals and
1971          Inputs.  For those that don't, we read them off the stack.  */
1972       if (gregmap->r_l0_offset == -1)
1973         {
1974           ULONGEST sp;
1975
1976           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1977           sparc_supply_rwindow (regcache, sp, regnum);
1978         }
1979       else
1980         {
1981           int offset = gregmap->r_l0_offset;
1982
1983           if (sparc32)
1984             offset += 4;
1985
1986           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1987             {
1988               if (regnum == i || regnum == -1)
1989                 regcache->raw_supply (i, regs + offset);
1990               offset += 8;
1991             }
1992         }
1993     }
1994 }
1995
1996 void
1997 sparc64_collect_gregset (const struct sparc_gregmap *gregmap,
1998                          const struct regcache *regcache,
1999                          int regnum, void *gregs)
2000 {
2001   struct gdbarch *gdbarch = regcache->arch ();
2002   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2003   int sparc32 = (gdbarch_ptr_bit (gdbarch) == 32);
2004   gdb_byte *regs = (gdb_byte *) gregs;
2005   int i;
2006
2007   if (sparc32)
2008     {
2009       if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
2010         {
2011           int offset = gregmap->r_tstate_offset;
2012           ULONGEST tstate, psr;
2013           gdb_byte buf[8];
2014
2015           tstate = extract_unsigned_integer (regs + offset, 8, byte_order);
2016           regcache->raw_collect (SPARC32_PSR_REGNUM, buf);
2017           psr = extract_unsigned_integer (buf, 4, byte_order);
2018           tstate |= (psr & PSR_ICC) << 12;
2019           if ((psr & (PSR_VERS | PSR_IMPL)) == PSR_V8PLUS)
2020             tstate |= (psr & PSR_XCC) << 20;
2021           store_unsigned_integer (buf, 8, byte_order, tstate);
2022           memcpy (regs + offset, buf, 8);
2023         }
2024
2025       if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2026         regcache->raw_collect (SPARC32_PC_REGNUM,
2027                                regs + gregmap->r_pc_offset + 4);
2028
2029       if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2030         regcache->raw_collect (SPARC32_NPC_REGNUM,
2031                                regs + gregmap->r_npc_offset + 4);
2032
2033       if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2034         {
2035           int offset = gregmap->r_y_offset + 8 - gregmap->r_y_size;
2036           regcache->raw_collect (SPARC32_Y_REGNUM, regs + offset);
2037         }
2038     }
2039   else
2040     {
2041       if (regnum == SPARC64_STATE_REGNUM || regnum == -1)
2042         regcache->raw_collect (SPARC64_STATE_REGNUM,
2043                                regs + gregmap->r_tstate_offset);
2044
2045       if (regnum == SPARC64_PC_REGNUM || regnum == -1)
2046         regcache->raw_collect (SPARC64_PC_REGNUM,
2047                                regs + gregmap->r_pc_offset);
2048
2049       if (regnum == SPARC64_NPC_REGNUM || regnum == -1)
2050         regcache->raw_collect (SPARC64_NPC_REGNUM,
2051                                regs + gregmap->r_npc_offset);
2052
2053       if (regnum == SPARC64_Y_REGNUM || regnum == -1)
2054         {
2055           gdb_byte buf[8];
2056
2057           regcache->raw_collect (SPARC64_Y_REGNUM, buf);
2058           memcpy (regs + gregmap->r_y_offset,
2059                   buf + 8 - gregmap->r_y_size, gregmap->r_y_size);
2060         }
2061
2062       if ((regnum == SPARC64_FPRS_REGNUM || regnum == -1)
2063           && gregmap->r_fprs_offset != -1)
2064         regcache->raw_collect (SPARC64_FPRS_REGNUM,
2065                                regs + gregmap->r_fprs_offset);
2066
2067     }
2068
2069   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
2070     {
2071       int offset = gregmap->r_g1_offset;
2072
2073       if (sparc32)
2074         offset += 4;
2075
2076       /* %g0 is always zero.  */
2077       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
2078         {
2079           if (regnum == i || regnum == -1)
2080             regcache->raw_collect (i, regs + offset);
2081           offset += 8;
2082         }
2083     }
2084
2085   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
2086     {
2087       /* Not all of the register set variants include Locals and
2088          Inputs.  For those that don't, we read them off the stack.  */
2089       if (gregmap->r_l0_offset != -1)
2090         {
2091           int offset = gregmap->r_l0_offset;
2092
2093           if (sparc32)
2094             offset += 4;
2095
2096           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2097             {
2098               if (regnum == i || regnum == -1)
2099                 regcache->raw_collect (i, regs + offset);
2100               offset += 8;
2101             }
2102         }
2103     }
2104 }
2105
2106 void
2107 sparc64_supply_fpregset (const struct sparc_fpregmap *fpregmap,
2108                          struct regcache *regcache,
2109                          int regnum, const void *fpregs)
2110 {
2111   int sparc32 = (gdbarch_ptr_bit (regcache->arch ()) == 32);
2112   const gdb_byte *regs = (const gdb_byte *) fpregs;
2113   int i;
2114
2115   for (i = 0; i < 32; i++)
2116     {
2117       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2118         regcache->raw_supply (SPARC_F0_REGNUM + i,
2119                               regs + fpregmap->r_f0_offset + (i * 4));
2120     }
2121
2122   if (sparc32)
2123     {
2124       if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2125         regcache->raw_supply (SPARC32_FSR_REGNUM,
2126                              regs + fpregmap->r_fsr_offset);
2127     }
2128   else
2129     {
2130       for (i = 0; i < 16; i++)
2131         {
2132           if (regnum == (SPARC64_F32_REGNUM + i) || regnum == -1)
2133             regcache->raw_supply
2134               (SPARC64_F32_REGNUM + i,
2135                regs + fpregmap->r_f0_offset + (32 * 4) + (i * 8));
2136         }
2137
2138       if (regnum == SPARC64_FSR_REGNUM || regnum == -1)
2139         regcache->raw_supply (SPARC64_FSR_REGNUM,
2140                               regs + fpregmap->r_fsr_offset);
2141     }
2142 }
2143
2144 void
2145 sparc64_collect_fpregset (const struct sparc_fpregmap *fpregmap,
2146                           const struct regcache *regcache,
2147                           int regnum, void *fpregs)
2148 {
2149   int sparc32 = (gdbarch_ptr_bit (regcache->arch ()) == 32);
2150   gdb_byte *regs = (gdb_byte *) fpregs;
2151   int i;
2152
2153   for (i = 0; i < 32; i++)
2154     {
2155       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2156         regcache->raw_collect (SPARC_F0_REGNUM + i,
2157                                regs + fpregmap->r_f0_offset + (i * 4));
2158     }
2159
2160   if (sparc32)
2161     {
2162       if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2163         regcache->raw_collect (SPARC32_FSR_REGNUM,
2164                                regs + fpregmap->r_fsr_offset);
2165     }
2166   else
2167     {
2168       for (i = 0; i < 16; i++)
2169         {
2170           if (regnum == (SPARC64_F32_REGNUM + i) || regnum == -1)
2171             regcache->raw_collect (SPARC64_F32_REGNUM + i,
2172                                    (regs + fpregmap->r_f0_offset
2173                                     + (32 * 4) + (i * 8)));
2174         }
2175
2176       if (regnum == SPARC64_FSR_REGNUM || regnum == -1)
2177         regcache->raw_collect (SPARC64_FSR_REGNUM,
2178                                regs + fpregmap->r_fsr_offset);
2179     }
2180 }
2181
2182 const struct sparc_fpregmap sparc64_bsd_fpregmap =
2183 {
2184   0 * 8,                        /* %f0 */
2185   32 * 8,                       /* %fsr */
2186 };