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