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