90817c9caf61fa23e3c9b26dfa78d79530ee3ad7
[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   sparc32_frame_this_id,
1035   sparc32_frame_prev_register,
1036   NULL,
1037   default_frame_sniffer
1038 };
1039 \f
1040
1041 static CORE_ADDR
1042 sparc32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1043 {
1044   struct sparc_frame_cache *cache =
1045     sparc32_frame_cache (this_frame, this_cache);
1046
1047   return cache->base;
1048 }
1049
1050 static const struct frame_base sparc32_frame_base =
1051 {
1052   &sparc32_frame_unwind,
1053   sparc32_frame_base_address,
1054   sparc32_frame_base_address,
1055   sparc32_frame_base_address
1056 };
1057
1058 static struct frame_id
1059 sparc_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1060 {
1061   CORE_ADDR sp;
1062
1063   sp = get_frame_register_unsigned (this_frame, SPARC_SP_REGNUM);
1064   if (sp & 1)
1065     sp += BIAS;
1066   return frame_id_build (sp, get_frame_pc (this_frame));
1067 }
1068 \f
1069
1070 /* Extract a function return value of TYPE from REGCACHE, and copy
1071    that into VALBUF.  */
1072
1073 static void
1074 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
1075                               gdb_byte *valbuf)
1076 {
1077   int len = TYPE_LENGTH (type);
1078   gdb_byte buf[8];
1079
1080   gdb_assert (!sparc_structure_or_union_p (type));
1081   gdb_assert (!(sparc_floating_p (type) && len == 16));
1082
1083   if (sparc_floating_p (type))
1084     {
1085       /* Floating return values.  */
1086       regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
1087       if (len > 4)
1088         regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
1089       memcpy (valbuf, buf, len);
1090     }
1091   else
1092     {
1093       /* Integral and pointer return values.  */
1094       gdb_assert (sparc_integral_or_pointer_p (type));
1095
1096       regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
1097       if (len > 4)
1098         {
1099           regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
1100           gdb_assert (len == 8);
1101           memcpy (valbuf, buf, 8);
1102         }
1103       else
1104         {
1105           /* Just stripping off any unused bytes should preserve the
1106              signed-ness just fine.  */
1107           memcpy (valbuf, buf + 4 - len, len);
1108         }
1109     }
1110 }
1111
1112 /* Store the function return value of type TYPE from VALBUF into
1113    REGCACHE.  */
1114
1115 static void
1116 sparc32_store_return_value (struct type *type, struct regcache *regcache,
1117                             const gdb_byte *valbuf)
1118 {
1119   int len = TYPE_LENGTH (type);
1120   gdb_byte buf[8];
1121
1122   gdb_assert (!sparc_structure_or_union_p (type));
1123   gdb_assert (!(sparc_floating_p (type) && len == 16));
1124   gdb_assert (len <= 8);
1125
1126   if (sparc_floating_p (type))
1127     {
1128       /* Floating return values.  */
1129       memcpy (buf, valbuf, len);
1130       regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
1131       if (len > 4)
1132         regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
1133     }
1134   else
1135     {
1136       /* Integral and pointer return values.  */
1137       gdb_assert (sparc_integral_or_pointer_p (type));
1138
1139       if (len > 4)
1140         {
1141           gdb_assert (len == 8);
1142           memcpy (buf, valbuf, 8);
1143           regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
1144         }
1145       else
1146         {
1147           /* ??? Do we need to do any sign-extension here?  */
1148           memcpy (buf + 4 - len, valbuf, len);
1149         }
1150       regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
1151     }
1152 }
1153
1154 static enum return_value_convention
1155 sparc32_return_value (struct gdbarch *gdbarch, struct type *func_type,
1156                       struct type *type, struct regcache *regcache,
1157                       gdb_byte *readbuf, const gdb_byte *writebuf)
1158 {
1159   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1160
1161   /* The psABI says that "...every stack frame reserves the word at
1162      %fp+64.  If a function returns a structure, union, or
1163      quad-precision value, this word should hold the address of the
1164      object into which the return value should be copied."  This
1165      guarantees that we can always find the return value, not just
1166      before the function returns.  */
1167
1168   if (sparc_structure_or_union_p (type)
1169       || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
1170     {
1171       if (readbuf)
1172         {
1173           ULONGEST sp;
1174           CORE_ADDR addr;
1175
1176           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1177           addr = read_memory_unsigned_integer (sp + 64, 4, byte_order);
1178           read_memory (addr, readbuf, TYPE_LENGTH (type));
1179         }
1180
1181       return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
1182     }
1183
1184   if (readbuf)
1185     sparc32_extract_return_value (type, regcache, readbuf);
1186   if (writebuf)
1187     sparc32_store_return_value (type, regcache, writebuf);
1188
1189   return RETURN_VALUE_REGISTER_CONVENTION;
1190 }
1191
1192 static int
1193 sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
1194 {
1195   return (sparc_structure_or_union_p (type)
1196           || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16));
1197 }
1198
1199 static int
1200 sparc32_dwarf2_struct_return_p (struct frame_info *this_frame)
1201 {
1202   CORE_ADDR pc = get_frame_address_in_block (this_frame);
1203   struct symbol *sym = find_pc_function (pc);
1204
1205   if (sym)
1206     return sparc32_struct_return_from_sym (sym);
1207   return 0;
1208 }
1209
1210 static void
1211 sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1212                                struct dwarf2_frame_state_reg *reg,
1213                                struct frame_info *this_frame)
1214 {
1215   int off;
1216
1217   switch (regnum)
1218     {
1219     case SPARC_G0_REGNUM:
1220       /* Since %g0 is always zero, there is no point in saving it, and
1221          people will be inclined omit it from the CFI.  Make sure we
1222          don't warn about that.  */
1223       reg->how = DWARF2_FRAME_REG_SAME_VALUE;
1224       break;
1225     case SPARC_SP_REGNUM:
1226       reg->how = DWARF2_FRAME_REG_CFA;
1227       break;
1228     case SPARC32_PC_REGNUM:
1229     case SPARC32_NPC_REGNUM:
1230       reg->how = DWARF2_FRAME_REG_RA_OFFSET;
1231       off = 8;
1232       if (sparc32_dwarf2_struct_return_p (this_frame))
1233         off += 4;
1234       if (regnum == SPARC32_NPC_REGNUM)
1235         off += 4;
1236       reg->loc.offset = off;
1237       break;
1238     }
1239 }
1240
1241 \f
1242 /* The SPARC Architecture doesn't have hardware single-step support,
1243    and most operating systems don't implement it either, so we provide
1244    software single-step mechanism.  */
1245
1246 static CORE_ADDR
1247 sparc_analyze_control_transfer (struct frame_info *frame,
1248                                 CORE_ADDR pc, CORE_ADDR *npc)
1249 {
1250   unsigned long insn = sparc_fetch_instruction (pc);
1251   int conditional_p = X_COND (insn) & 0x7;
1252   int branch_p = 0;
1253   long offset = 0;                      /* Must be signed for sign-extend.  */
1254
1255   if (X_OP (insn) == 0 && X_OP2 (insn) == 3 && (insn & 0x1000000) == 0)
1256     {
1257       /* Branch on Integer Register with Prediction (BPr).  */
1258       branch_p = 1;
1259       conditional_p = 1;
1260     }
1261   else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
1262     {
1263       /* Branch on Floating-Point Condition Codes (FBfcc).  */
1264       branch_p = 1;
1265       offset = 4 * X_DISP22 (insn);
1266     }
1267   else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1268     {
1269       /* Branch on Floating-Point Condition Codes with Prediction
1270          (FBPfcc).  */
1271       branch_p = 1;
1272       offset = 4 * X_DISP19 (insn);
1273     }
1274   else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1275     {
1276       /* Branch on Integer Condition Codes (Bicc).  */
1277       branch_p = 1;
1278       offset = 4 * X_DISP22 (insn);
1279     }
1280   else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
1281     {
1282       /* Branch on Integer Condition Codes with Prediction (BPcc).  */
1283       branch_p = 1;
1284       offset = 4 * X_DISP19 (insn);
1285     }
1286   else if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3a)
1287     {
1288       /* Trap instruction (TRAP).  */
1289       return gdbarch_tdep (get_frame_arch (frame))->step_trap (frame, insn);
1290     }
1291
1292   /* FIXME: Handle DONE and RETRY instructions.  */
1293
1294   if (branch_p)
1295     {
1296       if (conditional_p)
1297         {
1298           /* For conditional branches, return nPC + 4 iff the annul
1299              bit is 1.  */
1300           return (X_A (insn) ? *npc + 4 : 0);
1301         }
1302       else
1303         {
1304           /* For unconditional branches, return the target if its
1305              specified condition is "always" and return nPC + 4 if the
1306              condition is "never".  If the annul bit is 1, set *NPC to
1307              zero.  */
1308           if (X_COND (insn) == 0x0)
1309             pc = *npc, offset = 4;
1310           if (X_A (insn))
1311             *npc = 0;
1312
1313           gdb_assert (offset != 0);
1314           return pc + offset;
1315         }
1316     }
1317
1318   return 0;
1319 }
1320
1321 static CORE_ADDR
1322 sparc_step_trap (struct frame_info *frame, unsigned long insn)
1323 {
1324   return 0;
1325 }
1326
1327 int
1328 sparc_software_single_step (struct frame_info *frame)
1329 {
1330   struct gdbarch *arch = get_frame_arch (frame);
1331   struct gdbarch_tdep *tdep = gdbarch_tdep (arch);
1332   struct address_space *aspace = get_frame_address_space (frame);
1333   CORE_ADDR npc, nnpc;
1334
1335   CORE_ADDR pc, orig_npc;
1336
1337   pc = get_frame_register_unsigned (frame, tdep->pc_regnum);
1338   orig_npc = npc = get_frame_register_unsigned (frame, tdep->npc_regnum);
1339
1340   /* Analyze the instruction at PC.  */
1341   nnpc = sparc_analyze_control_transfer (frame, pc, &npc);
1342   if (npc != 0)
1343     insert_single_step_breakpoint (arch, aspace, npc);
1344
1345   if (nnpc != 0)
1346     insert_single_step_breakpoint (arch, aspace, nnpc);
1347
1348   /* Assert that we have set at least one breakpoint, and that
1349      they're not set at the same spot - unless we're going
1350      from here straight to NULL, i.e. a call or jump to 0.  */
1351   gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1352   gdb_assert (nnpc != npc || orig_npc == 0);
1353
1354   return 1;
1355 }
1356
1357 static void
1358 sparc_write_pc (struct regcache *regcache, CORE_ADDR pc)
1359 {
1360   struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
1361
1362   regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
1363   regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
1364 }
1365 \f
1366
1367 /* Return the appropriate register set for the core section identified
1368    by SECT_NAME and SECT_SIZE.  */
1369
1370 static const struct regset *
1371 sparc_regset_from_core_section (struct gdbarch *gdbarch,
1372                                 const char *sect_name, size_t sect_size)
1373 {
1374   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1375
1376   if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
1377     return tdep->gregset;
1378
1379   if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
1380     return tdep->fpregset;
1381
1382   return NULL;
1383 }
1384 \f
1385
1386 static struct gdbarch *
1387 sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1388 {
1389   struct gdbarch_tdep *tdep;
1390   struct gdbarch *gdbarch;
1391
1392   /* If there is already a candidate, use it.  */
1393   arches = gdbarch_list_lookup_by_info (arches, &info);
1394   if (arches != NULL)
1395     return arches->gdbarch;
1396
1397   /* Allocate space for the new architecture.  */
1398   tdep = XZALLOC (struct gdbarch_tdep);
1399   gdbarch = gdbarch_alloc (&info, tdep);
1400
1401   tdep->pc_regnum = SPARC32_PC_REGNUM;
1402   tdep->npc_regnum = SPARC32_NPC_REGNUM;
1403   tdep->step_trap = sparc_step_trap;
1404
1405   set_gdbarch_long_double_bit (gdbarch, 128);
1406   set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
1407
1408   set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1409   set_gdbarch_register_name (gdbarch, sparc32_register_name);
1410   set_gdbarch_register_type (gdbarch, sparc32_register_type);
1411   set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1412   set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1413   set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1414
1415   /* Register numbers of various important registers.  */
1416   set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1417   set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1418   set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1419
1420   /* Call dummy code.  */
1421   set_gdbarch_frame_align (gdbarch, sparc32_frame_align);
1422   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1423   set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1424   set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1425
1426   set_gdbarch_return_value (gdbarch, sparc32_return_value);
1427   set_gdbarch_stabs_argument_has_addr
1428     (gdbarch, sparc32_stabs_argument_has_addr);
1429
1430   set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1431
1432   /* Stack grows downward.  */
1433   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1434
1435   set_gdbarch_breakpoint_from_pc (gdbarch, sparc_breakpoint_from_pc);
1436
1437   set_gdbarch_frame_args_skip (gdbarch, 8);
1438
1439   set_gdbarch_print_insn (gdbarch, print_insn_sparc);
1440
1441   set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1442   set_gdbarch_write_pc (gdbarch, sparc_write_pc);
1443
1444   set_gdbarch_dummy_id (gdbarch, sparc_dummy_id);
1445
1446   set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
1447
1448   frame_base_set_default (gdbarch, &sparc32_frame_base);
1449
1450   /* Hook in the DWARF CFI frame unwinder.  */
1451   dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg);
1452   /* FIXME: kettenis/20050423: Don't enable the unwinder until the
1453      StackGhost issues have been resolved.  */
1454
1455   /* Hook in ABI-specific overrides, if they have been registered.  */
1456   gdbarch_init_osabi (info, gdbarch);
1457
1458   frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
1459
1460   /* If we have register sets, enable the generic core file support.  */
1461   if (tdep->gregset)
1462     set_gdbarch_regset_from_core_section (gdbarch,
1463                                           sparc_regset_from_core_section);
1464
1465   return gdbarch;
1466 }
1467 \f
1468 /* Helper functions for dealing with register windows.  */
1469
1470 void
1471 sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
1472 {
1473   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1474   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1475   int offset = 0;
1476   gdb_byte buf[8];
1477   int i;
1478
1479   if (sp & 1)
1480     {
1481       /* Registers are 64-bit.  */
1482       sp += BIAS;
1483
1484       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1485         {
1486           if (regnum == i || regnum == -1)
1487             {
1488               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1489
1490               /* Handle StackGhost.  */
1491               if (i == SPARC_I7_REGNUM)
1492                 {
1493                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1494                   ULONGEST i7;
1495
1496                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1497                   store_unsigned_integer (buf + offset, 8, byte_order,
1498                                           i7 ^ wcookie);
1499                 }
1500
1501               regcache_raw_supply (regcache, i, buf);
1502             }
1503         }
1504     }
1505   else
1506     {
1507       /* Registers are 32-bit.  Toss any sign-extension of the stack
1508          pointer.  */
1509       sp &= 0xffffffffUL;
1510
1511       /* Clear out the top half of the temporary buffer, and put the
1512          register value in the bottom half if we're in 64-bit mode.  */
1513       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1514         {
1515           memset (buf, 0, 4);
1516           offset = 4;
1517         }
1518
1519       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1520         {
1521           if (regnum == i || regnum == -1)
1522             {
1523               target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1524                                   buf + offset, 4);
1525
1526               /* Handle StackGhost.  */
1527               if (i == SPARC_I7_REGNUM)
1528                 {
1529                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1530                   ULONGEST i7;
1531
1532                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1533                   store_unsigned_integer (buf + offset, 4, byte_order,
1534                                           i7 ^ wcookie);
1535                 }
1536
1537               regcache_raw_supply (regcache, i, buf);
1538             }
1539         }
1540     }
1541 }
1542
1543 void
1544 sparc_collect_rwindow (const struct regcache *regcache,
1545                        CORE_ADDR sp, int regnum)
1546 {
1547   struct gdbarch *gdbarch = get_regcache_arch (regcache);
1548   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1549   int offset = 0;
1550   gdb_byte buf[8];
1551   int i;
1552
1553   if (sp & 1)
1554     {
1555       /* Registers are 64-bit.  */
1556       sp += BIAS;
1557
1558       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1559         {
1560           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1561             {
1562               regcache_raw_collect (regcache, i, buf);
1563
1564               /* Handle StackGhost.  */
1565               if (i == SPARC_I7_REGNUM)
1566                 {
1567                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1568                   ULONGEST i7;
1569
1570                   i7 = extract_unsigned_integer (buf + offset, 8, byte_order);
1571                   store_unsigned_integer (buf, 8, byte_order, i7 ^ wcookie);
1572                 }
1573
1574               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1575             }
1576         }
1577     }
1578   else
1579     {
1580       /* Registers are 32-bit.  Toss any sign-extension of the stack
1581          pointer.  */
1582       sp &= 0xffffffffUL;
1583
1584       /* Only use the bottom half if we're in 64-bit mode.  */
1585       if (gdbarch_ptr_bit (get_regcache_arch (regcache)) == 64)
1586         offset = 4;
1587
1588       for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1589         {
1590           if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1591             {
1592               regcache_raw_collect (regcache, i, buf);
1593
1594               /* Handle StackGhost.  */
1595               if (i == SPARC_I7_REGNUM)
1596                 {
1597                   ULONGEST wcookie = sparc_fetch_wcookie (gdbarch);
1598                   ULONGEST i7;
1599
1600                   i7 = extract_unsigned_integer (buf + offset, 4, byte_order);
1601                   store_unsigned_integer (buf + offset, 4, byte_order,
1602                                           i7 ^ wcookie);
1603                 }
1604
1605               target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1606                                    buf + offset, 4);
1607             }
1608         }
1609     }
1610 }
1611
1612 /* Helper functions for dealing with register sets.  */
1613
1614 void
1615 sparc32_supply_gregset (const struct sparc_gregset *gregset,
1616                         struct regcache *regcache,
1617                         int regnum, const void *gregs)
1618 {
1619   const gdb_byte *regs = gregs;
1620   int i;
1621
1622   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1623     regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
1624                          regs + gregset->r_psr_offset);
1625
1626   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1627     regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
1628                          regs + gregset->r_pc_offset);
1629
1630   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1631     regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
1632                          regs + gregset->r_npc_offset);
1633
1634   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1635     regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
1636                          regs + gregset->r_y_offset);
1637
1638   if (regnum == SPARC_G0_REGNUM || regnum == -1)
1639     regcache_raw_supply (regcache, SPARC_G0_REGNUM, NULL);
1640
1641   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1642     {
1643       int offset = gregset->r_g1_offset;
1644
1645       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1646         {
1647           if (regnum == i || regnum == -1)
1648             regcache_raw_supply (regcache, i, regs + offset);
1649           offset += 4;
1650         }
1651     }
1652
1653   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1654     {
1655       /* Not all of the register set variants include Locals and
1656          Inputs.  For those that don't, we read them off the stack.  */
1657       if (gregset->r_l0_offset == -1)
1658         {
1659           ULONGEST sp;
1660
1661           regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1662           sparc_supply_rwindow (regcache, sp, regnum);
1663         }
1664       else
1665         {
1666           int offset = gregset->r_l0_offset;
1667
1668           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1669             {
1670               if (regnum == i || regnum == -1)
1671                 regcache_raw_supply (regcache, i, regs + offset);
1672               offset += 4;
1673             }
1674         }
1675     }
1676 }
1677
1678 void
1679 sparc32_collect_gregset (const struct sparc_gregset *gregset,
1680                          const struct regcache *regcache,
1681                          int regnum, void *gregs)
1682 {
1683   gdb_byte *regs = gregs;
1684   int i;
1685
1686   if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1687     regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
1688                           regs + gregset->r_psr_offset);
1689
1690   if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1691     regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
1692                           regs + gregset->r_pc_offset);
1693
1694   if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1695     regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
1696                           regs + gregset->r_npc_offset);
1697
1698   if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1699     regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
1700                           regs + gregset->r_y_offset);
1701
1702   if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
1703     {
1704       int offset = gregset->r_g1_offset;
1705
1706       /* %g0 is always zero.  */
1707       for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1708         {
1709           if (regnum == i || regnum == -1)
1710             regcache_raw_collect (regcache, i, regs + offset);
1711           offset += 4;
1712         }
1713     }
1714
1715   if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
1716     {
1717       /* Not all of the register set variants include Locals and
1718          Inputs.  For those that don't, we read them off the stack.  */
1719       if (gregset->r_l0_offset != -1)
1720         {
1721           int offset = gregset->r_l0_offset;
1722
1723           for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1724             {
1725               if (regnum == i || regnum == -1)
1726                 regcache_raw_collect (regcache, i, regs + offset);
1727               offset += 4;
1728             }
1729         }
1730     }
1731 }
1732
1733 void
1734 sparc32_supply_fpregset (struct regcache *regcache,
1735                          int regnum, const void *fpregs)
1736 {
1737   const gdb_byte *regs = fpregs;
1738   int i;
1739
1740   for (i = 0; i < 32; i++)
1741     {
1742       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
1743         regcache_raw_supply (regcache, SPARC_F0_REGNUM + i, regs + (i * 4));
1744     }
1745
1746   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
1747     regcache_raw_supply (regcache, SPARC32_FSR_REGNUM, regs + (32 * 4) + 4);
1748 }
1749
1750 void
1751 sparc32_collect_fpregset (const struct regcache *regcache,
1752                           int regnum, void *fpregs)
1753 {
1754   gdb_byte *regs = fpregs;
1755   int i;
1756
1757   for (i = 0; i < 32; i++)
1758     {
1759       if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
1760         regcache_raw_collect (regcache, SPARC_F0_REGNUM + i, regs + (i * 4));
1761     }
1762
1763   if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
1764     regcache_raw_collect (regcache, SPARC32_FSR_REGNUM, regs + (32 * 4) + 4);
1765 }
1766 \f
1767
1768 /* SunOS 4.  */
1769
1770 /* From <machine/reg.h>.  */
1771 const struct sparc_gregset sparc32_sunos4_gregset =
1772 {
1773   0 * 4,                        /* %psr */
1774   1 * 4,                        /* %pc */
1775   2 * 4,                        /* %npc */
1776   3 * 4,                        /* %y */
1777   -1,                           /* %wim */
1778   -1,                           /* %tbr */
1779   4 * 4,                        /* %g1 */
1780   -1                            /* %l0 */
1781 };
1782 \f
1783
1784 /* Provide a prototype to silence -Wmissing-prototypes.  */
1785 void _initialize_sparc_tdep (void);
1786
1787 void
1788 _initialize_sparc_tdep (void)
1789 {
1790   register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
1791 }