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