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