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