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