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