gdb: Use std::min and std::max throughout
[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    
645 static const gdb_byte *
646 sparc_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
647 {
648   static const gdb_byte break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
649
650   *len = sizeof (break_insn);
651   return break_insn;
652 }
653 \f
654
655 /* Allocate and initialize a frame cache.  */
656
657 static struct sparc_frame_cache *
658 sparc_alloc_frame_cache (void)
659 {
660   struct sparc_frame_cache *cache;
661
662   cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
663
664   /* Base address.  */
665   cache->base = 0;
666   cache->pc = 0;
667
668   /* Frameless until proven otherwise.  */
669   cache->frameless_p = 1;
670   cache->frame_offset = 0;
671   cache->saved_regs_mask = 0;
672   cache->copied_regs_mask = 0;
673   cache->struct_return_p = 0;
674
675   return cache;
676 }
677
678 /* GCC generates several well-known sequences of instructions at the begining
679    of each function prologue when compiling with -fstack-check.  If one of
680    such sequences starts at START_PC, then return the address of the
681    instruction immediately past this sequence.  Otherwise, return START_PC.  */
682    
683 static CORE_ADDR
684 sparc_skip_stack_check (const CORE_ADDR start_pc)
685 {
686   CORE_ADDR pc = start_pc;
687   unsigned long insn;
688   int probing_loop = 0;
689
690   /* With GCC, all stack checking sequences begin with the same two
691      instructions, plus an optional one in the case of a probing loop:
692
693          sethi <some immediate>, %g1
694          sub %sp, %g1, %g1
695
696      or:
697
698          sethi <some immediate>, %g1
699          sethi <some immediate>, %g4
700          sub %sp, %g1, %g1
701
702      or:
703
704          sethi <some immediate>, %g1
705          sub %sp, %g1, %g1
706          sethi <some immediate>, %g4
707
708      If the optional instruction is found (setting g4), assume that a
709      probing loop will follow.  */
710
711   /* sethi <some immediate>, %g1 */
712   insn = sparc_fetch_instruction (pc);
713   pc = pc + 4;
714   if (!(X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 1))
715     return start_pc;
716
717   /* optional: sethi <some immediate>, %g4 */
718   insn = sparc_fetch_instruction (pc);
719   pc = pc + 4;
720   if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
721     {
722       probing_loop = 1;
723       insn = sparc_fetch_instruction (pc);
724       pc = pc + 4;
725     }
726
727   /* sub %sp, %g1, %g1 */
728   if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
729         && X_RD (insn) == 1 && X_RS1 (insn) == 14 && X_RS2 (insn) == 1))
730     return start_pc;
731
732   insn = sparc_fetch_instruction (pc);
733   pc = pc + 4;
734
735   /* optional: sethi <some immediate>, %g4 */
736   if (X_OP (insn) == 0 && X_OP2 (insn) == 0x4 && X_RD (insn) == 4)
737     {
738       probing_loop = 1;
739       insn = sparc_fetch_instruction (pc);
740       pc = pc + 4;
741     }
742
743   /* First possible sequence:
744          [first two instructions above]
745          clr [%g1 - some immediate]  */
746
747   /* clr [%g1 - some immediate]  */
748   if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
749       && X_RS1 (insn) == 1 && X_RD (insn) == 0)
750     {
751       /* Valid stack-check sequence, return the new PC.  */
752       return pc;
753     }
754
755   /* Second possible sequence: A small number of probes.
756          [first two instructions above]
757          clr [%g1]
758          add   %g1, -<some immediate>, %g1
759          clr [%g1]
760          [repeat the two instructions above any (small) number of times]
761          clr [%g1 - some immediate]  */
762
763   /* clr [%g1] */
764   else if (X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
765       && X_RS1 (insn) == 1 && X_RD (insn) == 0)
766     {
767       while (1)
768         {
769           /* add %g1, -<some immediate>, %g1 */
770           insn = sparc_fetch_instruction (pc);
771           pc = pc + 4;
772           if (!(X_OP (insn) == 2  && X_OP3(insn) == 0 && X_I(insn)
773                 && X_RS1 (insn) == 1 && X_RD (insn) == 1))
774             break;
775
776           /* clr [%g1] */
777           insn = sparc_fetch_instruction (pc);
778           pc = pc + 4;
779           if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && !X_I(insn)
780                 && X_RD (insn) == 0 && X_RS1 (insn) == 1))
781             return start_pc;
782         }
783
784       /* clr [%g1 - some immediate] */
785       if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
786             && X_RS1 (insn) == 1 && X_RD (insn) == 0))
787         return start_pc;
788
789       /* We found a valid stack-check sequence, return the new PC.  */
790       return pc;
791     }
792   
793   /* Third sequence: A probing loop.
794          [first three instructions above]
795          sub  %g1, %g4, %g4
796          cmp  %g1, %g4
797          be  <disp>
798          add  %g1, -<some immediate>, %g1
799          ba  <disp>
800          clr  [%g1]
801
802      And an optional last probe for the remainder:
803
804          clr [%g4 - some immediate]  */
805
806   if (probing_loop)
807     {
808       /* sub  %g1, %g4, %g4 */
809       if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x4 && !X_I(insn)
810             && X_RD (insn) == 4 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
811         return start_pc;
812
813       /* cmp  %g1, %g4 */
814       insn = sparc_fetch_instruction (pc);
815       pc = pc + 4;
816       if (!(X_OP (insn) == 2 && X_OP3 (insn) == 0x14 && !X_I(insn)
817             && X_RD (insn) == 0 && X_RS1 (insn) == 1 && X_RS2 (insn) == 4))
818         return start_pc;
819
820       /* be  <disp> */
821       insn = sparc_fetch_instruction (pc);
822       pc = pc + 4;
823       if (!(X_OP (insn) == 0 && X_COND (insn) == 0x1))
824         return start_pc;
825
826       /* add  %g1, -<some immediate>, %g1 */
827       insn = sparc_fetch_instruction (pc);
828       pc = pc + 4;
829       if (!(X_OP (insn) == 2  && X_OP3(insn) == 0 && X_I(insn)
830             && X_RS1 (insn) == 1 && X_RD (insn) == 1))
831         return start_pc;
832
833       /* ba  <disp> */
834       insn = sparc_fetch_instruction (pc);
835       pc = pc + 4;
836       if (!(X_OP (insn) == 0 && X_COND (insn) == 0x8))
837         return start_pc;
838
839       /* clr  [%g1] (st %g0, [%g1] or st %g0, [%g1+0]) */
840       insn = sparc_fetch_instruction (pc);
841       pc = pc + 4;
842       if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4
843             && X_RD (insn) == 0 && X_RS1 (insn) == 1
844             && (!X_I(insn) || X_SIMM13 (insn) == 0)))
845         return start_pc;
846
847       /* We found a valid stack-check sequence, return the new PC.  */
848
849       /* optional: clr [%g4 - some immediate]  */
850       insn = sparc_fetch_instruction (pc);
851       pc = pc + 4;
852       if (!(X_OP (insn) == 3 && X_OP3(insn) == 0x4 && X_I(insn)
853             && X_RS1 (insn) == 4 && X_RD (insn) == 0))
854         return pc - 4;
855       else
856         return pc;
857     }
858
859   /* No stack check code in our prologue, return the start_pc.  */
860   return start_pc;
861 }
862
863 /* Record the effect of a SAVE instruction on CACHE.  */
864
865 void
866 sparc_record_save_insn (struct sparc_frame_cache *cache)
867 {
868   /* The frame is set up.  */
869   cache->frameless_p = 0;
870
871   /* The frame pointer contains the CFA.  */
872   cache->frame_offset = 0;
873
874   /* The `local' and `in' registers are all saved.  */
875   cache->saved_regs_mask = 0xffff;
876
877   /* The `out' registers are all renamed.  */
878   cache->copied_regs_mask = 0xff;
879 }
880
881 /* Do a full analysis of the prologue at PC and update CACHE accordingly.
882    Bail out early if CURRENT_PC is reached.  Return the address where
883    the analysis stopped.
884
885    We handle both the traditional register window model and the single
886    register window (aka flat) model.  */
887
888 CORE_ADDR
889 sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
890                         CORE_ADDR current_pc, struct sparc_frame_cache *cache)
891 {
892   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
893   unsigned long insn;
894   int offset = 0;
895   int dest = -1;
896
897   pc = sparc_skip_stack_check (pc);
898
899   if (current_pc <= pc)
900     return current_pc;
901
902   /* We have to handle to "Procedure Linkage Table" (PLT) special.  On
903      SPARC the linker usually defines a symbol (typically
904      _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
905      This symbol makes us end up here with PC pointing at the start of
906      the PLT and CURRENT_PC probably pointing at a PLT entry.  If we
907      would do our normal prologue analysis, we would probably conclude
908      that we've got a frame when in reality we don't, since the
909      dynamic linker patches up the first PLT with some code that
910      starts with a SAVE instruction.  Patch up PC such that it points
911      at the start of our PLT entry.  */
912   if (tdep->plt_entry_size > 0 && in_plt_section (current_pc))
913     pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
914
915   insn = sparc_fetch_instruction (pc);
916
917   /* Recognize store insns and record their sources.  */
918   while (X_OP (insn) == 3
919          && (X_OP3 (insn) == 0x4     /* stw */
920              || X_OP3 (insn) == 0x7  /* std */
921              || X_OP3 (insn) == 0xe) /* stx */
922          && X_RS1 (insn) == SPARC_SP_REGNUM)
923     {
924       int regnum = X_RD (insn);
925
926       /* Recognize stores into the corresponding stack slots.  */
927       if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
928           && ((X_I (insn)
929                && X_SIMM13 (insn) == (X_OP3 (insn) == 0xe
930                                       ? (regnum - SPARC_L0_REGNUM) * 8 + BIAS
931                                       : (regnum - SPARC_L0_REGNUM) * 4))
932               || (!X_I (insn) && regnum == SPARC_L0_REGNUM)))
933         {
934           cache->saved_regs_mask |= (1 << (regnum - SPARC_L0_REGNUM));
935           if (X_OP3 (insn) == 0x7)
936             cache->saved_regs_mask |= (1 << (regnum + 1 - SPARC_L0_REGNUM));
937         }
938
939       offset += 4;
940
941       insn = sparc_fetch_instruction (pc + offset);
942     }
943
944   /* Recognize a SETHI insn and record its destination.  */
945   if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
946     {
947       dest = X_RD (insn);
948       offset += 4;
949
950       insn = sparc_fetch_instruction (pc + offset);
951     }
952
953   /* Allow for an arithmetic operation on DEST or %g1.  */
954   if (X_OP (insn) == 2 && X_I (insn)
955       && (X_RD (insn) == 1 || X_RD (insn) == dest))
956     {
957       offset += 4;
958
959       insn = sparc_fetch_instruction (pc + offset);
960     }
961
962   /* Check for the SAVE instruction that sets up the frame.  */
963   if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
964     {
965       sparc_record_save_insn (cache);
966       offset += 4;
967       return pc + offset;
968     }
969
970   /* Check for an arithmetic operation on %sp.  */
971   if (X_OP (insn) == 2
972       && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
973       && X_RS1 (insn) == SPARC_SP_REGNUM
974       && X_RD (insn) == SPARC_SP_REGNUM)
975     {
976       if (X_I (insn))
977         {
978           cache->frame_offset = X_SIMM13 (insn);
979           if (X_OP3 (insn) == 0)
980             cache->frame_offset = -cache->frame_offset;
981         }
982       offset += 4;
983
984       insn = sparc_fetch_instruction (pc + offset);
985
986       /* Check for an arithmetic operation that sets up the frame.  */
987       if (X_OP (insn) == 2
988           && (X_OP3 (insn) == 0 || X_OP3 (insn) == 0x4)
989           && X_RS1 (insn) == SPARC_SP_REGNUM
990           && X_RD (insn) == SPARC_FP_REGNUM)
991         {
992           cache->frameless_p = 0;
993           cache->frame_offset = 0;
994           /* We could check that the amount subtracted to %sp above is the
995              same as the one added here, but this seems superfluous.  */
996           cache->copied_regs_mask |= 0x40;
997           offset += 4;
998
999           insn = sparc_fetch_instruction (pc + offset);
1000         }
1001
1002       /* Check for a move (or) operation that copies the return register.  */
1003       if (X_OP (insn) == 2
1004           && X_OP3 (insn) == 0x2
1005           && !X_I (insn)
1006           && X_RS1 (insn) == SPARC_G0_REGNUM
1007           && X_RS2 (insn) == SPARC_O7_REGNUM
1008           && X_RD (insn) == SPARC_I7_REGNUM)
1009         {
1010            cache->copied_regs_mask |= 0x80;
1011            offset += 4;
1012         }
1013
1014       return pc + offset;
1015     }
1016
1017   return pc;
1018 }
1019
1020 static CORE_ADDR
1021 sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1022 {
1023   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1024   return frame_unwind_register_unsigned (this_frame, tdep->pc_regnum);
1025 }
1026
1027 /* Return PC of first real instruction of the function starting at
1028    START_PC.  */
1029
1030 static CORE_ADDR
1031 sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1032 {
1033   struct symtab_and_line sal;
1034   CORE_ADDR func_start, func_end;
1035   struct sparc_frame_cache cache;
1036
1037   /* This is the preferred method, find the end of the prologue by
1038      using the debugging information.  */
1039   if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
1040     {
1041       sal = find_pc_line (func_start, 0);
1042
1043       if (sal.end < func_end
1044           && start_pc <= sal.end)
1045         return sal.end;
1046     }
1047
1048   start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
1049
1050   /* The psABI says that "Although the first 6 words of arguments
1051      reside in registers, the standard stack frame reserves space for
1052      them.".  It also suggests that a function may use that space to
1053      "write incoming arguments 0 to 5" into that space, and that's
1054      indeed what GCC seems to be doing.  In that case GCC will
1055      generate debug information that points to the stack slots instead
1056      of the registers, so we should consider the instructions that
1057      write out these incoming arguments onto the stack.  */
1058
1059   while (1)
1060     {
1061       unsigned long insn = sparc_fetch_instruction (start_pc);
1062
1063       /* Recognize instructions that store incoming arguments into the
1064          corresponding stack slots.  */
1065       if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04
1066           && X_I (insn) && X_RS1 (insn) == SPARC_FP_REGNUM)
1067         {
1068           int regnum = X_RD (insn);
1069
1070           /* Case of arguments still in %o[0..5].  */
1071           if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O5_REGNUM
1072               && !(cache.copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM)))
1073               && X_SIMM13 (insn) == 68 + (regnum - SPARC_O0_REGNUM) * 4)
1074             {
1075               start_pc += 4;
1076               continue;
1077             }
1078
1079           /* Case of arguments copied into %i[0..5].  */
1080           if (regnum >= SPARC_I0_REGNUM && regnum <= SPARC_I5_REGNUM
1081               && (cache.copied_regs_mask & (1 << (regnum - SPARC_I0_REGNUM)))
1082               && X_SIMM13 (insn) == 68 + (regnum - SPARC_I0_REGNUM) * 4)
1083             {
1084               start_pc += 4;
1085               continue;
1086             }
1087         }
1088
1089       break;
1090     }
1091
1092   return start_pc;
1093 }
1094
1095 /* Normal frames.  */
1096
1097 struct sparc_frame_cache *
1098 sparc_frame_cache (struct frame_info *this_frame, void **this_cache)
1099 {
1100   struct sparc_frame_cache *cache;
1101
1102   if (*this_cache)
1103     return (struct sparc_frame_cache *) *this_cache;
1104
1105   cache = sparc_alloc_frame_cache ();
1106   *this_cache = cache;
1107
1108   cache->pc = get_frame_func (this_frame);
1109   if (cache->pc != 0)
1110     sparc_analyze_prologue (get_frame_arch (this_frame), cache->pc,
1111                             get_frame_pc (this_frame), cache);
1112
1113   if (cache->frameless_p)
1114     {
1115       /* This function is frameless, so %fp (%i6) holds the frame
1116          pointer for our calling frame.  Use %sp (%o6) as this frame's
1117          base address.  */
1118       cache->base =
1119         get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1120     }
1121   else
1122     {
1123       /* For normal frames, %fp (%i6) holds the frame pointer, the
1124          base address for the current stack frame.  */
1125       cache->base =
1126         get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
1127     }
1128
1129   cache->base += cache->frame_offset;
1130
1131   if (cache->base & 1)
1132     cache->base += BIAS;
1133
1134   return cache;
1135 }
1136
1137 static int
1138 sparc32_struct_return_from_sym (struct symbol *sym)
1139 {
1140   struct type *type = check_typedef (SYMBOL_TYPE (sym));
1141   enum type_code code = TYPE_CODE (type);
1142
1143   if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
1144     {
1145       type = check_typedef (TYPE_TARGET_TYPE (type));
1146       if (sparc_structure_or_union_p (type)
1147           || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1148         return 1;
1149     }
1150
1151   return 0;
1152 }
1153
1154 struct sparc_frame_cache *
1155 sparc32_frame_cache (struct frame_info *this_frame, void **this_cache)
1156 {
1157   struct sparc_frame_cache *cache;
1158   struct symbol *sym;
1159
1160   if (*this_cache)
1161     return (struct sparc_frame_cache *) *this_cache;
1162
1163   cache = sparc_frame_cache (this_frame, this_cache);
1164
1165   sym = find_pc_function (cache->pc);
1166   if (sym)
1167     {
1168       cache->struct_return_p = sparc32_struct_return_from_sym (sym);
1169     }
1170   else
1171     {
1172       /* There is no debugging information for this function to
1173          help us determine whether this function returns a struct
1174          or not.  So we rely on another heuristic which is to check
1175          the instruction at the return address and see if this is
1176          an "unimp" instruction.  If it is, then it is a struct-return
1177          function.  */
1178       CORE_ADDR pc;
1179       int regnum =
1180         (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1181
1182       pc = get_frame_register_unsigned (this_frame, regnum) + 8;
1183       if (sparc_is_unimp_insn (pc))
1184         cache->struct_return_p = 1;
1185     }
1186
1187   return cache;
1188 }
1189
1190 static void
1191 sparc32_frame_this_id (struct frame_info *this_frame, void **this_cache,
1192                        struct frame_id *this_id)
1193 {
1194   struct sparc_frame_cache *cache =
1195     sparc32_frame_cache (this_frame, this_cache);
1196
1197   /* This marks the outermost frame.  */
1198   if (cache->base == 0)
1199     return;
1200
1201   (*this_id) = frame_id_build (cache->base, cache->pc);
1202 }
1203
1204 static struct value *
1205 sparc32_frame_prev_register (struct frame_info *this_frame,
1206                              void **this_cache, int regnum)
1207 {
1208   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1209   struct sparc_frame_cache *cache =
1210     sparc32_frame_cache (this_frame, this_cache);
1211
1212   if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
1213     {
1214       CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
1215
1216       /* If this functions has a Structure, Union or Quad-Precision
1217          return value, we have to skip the UNIMP instruction that encodes
1218          the size of the structure.  */
1219       if (cache->struct_return_p)
1220         pc += 4;
1221
1222       regnum =
1223         (cache->copied_regs_mask & 0x80) ? SPARC_I7_REGNUM : SPARC_O7_REGNUM;
1224       pc += get_frame_register_unsigned (this_frame, regnum) + 8;
1225       return frame_unwind_got_constant (this_frame, regnum, pc);
1226     }
1227
1228   /* Handle StackGhost.  */
1229   {
1230     ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1231
1232     if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
1233       {
1234         CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1235         ULONGEST i7;
1236
1237         /* Read the value in from memory.  */
1238         i7 = get_frame_memory_unsigned (this_frame, addr, 4);
1239         return frame_unwind_got_constant (this_frame, regnum, i7 ^ wcookie);
1240       }
1241   }
1242
1243   /* The previous frame's `local' and `in' registers may have been saved
1244      in the register save area.  */
1245   if (regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM
1246       && (cache->saved_regs_mask & (1 << (regnum - SPARC_L0_REGNUM))))
1247     {
1248       CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
1249
1250       return frame_unwind_got_memory (this_frame, regnum, addr);
1251     }
1252
1253   /* The previous frame's `out' registers may be accessible as the current
1254      frame's `in' registers.  */
1255   if (regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM
1256       && (cache->copied_regs_mask & (1 << (regnum - SPARC_O0_REGNUM))))
1257     regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
1258
1259   return frame_unwind_got_register (this_frame, regnum, regnum);
1260 }
1261
1262 static const struct frame_unwind sparc32_frame_unwind =
1263 {
1264   NORMAL_FRAME,
1265   default_frame_unwind_stop_reason,
1266   sparc32_frame_this_id,
1267   sparc32_frame_prev_register,
1268   NULL,
1269   default_frame_sniffer
1270 };
1271 \f
1272
1273 static CORE_ADDR
1274 sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1275 {
1276   struct sparc_frame_cache *cache =
1277     sparc32_frame_cache (this_frame, this_cache);
1278
1279   return cache->base;
1280 }
1281
1282 static const struct frame_base sparc32_frame_base =
1283 {
1284   &sparc32_frame_unwind,
1285   sparc32_frame_base_address,
1286   sparc32_frame_base_address,
1287   sparc32_frame_base_address
1288 };
1289
1290 static struct frame_id
1291 sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1292 {
1293   CORE_ADDR sp;
1294
1295   sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1296   if (sp & 1)
1297     sp += BIAS;
1298   return frame_id_build (sp, get_frame_pc (this_frame));
1299 }
1300 \f
1301
1302 /* Extract a function return value of TYPE from REGCACHE, and copy
1303    that into VALBUF.  */
1304
1305 static void
1306 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
1307                               gdb_byte *valbuf)
1308 {
1309   int len = TYPE_LENGTH (type);
1310   gdb_byte buf[32];
1311
1312   gdb_assert (!sparc_structure_or_union_p (type));
1313   gdb_assert (!(sparc_floating_p (type) && len == 16));
1314
1315   if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1316     {
1317       /* Floating return values.  */
1318       regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
1319       if (len > 4)
1320         regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
1321       if (len > 8)
1322         {
1323           regcache_cooked_read (regcache, SPARC_F2_REGNUM, buf + 8);
1324           regcache_cooked_read (regcache, SPARC_F3_REGNUM, buf + 12);
1325         }
1326       if (len > 16)
1327         {
1328           regcache_cooked_read (regcache, SPARC_F4_REGNUM, buf + 16);
1329           regcache_cooked_read (regcache, SPARC_F5_REGNUM, buf + 20);
1330           regcache_cooked_read (regcache, SPARC_F6_REGNUM, buf + 24);
1331           regcache_cooked_read (regcache, SPARC_F7_REGNUM, buf + 28);
1332         }
1333       memcpy (valbuf, buf, len);
1334     }
1335   else
1336     {
1337       /* Integral and pointer return values.  */
1338       gdb_assert (sparc_integral_or_pointer_p (type));
1339
1340       regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
1341       if (len > 4)
1342         {
1343           regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
1344           gdb_assert (len == 8);
1345           memcpy (valbuf, buf, 8);
1346         }
1347       else
1348         {
1349           /* Just stripping off any unused bytes should preserve the
1350              signed-ness just fine.  */
1351           memcpy (valbuf, buf + 4 - len, len);
1352         }
1353     }
1354 }
1355
1356 /* Store the function return value of type TYPE from VALBUF into
1357    REGCACHE.  */
1358
1359 static void
1360 sparc32_store_return_value (struct type *type, struct regcache *regcache,
1361                             const gdb_byte *valbuf)
1362 {
1363   int len = TYPE_LENGTH (type);
1364   gdb_byte buf[8];
1365
1366   gdb_assert (!sparc_structure_or_union_p (type));
1367   gdb_assert (!(sparc_floating_p (type) && len == 16));
1368   gdb_assert (len <= 8);
1369
1370   if (sparc_floating_p (type) || sparc_complex_floating_p (type))
1371     {
1372       /* Floating return values.  */
1373       memcpy (buf, valbuf, len);
1374       regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
1375       if (len > 4)
1376         regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
1377       if (len > 8)
1378         {
1379           regcache_cooked_write (regcache, SPARC_F2_REGNUM, buf + 8);
1380           regcache_cooked_write (regcache, SPARC_F3_REGNUM, buf + 12);
1381         }
1382       if (len > 16)
1383         {
1384           regcache_cooked_write (regcache, SPARC_F4_REGNUM, buf + 16);
1385           regcache_cooked_write (regcache, SPARC_F5_REGNUM, buf + 20);
1386           regcache_cooked_write (regcache, SPARC_F6_REGNUM, buf + 24);
1387           regcache_cooked_write (regcache, SPARC_F7_REGNUM, buf + 28);
1388         }
1389     }
1390   else
1391     {
1392       /* Integral and pointer return values.  */
1393       gdb_assert (sparc_integral_or_pointer_p (type));
1394
1395       if (len > 4)
1396         {
1397           gdb_assert (len == 8);
1398           memcpy (buf, valbuf, 8);
1399           regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
1400         }
1401       else
1402         {
1403           /* ??? Do we need to do any sign-extension here?  */
1404           memcpy (buf + 4 - len, valbuf, len);
1405         }
1406       regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
1407     }
1408 }
1409
1410 static enum return_value_convention
1411 sparc32_return_value (struct gdbarch *gdbarch, struct value *function,
1412                       struct type *type, struct regcache *regcache,
1413                       gdb_byte *readbuf, const gdb_byte *writebuf)
1414 {
1415   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1416
1417   /* The psABI says that "...every stack frame reserves the word at
1418      %fp+64.  If a function returns a structure, union, or
1419      quad-precision value, this word should hold the address of the
1420      object into which the return value should be copied."  This
1421      guarantees that we can always find the return value, not just
1422      before the function returns.  */
1423
1424   if (sparc_structure_or_union_p (type)
1425       || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1426     {
1427       ULONGEST sp;
1428       CORE_ADDR addr;
1429
1430       if (readbuf)
1431         {
1432           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1433           addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1434           read_memory (addr, readbuf, TYPE_LENGTH (type));
1435         }
1436       if (writebuf)
1437         {
1438           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1439           addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1440           write_memory (addr, writebuf, TYPE_LENGTH (type));
1441         }
1442
1443       return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1444     }
1445
1446   if (readbuf)
1447     sparc32_extract_return_value (type, regcache, readbuf);
1448   if (writebuf)
1449     sparc32_store_return_value (type, regcache, writebuf);
1450
1451   return RETURN_VALUE_REGISTER_CONVENTION;
1452 }
1453
1454 static int
1455 sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
1456 {
1457   return (sparc_structure_or_union_p (type)
1458           || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)
1459           || sparc_complex_floating_p (type));
1460 }
1461
1462 static int
1463 sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
1464 {
1465   CORE_ADDR pc = get_frame_address_in_block (this_frame);
1466   struct symbol *sym = find_pc_function (pc);
1467
1468   if (sym)
1469     return sparc32_struct_return_from_sym (sym);
1470   return 0;
1471 }
1472
1473 static void
1474 sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1475                                struct dwarf2_frame_state_reg *reg,
1476                                struct frame_info *this_frame)
1477 {
1478   int off;
1479
1480   switch (regnum)
1481     {
1482     case SPARC_G0_REGNUM:
1483       /* Since %g0 is always zero, there is no point in saving it, and
1484          people will be inclined omit it from the CFI.  Make sure we
1485          don't warn about that.  */
1486       reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1487       break;
1488     case SPARC_SP_REGNUM:
1489       reg->how = DWARF2_FRAME_REG_CFA;
1490       break;
1491     case SPARC32_PC_REGNUM:
1492     case SPARC32_NPC_REGNUM:
1493       reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1494       off = 8;
1495       if (sparc32_dwarf2_struct_return_p (this_frame))
1496         off += 4;
1497       if (regnum == SPARC32_NPC_REGNUM)
1498         off += 4;
1499       reg->loc.offset = off;
1500       break;
1501     }
1502 }
1503
1504 \f
1505 /* The SPARC Architecture doesn't have hardware single-step support,
1506    and most operating systems don't implement it either, so we provide
1507    software single-step mechanism.  */
1508
1509 static CORE_ADDR
1510 sparc_analyze_control_transfer (struct frame_info *frame,
1511                                 CORE_ADDR pc, CORE_ADDR *npc)
1512 {
1513   unsigned long insn = sparc_fetch_instruction (pc);
1514   int conditional_p = X_COND (insn) & 0x7;
1515   int branch_p = 0, fused_p = 0;
1516   long offset = 0;                      /* Must be signed for sign-extend.  */
1517
1518   if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
1519     {
1520       if ((insn & 0x10000000) == 0)
1521         {
1522           /* Branch on Integer Register with Prediction (BPr).  */
1523           branch_p = 1;
1524           conditional_p = 1;
1525         }
1526       else
1527         {
1528           /* Compare and Branch  */
1529           branch_p = 1;
1530           fused_p = 1;
1531           offset = 4 * X_DISP10 (insn);
1532         }
1533     }
1534   else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1535     {
1536       /* Branch on Floating-Point Condition Codes (FBfcc).  */
1537       branch_p = 1;
1538       offset = 4 * X_DISP22 (insn);
1539     }
1540   else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1541     {
1542       /* Branch on Floating-Point Condition Codes with Prediction
1543          (FBPfcc).  */
1544       branch_p = 1;
1545       offset = 4 * X_DISP19 (insn);
1546     }
1547   else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1548     {
1549       /* Branch on Integer Condition Codes (Bicc).  */
1550       branch_p = 1;
1551       offset = 4 * X_DISP22 (insn);
1552     }
1553   else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
1554     {
1555       /* Branch on Integer Condition Codes with Prediction (BPcc).  */
1556       branch_p = 1;
1557       offset = 4 * X_DISP19 (insn);
1558     }
1559   else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1560     {
1561       /* Trap instruction (TRAP).  */
1562       return gdbarch_tdep (get_frame_arch (frame))->step_trap (frame, insn);
1563     }
1564
1565   /* FIXME: Handle DONE and RETRY instructions.  */
1566
1567   if (branch_p)
1568     {
1569       if (fused_p)
1570         {
1571           /* Fused compare-and-branch instructions are non-delayed,
1572              and do not have an annuling capability.  So we need to
1573              always set a breakpoint on both the NPC and the branch
1574              target address.  */
1575           gdb_assert (offset != 0);
1576           return pc + offset;
1577         }
1578       else if (conditional_p)
1579         {
1580           /* For conditional branches, return nPC + 4 iff the annul
1581              bit is 1.  */
1582           return (X_A (insn) ? *npc + 4 : 0);
1583         }
1584       else
1585         {
1586           /* For unconditional branches, return the target if its
1587              specified condition is "always" and return nPC + 4 if the
1588              condition is "never".  If the annul bit is 1, set *NPC to
1589              zero.  */
1590           if (X_COND (insn) == 0x0)
1591             pc = *npc, offset = 4;
1592           if (X_A (insn))
1593             *npc = 0;
1594
1595           return pc + offset;
1596         }
1597     }
1598
1599   return 0;
1600 }
1601
1602 static CORE_ADDR
1603 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1604 {
1605   return 0;
1606 }
1607
1608 static int
1609 sparc_software_single_step (struct frame_info *frame)
1610 {
1611   struct gdbarch *arch = get_frame_arch (frame);
1612   struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1613   struct address_space *aspace = get_frame_address_space (frame);
1614   CORE_ADDR npc, nnpc;
1615
1616   CORE_ADDR pc, orig_npc;
1617
1618   pc = get_frame_register_unsigned (frame, tdep->pc_regnum);
1619   orig_npc = npc = get_frame_register_unsigned (frame, tdep->npc_regnum);
1620
1621   /* Analyze the instruction at PC.  */
1622   nnpc = sparc_analyze_control_transfer (frame, pc, &npc);
1623   if (npc != 0)
1624     insert_single_step_breakpoint (arch, aspace, npc);
1625
1626   if (nnpc != 0)
1627     insert_single_step_breakpoint (arch, aspace, nnpc);
1628
1629   /* Assert that we have set at least one breakpoint, and that
1630      they're not set at the same spot - unless we're going
1631      from here straight to NULL, i.e. a call or jump to 0.  */
1632   gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1633   gdb_assert (nnpc != npc || orig_npc == 0);
1634
1635   return 1;
1636 }
1637
1638 static void
1639 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1640 {
1641   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1642
1643   regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1644   regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1645 }
1646 \f
1647
1648 /* Iterate over core file register note sections.  */
1649
1650 static void
1651 sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
1652                                     iterate_over_regset_sections_cb *cb,
1653                                     void *cb_data,
1654                                     const struct regcache *regcache)
1655 {
1656   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1657
1658   cb (".reg", tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
1659   cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
1660 }
1661 \f
1662
1663 static struct gdbarch *
1664 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1665 {
1666   struct gdbarch_tdep *tdep;
1667   struct gdbarch *gdbarch;
1668
1669   /* If there is already a candidate, use it.  */
1670   arches = gdbarch_list_lookup_by_info (arches, &info);
1671   if (arches != NULL)
1672     return arches->gdbarch;
1673
1674   /* Allocate space for the new architecture.  */
1675   tdep = XCNEW (struct gdbarch_tdep);
1676   gdbarch = gdbarch_alloc (&info, tdep);
1677
1678   tdep->pc_regnum = SPARC32_PC_REGNUM;
1679   tdep->npc_regnum = SPARC32_NPC_REGNUM;
1680   tdep->step_trap = sparc_step_trap;
1681
1682   set_gdbarch_long_double_bit (gdbarch, 128);
1683   set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1684
1685   set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1686   set_gdbarch_register_name (gdbarch, sparc32_register_name);
1687   set_gdbarch_register_type (gdbarch, sparc32_register_type);
1688   set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1689   set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1690   set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1691
1692   /* Register numbers of various important registers.  */
1693   set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1694   set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1695   set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1696
1697   /* Call dummy code.  */
1698   set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
1699   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1700   set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1701   set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1702
1703   set_gdbarch_return_value (gdbarch, sparc32_return_value);
1704   set_gdbarch_stabs_argument_has_addr
1705     (gdbarch, sparc32_stabs_argument_has_addr);
1706
1707   set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1708
1709   /* Stack grows downward.  */
1710   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1711
1712   set_gdbarch_breakpoint_from_pc (gdbarch, sparc_breakpoint_from_pc);
1713
1714   set_gdbarch_frame_args_skip (gdbarch, 8);
1715
1716   set_gdbarch_print_insn (gdbarch, print_insn_sparc);
1717
1718   set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1719   set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1720
1721   set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1722
1723   set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1724
1725   frame_base_set_default (gdbarch, &sparc32_frame_base);
1726
1727   /* Hook in the DWARF CFI frame unwinder.  */
1728   dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1729   /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1730      StackGhost issues have been resolved.  */
1731
1732   /* Hook in ABI-specific overrides, if they have been registered.  */
1733   gdbarch_init_osabi (info, gdbarch);
1734
1735   frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1736
1737   /* If we have register sets, enable the generic core file support.  */
1738   if (tdep->gregset)
1739     set_gdbarch_iterate_over_regset_sections
1740       (gdbarch, sparc_iterate_over_regset_sections);
1741
1742   register_sparc_ravenscar_ops (gdbarch);
1743
1744   return gdbarch;
1745 }
1746 \f
1747 /* Helper functions for dealing with register windows.  */
1748
1749 void
1750 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1751 {
1752   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1753   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1754   int offset = 0;
1755   gdb_byte buf[8];
1756   int i;
1757
1758   if (sp & 1)
1759     {
1760       /* Registers are 64-bit.  */
1761       sp += BIAS;
1762
1763       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1764         {
1765           if (regnum == i || regnum == -1)
1766             {
1767               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1768
1769               /* Handle StackGhost.  */
1770               if (i == SPARC_I7_REGNUM)
1771                 {
1772                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1773                   ULONGEST i7;
1774
1775                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1776                   store_unsigned_integer (buf + offset, 8, byte_order,
1777                                           i7 ^ wcookie);
1778                 }
1779
1780               regcache_raw_supply (regcache, i, buf);
1781             }
1782         }
1783     }
1784   else
1785     {
1786       /* Registers are 32-bit.  Toss any sign-extension of the stack
1787          pointer.  */
1788       sp &= 0xffffffffUL;
1789
1790       /* Clear out the top half of the temporary buffer, and put the
1791          register value in the bottom half if we're in 64-bit mode.  */
1792       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1793         {
1794           memset (buf, 0, 4);
1795           offset = 4;
1796         }
1797
1798       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1799         {
1800           if (regnum == i || regnum == -1)
1801             {
1802               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1803                                   buf + offset, 4);
1804
1805               /* Handle StackGhost.  */
1806               if (i == SPARC_I7_REGNUM)
1807                 {
1808                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1809                   ULONGEST i7;
1810
1811                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1812                   store_unsigned_integer (buf + offset, 4, byte_order,
1813                                           i7 ^ wcookie);
1814                 }
1815
1816               regcache_raw_supply (regcache, i, buf);
1817             }
1818         }
1819     }
1820 }
1821
1822 void
1823 sparc_collect_rwindow (const struct regcache *regcache,
1824                        CORE_ADDR sp, int regnum)
1825 {
1826   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1827   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1828   int offset = 0;
1829   gdb_byte buf[8];
1830   int i;
1831
1832   if (sp & 1)
1833     {
1834       /* Registers are 64-bit.  */
1835       sp += BIAS;
1836
1837       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1838         {
1839           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1840             {
1841               regcache_raw_collect (regcache, i, buf);
1842
1843               /* Handle StackGhost.  */
1844               if (i == SPARC_I7_REGNUM)
1845                 {
1846                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1847                   ULONGEST i7;
1848
1849                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1850                   store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
1851                 }
1852
1853               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1854             }
1855         }
1856     }
1857   else
1858     {
1859       /* Registers are 32-bit.  Toss any sign-extension of the stack
1860          pointer.  */
1861       sp &= 0xffffffffUL;
1862
1863       /* Only use the bottom half if we're in 64-bit mode.  */
1864       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1865         offset = 4;
1866
1867       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1868         {
1869           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1870             {
1871               regcache_raw_collect (regcache, i, buf);
1872
1873               /* Handle StackGhost.  */
1874               if (i == SPARC_I7_REGNUM)
1875                 {
1876                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1877                   ULONGEST i7;
1878
1879                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1880                   store_unsigned_integer (buf + offset, 4, byte_order,
1881                                           i7 ^ wcookie);
1882                 }
1883
1884               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1885                                    buf + offset, 4);
1886             }
1887         }
1888     }
1889 }
1890
1891 /* Helper functions for dealing with register sets.  */
1892
1893 void
1894 sparc32_supply_gregset (const struct sparc_gregmap *gregmap,
1895                         struct regcache *regcache,
1896                         int regnum, const void *gregs)
1897 {
1898   const gdb_byte *regs = (const gdb_byte *) gregs;
1899   gdb_byte zero[4] = { 0 };
1900   int i;
1901
1902   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1903     regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
1904                          regs + gregmap->r_psr_offset);
1905
1906   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1907     regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
1908                          regs + gregmap->r_pc_offset);
1909
1910   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1911     regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
1912                          regs + gregmap->r_npc_offset);
1913
1914   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1915     regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
1916                          regs + gregmap->r_y_offset);
1917
1918   if (regnum == SPARC_G0_REGNUM || regnum == -1)
1919     regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
1920
1921   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1922     {
1923       int offset = gregmap->r_g1_offset;
1924
1925       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1926         {
1927           if (regnum == i || regnum == -1)
1928             regcache_raw_supply (regcache, i, regs + offset);
1929           offset += 4;
1930         }
1931     }
1932
1933   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1934     {
1935       /* Not all of the register set variants include Locals and
1936          Inputs.  For those that don't, we read them off the stack.  */
1937       if (gregmap->r_l0_offset == -1)
1938         {
1939           ULONGEST sp;
1940
1941           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1942           sparc_supply_rwindow (regcache, sp, regnum);
1943         }
1944       else
1945         {
1946           int offset = gregmap->r_l0_offset;
1947
1948           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1949             {
1950               if (regnum == i || regnum == -1)
1951                 regcache_raw_supply (regcache, i, regs + offset);
1952               offset += 4;
1953             }
1954         }
1955     }
1956 }
1957
1958 void
1959 sparc32_collect_gregset (const struct sparc_gregmap *gregmap,
1960                          const struct regcache *regcache,
1961                          int regnum, void *gregs)
1962 {
1963   gdb_byte *regs = (gdb_byte *) gregs;
1964   int i;
1965
1966   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1967     regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
1968                           regs + gregmap->r_psr_offset);
1969
1970   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1971     regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
1972                           regs + gregmap->r_pc_offset);
1973
1974   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1975     regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
1976                           regs + gregmap->r_npc_offset);
1977
1978   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1979     regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
1980                           regs + gregmap->r_y_offset);
1981
1982   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1983     {
1984       int offset = gregmap->r_g1_offset;
1985
1986       /* %g0 is always zero.  */
1987       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1988         {
1989           if (regnum == i || regnum == -1)
1990             regcache_raw_collect (regcache, i, regs + offset);
1991           offset += 4;
1992         }
1993     }
1994
1995   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1996     {
1997       /* Not all of the register set variants include Locals and
1998          Inputs.  For those that don't, we read them off the stack.  */
1999       if (gregmap->r_l0_offset != -1)
2000         {
2001           int offset = gregmap->r_l0_offset;
2002
2003           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
2004             {
2005               if (regnum == i || regnum == -1)
2006                 regcache_raw_collect (regcache, i, regs + offset);
2007               offset += 4;
2008             }
2009         }
2010     }
2011 }
2012
2013 void
2014 sparc32_supply_fpregset (const struct sparc_fpregmap *fpregmap,
2015                          struct regcache *regcache,
2016                          int regnum, const void *fpregs)
2017 {
2018   const gdb_byte *regs = (const gdb_byte *) fpregs;
2019   int i;
2020
2021   for (i = 0; i < 32; i++)
2022     {
2023       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2024         regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
2025                              regs + fpregmap->r_f0_offset + (i * 4));
2026     }
2027
2028   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2029     regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
2030                          regs + fpregmap->r_fsr_offset);
2031 }
2032
2033 void
2034 sparc32_collect_fpregset (const struct sparc_fpregmap *fpregmap,
2035                           const struct regcache *regcache,
2036                           int regnum, void *fpregs)
2037 {
2038   gdb_byte *regs = (gdb_byte *) fpregs;
2039   int i;
2040
2041   for (i = 0; i < 32; i++)
2042     {
2043       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
2044         regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
2045                               regs + fpregmap->r_f0_offset + (i * 4));
2046     }
2047
2048   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
2049     regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
2050                           regs + fpregmap->r_fsr_offset);
2051 }
2052 \f
2053
2054 /* SunOS 4.  */
2055
2056 /* From <machine/reg.h>.  */
2057 const struct sparc_gregmap sparc32_sunos4_gregmap =
2058 {
2059   0 * 4,                        /* %psr */
2060   1 * 4,                        /* %pc */
2061   2 * 4,                        /* %npc */
2062   3 * 4,                        /* %y */
2063   -1,                           /* %wim */
2064   -1,                           /* %tbr */
2065   4 * 4,                        /* %g1 */
2066   -1                            /* %l0 */
2067 };
2068
2069 const struct sparc_fpregmap sparc32_sunos4_fpregmap =
2070 {
2071   0 * 4,                        /* %f0 */
2072   33 * 4,                       /* %fsr */
2073 };
2074
2075 const struct sparc_fpregmap sparc32_bsd_fpregmap =
2076 {
2077   0 * 4,                        /* %f0 */
2078   32 * 4,                       /* %fsr */
2079 };
2080 \f
2081
2082 /* Provide a prototype to silence -Wmissing-prototypes.  */
2083 void _initialize_sparc_tdep (void);
2084
2085 void
2086 _initialize_sparc_tdep (void)
2087 {
2088   register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
2089 }