Fix Sparc %fsr regset offset for BSD and Linux.
[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_DISP10(i) ((((((i) >> 11) && 0x300) | (((i) >> 5) & 0xff)) ^ 0x200) - 0x200)
89 #define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
90
91 /* Fetch the instruction at PC.  Instructions are always big-endian
92    even if the processor operates in little-endian mode.  */
93
94 unsigned long
95 sparc_fetch_instruction (CORE_ADDR pc)
96 {
97   gdb_byte buf[4];
98   unsigned long insn;
99   int i;
100
101   /* If we can't read the instruction at PC, return zero.  */
102   if (target_read_memory (pc, buf, sizeof (buf)))
103     return 0;
104
105   insn = 0;
106   for (i = 0; i < sizeof (buf); i++)
107     insn = (insn << 8) | buf[i];
108   return insn;
109 }
110 \f
111
112 /* Return non-zero if the instruction corresponding to PC is an "unimp"
113    instruction.  */
114
115 static int
116 sparc_is_unimp_insn (CORE_ADDR pc)
117 {
118   const unsigned long insn = sparc_fetch_instruction (pc);
119   
120   return ((insn & 0xc1c00000) == 0);
121 }
122
123 /* OpenBSD/sparc includes StackGhost, which according to the author's
124    website http://stackghost.cerias.purdue.edu "... transparently and
125    automatically protects applications' stack frames; more
126    specifically, it guards the return pointers.  The protection
127    mechanisms require no application source or binary modification and
128    imposes only a negligible performance penalty."
129
130    The same website provides the following description of how
131    StackGhost works:
132
133    "StackGhost interfaces with the kernel trap handler that would
134    normally write out registers to the stack and the handler that
135    would read them back in.  By XORing a cookie into the
136    return-address saved in the user stack when it is actually written
137    to the stack, and then XOR it out when the return-address is pulled
138    from the stack, StackGhost can cause attacker corrupted return
139    pointers to behave in a manner the attacker cannot predict.
140    StackGhost can also use several unused bits in the return pointer
141    to detect a smashed return pointer and abort the process."
142
143    For GDB this means that whenever we're reading %i7 from a stack
144    frame's window save area, we'll have to XOR the cookie.
145
146    More information on StackGuard can be found on in:
147
148    Mike Frantzen and Mike Shuey.  "StackGhost: Hardware Facilitated
149    Stack Protection."  2001.  Published in USENIX Security Symposium
150    '01.  */
151
152 /* Fetch StackGhost Per-Process XOR cookie.  */
153
154 ULONGEST
155 sparc_fetch_wcookie (struct gdbarch *gdbarch)
156 {
157   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
158   struct target_ops *ops = &current_target;
159   gdb_byte buf[8];
160   int len;
161
162   len = target_read (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
163   if (len == -1)
164     return 0;
165
166   /* We should have either an 32-bit or an 64-bit cookie.  */
167   gdb_assert (len == 4 || len == 8);
168
169   return extract_unsigned_integer (buf, len, byte_order);
170 }
171 \f
172
173 /* The functions on this page are intended to be used to classify
174    function arguments.  */
175
176 /* Check whether TYPE is "Integral or Pointer".  */
177
178 static int
179 sparc_integral_or_pointer_p (const struct type *type)
180 {
181   int len = TYPE_LENGTH (type);
182
183   switch (TYPE_CODE (type))
184     {
185     case TYPE_CODE_INT:
186     case TYPE_CODE_BOOL:
187     case TYPE_CODE_CHAR:
188     case TYPE_CODE_ENUM:
189     case TYPE_CODE_RANGE:
190       /* We have byte, half-word, word and extended-word/doubleword
191          integral types.  The doubleword is an extension to the
192          original 32-bit ABI by the SCD 2.4.x.  */
193       return (len == 1 || len == 2 || len == 4 || len == 8);
194     case TYPE_CODE_PTR:
195     case TYPE_CODE_REF:
196       /* Allow either 32-bit or 64-bit pointers.  */
197       return (len == 4 || len == 8);
198     default:
199       break;
200     }
201
202   return 0;
203 }
204
205 /* Check whether TYPE is "Floating".  */
206
207 static int
208 sparc_floating_p (const struct type *type)
209 {
210   switch (TYPE_CODE (type))
211     {
212     case TYPE_CODE_FLT:
213       {
214         int len = TYPE_LENGTH (type);
215         return (len == 4 || len == 8 || len == 16);
216       }
217     default:
218       break;
219     }
220
221   return 0;
222 }
223
224 /* Check whether TYPE is "Complex Floating".  */
225
226 static int
227 sparc_complex_floating_p (const struct type *type)
228 {
229   switch (TYPE_CODE (type))
230     {
231     case TYPE_CODE_COMPLEX:
232       {
233         int len = TYPE_LENGTH (type);
234         return (len == 8 || len == 16 || len == 32);
235       }
236     default:
237       break;
238     }
239
240   return 0;
241 }
242
243 /* Check whether TYPE is "Structure or Union".
244
245    In terms of Ada subprogram calls, arrays are treated the same as
246    struct and union types.  So this function also returns non-zero
247    for array types.  */
248
249 static int
250 sparc_structure_or_union_p (const struct type *type)
251 {
252   switch (TYPE_CODE (type))
253     {
254     case TYPE_CODE_STRUCT:
255     case TYPE_CODE_UNION:
256     case TYPE_CODE_ARRAY:
257       return 1;
258     default:
259       break;
260     }
261
262   return 0;
263 }
264
265 /* Register information.  */
266
267 static const char *sparc32_register_names[] =
268 {
269   "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
270   "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
271   "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
272   "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
273
274   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
275   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
276   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
277   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
278
279   "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
280 };
281
282 /* Total number of registers.  */
283 #define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
284
285 /* We provide the aliases %d0..%d30 for the floating registers as
286    "psuedo" registers.  */
287
288 static const char *sparc32_pseudo_register_names[] =
289 {
290   "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
291   "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
292 };
293
294 /* Total number of pseudo registers.  */
295 #define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
296
297 /* Return the name of register REGNUM.  */
298
299 static const char *
300 sparc32_register_name (struct gdbarch *gdbarch, int regnum)
301 {
302   if (regnum >= 0 && regnum < SPARC32_NUM_REGS)
303     return sparc32_register_names[regnum];
304
305   if (regnum < SPARC32_NUM_REGS + SPARC32_NUM_PSEUDO_REGS)
306     return sparc32_pseudo_register_names[regnum - SPARC32_NUM_REGS];
307
308   return NULL;
309 }
310 \f
311 /* Construct types for ISA-specific registers.  */
312
313 static struct type *
314 sparc_psr_type (struct gdbarch *gdbarch)
315 {
316   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
317
318   if (!tdep->sparc_psr_type)
319     {
320       struct type *type;
321
322       type = arch_flags_type (gdbarch, "builtin_type_sparc_psr", 4);
323       append_flags_type_flag (type, 5, "ET");
324       append_flags_type_flag (type, 6, "PS");
325       append_flags_type_flag (type, 7, "S");
326       append_flags_type_flag (type, 12, "EF");
327       append_flags_type_flag (type, 13, "EC");
328
329       tdep->sparc_psr_type = type;
330     }
331
332   return tdep->sparc_psr_type;
333 }
334
335 static struct type *
336 sparc_fsr_type (struct gdbarch *gdbarch)
337 {
338   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
339
340   if (!tdep->sparc_fsr_type)
341     {
342       struct type *type;
343
344       type = arch_flags_type (gdbarch, "builtin_type_sparc_fsr", 4);
345       append_flags_type_flag (type, 0, "NXA");
346       append_flags_type_flag (type, 1, "DZA");
347       append_flags_type_flag (type, 2, "UFA");
348       append_flags_type_flag (type, 3, "OFA");
349       append_flags_type_flag (type, 4, "NVA");
350       append_flags_type_flag (type, 5, "NXC");
351       append_flags_type_flag (type, 6, "DZC");
352       append_flags_type_flag (type, 7, "UFC");
353       append_flags_type_flag (type, 8, "OFC");
354       append_flags_type_flag (type, 9, "NVC");
355       append_flags_type_flag (type, 22, "NS");
356       append_flags_type_flag (type, 23, "NXM");
357       append_flags_type_flag (type, 24, "DZM");
358       append_flags_type_flag (type, 25, "UFM");
359       append_flags_type_flag (type, 26, "OFM");
360       append_flags_type_flag (type, 27, "NVM");
361
362       tdep->sparc_fsr_type = type;
363     }
364
365   return tdep->sparc_fsr_type;
366 }
367
368 /* Return the GDB type object for the "standard" data type of data in
369    register REGNUM.  */
370
371 static struct type *
372 sparc32_register_type (struct gdbarch *gdbarch, int regnum)
373 {
374   if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
375     return builtin_type (gdbarch)->builtin_float;
376
377   if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
378     return builtin_type (gdbarch)->builtin_double;
379
380   if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
381     return builtin_type (gdbarch)->builtin_data_ptr;
382
383   if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
384     return builtin_type (gdbarch)->builtin_func_ptr;
385
386   if (regnum == SPARC32_PSR_REGNUM)
387     return sparc_psr_type (gdbarch);
388
389   if (regnum == SPARC32_FSR_REGNUM)
390     return sparc_fsr_type (gdbarch);
391
392   return builtin_type (gdbarch)->builtin_int32;
393 }
394
395 static enum register_status
396 sparc32_pseudo_register_read (struct gdbarch *gdbarch,
397                               struct regcache *regcache,
398                               int regnum, gdb_byte *buf)
399 {
400   enum register_status status;
401
402   gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
403
404   regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
405   status = regcache_raw_read (regcache, regnum, buf);
406   if (status == REG_VALID)
407     status = regcache_raw_read (regcache, regnum + 1, buf + 4);
408   return status;
409 }
410
411 static void
412 sparc32_pseudo_register_write (struct gdbarch *gdbarch,
413                                struct regcache *regcache,
414                                int regnum, const gdb_byte *buf)
415 {
416   gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
417
418   regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
419   regcache_raw_write (regcache, regnum, buf);
420   regcache_raw_write (regcache, regnum + 1, buf + 4);
421 }
422 \f
423
424 static CORE_ADDR
425 sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
426 {
427   /* The ABI requires double-word alignment.  */
428   return address & ~0x7;
429 }
430
431 static CORE_ADDR
432 sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
433                          CORE_ADDR funcaddr,
434                          struct value **args, int nargs,
435                          struct type *value_type,
436                          CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
437                          struct regcache *regcache)
438 {
439   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
440
441   *bp_addr = sp - 4;
442   *real_pc = funcaddr;
443
444   if (using_struct_return (gdbarch, NULL, value_type))
445     {
446       gdb_byte buf[4];
447
448       /* This is an UNIMP instruction.  */
449       store_unsigned_integer (buf, 4, byte_order,
450                               TYPE_LENGTH (value_type) & 0x1fff);
451       write_memory (sp - 8, buf, 4);
452       return sp - 8;
453     }
454
455   return sp - 4;
456 }
457
458 static CORE_ADDR
459 sparc32_store_arguments (struct regcache *regcache, int nargs,
460                          struct value **args, CORE_ADDR sp,
461                          int struct_return, CORE_ADDR struct_addr)
462 {
463   struct gdbarch *gdbarch = get_regcache_arch (regcache);
464   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
465   /* Number of words in the "parameter array".  */
466   int num_elements = 0;
467   int element = 0;
468   int i;
469
470   for (i = 0; i < nargs; i++)
471     {
472       struct type *type = value_type (args[i]);
473       int len = TYPE_LENGTH (type);
474
475       if (sparc_structure_or_union_p (type)
476           || (sparc_floating_p (type) && len == 16)
477           || sparc_complex_floating_p (type))
478         {
479           /* Structure, Union and Quad-Precision Arguments.  */
480           sp -= len;
481
482           /* Use doubleword alignment for these values.  That's always
483              correct, and wasting a few bytes shouldn't be a problem.  */
484           sp &= ~0x7;
485
486           write_memory (sp, value_contents (args[i]), len);
487           args[i] = value_from_pointer (lookup_pointer_type (type), sp);
488           num_elements++;
489         }
490       else if (sparc_floating_p (type))
491         {
492           /* Floating arguments.  */
493           gdb_assert (len == 4 || len == 8);
494           num_elements += (len / 4);
495         }
496       else
497         {
498           /* Integral and pointer arguments.  */
499           gdb_assert (sparc_integral_or_pointer_p (type));
500
501           if (len < 4)
502             args[i] = value_cast (builtin_type (gdbarch)->builtin_int32,
503                                   args[i]);
504           num_elements += ((len + 3) / 4);
505         }
506     }
507
508   /* Always allocate at least six words.  */
509   sp -= max (6, num_elements) * 4;
510
511   /* The psABI says that "Software convention requires space for the
512      struct/union return value pointer, even if the word is unused."  */
513   sp -= 4;
514
515   /* The psABI says that "Although software convention and the
516      operating system require every stack frame to be doubleword
517      aligned."  */
518   sp &= ~0x7;
519
520   for (i = 0; i < nargs; i++)
521     {
522       const bfd_byte *valbuf = value_contents (args[i]);
523       struct type *type = value_type (args[i]);
524       int len = TYPE_LENGTH (type);
525
526       gdb_assert (len == 4 || len == 8);
527
528       if (element < 6)
529         {
530           int regnum = SPARC_O0_REGNUM + element;
531
532           regcache_cooked_write (regcache, regnum, valbuf);
533           if (len > 4 && element < 5)
534             regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
535         }
536
537       /* Always store the argument in memory.  */
538       write_memory (sp + 4 + element * 4, valbuf, len);
539       element += len / 4;
540     }
541
542   gdb_assert (element == num_elements);
543
544   if (struct_return)
545     {
546       gdb_byte buf[4];
547
548       store_unsigned_integer (buf, 4, byte_order, struct_addr);
549       write_memory (sp, buf, 4);
550     }
551
552   return sp;
553 }
554
555 static CORE_ADDR
556 sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
557                          struct regcache *regcache, CORE_ADDR bp_addr,
558                          int nargs, struct value **args, CORE_ADDR sp,
559                          int struct_return, CORE_ADDR struct_addr)
560 {
561   CORE_ADDR call_pc = (struct_return ? (bp_addr - 12) : (bp_addr - 8));
562
563   /* Set return address.  */
564   regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
565
566   /* Set up function arguments.  */
567   sp = sparc32_store_arguments (regcache, nargs, args, sp,
568                                 struct_return, struct_addr);
569
570   /* Allocate the 16-word window save area.  */
571   sp -= 16 * 4;
572
573   /* Stack should be doubleword aligned at this point.  */
574   gdb_assert (sp % 8 == 0);
575
576   /* Finally, update the stack pointer.  */
577   regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
578
579   return sp;
580 }
581 \f
582
583 /* Use the program counter to determine the contents and size of a
584    breakpoint instruction.  Return a pointer to a string of bytes that
585    encode a breakpoint instruction, store the length of the string in
586    *LEN and optionally adjust *PC to point to the correct memory
587    location for inserting the breakpoint.  */
588    
589 static const gdb_byte *
590 sparc_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pc, int *len)
591 {
592   static const gdb_byte break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
593
594   *len = sizeof (break_insn);
595   return break_insn;
596 }
597 \f
598
599 /* Allocate and initialize a frame cache.  */
600
601 static struct sparc_frame_cache *
602 sparc_alloc_frame_cache (void)
603 {
604   struct sparc_frame_cache *cache;
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 value *function,
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, fused_p = 0;
1455   long offset = 0;                      /* Must be signed for sign-extend.  */
1456
1457   if (X_OP (insn) == 0 && X_OP2 (insn) == 3)
1458     {
1459       if ((insn & 0x10000000) == 0)
1460         {
1461           /* Branch on Integer Register with Prediction (BPr).  */
1462           branch_p = 1;
1463           conditional_p = 1;
1464         }
1465       else
1466         {
1467           /* Compare and Branch  */
1468           branch_p = 1;
1469           fused_p = 1;
1470           offset = 4 * X_DISP10 (insn);
1471         }
1472     }
1473   else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1474     {
1475       /* Branch on Floating-Point Condition Codes (FBfcc).  */
1476       branch_p = 1;
1477       offset = 4 * X_DISP22 (insn);
1478     }
1479   else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1480     {
1481       /* Branch on Floating-Point Condition Codes with Prediction
1482          (FBPfcc).  */
1483       branch_p = 1;
1484       offset = 4 * X_DISP19 (insn);
1485     }
1486   else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1487     {
1488       /* Branch on Integer Condition Codes (Bicc).  */
1489       branch_p = 1;
1490       offset = 4 * X_DISP22 (insn);
1491     }
1492   else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
1493     {
1494       /* Branch on Integer Condition Codes with Prediction (BPcc).  */
1495       branch_p = 1;
1496       offset = 4 * X_DISP19 (insn);
1497     }
1498   else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1499     {
1500       /* Trap instruction (TRAP).  */
1501       return gdbarch_tdep (get_frame_arch (frame))->step_trap (frame, insn);
1502     }
1503
1504   /* FIXME: Handle DONE and RETRY instructions.  */
1505
1506   if (branch_p)
1507     {
1508       if (fused_p)
1509         {
1510           /* Fused compare-and-branch instructions are non-delayed,
1511              and do not have an annuling capability.  So we need to
1512              always set a breakpoint on both the NPC and the branch
1513              target address.  */
1514           gdb_assert (offset != 0);
1515           return pc + offset;
1516         }
1517       else if (conditional_p)
1518         {
1519           /* For conditional branches, return nPC + 4 iff the annul
1520              bit is 1.  */
1521           return (X_A (insn) ? *npc + 4 : 0);
1522         }
1523       else
1524         {
1525           /* For unconditional branches, return the target if its
1526              specified condition is "always" and return nPC + 4 if the
1527              condition is "never".  If the annul bit is 1, set *NPC to
1528              zero.  */
1529           if (X_COND (insn) == 0x0)
1530             pc = *npc, offset = 4;
1531           if (X_A (insn))
1532             *npc = 0;
1533
1534           gdb_assert (offset != 0);
1535           return pc + offset;
1536         }
1537     }
1538
1539   return 0;
1540 }
1541
1542 static CORE_ADDR
1543 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1544 {
1545   return 0;
1546 }
1547
1548 int
1549 sparc_software_single_step (struct frame_info *frame)
1550 {
1551   struct gdbarch *arch = get_frame_arch (frame);
1552   struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1553   struct address_space *aspace = get_frame_address_space (frame);
1554   CORE_ADDR npc, nnpc;
1555
1556   CORE_ADDR pc, orig_npc;
1557
1558   pc = get_frame_register_unsigned (frame, tdep->pc_regnum);
1559   orig_npc = npc = get_frame_register_unsigned (frame, tdep->npc_regnum);
1560
1561   /* Analyze the instruction at PC.  */
1562   nnpc = sparc_analyze_control_transfer (frame, pc, &npc);
1563   if (npc != 0)
1564     insert_single_step_breakpoint (arch, aspace, npc);
1565
1566   if (nnpc != 0)
1567     insert_single_step_breakpoint (arch, aspace, nnpc);
1568
1569   /* Assert that we have set at least one breakpoint, and that
1570      they're not set at the same spot - unless we're going
1571      from here straight to NULL, i.e. a call or jump to 0.  */
1572   gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1573   gdb_assert (nnpc != npc || orig_npc == 0);
1574
1575   return 1;
1576 }
1577
1578 static void
1579 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1580 {
1581   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1582
1583   regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1584   regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1585 }
1586 \f
1587
1588 /* Return the appropriate register set for the core section identified
1589    by SECT_NAME and SECT_SIZE.  */
1590
1591 static const struct regset *
1592 sparc_regset_from_core_section (struct gdbarch *gdbarch,
1593                                 const char *sect_name, size_t sect_size)
1594 {
1595   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1596
1597   if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
1598     return tdep->gregset;
1599
1600   if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
1601     return tdep->fpregset;
1602
1603   return NULL;
1604 }
1605 \f
1606
1607 static struct gdbarch *
1608 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1609 {
1610   struct gdbarch_tdep *tdep;
1611   struct gdbarch *gdbarch;
1612
1613   /* If there is already a candidate, use it.  */
1614   arches = gdbarch_list_lookup_by_info (arches, &info);
1615   if (arches != NULL)
1616     return arches->gdbarch;
1617
1618   /* Allocate space for the new architecture.  */
1619   tdep = XZALLOC (struct gdbarch_tdep);
1620   gdbarch = gdbarch_alloc (&info, tdep);
1621
1622   tdep->pc_regnum = SPARC32_PC_REGNUM;
1623   tdep->npc_regnum = SPARC32_NPC_REGNUM;
1624   tdep->step_trap = sparc_step_trap;
1625
1626   set_gdbarch_long_double_bit (gdbarch, 128);
1627   set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1628
1629   set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1630   set_gdbarch_register_name (gdbarch, sparc32_register_name);
1631   set_gdbarch_register_type (gdbarch, sparc32_register_type);
1632   set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1633   set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1634   set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1635
1636   /* Register numbers of various important registers.  */
1637   set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1638   set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1639   set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1640
1641   /* Call dummy code.  */
1642   set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
1643   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1644   set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1645   set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1646
1647   set_gdbarch_return_value (gdbarch, sparc32_return_value);
1648   set_gdbarch_stabs_argument_has_addr
1649     (gdbarch, sparc32_stabs_argument_has_addr);
1650
1651   set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1652
1653   /* Stack grows downward.  */
1654   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1655
1656   set_gdbarch_breakpoint_from_pc (gdbarch, sparc_breakpoint_from_pc);
1657
1658   set_gdbarch_frame_args_skip (gdbarch, 8);
1659
1660   set_gdbarch_print_insn (gdbarch, print_insn_sparc);
1661
1662   set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1663   set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1664
1665   set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1666
1667   set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1668
1669   frame_base_set_default (gdbarch, &sparc32_frame_base);
1670
1671   /* Hook in the DWARF CFI frame unwinder.  */
1672   dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1673   /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1674      StackGhost issues have been resolved.  */
1675
1676   /* Hook in ABI-specific overrides, if they have been registered.  */
1677   gdbarch_init_osabi (info, gdbarch);
1678
1679   frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1680
1681   /* If we have register sets, enable the generic core file support.  */
1682   if (tdep->gregset)
1683     set_gdbarch_regset_from_core_section (gdbarch,
1684                                           sparc_regset_from_core_section);
1685
1686   return gdbarch;
1687 }
1688 \f
1689 /* Helper functions for dealing with register windows.  */
1690
1691 void
1692 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1693 {
1694   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1695   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1696   int offset = 0;
1697   gdb_byte buf[8];
1698   int i;
1699
1700   if (sp & 1)
1701     {
1702       /* Registers are 64-bit.  */
1703       sp += BIAS;
1704
1705       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1706         {
1707           if (regnum == i || regnum == -1)
1708             {
1709               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1710
1711               /* Handle StackGhost.  */
1712               if (i == SPARC_I7_REGNUM)
1713                 {
1714                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1715                   ULONGEST i7;
1716
1717                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1718                   store_unsigned_integer (buf + offset, 8, byte_order,
1719                                           i7 ^ wcookie);
1720                 }
1721
1722               regcache_raw_supply (regcache, i, buf);
1723             }
1724         }
1725     }
1726   else
1727     {
1728       /* Registers are 32-bit.  Toss any sign-extension of the stack
1729          pointer.  */
1730       sp &= 0xffffffffUL;
1731
1732       /* Clear out the top half of the temporary buffer, and put the
1733          register value in the bottom half if we're in 64-bit mode.  */
1734       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1735         {
1736           memset (buf, 0, 4);
1737           offset = 4;
1738         }
1739
1740       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1741         {
1742           if (regnum == i || regnum == -1)
1743             {
1744               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1745                                   buf + offset, 4);
1746
1747               /* Handle StackGhost.  */
1748               if (i == SPARC_I7_REGNUM)
1749                 {
1750                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1751                   ULONGEST i7;
1752
1753                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1754                   store_unsigned_integer (buf + offset, 4, byte_order,
1755                                           i7 ^ wcookie);
1756                 }
1757
1758               regcache_raw_supply (regcache, i, buf);
1759             }
1760         }
1761     }
1762 }
1763
1764 void
1765 sparc_collect_rwindow (const struct regcache *regcache,
1766                        CORE_ADDR sp, int regnum)
1767 {
1768   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1769   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1770   int offset = 0;
1771   gdb_byte buf[8];
1772   int i;
1773
1774   if (sp & 1)
1775     {
1776       /* Registers are 64-bit.  */
1777       sp += BIAS;
1778
1779       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1780         {
1781           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1782             {
1783               regcache_raw_collect (regcache, i, buf);
1784
1785               /* Handle StackGhost.  */
1786               if (i == SPARC_I7_REGNUM)
1787                 {
1788                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1789                   ULONGEST i7;
1790
1791                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1792                   store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
1793                 }
1794
1795               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1796             }
1797         }
1798     }
1799   else
1800     {
1801       /* Registers are 32-bit.  Toss any sign-extension of the stack
1802          pointer.  */
1803       sp &= 0xffffffffUL;
1804
1805       /* Only use the bottom half if we're in 64-bit mode.  */
1806       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1807         offset = 4;
1808
1809       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1810         {
1811           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1812             {
1813               regcache_raw_collect (regcache, i, buf);
1814
1815               /* Handle StackGhost.  */
1816               if (i == SPARC_I7_REGNUM)
1817                 {
1818                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1819                   ULONGEST i7;
1820
1821                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1822                   store_unsigned_integer (buf + offset, 4, byte_order,
1823                                           i7 ^ wcookie);
1824                 }
1825
1826               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1827                                    buf + offset, 4);
1828             }
1829         }
1830     }
1831 }
1832
1833 /* Helper functions for dealing with register sets.  */
1834
1835 void
1836 sparc32_supply_gregset (const struct sparc_gregset *gregset,
1837                         struct regcache *regcache,
1838                         int regnum, const void *gregs)
1839 {
1840   const gdb_byte *regs = gregs;
1841   gdb_byte zero[4] = { 0 };
1842   int i;
1843
1844   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1845     regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
1846                          regs + gregset->r_psr_offset);
1847
1848   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1849     regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
1850                          regs + gregset->r_pc_offset);
1851
1852   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1853     regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
1854                          regs + gregset->r_npc_offset);
1855
1856   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1857     regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
1858                          regs + gregset->r_y_offset);
1859
1860   if (regnum == SPARC_G0_REGNUM || regnum == -1)
1861     regcache_raw_supply (regcache, SPARC_G0_REGNUM, &zero);
1862
1863   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1864     {
1865       int offset = gregset->r_g1_offset;
1866
1867       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1868         {
1869           if (regnum == i || regnum == -1)
1870             regcache_raw_supply (regcache, i, regs + offset);
1871           offset += 4;
1872         }
1873     }
1874
1875   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1876     {
1877       /* Not all of the register set variants include Locals and
1878          Inputs.  For those that don't, we read them off the stack.  */
1879       if (gregset->r_l0_offset == -1)
1880         {
1881           ULONGEST sp;
1882
1883           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1884           sparc_supply_rwindow (regcache, sp, regnum);
1885         }
1886       else
1887         {
1888           int offset = gregset->r_l0_offset;
1889
1890           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1891             {
1892               if (regnum == i || regnum == -1)
1893                 regcache_raw_supply (regcache, i, regs + offset);
1894               offset += 4;
1895             }
1896         }
1897     }
1898 }
1899
1900 void
1901 sparc32_collect_gregset (const struct sparc_gregset *gregset,
1902                          const struct regcache *regcache,
1903                          int regnum, void *gregs)
1904 {
1905   gdb_byte *regs = gregs;
1906   int i;
1907
1908   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1909     regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
1910                           regs + gregset->r_psr_offset);
1911
1912   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1913     regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
1914                           regs + gregset->r_pc_offset);
1915
1916   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1917     regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
1918                           regs + gregset->r_npc_offset);
1919
1920   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1921     regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
1922                           regs + gregset->r_y_offset);
1923
1924   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1925     {
1926       int offset = gregset->r_g1_offset;
1927
1928       /* %g0 is always zero.  */
1929       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1930         {
1931           if (regnum == i || regnum == -1)
1932             regcache_raw_collect (regcache, i, regs + offset);
1933           offset += 4;
1934         }
1935     }
1936
1937   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1938     {
1939       /* Not all of the register set variants include Locals and
1940          Inputs.  For those that don't, we read them off the stack.  */
1941       if (gregset->r_l0_offset != -1)
1942         {
1943           int offset = gregset->r_l0_offset;
1944
1945           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1946             {
1947               if (regnum == i || regnum == -1)
1948                 regcache_raw_collect (regcache, i, regs + offset);
1949               offset += 4;
1950             }
1951         }
1952     }
1953 }
1954
1955 void
1956 sparc32_supply_fpregset (const struct sparc_fpregset *fpregset,
1957                          struct regcache *regcache,
1958                          int regnum, const void *fpregs)
1959 {
1960   const gdb_byte *regs = fpregs;
1961   int i;
1962
1963   for (i = 0; i < 32; i++)
1964     {
1965       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
1966         regcache_raw_supply (regcache, SPARC_F0_REGNUM + i,
1967                              regs + fpregset->r_f0_offset + (i * 4));
1968     }
1969
1970   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
1971     regcache_raw_supply (regcache, SPARC32_FSR_REGNUM,
1972                          regs + fpregset->r_fsr_offset);
1973 }
1974
1975 void
1976 sparc32_collect_fpregset (const struct sparc_fpregset *fpregset,
1977                           const struct regcache *regcache,
1978                           int regnum, void *fpregs)
1979 {
1980   gdb_byte *regs = fpregs;
1981   int i;
1982
1983   for (i = 0; i < 32; i++)
1984     {
1985       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
1986         regcache_raw_collect (regcache, SPARC_F0_REGNUM + i,
1987                               regs + fpregset->r_f0_offset + (i * 4));
1988     }
1989
1990   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
1991     regcache_raw_collect (regcache, SPARC32_FSR_REGNUM,
1992                           regs + fpregset->r_fsr_offset);
1993 }
1994 \f
1995
1996 /* SunOS 4.  */
1997
1998 /* From <machine/reg.h>.  */
1999 const struct sparc_gregset sparc32_sunos4_gregset =
2000 {
2001   0 * 4,                        /* %psr */
2002   1 * 4,                        /* %pc */
2003   2 * 4,                        /* %npc */
2004   3 * 4,                        /* %y */
2005   -1,                           /* %wim */
2006   -1,                           /* %tbr */
2007   4 * 4,                        /* %g1 */
2008   -1                            /* %l0 */
2009 };
2010
2011 const struct sparc_fpregset sparc32_sunos4_fpregset =
2012 {
2013   0 * 4,                        /* %f0 */
2014   33 * 4,                       /* %fsr */
2015 };
2016
2017 const struct sparc_fpregset sparc32_bsd_fpregset =
2018 {
2019   0 * 4,                        /* %f0 */
2020   32 * 4,                       /* %fsr */
2021 };
2022 \f
2023
2024 /* Provide a prototype to silence -Wmissing-prototypes.  */
2025 void _initialize_sparc_tdep (void);
2026
2027 void
2028 _initialize_sparc_tdep (void)
2029 {
2030   register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
2031 }