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