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