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