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