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