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