OSDN Git Service

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