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