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