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