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