gdb: sparc: split real and pseudo registers.
[external/binutils.git] / gdb / sparc-tdep.c
1 /* Target-dependent code for SPARC.
2
3    Copyright (C) 2003-2017 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 "dis-asm.h"
23 #include "dwarf2-frame.h"
24 #include "floatformat.h"
25 #include "frame.h"
26 #include "frame-base.h"
27 #include "frame-unwind.h"
28 #include "gdbcore.h"
29 #include "gdbtypes.h"
30 #include "inferior.h"
31 #include "symtab.h"
32 #include "objfiles.h"
33 #include "osabi.h"
34 #include "regcache.h"
35 #include "target.h"
36 #include "value.h"
37
38 #include "sparc-tdep.h"
39 #include "sparc-ravenscar-thread.h"
40 #include <algorithm>
41
42 struct regset;
43
44 /* This file implements the SPARC 32-bit ABI as defined by the section
45    "Low-Level System Information" of the SPARC Compliance Definition
46    (SCD) 2.4.1, which is the 32-bit System V psABI for SPARC.  The SCD
47    lists changes with respect to the original 32-bit psABI as defined
48    in the "System V ABI, SPARC Processor Supplement".
49
50    Note that if we talk about SunOS, we mean SunOS 4.x, which was
51    BSD-based, which is sometimes (retroactively?) referred to as
52    Solaris 1.x.  If we talk about Solaris we mean Solaris 2.x and
53    above (Solaris 7, 8 and 9 are nothing but Solaris 2.7, 2.8 and 2.9
54    suffering from severe version number inflation).  Solaris 2.x is
55    also known as SunOS 5.x, since that's what uname(1) says.  Solaris
56    2.x is SVR4-based.  */
57
58 /* Please use the sparc32_-prefix for 32-bit specific code, the
59    sparc64_-prefix for 64-bit specific code and the sparc_-prefix for
60    code that can handle both.  The 64-bit specific code lives in
61    sparc64-tdep.c; don't add any here.  */
62
63 /* The SPARC Floating-Point Quad-Precision format is similar to
64    big-endian IA-64 Quad-Precision format.  */
65 #define floatformats_sparc_quad floatformats_ia64_quad
66
67 /* The stack pointer is offset from the stack frame by a BIAS of 2047
68    (0x7ff) for 64-bit code.  BIAS is likely to be defined on SPARC
69    hosts, so undefine it first.  */
70 #undef BIAS
71 #define BIAS 2047
72
73 /* Macros to extract fields from SPARC instructions.  */
74 #define X_OP(i) (((i) >> 30) & 0x3)
75 #define X_RD(i) (((i) >> 25) & 0x1f)
76 #define X_A(i) (((i) >> 29) & 1)
77 #define X_COND(i) (((i) >> 25) & 0xf)
78 #define X_OP2(i) (((i) >> 22) & 0x7)
79 #define X_IMM22(i) ((i) & 0x3fffff)
80 #define X_OP3(i) (((i) >> 19) & 0x3f)
81 #define X_RS1(i) (((i) >> 14) & 0x1f)
82 #define X_RS2(i) ((i) & 0x1f)
83 #define X_I(i) (((i) >> 13) & 1)
84 /* Sign extension macros.  */
85 #define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
86 #define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
87 #define X_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
88 #define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
89 /* Macros to identify some instructions.  */
90 /* RETURN (RETT in V8) */
91 #define X_RETTURN(i) ((X_OP (i) == 0x2) && (X_OP3 (i) == 0x39))
92
93 /* Fetch the instruction at PC.  Instructions are always big-endian
94    even if the processor operates in little-endian mode.  */
95
96 unsigned long
97 sparc_fetch_instruction (CORE_ADDR pc)
98 {
99   gdb_byte buf[4];
100   unsigned long insn;
101   int i;
102
103   /* If we can't read the instruction at PC, return zero.  */
104   if (target_read_memory (pc, buf, sizeof (buf)))
105     return 0;
106
107   insn = 0;
108   for (i = 0; i < sizeof (buf); i++)
109     insn = (insn << 8) | buf[i];
110   return insn;
111 }
112 \f
113
114 /* Return non-zero if the instruction corresponding to PC is an "unimp"
115    instruction.  */
116
117 static int
118 sparc_is_unimp_insn (CORE_ADDR pc)
119 {
120   const unsigned long insn = sparc_fetch_instruction (pc);
121   
122   return ((insn & 0xc1c00000) == 0);
123 }
124
125 /* Return non-zero if the instruction corresponding to PC is an
126    "annulled" branch, i.e. the annul bit is set.  */
127
128 int
129 sparc_is_annulled_branch_insn (CORE_ADDR pc)
130 {
131   /* The branch instructions featuring an annul bit can be identified
132      by the following bit patterns:
133
134      OP=0
135       OP2=1: Branch on Integer Condition Codes with Prediction (BPcc).
136       OP2=2: Branch on Integer Condition Codes (Bcc).
137       OP2=5: Branch on FP Condition Codes with Prediction (FBfcc).
138       OP2=6: Branch on FP Condition Codes (FBcc).
139       OP2=3 && Bit28=0:
140              Branch on Integer Register with Prediction (BPr).
141
142      This leaves out ILLTRAP (OP2=0), SETHI/NOP (OP2=4) and the V8
143      coprocessor branch instructions (Op2=7).  */
144
145   const unsigned long insn = sparc_fetch_instruction (pc);
146   const unsigned op2 = X_OP2 (insn);
147
148   if ((X_OP (insn) == 0)
149       && ((op2 == 1) || (op2 == 2) || (op2 == 5) || (op2 == 6)
150           || ((op2 == 3) && ((insn & 0x10000000) == 0))))
151     return X_A (insn);
152   else
153     return 0;
154 }
155
156 /* OpenBSD/sparc includes StackGhost, which according to the author's
157    website http://stackghost.cerias.purdue.edu "... transparently and
158    automatically protects applications' stack frames; more
159    specifically, it guards the return pointers.  The protection
160    mechanisms require no application source or binary modification and
161    imposes only a negligible performance penalty."
162
163    The same website provides the following description of how
164    StackGhost works:
165
166    "StackGhost interfaces with the kernel trap handler that would
167    normally write out registers to the stack and the handler that
168    would read them back in.  By XORing a cookie into the
169    return-address saved in the user stack when it is actually written
170    to the stack, and then XOR it out when the return-address is pulled
171    from the stack, StackGhost can cause attacker corrupted return
172    pointers to behave in a manner the attacker cannot predict.
173    StackGhost can also use several unused bits in the return pointer
174    to detect a smashed return pointer and abort the process."
175
176    For GDB this means that whenever we're reading %i7 from a stack
177    frame's window save area, we'll have to XOR the cookie.
178
179    More information on StackGuard can be found on in:
180
181    Mike Frantzen and Mike Shuey.  "StackGhost: Hardware Facilitated
182    Stack Protection."  2001.  Published in USENIX Security Symposium
183    '01.  */
184
185 /* Fetch StackGhost Per-Process XOR cookie.  */
186
187 ULONGEST
188 sparc_fetch_wcookie (struct gdbarch *gdbarch)
189 {
190   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
191   struct target_ops *ops = &current_target;
192   gdb_byte buf[8];
193   int len;
194
195   len = target_read (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
196   if (len == -1)
197     return 0;
198
199   /* We should have either an 32-bit or an 64-bit cookie.  */
200   gdb_assert (len == 4 || len == 8);
201
202   return extract_unsigned_integer (buf, len, byte_order);
203 }
204 \f
205
206 /* The functions on this page are intended to be used to classify
207    function arguments.  */
208
209 /* Check whether TYPE is "Integral or Pointer".  */
210
211 static int
212 sparc_integral_or_pointer_p (const struct type *type)
213 {
214   int len = TYPE_LENGTH (type);
215
216   switch (TYPE_CODE (type))
217     {
218     case TYPE_CODE_INT:
219     case TYPE_CODE_BOOL:
220     case TYPE_CODE_CHAR:
221     case TYPE_CODE_ENUM:
222     case TYPE_CODE_RANGE:
223       /* We have byte, half-word, word and extended-word/doubleword
224          integral types.  The doubleword is an extension to the
225          original 32-bit ABI by the SCD 2.4.x.  */
226       return (len == 1 || len == 2 || len == 4 || len == 8);
227     case TYPE_CODE_PTR:
228     case TYPE_CODE_REF:
229       /* Allow either 32-bit or 64-bit pointers.  */
230       return (len == 4 || len == 8);
231     default:
232       break;
233     }
234
235   return 0;
236 }
237
238 /* Check whether TYPE is "Floating".  */
239
240 static int
241 sparc_floating_p (const struct type *type)
242 {
243   switch (TYPE_CODE (type))
244     {
245     case TYPE_CODE_FLT:
246       {
247         int len = TYPE_LENGTH (type);
248         return (len == 4 || len == 8 || len == 16);
249       }
250     default:
251       break;
252     }
253
254   return 0;
255 }
256
257 /* Check whether TYPE is "Complex Floating".  */
258
259 static int
260 sparc_complex_floating_p (const struct type *type)
261 {
262   switch (TYPE_CODE (type))
263     {
264     case TYPE_CODE_COMPLEX:
265       {
266         int len = TYPE_LENGTH (type);
267         return (len == 8 || len == 16 || len == 32);
268       }
269     default:
270       break;
271     }
272
273   return 0;
274 }
275
276 /* Check whether TYPE is "Structure or Union".
277
278    In terms of Ada subprogram calls, arrays are treated the same as
279    struct and union types.  So this function also returns non-zero
280    for array types.  */
281
282 static int
283 sparc_structure_or_union_p (const struct type *type)
284 {
285   switch (TYPE_CODE (type))
286     {
287     case TYPE_CODE_STRUCT:
288     case TYPE_CODE_UNION:
289     case TYPE_CODE_ARRAY:
290       return 1;
291     default:
292       break;
293     }
294
295   return 0;
296 }
297
298 /* Register information.  */
299 #define SPARC32_FPU_REGISTERS                             \
300   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",         \
301   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",   \
302   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
303   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31"
304 #define SPARC32_CP0_REGISTERS \
305   "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
306
307 static const char *sparc32_register_names[] =
308 {
309   SPARC_CORE_REGISTERS,
310   SPARC32_FPU_REGISTERS,
311   SPARC32_CP0_REGISTERS
312 };
313
314 /* Total number of registers.  */
315 #define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
316
317 /* We provide the aliases %d0..%d30 for the floating registers as
318    "psuedo" registers.  */
319
320 static const char *sparc32_pseudo_register_names[] =
321 {
322   "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
323   "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
324 };
325
326 /* Total number of pseudo registers.  */
327 #define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
328
329 /* Return the name of pseudo register REGNUM.  */
330
331 static const char *
332 sparc32_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
333 {
334   regnum -= gdbarch_num_regs (gdbarch);
335
336   if (regnum < SPARC32_NUM_PSEUDO_REGS)
337     return sparc32_pseudo_register_names[regnum];
338
339   internal_error (__FILE__, __LINE__,
340                   _("sparc32_pseudo_register_name: bad register number %d"),
341                   regnum);
342 }
343
344 /* Return the name of register REGNUM.  */
345
346 static const char *
347 sparc32_register_name (struct gdbarch *gdbarch, int regnum)
348 {
349   if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
350     return sparc32_register_names[regnum];
351
352   return sparc32_pseudo_register_name (gdbarch, regnum);
353 }
354 \f
355 /* Construct types for ISA-specific registers.  */
356
357 static struct type *
358 sparc_psr_type (struct gdbarch *gdbarch)
359 {
360   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
361
362   if (!tdep->sparc_psr_type)
363     {
364       struct type *type;
365
366       type = arch_flags_type (gdbarch, "builtin_type_sparc_psr", 4);
367       append_flags_type_flag (type, 5, "ET");
368       append_flags_type_flag (type, 6, "PS");
369       append_flags_type_flag (type, 7, "S");
370       append_flags_type_flag (type, 12, "EF");
371       append_flags_type_flag (type, 13, "EC");
372
373       tdep->sparc_psr_type = type;
374     }
375
376   return tdep->sparc_psr_type;
377 }
378
379 static struct type *
380 sparc_fsr_type (struct gdbarch *gdbarch)
381 {
382   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
383
384   if (!tdep->sparc_fsr_type)
385     {
386       struct type *type;
387
388       type = arch_flags_type (gdbarch, "builtin_type_sparc_fsr", 4);
389       append_flags_type_flag (type, 0, "NXA");
390       append_flags_type_flag (type, 1, "DZA");
391       append_flags_type_flag (type, 2, "UFA");
392       append_flags_type_flag (type, 3, "OFA");
393       append_flags_type_flag (type, 4, "NVA");
394       append_flags_type_flag (type, 5, "NXC");
395       append_flags_type_flag (type, 6, "DZC");
396       append_flags_type_flag (type, 7, "UFC");
397       append_flags_type_flag (type, 8, "OFC");
398       append_flags_type_flag (type, 9, "NVC");
399       append_flags_type_flag (type, 22, "NS");
400       append_flags_type_flag (type, 23, "NXM");
401       append_flags_type_flag (type, 24, "DZM");
402       append_flags_type_flag (type, 25, "UFM");
403       append_flags_type_flag (type, 26, "OFM");
404       append_flags_type_flag (type, 27, "NVM");
405
406       tdep->sparc_fsr_type = type;
407     }
408
409   return tdep->sparc_fsr_type;
410 }
411
412 /* Return the GDB type object for the "standard" data type of data in
413    pseudo register REGNUM.  */
414
415 static struct type *
416 sparc32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
417 {
418   regnum -= gdbarch_num_regs (gdbarch);
419
420   if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
421     return builtin_type (gdbarch)->builtin_double;
422
423   internal_error (__FILE__, __LINE__,
424                   _("sparc32_pseudo_register_type: bad register number %d"),
425                   regnum);
426 }
427
428 /* Return the GDB type object for the "standard" data type of data in
429    register REGNUM.  */
430
431 static struct type *
432 sparc32_register_type (struct gdbarch *gdbarch, int regnum)
433 {
434   if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
435     return builtin_type (gdbarch)->builtin_float;
436
437   if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
438     return builtin_type (gdbarch)->builtin_data_ptr;
439
440   if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
441     return builtin_type (gdbarch)->builtin_func_ptr;
442
443   if (regnum == SPARC32_PSR_REGNUM)
444     return sparc_psr_type (gdbarch);
445
446   if (regnum == SPARC32_FSR_REGNUM)
447     return sparc_fsr_type (gdbarch);
448
449   if (regnum >= gdbarch_num_regs (gdbarch))
450     return sparc32_pseudo_register_type (gdbarch, regnum);
451
452   return builtin_type (gdbarch)->builtin_int32;
453 }
454
455 static enum register_status
456 sparc32_pseudo_register_read (struct gdbarch *gdbarch,
457                               struct regcache *regcache,
458                               int regnum, gdb_byte *buf)
459 {
460   enum register_status status;
461
462   regnum -= gdbarch_num_regs (gdbarch);
463   gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
464
465   regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
466   status = regcache_raw_read (regcache, regnum, buf);
467   if (status == REG_VALID)
468     status = regcache_raw_read (regcache, regnum + 1, buf + 4);
469   return status;
470 }
471
472 static void
473 sparc32_pseudo_register_write (struct gdbarch *gdbarch,
474                                struct regcache *regcache,
475                                int regnum, const gdb_byte *buf)
476 {
477   regnum -= gdbarch_num_regs (gdbarch);
478   gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
479
480   regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
481   regcache_raw_write (regcache, regnum, buf);
482   regcache_raw_write (regcache, regnum + 1, buf + 4);
483 }
484 \f
485 /* Implement the stack_frame_destroyed_p gdbarch method.  */
486
487 int
488 sparc_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
489 {
490   /* This function must return true if we are one instruction after an
491      instruction that destroyed the stack frame of the current
492      function.  The SPARC instructions used to restore the callers
493      stack frame are RESTORE and RETURN/RETT.
494
495      Of these RETURN/RETT is a branch instruction and thus we return
496      true if we are in its delay slot.
497
498      RESTORE is almost always found in the delay slot of a branch
499      instruction that transfers control to the caller, such as JMPL.
500      Thus the next instruction is in the caller frame and we don't
501      need to do anything about it.  */
502
503   unsigned int insn = sparc_fetch_instruction (pc - 4);
504
505   return X_RETTURN (insn);
506 }
507 \f
508
509 static CORE_ADDR
510 sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
511 {
512   /* The ABI requires double-word alignment.  */
513   return address & ~0x7;
514 }
515
516 static CORE_ADDR
517 sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
518                          CORE_ADDR funcaddr,
519                          struct value **args, int nargs,
520                          struct type *value_type,
521                          CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
522                          struct regcache *regcache)
523 {
524   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
525
526   *bp_addr = sp - 4;
527   *real_pc = funcaddr;
528
529   if (using_struct_return (gdbarch, NULL, value_type))
530     {
531       gdb_byte buf[4];
532
533       /* This is an UNIMP instruction.  */
534       store_unsigned_integer (buf, 4, byte_order,
535                               TYPE_LENGTH (value_type) & 0x1fff);
536       write_memory (sp - 8, buf, 4);
537       return sp - 8;
538     }
539
540   return sp - 4;
541 }
542
543 static CORE_ADDR
544 sparc32_store_arguments (struct regcache *regcache, int nargs,
545                          struct value **args, CORE_ADDR sp,
546                          int struct_return, CORE_ADDR struct_addr)
547 {
548   struct gdbarch *gdbarch = get_regcache_arch (regcache);
549   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
550   /* Number of words in the "parameter array".  */
551   int num_elements = 0;
552   int element = 0;
553   int i;
554
555   for (i = 0; i < nargs; i++)
556     {
557       struct type *type = value_type (args[i]);
558       int len = TYPE_LENGTH (type);
559
560       if (sparc_structure_or_union_p (type)
561           || (sparc_floating_p (type) && len == 16)
562           || sparc_complex_floating_p (type))
563         {
564           /* Structure, Union and Quad-Precision Arguments.  */
565           sp -= len;
566
567           /* Use doubleword alignment for these values.  That's always
568              correct, and wasting a few bytes shouldn't be a problem.  */
569           sp &= ~0x7;
570
571           write_memory (sp, value_contents (args[i]), len);
572           args[i] = value_from_pointer (lookup_pointer_type (type), sp);
573           num_elements++;
574         }
575       else if (sparc_floating_p (type))
576         {
577           /* Floating arguments.  */
578           gdb_assert (len == 4 || len == 8);
579           num_elements += (len / 4);
580         }
581       else
582         {
583           /* Integral and pointer arguments.  */
584           gdb_assert (sparc_integral_or_pointer_p (type));
585
586           if (len < 4)
587             args[i] = value_cast (builtin_type (gdbarch)->builtin_int32,
588                                   args[i]);
589           num_elements += ((len + 3) / 4);
590         }
591     }
592
593   /* Always allocate at least six words.  */
594   sp -= std::max (6, num_elements) * 4;
595
596   /* The psABI says that "Software convention requires space for the
597      struct/union return value pointer, even if the word is unused."  */
598   sp -= 4;
599
600   /* The psABI says that "Although software convention and the
601      operating system require every stack frame to be doubleword
602      aligned."  */
603   sp &= ~0x7;
604
605   for (i = 0; i < nargs; i++)
606     {
607       const bfd_byte *valbuf = value_contents (args[i]);
608       struct type *type = value_type (args[i]);
609       int len = TYPE_LENGTH (type);
610
611       gdb_assert (len == 4 || len == 8);
612
613       if (element < 6)
614         {
615           int regnum = SPARC_O0_REGNUM + element;
616
617           regcache_cooked_write (regcache, regnum, valbuf);
618           if (len > 4 && element < 5)
619             regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
620         }
621
622       /* Always store the argument in memory.  */
623       write_memory (sp + 4 + element * 4, valbuf, len);
624       element += len / 4;
625     }
626
627   gdb_assert (element == num_elements);
628
629   if (struct_return)
630     {
631       gdb_byte buf[4];
632
633       store_unsigned_integer (buf, 4, byte_order, struct_addr);
634       write_memory (sp, buf, 4);
635     }
636
637   return sp;
638 }
639
640 static CORE_ADDR
641 sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
642                          struct regcache *regcache, CORE_ADDR bp_addr,
643                          int nargs, struct value **args, CORE_ADDR sp,
644                          int struct_return, CORE_ADDR struct_addr)
645 {
646   CORE_ADDR call_pc = (struct_return ? (bp_addr - 12) : (bp_addr - 8));
647
648   /* Set return address.  */
649   regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
650
651   /* Set up function arguments.  */
652   sp = sparc32_store_arguments (regcache, nargs, args, sp,
653                                 struct_return, struct_addr);
654
655   /* Allocate the 16-word window save area.  */
656   sp -= 16 * 4;
657
658   /* Stack should be doubleword aligned at this point.  */
659   gdb_assert (sp % 8 == 0);
660
661   /* Finally, update the stack pointer.  */
662   regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
663
664   return sp;
665 }
666 \f
667
668 /* Use the program counter to determine the contents and size of a
669    breakpoint instruction.  Return a pointer to a string of bytes that
670    encode a breakpoint instruction, store the length of the string in
671    *LEN and optionally adjust *PC to point to the correct memory
672    location for inserting the breakpoint.  */
673 constexpr gdb_byte sparc_break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
674
675 typedef BP_MANIPULATION (sparc_break_insn) sparc_breakpoint;
676 \f
677
678 /* Allocate and initialize a frame cache.  */
679
680 static struct sparc_frame_cache *
681 sparc_alloc_frame_cache (void)
682 {
683   struct sparc_frame_cache *cache;
684
685   cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
686
687   /* Base address.  */
688   cache->base = 0;
689   cache->pc = 0;
690
691   /* Frameless until proven otherwise.  */
692   cache->frameless_p = 1;
693   cache->frame_offset = 0;
694   cache->saved_regs_mask = 0;
695   cache->copied_regs_mask = 0;
696   cache->struct_return_p = 0;
697
698   return cache;
699 }
700
701 /* GCC generates several well-known sequences of instructions at the begining
702    of each function prologue when compiling with -fstack-check.  If one of
703    such sequences starts at START_PC, then return the address of the
704    instruction immediately past this sequence.  Otherwise, return START_PC.  */
705    
706 static CORE_ADDR
707 sparc_skip_stack_check (const CORE_ADDR start_pc)
708 {
709   CORE_ADDR pc = start_pc;
710   unsigned long insn;
711   int probing_loop = 0;
712
713   /* With GCC, all stack checking sequences begin with the same two
714      instructions, plus an optional one in the case of a probing loop:
715
716          sethi <some immediate>, %g1
717          sub %sp, %g1, %g1
718
719      or:
720
721          sethi <some immediate>, %g1
722          sethi <some immediate>, %g4
723          sub %sp, %g1, %g1
724
725      or:
726
727          sethi <some immediate>, %g1
728          sub %sp, %g1, %g1
729          sethi <some immediate>, %g4
730
731      If the optional instruction is found (setting g4), assume that a
732      probing loop will follow.  */
733
734   /* sethi <some immediate>, %g1 */
735   insn = sparc_fetch_instruction (pc);
736   pc = pc + 4;
737   if (!(X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 1))
738     return start_pc;
739
740   /* optional: sethi <some immediate>, %g4 */
741   insn = sparc_fetch_instruction (pc);
742   pc = pc + 4;
743   if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
744     {
745       probing_loop = 1;
746       insn = sparc_fetch_instruction (pc);
747       pc = pc + 4;
748     }
749
750   /* sub %sp, %g1, %g1 */
751   if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
752         && X_RD (insn) == 1 && X_RS1 (insn) == 14 && X_RS2 (insn) == 1))
753     return start_pc;
754
755   insn = sparc_fetch_instruction (pc);
756   pc = pc + 4;
757
758   /* optional: sethi <some immediate>, %g4 */
759   if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
760     {
761       probing_loop = 1;
762       insn = sparc_fetch_instruction (pc);
763       pc = pc + 4;
764     }
765
766   /* First possible sequence:
767          [first two instructions above]
768          clr [%g1 - some immediate]  */
769
770   /* clr [%g1 - some immediate]  */
771   if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
772       && X_RS1 (insn) == 1 && X_RD (insn) == 0)
773     {
774       /* Valid stack-check sequence, return the new PC.  */
775       return pc;
776     }
777
778   /* Second possible sequence: A small number of probes.
779          [first two instructions above]
780          clr [%g1]
781          add   %g1, -<some immediate>, %g1
782          clr [%g1]
783          [repeat the two instructions above any (small) number of times]
784          clr [%g1 - some immediate]  */
785
786   /* clr [%g1] */
787   else if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
788       && X_RS1 (insn) == 1 && X_RD (insn) == 0)
789     {
790       while (1)
791         {
792           /* add %g1, -<some immediate>, %g1 */
793           insn = sparc_fetch_instruction (pc);
794           pc = pc + 4;
795           if (!(X_OP (insn) == 2  && X_OP3(insn) == 0 && X_I(insn)
796                 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
797             break;
798
799           /* clr [%g1] */
800           insn = sparc_fetch_instruction (pc);
801           pc = pc + 4;
802           if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
803                 && X_RD (insn) == 0 && X_RS1 (insn) == 1))
804             return start_pc;
805         }
806
807       /* clr [%g1 - some immediate] */
808       if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
809             && X_RS1 (insn) == 1 && X_RD (insn) == 0))
810         return start_pc;
811
812       /* We found a valid stack-check sequence, return the new PC.  */
813       return pc;
814     }
815   
816   /* Third sequence: A probing loop.
817          [first three instructions above]
818          sub  %g1, %g4, %g4
819          cmp  %g1, %g4
820          be  <disp>
821          add  %g1, -<some immediate>, %g1
822          ba  <disp>
823          clr  [%g1]
824
825      And an optional last probe for the remainder:
826
827          clr [%g4 - some immediate]  */
828
829   if (probing_loop)
830     {
831       /* sub  %g1, %g4, %g4 */
832       if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
833             && X_RD (insn) == 4 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
834         return start_pc;
835
836       /* cmp  %g1, %g4 */
837       insn = sparc_fetch_instruction (pc);
838       pc = pc + 4;
839       if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I(insn)
840             && X_RD (insn) == 0 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
841         return start_pc;
842
843       /* be  <disp> */
844       insn = sparc_fetch_instruction (pc);
845       pc = pc + 4;
846       if (!(X_OP (insn) == 0 && X_COND (insn) == 0x1))
847         return start_pc;
848
849       /* add  %g1, -<some immediate>, %g1 */
850       insn = sparc_fetch_instruction (pc);
851       pc = pc + 4;
852       if (!(X_OP (insn) == 2  && X_OP3(insn) == 0 && X_I(insn)
853             && X_RS1 (insn) == 1 && X_RD (insn) == 1))
854         return start_pc;
855
856       /* ba  <disp> */
857       insn = sparc_fetch_instruction (pc);
858       pc = pc + 4;
859       if (!(X_OP (insn) == 0 && X_COND (insn) == 0x8))
860         return start_pc;
861
862       /* clr  [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
863       insn = sparc_fetch_instruction (pc);
864       pc = pc + 4;
865       if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4
866             && X_RD (insn) == 0 && X_RS1 (insn) == 1
867             && (!X_I(insn) || X_SIMM13 (insn) == 0)))
868         return start_pc;
869
870       /* We found a valid stack-check sequence, return the new PC.  */
871
872       /* optional: clr [%g4 - some immediate]  */
873       insn = sparc_fetch_instruction (pc);
874       pc = pc + 4;
875       if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
876             && X_RS1 (insn) == 4 && X_RD (insn) == 0))
877         return pc - 4;
878       else
879         return pc;
880     }
881
882   /* No stack check code in our prologue, return the start_pc.  */
883   return start_pc;
884 }
885
886 /* Record the effect of a SAVE instruction on CACHE.  */
887
888 void
889 sparc_record_save_insn (struct sparc_frame_cache *cache)
890 {
891   /* The frame is set up.  */
892   cache->frameless_p = 0;
893
894   /* The frame pointer contains the CFA.  */
895   cache->frame_offset = 0;
896
897   /* The `local' and `in' registers are all saved.  */
898   cache->saved_regs_mask = 0xffff;
899
900   /* The `out' registers are all renamed.  */
901   cache->copied_regs_mask = 0xff;
902 }
903
904 /* Do a full analysis of the prologue at PC and update CACHE accordingly.
905    Bail out early if CURRENT_PC is reached.  Return the address where
906    the analysis stopped.
907
908    We handle both the traditional register window model and the single
909    register window (aka flat) model.  */
910
911 CORE_ADDR
912 sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
913                         CORE_ADDR current_pc, struct sparc_frame_cache *cache)
914 {
915   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
916   unsigned long insn;
917   int offset = 0;
918   int dest = -1;
919
920   pc = sparc_skip_stack_check (pc);
921
922   if (current_pc <= pc)
923     return current_pc;
924
925   /* We have to handle to "Procedure Linkage Table" (PLT) special.  On
926      SPARC the linker usually defines a symbol (typically
927      _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
928      This symbol makes us end up here with PC pointing at the start of
929      the PLT and CURRENT_PC probably pointing at a PLT entry.  If we
930      would do our normal prologue analysis, we would probably conclude
931      that we've got a frame when in reality we don't, since the
932      dynamic linker patches up the first PLT with some code that
933      starts with a SAVE instruction.  Patch up PC such that it points
934      at the start of our PLT entry.  */
935   if (tdep->plt_entry_size > 0 && in_plt_section (current_pc))
936     pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
937
938   insn = sparc_fetch_instruction (pc);
939
940   /* Recognize store insns and record their sources.  */
941   while (X_OP (insn) == 3
942          && (X_OP3 (insn) == 0x4     /* stw */
943              || X_OP3 (insn) == 0x7  /* std */
944              || X_OP3 (insn) == 0xe) /* stx */
945          && X_RS1 (insn) == SPARC_SP_REGNUM)
946     {
947       int regnum = X_RD (insn);
948
949       /* Recognize stores into the corresponding stack slots.  */
950       if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
951           && ((X_I (insn)
952                && X_SIMM13 (insn) == (X_OP3 (insn) == 0xe
953                                       ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
954                                       : (regnum - SPARC_L0_REGNUM) * 4))
955               || (!X_I (insn) && regnum == SPARC_L0_REGNUM)))
956         {
957           cache->saved_regs_mask |= (1 << (regnum - SPARC_L0_REGNUM));
958           if (X_OP3 (insn) == 0x7)
959             cache->saved_regs_mask |= (1 << (regnum + 1 - SPARC_L0_REGNUM));
960         }
961
962       offset += 4;
963
964       insn = sparc_fetch_instruction (pc + offset);
965     }
966
967   /* Recognize a SETHI insn and record its destination.  */
968   if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
969     {
970       dest = X_RD (insn);
971       offset += 4;
972
973       insn = sparc_fetch_instruction (pc + offset);
974     }
975
976   /* Allow for an arithmetic operation on DEST or %g1.  */
977   if (X_OP (insn) == 2 && X_I (insn)
978       && (X_RD (insn) == 1 || X_RD (insn) == dest))
979     {
980       offset += 4;
981
982       insn = sparc_fetch_instruction (pc + offset);
983     }
984
985   /* Check for the SAVE instruction that sets up the frame.  */
986   if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
987     {
988       sparc_record_save_insn (cache);
989       offset += 4;
990       return pc + offset;
991     }
992
993   /* Check for an arithmetic operation on %sp.  */
994   if (X_OP (insn) == 2
995       && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
996       && X_RS1 (insn) == SPARC_SP_REGNUM
997       && X_RD (insn) == SPARC_SP_REGNUM)
998     {
999       if (X_I (insn))
1000         {
1001           cache->frame_offset = X_SIMM13 (insn);
1002           if (X_OP3 (insn) == 0)
1003             cache->frame_offset = -cache->frame_offset;
1004         }
1005       offset += 4;
1006
1007       insn = sparc_fetch_instruction (pc + offset);
1008
1009       /* Check for an arithmetic operation that sets up the frame.  */
1010       if (X_OP (insn) == 2
1011           && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
1012           && X_RS1 (insn) == SPARC_SP_REGNUM
1013           && X_RD (insn) == SPARC_FP_REGNUM)
1014         {
1015           cache->frameless_p = 0;
1016           cache->frame_offset = 0;
1017           /* We could check that the amount subtracted to %sp above is the
1018              same as the one added here, but this seems superfluous.  */
1019           cache->copied_regs_mask |= 0x40;
1020           offset += 4;
1021
1022           insn = sparc_fetch_instruction (pc + offset);
1023         }
1024
1025       /* Check for a move (or) operation that copies the return register.  */
1026       if (X_OP (insn) == 2
1027           && X_OP3 (insn) == 0x2
1028           && !X_I (insn)
1029           && X_RS1 (insn) == SPARC_G0_REGNUM
1030           && X_RS2 (insn) == SPARC_O7_REGNUM
1031           && X_RD (insn) == SPARC_I7_REGNUM)
1032         {
1033            cache->copied_regs_mask |= 0x80;
1034            offset += 4;
1035         }
1036
1037       return pc + offset;
1038     }
1039
1040   return pc;
1041 }
1042
1043 static CORE_ADDR
1044 sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1045 {
1046   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1047   return frame_unwind_register_unsigned (this_frame, tdep->pc_regnum);
1048 }
1049
1050 /* Return PC of first real instruction of the function starting at
1051    START_PC.  */
1052
1053 static CORE_ADDR
1054 sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1055 {
1056   struct symtab_and_line sal;
1057   CORE_ADDR func_start, func_end;
1058   struct sparc_frame_cache cache;
1059
1060   /* This is the preferred method, find the end of the prologue by
1061      using the debugging information.  */
1062   if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
1063     {
1064       sal = find_pc_line (func_start, 0);
1065
1066       if (sal.end < func_end
1067           && start_pc <= sal.end)
1068         return sal.end;
1069     }
1070
1071   start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
1072
1073   /* The psABI says that "Although the first 6 words of arguments
1074      reside in registers, the standard stack frame reserves space for
1075      them.".  It also suggests that a function may use that space to
1076      "write incoming arguments 0 to 5" into that space, and that's
1077      indeed what GCC seems to be doing.  In that case GCC will
1078      generate debug information that points to the stack slots instead
1079      of the registers, so we should consider the instructions that
1080      write out these incoming arguments onto the stack.  */
1081
1082   while (1)
1083     {
1084       unsigned long insn = sparc_fetch_instruction (start_pc);
1085
1086       /* Recognize instructions that store incoming arguments into the
1087          corresponding stack slots.  */
1088       if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04
1089           && X_I (insn) && X_RS1 (insn) == SPARC_FP_REGNUM)
1090         {
1091           int regnum = X_RD (insn);
1092
1093           /* Case of arguments still in %o[0..5].  */
1094           if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O5_REGNUM
1095               && !(cache.copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM)))
1096               && X_SIMM13 (insn) == 68 + (regnum - SPARC_O0_REGNUM) * 4)
1097             {
1098               start_pc += 4;
1099               continue;
1100             }
1101
1102           /* Case of arguments copied into %i[0..5].  */
1103           if (regnum >= SPARC_I0_REGNUM && regnum <= SPARC_I5_REGNUM
1104               && (cache.copied_regs_mask & (1 << (regnum - SPARC_I0_REGNUM)))
1105               && X_SIMM13 (insn) == 68 + (regnum - SPARC_I0_REGNUM) * 4)
1106             {
1107               start_pc += 4;
1108               continue;
1109             }
1110         }
1111
1112       break;
1113     }
1114
1115   return start_pc;
1116 }
1117
1118 /* Normal frames.  */
1119
1120 struct sparc_frame_cache *
1121 sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
1122 {
1123   struct sparc_frame_cache *cache;
1124
1125   if (*this_cache)
1126     return (struct sparc_frame_cache *) *this_cache;
1127
1128   cache = sparc_alloc_frame_cache ();
1129   *this_cache = cache;
1130
1131   cache->pc = get_frame_func (this_frame);
1132   if (cache->pc != 0)
1133     sparc_analyze_prologue (get_frame_arch (this_frame), cache->pc,
1134                             get_frame_pc (this_frame), cache);
1135
1136   if (cache->frameless_p)
1137     {
1138       /* This function is frameless, so %fp (%i6) holds the frame
1139          pointer for our calling frame.  Use %sp (%o6) as this frame's
1140          base address.  */
1141       cache->base =
1142         get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1143     }
1144   else
1145     {
1146       /* For normal frames, %fp (%i6) holds the frame pointer, the
1147          base address for the current stack frame.  */
1148       cache->base =
1149         get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
1150     }
1151
1152   cache->base += cache->frame_offset;
1153
1154   if (cache->base & 1)
1155     cache->base += BIAS;
1156
1157   return cache;
1158 }
1159
1160 static int
1161 sparc32_struct_return_from_sym (struct symbol *sym)
1162 {
1163   struct type *type = check_typedef (SYMBOL_TYPE (sym));
1164   enum type_code code = TYPE_CODE (type);
1165
1166   if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
1167     {
1168       type = check_typedef (TYPE_TARGET_TYPE (type));
1169       if (sparc_structure_or_union_p (type)
1170           || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1171         return 1;
1172     }
1173
1174   return 0;
1175 }
1176
1177 struct sparc_frame_cache *
1178 sparc32_frame_cache (struct frame_info *this_frame, void **this_cache)
1179 {
1180   struct sparc_frame_cache *cache;
1181   struct symbol *sym;
1182
1183   if (*this_cache)
1184     return (struct sparc_frame_cache *) *this_cache;
1185
1186   cache = sparc_frame_cache (this_frame, this_cache);
1187
1188   sym = find_pc_function (cache->pc);
1189   if (sym)
1190     {
1191       cache->struct_return_p = sparc32_struct_return_from_sym (sym);
1192     }
1193   else
1194     {
1195       /* There is no debugging information for this function to
1196          help us determine whether this function returns a struct
1197          or not.  So we rely on another heuristic which is to check
1198          the instruction at the return address and see if this is
1199          an "unimp" instruction.  If it is, then it is a struct-return
1200          function.  */
1201       CORE_ADDR pc;
1202       int regnum =
1203         (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1204
1205       pc = get_frame_register_unsigned (this_frame, regnum) + 8;
1206       if (sparc_is_unimp_insn (pc))
1207         cache->struct_return_p = 1;
1208     }
1209
1210   return cache;
1211 }
1212
1213 static void
1214 sparc32_frame_this_id (struct frame_info *this_frame, void **this_cache,
1215                        struct frame_id *this_id)
1216 {
1217   struct sparc_frame_cache *cache =
1218     sparc32_frame_cache (this_frame, this_cache);
1219
1220   /* This marks the outermost frame.  */
1221   if (cache->base == 0)
1222     return;
1223
1224   (*this_id) = frame_id_build (cache->base, cache->pc);
1225 }
1226
1227 static struct value *
1228 sparc32_frame_prev_register (struct frame_info *this_frame,
1229                              void **this_cache, int regnum)
1230 {
1231   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1232   struct sparc_frame_cache *cache =
1233     sparc32_frame_cache (this_frame, this_cache);
1234
1235   if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
1236     {
1237       CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
1238
1239       /* If this functions has a Structure, Union or Quad-Precision
1240          return value, we have to skip the UNIMP instruction that encodes
1241          the size of the structure.  */
1242       if (cache->struct_return_p)
1243         pc += 4;
1244
1245       regnum =
1246         (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1247       pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1248       return frame_unwind_got_constant (this_frame, regnum, pc);
1249     }
1250
1251   /* Handle StackGhost.  */
1252   {
1253     ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1254
1255     if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1256       {
1257         CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1258         ULONGEST i7;
1259
1260         /* Read the value in from memory.  */
1261         i7 = get_frame_memory_unsigned (this_frame, addr, 4);
1262         return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
1263       }
1264   }
1265
1266   /* The previous frame's `local' and `in' registers may have been saved
1267      in the register save area.  */
1268   if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1269       && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
1270     {
1271       CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1272
1273       return frame_unwind_got_memory (this_frame, regnum, addr);
1274     }
1275
1276   /* The previous frame's `out' registers may be accessible as the current
1277      frame's `in' registers.  */
1278   if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM
1279       && (cache->copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM))))
1280     regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
1281
1282   return frame_unwind_got_register (this_frame, regnum, regnum);
1283 }
1284
1285 static const struct frame_unwind sparc32_frame_unwind =
1286 {
1287   NORMAL_FRAME,
1288   default_frame_unwind_stop_reason,
1289   sparc32_frame_this_id,
1290   sparc32_frame_prev_register,
1291   NULL,
1292   default_frame_sniffer
1293 };
1294 \f
1295
1296 static CORE_ADDR
1297 sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1298 {
1299   struct sparc_frame_cache *cache =
1300     sparc32_frame_cache (this_frame, this_cache);
1301
1302   return cache->base;
1303 }
1304
1305 static const struct frame_base sparc32_frame_base =
1306 {
1307   &sparc32_frame_unwind,
1308   sparc32_frame_base_address,
1309   sparc32_frame_base_address,
1310   sparc32_frame_base_address
1311 };
1312
1313 static struct frame_id
1314 sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1315 {
1316   CORE_ADDR sp;
1317
1318   sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1319   if (sp & 1)
1320     sp += BIAS;
1321   return frame_id_build (sp, get_frame_pc (this_frame));
1322 }
1323 \f
1324
1325 /* Extract a function return value of TYPE from REGCACHE, and copy
1326    that into VALBUF.  */
1327
1328 static void
1329 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
1330                               gdb_byte *valbuf)
1331 {
1332   int len = TYPE_LENGTH (type);
1333   gdb_byte buf[32];
1334
1335   gdb_assert (!sparc_structure_or_union_p (type));
1336   gdb_assert (!(sparc_floating_p (type) && len == 16));
1337
1338   if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1339     {
1340       /* Floating return values.  */
1341       regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
1342       if (len > 4)
1343         regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
1344       if (len > 8)
1345         {
1346           regcache_cooked_read (regcache, SPARC_F2_REGNUM, buf + 8);
1347           regcache_cooked_read (regcache, SPARC_F3_REGNUM, buf + 12);
1348         }
1349       if (len > 16)
1350         {
1351           regcache_cooked_read (regcache, SPARC_F4_REGNUM, buf + 16);
1352           regcache_cooked_read (regcache, SPARC_F5_REGNUM, buf + 20);
1353           regcache_cooked_read (regcache, SPARC_F6_REGNUM, buf + 24);
1354           regcache_cooked_read (regcache, SPARC_F7_REGNUM, buf + 28);
1355         }
1356       memcpy (valbuf, buf, len);
1357     }
1358   else
1359     {
1360       /* Integral and pointer return values.  */
1361       gdb_assert (sparc_integral_or_pointer_p (type));
1362
1363       regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
1364       if (len > 4)
1365         {
1366           regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
1367           gdb_assert (len == 8);
1368           memcpy (valbuf, buf, 8);
1369         }
1370       else
1371         {
1372           /* Just stripping off any unused bytes should preserve the
1373              signed-ness just fine.  */
1374           memcpy (valbuf, buf + 4 - len, len);
1375         }
1376     }
1377 }
1378
1379 /* Store the function return value of type TYPE from VALBUF into
1380    REGCACHE.  */
1381
1382 static void
1383 sparc32_store_return_value (struct type *type, struct regcache *regcache,
1384                             const gdb_byte *valbuf)
1385 {
1386   int len = TYPE_LENGTH (type);
1387   gdb_byte buf[8];
1388
1389   gdb_assert (!sparc_structure_or_union_p (type));
1390   gdb_assert (!(sparc_floating_p (type) && len == 16));
1391   gdb_assert (len <= 8);
1392
1393   if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1394     {
1395       /* Floating return values.  */
1396       memcpy (buf, valbuf, len);
1397       regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
1398       if (len > 4)
1399         regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
1400       if (len > 8)
1401         {
1402           regcache_cooked_write (regcache, SPARC_F2_REGNUM, buf + 8);
1403           regcache_cooked_write (regcache, SPARC_F3_REGNUM, buf + 12);
1404         }
1405       if (len > 16)
1406         {
1407           regcache_cooked_write (regcache, SPARC_F4_REGNUM, buf + 16);
1408           regcache_cooked_write (regcache, SPARC_F5_REGNUM, buf + 20);
1409           regcache_cooked_write (regcache, SPARC_F6_REGNUM, buf + 24);
1410           regcache_cooked_write (regcache, SPARC_F7_REGNUM, buf + 28);
1411         }
1412     }
1413   else
1414     {
1415       /* Integral and pointer return values.  */
1416       gdb_assert (sparc_integral_or_pointer_p (type));
1417
1418       if (len > 4)
1419         {
1420           gdb_assert (len == 8);
1421           memcpy (buf, valbuf, 8);
1422           regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
1423         }
1424       else
1425         {
1426           /* ??? Do we need to do any sign-extension here?  */
1427           memcpy (buf + 4 - len, valbuf, len);
1428         }
1429       regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
1430     }
1431 }
1432
1433 static enum return_value_convention
1434 sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
1435                       struct type *type, struct regcache *regcache,
1436                       gdb_byte *readbuf, const gdb_byte *writebuf)
1437 {
1438   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1439
1440   /* The psABI says that "...every stack frame reserves the word at
1441      %fp+64.  If a function returns a structure, union, or
1442      quad-precision value, this word should hold the address of the
1443      object into which the return value should be copied."  This
1444      guarantees that we can always find the return value, not just
1445      before the function returns.  */
1446
1447   if (sparc_structure_or_union_p (type)
1448       || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1449     {
1450       ULONGEST sp;
1451       CORE_ADDR addr;
1452
1453       if (readbuf)
1454         {
1455           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1456           addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1457           read_memory (addr, readbuf, TYPE_LENGTH (type));
1458         }
1459       if (writebuf)
1460         {
1461           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1462           addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1463           write_memory (addr, writebuf, TYPE_LENGTH (type));
1464         }
1465
1466       return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1467     }
1468
1469   if (readbuf)
1470     sparc32_extract_return_value (type, regcache, readbuf);
1471   if (writebuf)
1472     sparc32_store_return_value (type, regcache, writebuf);
1473
1474   return RETURN_VALUE_REGISTER_CONVENTION;
1475 }
1476
1477 static int
1478 sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
1479 {
1480   return (sparc_structure_or_union_p (type)
1481           || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
1482           || sparc_complex_floating_p (type));
1483 }
1484
1485 static int
1486 sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
1487 {
1488   CORE_ADDR pc = get_frame_address_in_block (this_frame);
1489   struct symbol *sym = find_pc_function (pc);
1490
1491   if (sym)
1492     return sparc32_struct_return_from_sym (sym);
1493   return 0;
1494 }
1495
1496 static void
1497 sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1498                                struct dwarf2_frame_state_reg *reg,
1499                                struct frame_info *this_frame)
1500 {
1501   int off;
1502
1503   switch (regnum)
1504     {
1505     case SPARC_G0_REGNUM:
1506       /* Since %g0 is always zero, there is no point in saving it, and
1507          people will be inclined omit it from the CFI.  Make sure we
1508          don't warn about that.  */
1509       reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1510       break;
1511     case SPARC_SP_REGNUM:
1512       reg->how = DWARF2_FRAME_REG_CFA;
1513       break;
1514     case SPARC32_PC_REGNUM:
1515     case SPARC32_NPC_REGNUM:
1516       reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1517       off = 8;
1518       if (sparc32_dwarf2_struct_return_p (this_frame))
1519         off += 4;
1520       if (regnum == SPARC32_NPC_REGNUM)
1521         off += 4;
1522       reg->loc.offset = off;
1523       break;
1524     }
1525 }
1526
1527 \f
1528 /* The SPARC Architecture doesn't have hardware single-step support,
1529    and most operating systems don't implement it either, so we provide
1530    software single-step mechanism.  */
1531
1532 static CORE_ADDR
1533 sparc_analyze_control_transfer (struct regcache *regcache,
1534                                 CORE_ADDR pc, CORE_ADDR *npc)
1535 {
1536   unsigned long insn = sparc_fetch_instruction (pc);
1537   int conditional_p = X_COND (insn) & 0x7;
1538   int branch_p = 0, fused_p = 0;
1539   long offset = 0;                      /* Must be signed for sign-extend.  */
1540
1541   if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
1542     {
1543       if ((insn & 0x10000000) == 0)
1544         {
1545           /* Branch on Integer Register with Prediction (BPr).  */
1546           branch_p = 1;
1547           conditional_p = 1;
1548         }
1549       else
1550         {
1551           /* Compare and Branch  */
1552           branch_p = 1;
1553           fused_p = 1;
1554           offset = 4 * X_DISP10 (insn);
1555         }
1556     }
1557   else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1558     {
1559       /* Branch on Floating-Point Condition Codes (FBfcc).  */
1560       branch_p = 1;
1561       offset = 4 * X_DISP22 (insn);
1562     }
1563   else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1564     {
1565       /* Branch on Floating-Point Condition Codes with Prediction
1566          (FBPfcc).  */
1567       branch_p = 1;
1568       offset = 4 * X_DISP19 (insn);
1569     }
1570   else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1571     {
1572       /* Branch on Integer Condition Codes (Bicc).  */
1573       branch_p = 1;
1574       offset = 4 * X_DISP22 (insn);
1575     }
1576   else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
1577     {
1578       /* Branch on Integer Condition Codes with Prediction (BPcc).  */
1579       branch_p = 1;
1580       offset = 4 * X_DISP19 (insn);
1581     }
1582   else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1583     {
1584       struct frame_info *frame = get_current_frame ();
1585
1586       /* Trap instruction (TRAP).  */
1587       return gdbarch_tdep (get_regcache_arch (regcache))->step_trap (frame,
1588                                                                      insn);
1589     }
1590
1591   /* FIXME: Handle DONE and RETRY instructions.  */
1592
1593   if (branch_p)
1594     {
1595       if (fused_p)
1596         {
1597           /* Fused compare-and-branch instructions are non-delayed,
1598              and do not have an annuling capability.  So we need to
1599              always set a breakpoint on both the NPC and the branch
1600              target address.  */
1601           gdb_assert (offset != 0);
1602           return pc + offset;
1603         }
1604       else if (conditional_p)
1605         {
1606           /* For conditional branches, return nPC + 4 iff the annul
1607              bit is 1.  */
1608           return (X_A (insn) ? *npc + 4 : 0);
1609         }
1610       else
1611         {
1612           /* For unconditional branches, return the target if its
1613              specified condition is "always" and return nPC + 4 if the
1614              condition is "never".  If the annul bit is 1, set *NPC to
1615              zero.  */
1616           if (X_COND (insn) == 0x0)
1617             pc = *npc, offset = 4;
1618           if (X_A (insn))
1619             *npc = 0;
1620
1621           return pc + offset;
1622         }
1623     }
1624
1625   return 0;
1626 }
1627
1628 static CORE_ADDR
1629 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1630 {
1631   return 0;
1632 }
1633
1634 static VEC (CORE_ADDR) *
1635 sparc_software_single_step (struct regcache *regcache)
1636 {
1637   struct gdbarch *arch = get_regcache_arch (regcache);
1638   struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1639   CORE_ADDR npc, nnpc;
1640
1641   CORE_ADDR pc, orig_npc;
1642   VEC (CORE_ADDR) *next_pcs = NULL;
1643
1644   pc = regcache_raw_get_unsigned (regcache, tdep->pc_regnum);
1645   orig_npc = npc = regcache_raw_get_unsigned (regcache, tdep->npc_regnum);
1646
1647   /* Analyze the instruction at PC.  */
1648   nnpc = sparc_analyze_control_transfer (regcache, pc, &npc);
1649   if (npc != 0)
1650     VEC_safe_push (CORE_ADDR, next_pcs, npc);
1651
1652   if (nnpc != 0)
1653     VEC_safe_push (CORE_ADDR, next_pcs, nnpc);
1654
1655   /* Assert that we have set at least one breakpoint, and that
1656      they're not set at the same spot - unless we're going
1657      from here straight to NULL, i.e. a call or jump to 0.  */
1658   gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1659   gdb_assert (nnpc != npc || orig_npc == 0);
1660
1661   return next_pcs;
1662 }
1663
1664 static void
1665 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1666 {
1667   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1668
1669   regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1670   regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1671 }
1672 \f
1673
1674 /* Iterate over core file register note sections.  */
1675
1676 static void
1677 sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
1678                                     iterate_over_regset_sections_cb *cb,
1679                                     void *cb_data,
1680                                     const struct regcache *regcache)
1681 {
1682   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1683
1684   cb (".reg", tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
1685   cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
1686 }
1687 \f
1688
1689 static struct gdbarch *
1690 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1691 {
1692   struct gdbarch_tdep *tdep;
1693   struct gdbarch *gdbarch;
1694
1695   /* If there is already a candidate, use it.  */
1696   arches = gdbarch_list_lookup_by_info (arches, &info);
1697   if (arches != NULL)
1698     return arches->gdbarch;
1699
1700   /* Allocate space for the new architecture.  */
1701   tdep = XCNEW (struct gdbarch_tdep);
1702   gdbarch = gdbarch_alloc (&info, tdep);
1703
1704   tdep->pc_regnum = SPARC32_PC_REGNUM;
1705   tdep->npc_regnum = SPARC32_NPC_REGNUM;
1706   tdep->step_trap = sparc_step_trap;
1707
1708   set_gdbarch_long_double_bit (gdbarch, 128);
1709   set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1710
1711   set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1712   set_gdbarch_register_name (gdbarch, sparc32_register_name);
1713   set_gdbarch_register_type (gdbarch, sparc32_register_type);
1714   set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1715   set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1716   set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1717
1718   /* Register numbers of various important registers.  */
1719   set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1720   set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1721   set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1722
1723   /* Call dummy code.  */
1724   set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
1725   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1726   set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1727   set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1728
1729   set_gdbarch_return_value (gdbarch, sparc32_return_value);
1730   set_gdbarch_stabs_argument_has_addr
1731     (gdbarch, sparc32_stabs_argument_has_addr);
1732
1733   set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1734
1735   /* Stack grows downward.  */
1736   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1737
1738   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
1739                                        sparc_breakpoint::kind_from_pc);
1740   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
1741                                        sparc_breakpoint::bp_from_kind);
1742
1743   set_gdbarch_frame_args_skip (gdbarch, 8);
1744
1745   set_gdbarch_print_insn (gdbarch, print_insn_sparc);
1746
1747   set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1748   set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1749
1750   set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1751
1752   set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1753
1754   frame_base_set_default (gdbarch, &sparc32_frame_base);
1755
1756   /* Hook in the DWARF CFI frame unwinder.  */
1757   dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1758   /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1759      StackGhost issues have been resolved.  */
1760
1761   /* Hook in ABI-specific overrides, if they have been registered.  */
1762   gdbarch_init_osabi (info, gdbarch);
1763
1764   frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1765
1766   /* If we have register sets, enable the generic core file support.  */
1767   if (tdep->gregset)
1768     set_gdbarch_iterate_over_regset_sections
1769       (gdbarch, sparc_iterate_over_regset_sections);
1770
1771   register_sparc_ravenscar_ops (gdbarch);
1772
1773   return gdbarch;
1774 }
1775 \f
1776 /* Helper functions for dealing with register windows.  */
1777
1778 void
1779 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1780 {
1781   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1782   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1783   int offset = 0;
1784   gdb_byte buf[8];
1785   int i;
1786
1787   if (sp & 1)
1788     {
1789       /* Registers are 64-bit.  */
1790       sp += BIAS;
1791
1792       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1793         {
1794           if (regnum == i || regnum == -1)
1795             {
1796               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1797
1798               /* Handle StackGhost.  */
1799               if (i == SPARC_I7_REGNUM)
1800                 {
1801                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1802                   ULONGEST i7;
1803
1804                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1805                   store_unsigned_integer (buf + offset, 8, byte_order,
1806                                           i7 ^ wcookie);
1807                 }
1808
1809               regcache_raw_supply (regcache, i, buf);
1810             }
1811         }
1812     }
1813   else
1814     {
1815       /* Registers are 32-bit.  Toss any sign-extension of the stack
1816          pointer.  */
1817       sp &= 0xffffffffUL;
1818
1819       /* Clear out the top half of the temporary buffer, and put the
1820          register value in the bottom half if we're in 64-bit mode.  */
1821       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1822         {
1823           memset (buf, 0, 4);
1824           offset = 4;
1825         }
1826
1827       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1828         {
1829           if (regnum == i || regnum == -1)
1830             {
1831               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1832                                   buf + offset, 4);
1833
1834               /* Handle StackGhost.  */
1835               if (i == SPARC_I7_REGNUM)
1836                 {
1837                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1838                   ULONGEST i7;
1839
1840                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1841                   store_unsigned_integer (buf + offset, 4, byte_order,
1842                                           i7 ^ wcookie);
1843                 }
1844
1845               regcache_raw_supply (regcache, i, buf);
1846             }
1847         }
1848     }
1849 }
1850
1851 void
1852 sparc_collect_rwindow (const struct regcache *regcache,
1853                        CORE_ADDR sp, int regnum)
1854 {
1855   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1856   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1857   int offset = 0;
1858   gdb_byte buf[8];
1859   int i;
1860
1861   if (sp & 1)
1862     {
1863       /* Registers are 64-bit.  */
1864       sp += BIAS;
1865
1866       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1867         {
1868           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1869             {
1870               regcache_raw_collect (regcache, i, buf);
1871
1872               /* Handle StackGhost.  */
1873               if (i == SPARC_I7_REGNUM)
1874                 {
1875                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1876                   ULONGEST i7;
1877
1878                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1879                   store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
1880                 }
1881
1882               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1883             }
1884         }
1885     }
1886   else
1887     {
1888       /* Registers are 32-bit.  Toss any sign-extension of the stack
1889          pointer.  */
1890       sp &= 0xffffffffUL;
1891
1892       /* Only use the bottom half if we're in 64-bit mode.  */
1893       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1894         offset = 4;
1895
1896       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1897         {
1898           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1899             {
1900               regcache_raw_collect (regcache, i, buf);
1901
1902               /* Handle StackGhost.  */
1903               if (i == SPARC_I7_REGNUM)
1904                 {
1905                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1906                   ULONGEST i7;
1907
1908                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1909                   store_unsigned_integer (buf + offset, 4, byte_order,
1910                                           i7 ^ wcookie);
1911                 }
1912
1913               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1914                                    buf + offset, 4);
1915             }
1916         }
1917     }
1918 }
1919
1920 /* Helper functions for dealing with register sets.  */
1921
1922 void
1923 sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
1924                         struct regcache *regcache,
1925                         int regnum, const void *gregs)
1926 {
1927   const gdb_byte *regs = (const gdb_byte *) gregs;
1928   gdb_byte zero[4] = { 0 };
1929   int i;
1930
1931   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1932     regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
1933                          regs + gregmap->r_psr_offset);
1934
1935   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1936     regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
1937                          regs + gregmap->r_pc_offset);
1938
1939   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1940     regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
1941                          regs + gregmap->r_npc_offset);
1942
1943   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1944     regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
1945                          regs + gregmap->r_y_offset);
1946
1947   if (regnum == SPARC_G0_REGNUM || regnum == -1)
1948     regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
1949
1950   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1951     {
1952       int offset = gregmap->r_g1_offset;
1953
1954       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1955         {
1956           if (regnum == i || regnum == -1)
1957             regcache_raw_supply (regcache, i, regs + offset);
1958           offset += 4;
1959         }
1960     }
1961
1962   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1963     {
1964       /* Not all of the register set variants include Locals and
1965          Inputs.  For those that don't, we read them off the stack.  */
1966       if (gregmap->r_l0_offset == -1)
1967         {
1968           ULONGEST sp;
1969
1970           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1971           sparc_supply_rwindow (regcache, sp, regnum);
1972         }
1973       else
1974         {
1975           int offset = gregmap->r_l0_offset;
1976
1977           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1978             {
1979               if (regnum == i || regnum == -1)
1980                 regcache_raw_supply (regcache, i, regs + offset);
1981               offset += 4;
1982             }
1983         }
1984     }
1985 }
1986
1987 void
1988 sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
1989                          const struct regcache *regcache,
1990                          int regnum, void *gregs)
1991 {
1992   gdb_byte *regs = (gdb_byte *) gregs;
1993   int i;
1994
1995   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1996     regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
1997                           regs + gregmap->r_psr_offset);
1998
1999   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
2000     regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
2001                           regs + gregmap->r_pc_offset);
2002
2003   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
2004     regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
2005                           regs + gregmap->r_npc_offset);
2006
2007   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
2008     regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
2009                           regs + gregmap->r_y_offset);
2010
2011   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
2012     {
2013       int offset = gregmap->r_g1_offset;
2014
2015       /* %g0 is always zero.  */
2016       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
2017         {
2018           if (regnum == i || regnum == -1)
2019             regcache_raw_collect (regcache, i, regs + offset);
2020           offset += 4;
2021         }
2022     }
2023
2024   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
2025     {
2026       /* Not all of the register set variants include Locals and
2027          Inputs.  For those that don't, we read them off the stack.  */
2028       if (gregmap->r_l0_offset != -1)
2029         {
2030           int offset = gregmap->r_l0_offset;
2031
2032           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2033             {
2034               if (regnum == i || regnum == -1)
2035                 regcache_raw_collect (regcache, i, regs + offset);
2036               offset += 4;
2037             }
2038         }
2039     }
2040 }
2041
2042 void
2043 sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
2044                          struct regcache *regcache,
2045                          int regnum, const void *fpregs)
2046 {
2047   const gdb_byte *regs = (const gdb_byte *) fpregs;
2048   int i;
2049
2050   for (i = 0; i < 32; i++)
2051     {
2052       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2053         regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
2054                              regs + fpregmap->r_f0_offset + (i * 4));
2055     }
2056
2057   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2058     regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
2059                          regs + fpregmap->r_fsr_offset);
2060 }
2061
2062 void
2063 sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
2064                           const struct regcache *regcache,
2065                           int regnum, void *fpregs)
2066 {
2067   gdb_byte *regs = (gdb_byte *) fpregs;
2068   int i;
2069
2070   for (i = 0; i < 32; i++)
2071     {
2072       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2073         regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
2074                               regs + fpregmap->r_f0_offset + (i * 4));
2075     }
2076
2077   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2078     regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
2079                           regs + fpregmap->r_fsr_offset);
2080 }
2081 \f
2082
2083 /* SunOS 4.  */
2084
2085 /* From <machine/reg.h>.  */
2086 const struct sparc_gregmap sparc32_sunos4_gregmap =
2087 {
2088   0 * 4,                        /* %psr */
2089   1 * 4,                        /* %pc */
2090   2 * 4,                        /* %npc */
2091   3 * 4,                        /* %y */
2092   -1,                           /* %wim */
2093   -1,                           /* %tbr */
2094   4 * 4,                        /* %g1 */
2095   -1                            /* %l0 */
2096 };
2097
2098 const struct sparc_fpregmap sparc32_sunos4_fpregmap =
2099 {
2100   0 * 4,                        /* %f0 */
2101   33 * 4,                       /* %fsr */
2102 };
2103
2104 const struct sparc_fpregmap sparc32_bsd_fpregmap =
2105 {
2106   0 * 4,                        /* %f0 */
2107   32 * 4,                       /* %fsr */
2108 };
2109 \f
2110
2111 /* Provide a prototype to silence -Wmissing-prototypes.  */
2112 void _initialize_sparc_tdep (void);
2113
2114 void
2115 _initialize_sparc_tdep (void)
2116 {
2117   register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
2118 }