2003-09-08 Andrew Cagney <cagney@redhat.com>
[external/binutils.git] / gdb / sparc-tdep.c
1 /* Target-dependent code for the SPARC for GDB, the GNU debugger.
2
3    Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation,
5    Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 /* ??? Support for calling functions from gdb in sparc64 is unfinished.  */
25
26 #include "defs.h"
27 #include "arch-utils.h"
28 #include "frame.h"
29 #include "inferior.h"
30 #include "target.h"
31 #include "value.h"
32 #include "bfd.h"
33 #include "gdb_string.h"
34 #include "regcache.h"
35 #include "osabi.h"
36
37 #include "sparc-tdep.h"
38
39 #ifdef  USE_PROC_FS
40 #include <sys/procfs.h>
41 /* Prototypes for supply_gregset etc. */
42 #include "gregset.h"
43 #endif
44
45 #include "gdbcore.h"
46 #include "gdb_assert.h"
47
48 #include "symfile.h"    /* for 'entry_point_address' */
49
50 /*
51  * Some local macros that have multi-arch and non-multi-arch versions:
52  */
53
54 #if 0
55 // OBSOLETE /* Does the target have Floating Point registers?  */
56 // OBSOLETE #define SPARC_HAS_FPU     (gdbarch_tdep (current_gdbarch)->has_fpu)
57 #endif
58 #define SPARC_HAS_FPU 1
59 /* Number of bytes devoted to Floating Point registers: */
60 #define FP_REGISTER_BYTES (gdbarch_tdep (current_gdbarch)->fp_register_bytes)
61 /* Highest numbered Floating Point register.  */
62 #define FP_MAX_REGNUM     (gdbarch_tdep (current_gdbarch)->fp_max_regnum)
63 /* Size of a general (integer) register: */
64 #define SPARC_INTREG_SIZE (gdbarch_tdep (current_gdbarch)->intreg_size)
65 /* Offset within the call dummy stack of the saved registers.  */
66 #define DUMMY_REG_SAVE_OFFSET (gdbarch_tdep (current_gdbarch)->reg_save_offset)
67
68 struct gdbarch_tdep
69   {
70 #if 0
71     // OBSOLETE     int has_fpu;
72 #endif
73     int fp_register_bytes;
74     int y_regnum;
75     int fp_max_regnum;
76     int intreg_size;
77     int reg_save_offset;
78     int call_dummy_call_offset;
79     int print_insn_mach;
80   };
81
82 /* Now make GDB_TARGET_IS_SPARC64 a runtime test.  */
83 /* FIXME MVS: or try testing bfd_arch_info.arch and bfd_arch_info.mach ... 
84  * define GDB_TARGET_IS_SPARC64 \
85  *      (TARGET_ARCHITECTURE->arch == bfd_arch_sparc &&    \
86  *      (TARGET_ARCHITECTURE->mach == bfd_mach_sparc_v9 || \
87  *       TARGET_ARCHITECTURE->mach == bfd_mach_sparc_v9a))
88  */
89
90 /* We don't store all registers immediately when requested, since they
91    get sent over in large chunks anyway.  Instead, we accumulate most
92    of the changes and send them over once.  "deferred_stores" keeps
93    track of which sets of registers we have locally-changed copies of,
94    so we only need send the groups that have changed.  */
95
96 int deferred_stores = 0;    /* Accumulated stores we want to do eventually. */
97
98
99 #if 0
100 // OBSOLETE /* Some machines, such as Fujitsu SPARClite 86x, have a bi-endian mode
101 // OBSOLETE    where instructions are big-endian and data are little-endian.
102 // OBSOLETE    This flag is set when we detect that the target is of this type. */
103 // OBSOLETE 
104 // OBSOLETE int bi_endian = 0;
105 #endif
106
107
108 const unsigned char *
109 sparc_breakpoint_from_pc (CORE_ADDR *pc, int *len)
110 {
111   static const char breakpoint[] = {0x91, 0xd0, 0x20, 0x01};
112   (*len) = sizeof (breakpoint);
113   return breakpoint;
114 }
115
116 /* Fetch a single instruction.  Even on bi-endian machines
117    such as sparc86x, instructions are always big-endian.  */
118
119 static unsigned long
120 fetch_instruction (CORE_ADDR pc)
121 {
122   unsigned long retval;
123   int i;
124   unsigned char buf[4];
125
126   read_memory (pc, buf, sizeof (buf));
127
128   /* Start at the most significant end of the integer, and work towards
129      the least significant.  */
130   retval = 0;
131   for (i = 0; i < sizeof (buf); ++i)
132     retval = (retval << 8) | buf[i];
133   return retval;
134 }
135
136
137 /* Branches with prediction are treated like their non-predicting cousins.  */
138 /* FIXME: What about floating point branches?  */
139
140 /* Macros to extract fields from sparc instructions.  */
141 #define X_OP(i) (((i) >> 30) & 0x3)
142 #define X_RD(i) (((i) >> 25) & 0x1f)
143 #define X_A(i) (((i) >> 29) & 1)
144 #define X_COND(i) (((i) >> 25) & 0xf)
145 #define X_OP2(i) (((i) >> 22) & 0x7)
146 #define X_IMM22(i) ((i) & 0x3fffff)
147 #define X_OP3(i) (((i) >> 19) & 0x3f)
148 #define X_RS1(i) (((i) >> 14) & 0x1f)
149 #define X_I(i) (((i) >> 13) & 1)
150 #define X_IMM13(i) ((i) & 0x1fff)
151 /* Sign extension macros.  */
152 #define X_SIMM13(i) ((X_IMM13 (i) ^ 0x1000) - 0x1000)
153 #define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
154 #define X_CC(i) (((i) >> 20) & 3)
155 #define X_P(i) (((i) >> 19) & 1)
156 #define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
157 #define X_RCOND(i) (((i) >> 25) & 7)
158 #define X_DISP16(i) ((((((i) >> 6) && 0xc000) | ((i) & 0x3fff)) ^ 0x8000) - 0x8000)
159 #define X_FCN(i) (((i) >> 25) & 31)
160
161 typedef enum
162 {
163   Error, not_branch, bicc, bicca, ba, baa, ticc, ta, done_retry
164 } branch_type;
165
166 /* Simulate single-step ptrace call for sun4.  Code written by Gary
167    Beihl (beihl@mcc.com).  */
168
169 /* npc4 and next_pc describe the situation at the time that the
170    step-breakpoint was set, not necessary the current value of NPC_REGNUM.  */
171 static CORE_ADDR next_pc, npc4, target;
172 static int brknpc4, brktrg;
173 typedef char binsn_quantum[BREAKPOINT_MAX];
174 static binsn_quantum break_mem[3];
175
176 static branch_type isbranch (long, CORE_ADDR, CORE_ADDR *);
177
178 /* single_step() is called just before we want to resume the inferior,
179    if we want to single-step it but there is no hardware or kernel single-step
180    support (as on all SPARCs).  We find all the possible targets of the
181    coming instruction and breakpoint them.
182
183    single_step is also called just after the inferior stops.  If we had
184    set up a simulated single-step, we undo our damage.  */
185
186 void
187 sparc_software_single_step (enum target_signal ignore,  /* pid, but we don't need it */
188                             int insert_breakpoints_p)
189 {
190   branch_type br;
191   CORE_ADDR pc;
192   long pc_instruction;
193
194   if (insert_breakpoints_p)
195     {
196       /* Always set breakpoint for NPC.  */
197       next_pc = read_register (NPC_REGNUM);
198       npc4 = next_pc + 4;       /* branch not taken */
199
200       target_insert_breakpoint (next_pc, break_mem[0]);
201       /* printf_unfiltered ("set break at %x\n",next_pc); */
202
203       pc = read_register (PC_REGNUM);
204       pc_instruction = fetch_instruction (pc);
205       br = isbranch (pc_instruction, pc, &target);
206       brknpc4 = brktrg = 0;
207
208       if (br == bicca)
209         {
210           /* Conditional annulled branch will either end up at
211              npc (if taken) or at npc+4 (if not taken).
212              Trap npc+4.  */
213           brknpc4 = 1;
214           target_insert_breakpoint (npc4, break_mem[1]);
215         }
216       else if (br == baa && target != next_pc)
217         {
218           /* Unconditional annulled branch will always end up at
219              the target.  */
220           brktrg = 1;
221           target_insert_breakpoint (target, break_mem[2]);
222         }
223       else if (GDB_TARGET_IS_SPARC64 && br == done_retry)
224         {
225           brktrg = 1;
226           target_insert_breakpoint (target, break_mem[2]);
227         }
228     }
229   else
230     {
231       /* Remove breakpoints */
232       target_remove_breakpoint (next_pc, break_mem[0]);
233
234       if (brknpc4)
235         target_remove_breakpoint (npc4, break_mem[1]);
236
237       if (brktrg)
238         target_remove_breakpoint (target, break_mem[2]);
239     }
240 }
241 \f
242 struct frame_extra_info 
243 {
244   CORE_ADDR bottom;
245   int in_prologue;
246   int flat;
247   /* Following fields only relevant for flat frames.  */
248   CORE_ADDR pc_addr;
249   CORE_ADDR fp_addr;
250   /* Add this to ->frame to get the value of the stack pointer at the 
251      time of the register saves.  */
252   int sp_offset;
253 };
254
255 /* Call this for each newly created frame.  For SPARC, we need to
256    calculate the bottom of the frame, and do some extra work if the
257    prologue has been generated via the -mflat option to GCC.  In
258    particular, we need to know where the previous fp and the pc have
259    been stashed, since their exact position within the frame may vary.  */
260
261 void
262 sparc_init_extra_frame_info (int fromleaf, struct frame_info *fi)
263 {
264   char *name;
265   CORE_ADDR prologue_start, prologue_end;
266   int insn;
267
268   frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
269   frame_saved_regs_zalloc (fi);
270
271   get_frame_extra_info (fi)->bottom =
272     (get_next_frame (fi)
273      ? (get_frame_base (fi) == get_frame_base (get_next_frame (fi))
274         ? get_frame_extra_info (get_next_frame (fi))->bottom
275         : get_frame_base (get_next_frame (fi)))
276      : read_sp ());
277
278   /* If fi->next is NULL, then we already set ->frame by passing
279      deprecated_read_fp() to create_new_frame.  */
280   if (get_next_frame (fi))
281     {
282       char buf[MAX_REGISTER_SIZE];
283
284       /* Compute ->frame as if not flat.  If it is flat, we'll change
285          it later.  */
286       if (get_next_frame (get_next_frame (fi)) != NULL
287           && ((get_frame_type (get_next_frame (get_next_frame (fi))) == SIGTRAMP_FRAME)
288               || deprecated_frame_in_dummy (get_next_frame (get_next_frame (fi))))
289           && frameless_look_for_prologue (get_next_frame (fi)))
290         {
291           /* A frameless function interrupted by a signal did not change
292              the frame pointer, fix up frame pointer accordingly.  */
293           deprecated_update_frame_base_hack (fi, get_frame_base (get_next_frame (fi)));
294           get_frame_extra_info (fi)->bottom =
295             get_frame_extra_info (get_next_frame (fi))->bottom;
296         }
297       else
298         {
299           /* Should we adjust for stack bias here? */
300           ULONGEST tmp;
301           frame_read_unsigned_register (fi, DEPRECATED_FP_REGNUM, &tmp);
302           deprecated_update_frame_base_hack (fi, tmp);
303           if (GDB_TARGET_IS_SPARC64 && (get_frame_base (fi) & 1))
304             deprecated_update_frame_base_hack (fi, get_frame_base (fi) + 2047);
305         }
306     }
307
308   /* Decide whether this is a function with a ``flat register window''
309      frame.  For such functions, the frame pointer is actually in %i7.  */
310   get_frame_extra_info (fi)->flat = 0;
311   get_frame_extra_info (fi)->in_prologue = 0;
312   if (find_pc_partial_function (get_frame_pc (fi), &name, &prologue_start, &prologue_end))
313     {
314       /* See if the function starts with an add (which will be of a
315          negative number if a flat frame) to the sp.  FIXME: Does not
316          handle large frames which will need more than one instruction
317          to adjust the sp.  */
318       insn = fetch_instruction (prologue_start);
319       if (X_OP (insn) == 2 && X_RD (insn) == 14 && X_OP3 (insn) == 0
320           && X_I (insn) && X_SIMM13 (insn) < 0)
321         {
322           int offset = X_SIMM13 (insn);
323
324           /* Then look for a save of %i7 into the frame.  */
325           insn = fetch_instruction (prologue_start + 4);
326           if (X_OP (insn) == 3
327               && X_RD (insn) == 31
328               && X_OP3 (insn) == 4
329               && X_RS1 (insn) == 14)
330             {
331               char buf[MAX_REGISTER_SIZE];
332
333               /* We definitely have a flat frame now.  */
334               get_frame_extra_info (fi)->flat = 1;
335
336               get_frame_extra_info (fi)->sp_offset = offset;
337
338               /* Overwrite the frame's address with the value in %i7.  */
339               {
340                 ULONGEST tmp;
341                 frame_read_unsigned_register (fi, I7_REGNUM, &tmp);
342                 deprecated_update_frame_base_hack (fi, tmp);
343               }
344
345               if (GDB_TARGET_IS_SPARC64 && (get_frame_base (fi) & 1))
346                 deprecated_update_frame_base_hack (fi, get_frame_base (fi) + 2047);
347
348               /* Record where the fp got saved.  */
349               get_frame_extra_info (fi)->fp_addr = 
350                 get_frame_base (fi) + get_frame_extra_info (fi)->sp_offset + X_SIMM13 (insn);
351
352               /* Also try to collect where the pc got saved to.  */
353               get_frame_extra_info (fi)->pc_addr = 0;
354               insn = fetch_instruction (prologue_start + 12);
355               if (X_OP (insn) == 3
356                   && X_RD (insn) == 15
357                   && X_OP3 (insn) == 4
358                   && X_RS1 (insn) == 14)
359                 get_frame_extra_info (fi)->pc_addr = 
360                   get_frame_base (fi) + get_frame_extra_info (fi)->sp_offset + X_SIMM13 (insn);
361             }
362         }
363       else
364         {
365           /* Check if the PC is in the function prologue before a SAVE
366              instruction has been executed yet.  If so, set the frame
367              to the current value of the stack pointer and set
368              the in_prologue flag.  */
369           CORE_ADDR addr;
370           struct symtab_and_line sal;
371
372           sal = find_pc_line (prologue_start, 0);
373           if (sal.line == 0)    /* no line info, use PC */
374             prologue_end = get_frame_pc (fi);
375           else if (sal.end < prologue_end)
376             prologue_end = sal.end;
377           if (get_frame_pc (fi) < prologue_end)
378             {
379               for (addr = prologue_start; addr < get_frame_pc (fi); addr += 4)
380                 {
381                   insn = read_memory_integer (addr, 4);
382                   if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
383                     break;      /* SAVE seen, stop searching */
384                 }
385               if (addr >= get_frame_pc (fi))
386                 {
387                   get_frame_extra_info (fi)->in_prologue = 1;
388                   deprecated_update_frame_base_hack (fi, read_register (SP_REGNUM));
389                 }
390             }
391         }
392     }
393   if (get_next_frame (fi) && get_frame_base (fi) == 0)
394     {
395       /* Kludge to cause init_prev_frame_info to destroy the new frame.  */
396       deprecated_update_frame_base_hack (fi, get_frame_base (get_next_frame (fi)));
397       deprecated_update_frame_pc_hack (fi, get_frame_pc (get_next_frame (fi)));
398     }
399 }
400
401 CORE_ADDR
402 sparc_frame_chain (struct frame_info *frame)
403 {
404   /* Value that will cause DEPRECATED_FRAME_CHAIN_VALID to not worry
405      about the chain value.  If it really is zero, we detect it later
406      in sparc_init_prev_frame.
407      
408      Note: kevinb/2003-02-18: The constant 1 used to be returned here,
409      but, after some recent changes to legacy_frame_chain_valid(),
410      this value is no longer suitable for causing
411      legacy_frame_chain_valid() to "not worry about the chain value."
412      The constant ~0 (i.e, 0xfff...) causes the failing test in
413      legacy_frame_chain_valid() to succeed thus preserving the "not
414      worry" property.  I had considered using something like
415      ``get_frame_base (frame) + 1''.  However, I think a constant
416      value is better, because when debugging this problem, I knew that
417      something funny was going on as soon as I saw the constant 1
418      being used as the frame chain elsewhere in GDB.  */
419
420   return ~ (CORE_ADDR) 0;
421 }
422
423 /* Find the pc saved in frame FRAME.  */
424
425 CORE_ADDR
426 sparc_frame_saved_pc (struct frame_info *frame)
427 {
428   char buf[MAX_REGISTER_SIZE];
429   CORE_ADDR addr;
430
431   if ((get_frame_type (frame) == SIGTRAMP_FRAME))
432     {
433       /* This is the signal trampoline frame.
434          Get the saved PC from the sigcontext structure.  */
435
436 #ifndef SIGCONTEXT_PC_OFFSET
437 #define SIGCONTEXT_PC_OFFSET 12
438 #endif
439
440       CORE_ADDR sigcontext_addr;
441       char *scbuf;
442       int saved_pc_offset = SIGCONTEXT_PC_OFFSET;
443       char *name = NULL;
444
445       scbuf = alloca (TARGET_PTR_BIT / HOST_CHAR_BIT);
446
447       /* Solaris2 ucbsigvechandler passes a pointer to a sigcontext
448          as the third parameter.  The offset to the saved pc is 12.  */
449       find_pc_partial_function (get_frame_pc (frame), &name,
450                                 (CORE_ADDR *) NULL, (CORE_ADDR *) NULL);
451       if (name && STREQ (name, "ucbsigvechandler"))
452         saved_pc_offset = 12;
453
454       /* The sigcontext address is contained in register O2.  */
455       {
456         ULONGEST tmp;
457         frame_read_unsigned_register (frame, O0_REGNUM + 2, &tmp);
458         sigcontext_addr = tmp;
459       }
460
461       /* Don't cause a memory_error when accessing sigcontext in case the
462          stack layout has changed or the stack is corrupt.  */
463       target_read_memory (sigcontext_addr + saved_pc_offset,
464                           scbuf, sizeof (scbuf));
465       return extract_unsigned_integer (scbuf, sizeof (scbuf));
466     }
467   else if (get_frame_extra_info (frame)->in_prologue ||
468            (get_next_frame (frame) != NULL &&
469             ((get_frame_type (get_next_frame (frame)) == SIGTRAMP_FRAME) ||
470              deprecated_frame_in_dummy (get_next_frame (frame))) &&
471             frameless_look_for_prologue (frame)))
472     {
473       /* A frameless function interrupted by a signal did not save
474          the PC, it is still in %o7.  */
475       ULONGEST tmp;
476       frame_read_unsigned_register (frame, O7_REGNUM, &tmp);
477       return PC_ADJUST (tmp);
478     }
479   if (get_frame_extra_info (frame)->flat)
480     addr = get_frame_extra_info (frame)->pc_addr;
481   else
482     addr = get_frame_extra_info (frame)->bottom + FRAME_SAVED_I0 +
483       SPARC_INTREG_SIZE * (I7_REGNUM - I0_REGNUM);
484
485   if (addr == 0)
486     /* A flat frame leaf function might not save the PC anywhere,
487        just leave it in %o7.  */
488     return PC_ADJUST (read_register (O7_REGNUM));
489
490   read_memory (addr, buf, SPARC_INTREG_SIZE);
491   return PC_ADJUST (extract_unsigned_integer (buf, SPARC_INTREG_SIZE));
492 }
493
494 /* Since an individual frame in the frame cache is defined by two
495    arguments (a frame pointer and a stack pointer), we need two
496    arguments to get info for an arbitrary stack frame.  This routine
497    takes two arguments and makes the cached frames look as if these
498    two arguments defined a frame on the cache.  This allows the rest
499    of info frame to extract the important arguments without
500    difficulty.  */
501
502 struct frame_info *
503 setup_arbitrary_frame (int argc, CORE_ADDR *argv)
504 {
505   struct frame_info *frame;
506
507   if (argc != 2)
508     error ("Sparc frame specifications require two arguments: fp and sp");
509
510   frame = create_new_frame (argv[0], 0);
511
512   if (!frame)
513     internal_error (__FILE__, __LINE__,
514                     "create_new_frame returned invalid frame");
515
516   get_frame_extra_info (frame)->bottom = argv[1];
517   deprecated_update_frame_pc_hack (frame, DEPRECATED_FRAME_SAVED_PC (frame));
518   return frame;
519 }
520
521 /* Given a pc value, skip it forward past the function prologue by
522    disassembling instructions that appear to be a prologue.
523
524    If FRAMELESS_P is set, we are only testing to see if the function
525    is frameless.  This allows a quicker answer.
526
527    This routine should be more specific in its actions; making sure
528    that it uses the same register in the initial prologue section.  */
529
530 static CORE_ADDR examine_prologue (CORE_ADDR, int, struct frame_info *,
531                                    CORE_ADDR *);
532
533 static CORE_ADDR
534 examine_prologue (CORE_ADDR start_pc, int frameless_p, struct frame_info *fi,
535                   CORE_ADDR *saved_regs)
536 {
537   int insn;
538   int dest = -1;
539   CORE_ADDR pc = start_pc;
540   int is_flat = 0;
541
542   insn = fetch_instruction (pc);
543
544   /* Recognize the `sethi' insn and record its destination.  */
545   if (X_OP (insn) == 0 && X_OP2 (insn) == 4)
546     {
547       dest = X_RD (insn);
548       pc += 4;
549       insn = fetch_instruction (pc);
550     }
551
552   /* Recognize an add immediate value to register to either %g1 or
553      the destination register recorded above.  Actually, this might
554      well recognize several different arithmetic operations.
555      It doesn't check that rs1 == rd because in theory "sub %g0, 5, %g1"
556      followed by "save %sp, %g1, %sp" is a valid prologue (Not that
557      I imagine any compiler really does that, however).  */
558   if (X_OP (insn) == 2
559       && X_I (insn)
560       && (X_RD (insn) == 1 || X_RD (insn) == dest))
561     {
562       pc += 4;
563       insn = fetch_instruction (pc);
564     }
565
566   /* Recognize any SAVE insn.  */
567   if (X_OP (insn) == 2 && X_OP3 (insn) == 60)
568     {
569       pc += 4;
570       if (frameless_p)          /* If the save is all we care about, */
571         return pc;              /* return before doing more work */
572       insn = fetch_instruction (pc);
573     }
574   /* Recognize add to %sp.  */
575   else if (X_OP (insn) == 2 && X_RD (insn) == 14 && X_OP3 (insn) == 0)
576     {
577       pc += 4;
578       if (frameless_p)          /* If the add is all we care about, */
579         return pc;              /* return before doing more work */
580       is_flat = 1;
581       insn = fetch_instruction (pc);
582       /* Recognize store of frame pointer (i7).  */
583       if (X_OP (insn) == 3
584           && X_RD (insn) == 31
585           && X_OP3 (insn) == 4
586           && X_RS1 (insn) == 14)
587         {
588           pc += 4;
589           insn = fetch_instruction (pc);
590
591           /* Recognize sub %sp, <anything>, %i7.  */
592           if (X_OP (insn) == 2
593               && X_OP3 (insn) == 4
594               && X_RS1 (insn) == 14
595               && X_RD (insn) == 31)
596             {
597               pc += 4;
598               insn = fetch_instruction (pc);
599             }
600           else
601             return pc;
602         }
603       else
604         return pc;
605     }
606   else
607     /* Without a save or add instruction, it's not a prologue.  */
608     return start_pc;
609
610   while (1)
611     {
612       /* Recognize stores into the frame from the input registers.
613          This recognizes all non alternate stores of an input register,
614          into a location offset from the frame pointer between
615          +68 and +92.  */
616
617       /* The above will fail for arguments that are promoted 
618          (eg. shorts to ints or floats to doubles), because the compiler
619          will pass them in positive-offset frame space, but the prologue
620          will save them (after conversion) in negative frame space at an
621          unpredictable offset.  Therefore I am going to remove the 
622          restriction on the target-address of the save, on the theory
623          that any unbroken sequence of saves from input registers must
624          be part of the prologue.  In un-optimized code (at least), I'm
625          fairly sure that the compiler would emit SOME other instruction
626          (eg. a move or add) before emitting another save that is actually
627          a part of the function body.
628
629          Besides, the reserved stack space is different for SPARC64 anyway.
630
631          MVS  4/23/2000  */
632
633       if (X_OP (insn) == 3
634           && (X_OP3 (insn) & 0x3c)       == 4   /* Store, non-alternate.  */
635           && (X_RD (insn) & 0x18) == 0x18       /* Input register.  */
636           && X_I (insn)                         /* Immediate mode.  */
637           && X_RS1 (insn) == 30)                /* Off of frame pointer.  */
638         ; /* empty statement -- fall thru to end of loop */
639       else if (GDB_TARGET_IS_SPARC64
640                && X_OP (insn) == 3
641                && (X_OP3 (insn) & 0x3c) == 12   /* store, extended (64-bit) */
642                && (X_RD (insn) & 0x18) == 0x18  /* input register */
643                && X_I (insn)                    /* immediate mode */
644                && X_RS1 (insn) == 30)           /* off of frame pointer */
645         ; /* empty statement -- fall thru to end of loop */
646       else if (X_OP (insn) == 3
647                && (X_OP3 (insn) & 0x3c) == 36   /* store, floating-point */
648                && X_I (insn)                    /* immediate mode */
649                && X_RS1 (insn) == 30)           /* off of frame pointer */
650         ; /* empty statement -- fall thru to end of loop */
651       else if (is_flat
652                && X_OP (insn) == 3
653                && X_OP3 (insn) == 4             /* store? */
654                && X_RS1 (insn) == 14)           /* off of frame pointer */
655         {
656           if (saved_regs && X_I (insn))
657             saved_regs[X_RD (insn)] =
658               get_frame_base (fi) + get_frame_extra_info (fi)->sp_offset + X_SIMM13 (insn);
659         }
660       else
661         break;
662       pc += 4;
663       insn = fetch_instruction (pc);
664     }
665
666   return pc;
667 }
668
669 /* Advance PC across any function entry prologue instructions to reach
670    some "real" code.  */
671
672 CORE_ADDR
673 sparc_skip_prologue (CORE_ADDR start_pc)
674 {
675   struct symtab_and_line sal;
676   CORE_ADDR func_start, func_end;
677
678   /* This is the preferred method, find the end of the prologue by
679      using the debugging information.  */
680   if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
681     {
682       sal = find_pc_line (func_start, 0);
683
684       if (sal.end < func_end
685           && start_pc <= sal.end)
686         return sal.end;
687     }
688
689   /* Oh well, examine the code by hand.  */
690   return examine_prologue (start_pc, 0, NULL, NULL);
691 }
692
693 /* Is the prologue at IP frameless?  */
694
695 int
696 sparc_prologue_frameless_p (CORE_ADDR ip)
697 {
698   return ip == examine_prologue (ip, 1, NULL, NULL);
699 }
700
701 /* Check instruction at ADDR to see if it is a branch.
702    All non-annulled instructions will go to NPC or will trap.
703    Set *TARGET if we find a candidate branch; set to zero if not.
704
705    This isn't static as it's used by remote-sa.sparc.c.  */
706
707 static branch_type
708 isbranch (long instruction, CORE_ADDR addr, CORE_ADDR *target)
709 {
710   branch_type val = not_branch;
711   long int offset = 0;          /* Must be signed for sign-extend.  */
712
713   *target = 0;
714
715   if (X_OP (instruction) == 0
716       && (X_OP2 (instruction) == 2
717           || X_OP2 (instruction) == 6
718           || X_OP2 (instruction) == 1
719           || X_OP2 (instruction) == 3
720           || X_OP2 (instruction) == 5
721           || (GDB_TARGET_IS_SPARC64 && X_OP2 (instruction) == 7)))
722     {
723       if (X_COND (instruction) == 8)
724         val = X_A (instruction) ? baa : ba;
725       else
726         val = X_A (instruction) ? bicca : bicc;
727       switch (X_OP2 (instruction))
728         {
729         case 7:
730         if (!GDB_TARGET_IS_SPARC64)
731           break;
732         /* else fall thru */
733         case 2:
734         case 6:
735           offset = 4 * X_DISP22 (instruction);
736           break;
737         case 1:
738         case 5:
739           offset = 4 * X_DISP19 (instruction);
740           break;
741         case 3:
742           offset = 4 * X_DISP16 (instruction);
743           break;
744         }
745       *target = addr + offset;
746     }
747   else if (GDB_TARGET_IS_SPARC64
748            && X_OP (instruction) == 2
749            && X_OP3 (instruction) == 62)
750     {
751       if (X_FCN (instruction) == 0)
752         {
753           /* done */
754           *target = read_register (TNPC_REGNUM);
755           val = done_retry;
756         }
757       else if (X_FCN (instruction) == 1)
758         {
759           /* retry */
760           *target = read_register (TPC_REGNUM);
761           val = done_retry;
762         }
763     }
764
765   return val;
766 }
767 \f
768 /* Find register number REGNUM relative to FRAME and put its
769    (raw) contents in *RAW_BUFFER.  Set *OPTIMIZED if the variable
770    was optimized out (and thus can't be fetched).  If the variable
771    was fetched from memory, set *ADDRP to where it was fetched from,
772    otherwise it was fetched from a register.
773
774    The argument RAW_BUFFER must point to aligned memory.  */
775
776 void
777 sparc_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
778                           struct frame_info *frame, int regnum,
779                           enum lval_type *lval)
780 {
781   struct frame_info *frame1;
782   CORE_ADDR addr;
783
784   if (!target_has_registers)
785     error ("No registers.");
786
787   if (optimized)
788     *optimized = 0;
789
790   addr = 0;
791
792   /* FIXME This code extracted from infcmd.c; should put elsewhere! */
793   if (frame == NULL)
794     {
795       /* error ("No selected frame."); */
796       if (!target_has_registers)
797         error ("The program has no registers now.");
798       if (deprecated_selected_frame == NULL)
799         error ("No selected frame.");
800       /* Try to use selected frame */
801       frame = get_prev_frame (deprecated_selected_frame);
802       if (frame == 0)
803         error ("Cmd not meaningful in the outermost frame.");
804     }
805
806
807   frame1 = get_next_frame (frame);
808
809   /* Get saved PC from the frame info if not in innermost frame.  */
810   if (regnum == PC_REGNUM && frame1 != NULL)
811     {
812       if (lval != NULL)
813         *lval = not_lval;
814       if (raw_buffer != NULL)
815         {
816           /* Put it back in target format.  */
817           store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), get_frame_pc (frame));
818         }
819       if (addrp != NULL)
820         *addrp = 0;
821       return;
822     }
823
824   while (frame1 != NULL)
825     {
826       /* FIXME MVS: wrong test for dummy frame at entry.  */
827
828       if (get_frame_pc (frame1) >= (get_frame_extra_info (frame1)->bottom
829                                     ? get_frame_extra_info (frame1)->bottom
830                                     : read_sp ())
831           && get_frame_pc (frame1) <= get_frame_base (frame1))
832         {
833           /* Dummy frame.  All but the window regs are in there somewhere.
834              The window registers are saved on the stack, just like in a
835              normal frame.  */
836           if (regnum >= G1_REGNUM && regnum < G1_REGNUM + 7)
837             addr = get_frame_base (frame1) + (regnum - G0_REGNUM) * SPARC_INTREG_SIZE
838               - (FP_REGISTER_BYTES + 8 * SPARC_INTREG_SIZE);
839           else if (regnum >= I0_REGNUM && regnum < I0_REGNUM + 8)
840             /* NOTE: cagney/2002-05-04: The call to get_prev_frame()
841                is safe/cheap - there will always be a prev frame.
842                This is because frame1 is initialized to frame->next
843                (frame1->prev == frame) and is then advanced towards
844                the innermost (next) frame.  */
845             addr = (get_frame_extra_info (get_prev_frame (frame1))->bottom
846                     + (regnum - I0_REGNUM) * SPARC_INTREG_SIZE
847                     + FRAME_SAVED_I0);
848           else if (regnum >= L0_REGNUM && regnum < L0_REGNUM + 8)
849             /* NOTE: cagney/2002-05-04: The call to get_prev_frame()
850                is safe/cheap - there will always be a prev frame.
851                This is because frame1 is initialized to frame->next
852                (frame1->prev == frame) and is then advanced towards
853                the innermost (next) frame.  */
854             addr = (get_frame_extra_info (get_prev_frame (frame1))->bottom
855                     + (regnum - L0_REGNUM) * SPARC_INTREG_SIZE
856                     + FRAME_SAVED_L0);
857           else if (regnum >= O0_REGNUM && regnum < O0_REGNUM + 8)
858             addr = get_frame_base (frame1) + (regnum - O0_REGNUM) * SPARC_INTREG_SIZE
859               - (FP_REGISTER_BYTES + 16 * SPARC_INTREG_SIZE);
860           else if (SPARC_HAS_FPU &&
861                    regnum >= FP0_REGNUM && regnum < FP0_REGNUM + 32)
862             addr = get_frame_base (frame1) + (regnum - FP0_REGNUM) * 4
863               - (FP_REGISTER_BYTES);
864           else if (GDB_TARGET_IS_SPARC64 && SPARC_HAS_FPU && 
865                    regnum >= FP0_REGNUM + 32 && regnum < FP_MAX_REGNUM)
866             addr = get_frame_base (frame1) + 32 * 4 + (regnum - FP0_REGNUM - 32) * 8
867               - (FP_REGISTER_BYTES);
868           else if (regnum >= Y_REGNUM && regnum < NUM_REGS)
869             addr = get_frame_base (frame1) + (regnum - Y_REGNUM) * SPARC_INTREG_SIZE
870               - (FP_REGISTER_BYTES + 24 * SPARC_INTREG_SIZE);
871         }
872       else if (get_frame_extra_info (frame1)->flat)
873         {
874
875           if (regnum == RP_REGNUM)
876             addr = get_frame_extra_info (frame1)->pc_addr;
877           else if (regnum == I7_REGNUM)
878             addr = get_frame_extra_info (frame1)->fp_addr;
879           else
880             {
881               CORE_ADDR func_start;
882               CORE_ADDR *regs;
883
884               regs = alloca (NUM_REGS * sizeof (CORE_ADDR)); 
885               memset (regs, 0, NUM_REGS * sizeof (CORE_ADDR));
886
887               find_pc_partial_function (get_frame_pc (frame1), NULL, &func_start, NULL);
888               examine_prologue (func_start, 0, frame1, regs);
889               addr = regs[regnum];
890             }
891         }
892       else
893         {
894           /* Normal frame.  Local and In registers are saved on stack.  */
895           if (regnum >= I0_REGNUM && regnum < I0_REGNUM + 8)
896             addr = (get_frame_extra_info (get_prev_frame (frame1))->bottom
897                     + (regnum - I0_REGNUM) * SPARC_INTREG_SIZE
898                     + FRAME_SAVED_I0);
899           else if (regnum >= L0_REGNUM && regnum < L0_REGNUM + 8)
900             addr = (get_frame_extra_info (get_prev_frame (frame1))->bottom
901                     + (regnum - L0_REGNUM) * SPARC_INTREG_SIZE
902                     + FRAME_SAVED_L0);
903           else if (regnum >= O0_REGNUM && regnum < O0_REGNUM + 8)
904             {
905               /* Outs become ins.  */
906               int realnum;
907               frame_register (frame1, (regnum - O0_REGNUM + I0_REGNUM),
908                               optimized, lval, addrp, &realnum, raw_buffer);
909               return;
910             }
911         }
912       if (addr != 0)
913         break;
914       frame1 = get_next_frame (frame1);
915     }
916   if (addr != 0)
917     {
918       if (lval != NULL)
919         *lval = lval_memory;
920       if (regnum == SP_REGNUM)
921         {
922           if (raw_buffer != NULL)
923             {
924               /* Put it back in target format.  */
925               store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), addr);
926             }
927           if (addrp != NULL)
928             *addrp = 0;
929           return;
930         }
931       if (raw_buffer != NULL)
932         read_memory (addr, raw_buffer, REGISTER_RAW_SIZE (regnum));
933     }
934   else
935     {
936       if (lval != NULL)
937         *lval = lval_register;
938       addr = REGISTER_BYTE (regnum);
939       if (raw_buffer != NULL)
940         deprecated_read_register_gen (regnum, raw_buffer);
941     }
942   if (addrp != NULL)
943     *addrp = addr;
944 }
945
946 /* Push an empty stack frame, and record in it the current PC, regs, etc.
947
948    We save the non-windowed registers and the ins.  The locals and outs
949    are new; they don't need to be saved. The i's and l's of
950    the last frame were already saved on the stack.  */
951
952 /* Definitely see tm-sparc.h for more doc of the frame format here.  */
953
954 /* See tm-sparc.h for how this is calculated.  */
955
956 #define DUMMY_STACK_REG_BUF_SIZE \
957      (((8+8+8) * SPARC_INTREG_SIZE) + FP_REGISTER_BYTES)
958 #define DUMMY_STACK_SIZE \
959      (DUMMY_STACK_REG_BUF_SIZE + DUMMY_REG_SAVE_OFFSET)
960
961 void
962 sparc_push_dummy_frame (void)
963 {
964   CORE_ADDR sp, old_sp;
965   char *register_temp;
966
967   register_temp = alloca (DUMMY_STACK_SIZE);
968
969   old_sp = sp = read_sp ();
970
971   if (GDB_TARGET_IS_SPARC64)
972     {
973       /* PC, NPC, CCR, FSR, FPRS, Y, ASI */
974       deprecated_read_register_bytes (REGISTER_BYTE (PC_REGNUM),
975                                       &register_temp[0],
976                                       REGISTER_RAW_SIZE (PC_REGNUM) * 7);
977       deprecated_read_register_bytes (REGISTER_BYTE (PSTATE_REGNUM), 
978                                       &register_temp[7 * SPARC_INTREG_SIZE],
979                                       REGISTER_RAW_SIZE (PSTATE_REGNUM));
980       /* FIXME: not sure what needs to be saved here.  */
981     }
982   else
983     {
984       /* Y, PS, WIM, TBR, PC, NPC, FPS, CPS regs */
985       deprecated_read_register_bytes (REGISTER_BYTE (Y_REGNUM),
986                                       &register_temp[0],
987                                       REGISTER_RAW_SIZE (Y_REGNUM) * 8);
988     }
989
990   deprecated_read_register_bytes (REGISTER_BYTE (O0_REGNUM),
991                                   &register_temp[8 * SPARC_INTREG_SIZE],
992                                   SPARC_INTREG_SIZE * 8);
993
994   deprecated_read_register_bytes (REGISTER_BYTE (G0_REGNUM),
995                                   &register_temp[16 * SPARC_INTREG_SIZE],
996                                   SPARC_INTREG_SIZE * 8);
997
998   if (SPARC_HAS_FPU)
999     deprecated_read_register_bytes (REGISTER_BYTE (FP0_REGNUM),
1000                                     &register_temp[24 * SPARC_INTREG_SIZE],
1001                                     FP_REGISTER_BYTES);
1002
1003   sp -= DUMMY_STACK_SIZE;
1004
1005   DEPRECATED_DUMMY_WRITE_SP (sp);
1006
1007   write_memory (sp + DUMMY_REG_SAVE_OFFSET, &register_temp[0],
1008                 DUMMY_STACK_REG_BUF_SIZE);
1009
1010   if (strcmp (target_shortname, "sim") != 0)
1011     {
1012       /* NOTE: cagney/2002-04-04: The code below originally contained
1013          GDB's _only_ call to write_fp().  That call was eliminated by
1014          inlining the corresponding code.  For the 64 bit case, the
1015          old function (sparc64_write_fp) did the below although I'm
1016          not clear why.  The same goes for why this is only done when
1017          the underlying target is a simulator.  */
1018       if (GDB_TARGET_IS_SPARC64)
1019         {
1020           /* Target is a 64 bit SPARC.  */
1021           CORE_ADDR oldfp = read_register (DEPRECATED_FP_REGNUM);
1022           if (oldfp & 1)
1023             write_register (DEPRECATED_FP_REGNUM, old_sp - 2047);
1024           else
1025             write_register (DEPRECATED_FP_REGNUM, old_sp);
1026         }
1027       else
1028         {
1029           /* Target is a 32 bit SPARC.  */
1030           write_register (DEPRECATED_FP_REGNUM, old_sp);
1031         }
1032       /* Set return address register for the call dummy to the current PC.  */
1033       write_register (I7_REGNUM, read_pc () - 8);
1034     }
1035   else
1036     {
1037       /* The call dummy will write this value to FP before executing
1038          the 'save'.  This ensures that register window flushes work
1039          correctly in the simulator.  */
1040       write_register (G0_REGNUM + 1, read_register (DEPRECATED_FP_REGNUM));
1041
1042       /* The call dummy will write this value to FP after executing
1043          the 'save'. */
1044       write_register (G0_REGNUM + 2, old_sp);
1045
1046       /* The call dummy will write this value to the return address (%i7) after
1047          executing the 'save'. */
1048       write_register (G0_REGNUM + 3, read_pc () - 8);
1049
1050       /* Set the FP that the call dummy will be using after the 'save'.
1051          This makes backtraces from an inferior function call work properly.  */
1052       write_register (DEPRECATED_FP_REGNUM, old_sp);
1053     }
1054 }
1055
1056 /* sparc_frame_find_saved_regs ().  This function is here only because
1057    pop_frame uses it.  Note there is an interesting corner case which
1058    I think few ports of GDB get right--if you are popping a frame
1059    which does not save some register that *is* saved by a more inner
1060    frame (such a frame will never be a dummy frame because dummy
1061    frames save all registers).
1062
1063    NOTE: cagney/2003-03-12: Since pop_frame has been rewritten to use
1064    frame_unwind_register() the need for this function is questionable.
1065
1066    Stores, into an array of CORE_ADDR, 
1067    the addresses of the saved registers of frame described by FRAME_INFO.
1068    This includes special registers such as pc and fp saved in special
1069    ways in the stack frame.  sp is even more special:
1070    the address we return for it IS the sp for the next frame.
1071
1072    Note that on register window machines, we are currently making the
1073    assumption that window registers are being saved somewhere in the
1074    frame in which they are being used.  If they are stored in an
1075    inferior frame, find_saved_register will break.
1076
1077    On the Sun 4, the only time all registers are saved is when
1078    a dummy frame is involved.  Otherwise, the only saved registers
1079    are the LOCAL and IN registers which are saved as a result
1080    of the "save/restore" opcodes.  This condition is determined
1081    by address rather than by value.
1082
1083    The "pc" is not stored in a frame on the SPARC.  (What is stored
1084    is a return address minus 8.)  sparc_pop_frame knows how to
1085    deal with that.  Other routines might or might not.
1086
1087    See tm-sparc.h (PUSH_DUMMY_FRAME and friends) for CRITICAL information
1088    about how this works.  */
1089
1090 static void sparc_frame_find_saved_regs (struct frame_info *, CORE_ADDR *);
1091
1092 static void
1093 sparc_frame_find_saved_regs (struct frame_info *fi, CORE_ADDR *saved_regs_addr)
1094 {
1095   register int regnum;
1096   CORE_ADDR frame_addr = get_frame_base (fi);
1097
1098   gdb_assert (fi != NULL);
1099
1100   memset (saved_regs_addr, 0, NUM_REGS * sizeof (CORE_ADDR));
1101
1102   if (get_frame_pc (fi) >= (get_frame_extra_info (fi)->bottom
1103                             ? get_frame_extra_info (fi)->bottom
1104                             : read_sp ())
1105       && get_frame_pc (fi) <= get_frame_base (fi))
1106     {
1107       /* Dummy frame.  All but the window regs are in there somewhere. */
1108       for (regnum = G1_REGNUM; regnum < G1_REGNUM + 7; regnum++)
1109         saved_regs_addr[regnum] =
1110           frame_addr + (regnum - G0_REGNUM) * SPARC_INTREG_SIZE
1111           - DUMMY_STACK_REG_BUF_SIZE + 16 * SPARC_INTREG_SIZE;
1112
1113       for (regnum = I0_REGNUM; regnum < I0_REGNUM + 8; regnum++)
1114         saved_regs_addr[regnum] =
1115           frame_addr + (regnum - I0_REGNUM) * SPARC_INTREG_SIZE
1116           - DUMMY_STACK_REG_BUF_SIZE + 8 * SPARC_INTREG_SIZE;
1117
1118       if (SPARC_HAS_FPU)
1119         for (regnum = FP0_REGNUM; regnum < FP_MAX_REGNUM; regnum++)
1120           saved_regs_addr[regnum] = frame_addr + (regnum - FP0_REGNUM) * 4
1121             - DUMMY_STACK_REG_BUF_SIZE + 24 * SPARC_INTREG_SIZE;
1122
1123       if (GDB_TARGET_IS_SPARC64)
1124         {
1125           for (regnum = PC_REGNUM; regnum < PC_REGNUM + 7; regnum++)
1126             {
1127               saved_regs_addr[regnum] =
1128                 frame_addr + (regnum - PC_REGNUM) * SPARC_INTREG_SIZE
1129                 - DUMMY_STACK_REG_BUF_SIZE;
1130             }
1131           saved_regs_addr[PSTATE_REGNUM] =
1132             frame_addr + 8 * SPARC_INTREG_SIZE - DUMMY_STACK_REG_BUF_SIZE;
1133         }
1134       else
1135         for (regnum = Y_REGNUM; regnum < NUM_REGS; regnum++)
1136           saved_regs_addr[regnum] =
1137             frame_addr + (regnum - Y_REGNUM) * SPARC_INTREG_SIZE
1138             - DUMMY_STACK_REG_BUF_SIZE;
1139
1140       frame_addr = (get_frame_extra_info (fi)->bottom
1141                     ? get_frame_extra_info (fi)->bottom
1142                     : read_sp ());
1143     }
1144   else if (get_frame_extra_info (fi)->flat)
1145     {
1146       CORE_ADDR func_start;
1147       find_pc_partial_function (get_frame_pc (fi), NULL, &func_start, NULL);
1148       examine_prologue (func_start, 0, fi, saved_regs_addr);
1149
1150       /* Flat register window frame.  */
1151       saved_regs_addr[RP_REGNUM] = get_frame_extra_info (fi)->pc_addr;
1152       saved_regs_addr[I7_REGNUM] = get_frame_extra_info (fi)->fp_addr;
1153     }
1154   else
1155     {
1156       /* Normal frame.  Just Local and In registers */
1157       frame_addr = (get_frame_extra_info (fi)->bottom
1158                     ? get_frame_extra_info (fi)->bottom
1159                     : read_sp ());
1160       for (regnum = L0_REGNUM; regnum < L0_REGNUM + 8; regnum++)
1161         saved_regs_addr[regnum] =
1162           (frame_addr + (regnum - L0_REGNUM) * SPARC_INTREG_SIZE
1163            + FRAME_SAVED_L0);
1164       for (regnum = I0_REGNUM; regnum < I0_REGNUM + 8; regnum++)
1165         saved_regs_addr[regnum] =
1166           (frame_addr + (regnum - I0_REGNUM) * SPARC_INTREG_SIZE
1167            + FRAME_SAVED_I0);
1168     }
1169   if (get_next_frame (fi))
1170     {
1171       if (get_frame_extra_info (fi)->flat)
1172         {
1173           saved_regs_addr[O7_REGNUM] = get_frame_extra_info (fi)->pc_addr;
1174         }
1175       else
1176         {
1177           /* Pull off either the next frame pointer or the stack pointer */
1178           CORE_ADDR next_next_frame_addr =
1179           (get_frame_extra_info (get_next_frame (fi))->bottom
1180            ? get_frame_extra_info (get_next_frame (fi))->bottom
1181            : read_sp ());
1182           for (regnum = O0_REGNUM; regnum < O0_REGNUM + 8; regnum++)
1183             saved_regs_addr[regnum] =
1184               (next_next_frame_addr
1185                + (regnum - O0_REGNUM) * SPARC_INTREG_SIZE
1186                + FRAME_SAVED_I0);
1187         }
1188     }
1189   /* Otherwise, whatever we would get from ptrace(GETREGS) is accurate */
1190   /* FIXME -- should this adjust for the sparc64 offset? */
1191   saved_regs_addr[SP_REGNUM] = get_frame_base (fi);
1192 }
1193
1194 /* Discard from the stack the innermost frame, restoring all saved registers.
1195
1196    Note that the values stored in fsr by
1197    deprecated_get_frame_saved_regs are *in the context of the called
1198    frame*.  What this means is that the i regs of fsr must be restored
1199    into the o regs of the (calling) frame that we pop into.  We don't
1200    care about the output regs of the calling frame, since unless it's
1201    a dummy frame, it won't have any output regs in it.
1202
1203    We never have to bother with %l (local) regs, since the called routine's
1204    locals get tossed, and the calling routine's locals are already saved
1205    on its stack.  */
1206
1207 /* Definitely see tm-sparc.h for more doc of the frame format here.  */
1208
1209 void
1210 sparc_pop_frame (void)
1211 {
1212   register struct frame_info *frame = get_current_frame ();
1213   register CORE_ADDR pc;
1214   CORE_ADDR *fsr;
1215   char *raw_buffer;
1216   int regnum;
1217
1218   fsr = alloca (NUM_REGS * sizeof (CORE_ADDR));
1219   raw_buffer = alloca (DEPRECATED_REGISTER_BYTES);
1220   sparc_frame_find_saved_regs (frame, &fsr[0]);
1221   if (SPARC_HAS_FPU)
1222     {
1223       if (fsr[FP0_REGNUM])
1224         {
1225           read_memory (fsr[FP0_REGNUM], raw_buffer, FP_REGISTER_BYTES);
1226           deprecated_write_register_bytes (REGISTER_BYTE (FP0_REGNUM),
1227                                            raw_buffer, FP_REGISTER_BYTES);
1228         }
1229       if (!(GDB_TARGET_IS_SPARC64))
1230         {
1231           if (fsr[FPS_REGNUM])
1232             {
1233               read_memory (fsr[FPS_REGNUM], raw_buffer, SPARC_INTREG_SIZE);
1234               deprecated_write_register_gen (FPS_REGNUM, raw_buffer);
1235             }
1236           if (fsr[CPS_REGNUM])
1237             {
1238               read_memory (fsr[CPS_REGNUM], raw_buffer, SPARC_INTREG_SIZE);
1239               deprecated_write_register_gen (CPS_REGNUM, raw_buffer);
1240             }
1241         }
1242     }
1243   if (fsr[G1_REGNUM])
1244     {
1245       read_memory (fsr[G1_REGNUM], raw_buffer, 7 * SPARC_INTREG_SIZE);
1246       deprecated_write_register_bytes (REGISTER_BYTE (G1_REGNUM), raw_buffer,
1247                                        7 * SPARC_INTREG_SIZE);
1248     }
1249
1250   if (get_frame_extra_info (frame)->flat)
1251     {
1252       /* Each register might or might not have been saved, need to test
1253          individually.  */
1254       for (regnum = L0_REGNUM; regnum < L0_REGNUM + 8; ++regnum)
1255         if (fsr[regnum])
1256           write_register (regnum, read_memory_integer (fsr[regnum],
1257                                                        SPARC_INTREG_SIZE));
1258       for (regnum = I0_REGNUM; regnum < I0_REGNUM + 8; ++regnum)
1259         if (fsr[regnum])
1260           write_register (regnum, read_memory_integer (fsr[regnum],
1261                                                        SPARC_INTREG_SIZE));
1262
1263       /* Handle all outs except stack pointer (o0-o5; o7).  */
1264       for (regnum = O0_REGNUM; regnum < O0_REGNUM + 6; ++regnum)
1265         if (fsr[regnum])
1266           write_register (regnum, read_memory_integer (fsr[regnum],
1267                                                        SPARC_INTREG_SIZE));
1268       if (fsr[O0_REGNUM + 7])
1269         write_register (O0_REGNUM + 7,
1270                         read_memory_integer (fsr[O0_REGNUM + 7],
1271                                              SPARC_INTREG_SIZE));
1272
1273       DEPRECATED_DUMMY_WRITE_SP (get_frame_base (frame));
1274     }
1275   else if (fsr[I0_REGNUM])
1276     {
1277       CORE_ADDR sp;
1278
1279       char *reg_temp;
1280
1281       reg_temp = alloca (SPARC_INTREG_SIZE * 16);
1282
1283       read_memory (fsr[I0_REGNUM], raw_buffer, 8 * SPARC_INTREG_SIZE);
1284
1285       /* Get the ins and locals which we are about to restore.  Just
1286          moving the stack pointer is all that is really needed, except
1287          store_inferior_registers is then going to write the ins and
1288          locals from the registers array, so we need to muck with the
1289          registers array.  */
1290       sp = fsr[SP_REGNUM];
1291  
1292       if (GDB_TARGET_IS_SPARC64 && (sp & 1))
1293         sp += 2047;
1294
1295       read_memory (sp, reg_temp, SPARC_INTREG_SIZE * 16);
1296
1297       /* Restore the out registers.
1298          Among other things this writes the new stack pointer.  */
1299       deprecated_write_register_bytes (REGISTER_BYTE (O0_REGNUM), raw_buffer,
1300                                        SPARC_INTREG_SIZE * 8);
1301
1302       deprecated_write_register_bytes (REGISTER_BYTE (L0_REGNUM), reg_temp,
1303                                        SPARC_INTREG_SIZE * 16);
1304     }
1305
1306   if (!(GDB_TARGET_IS_SPARC64))
1307     if (fsr[PS_REGNUM])
1308       write_register (PS_REGNUM, 
1309                       read_memory_integer (fsr[PS_REGNUM], 
1310                                            REGISTER_RAW_SIZE (PS_REGNUM)));
1311
1312   if (fsr[Y_REGNUM])
1313     write_register (Y_REGNUM, 
1314                     read_memory_integer (fsr[Y_REGNUM], 
1315                                          REGISTER_RAW_SIZE (Y_REGNUM)));
1316   if (fsr[PC_REGNUM])
1317     {
1318       /* Explicitly specified PC (and maybe NPC) -- just restore them. */
1319       write_register (PC_REGNUM, 
1320                       read_memory_integer (fsr[PC_REGNUM],
1321                                            REGISTER_RAW_SIZE (PC_REGNUM)));
1322       if (fsr[NPC_REGNUM])
1323         write_register (NPC_REGNUM,
1324                         read_memory_integer (fsr[NPC_REGNUM],
1325                                              REGISTER_RAW_SIZE (NPC_REGNUM)));
1326     }
1327   else if (get_frame_extra_info (frame)->flat)
1328     {
1329       if (get_frame_extra_info (frame)->pc_addr)
1330         pc = PC_ADJUST ((CORE_ADDR)
1331                         read_memory_integer (get_frame_extra_info (frame)->pc_addr,
1332                                              REGISTER_RAW_SIZE (PC_REGNUM)));
1333       else
1334         {
1335           /* I think this happens only in the innermost frame, if so then
1336              it is a complicated way of saying
1337              "pc = read_register (O7_REGNUM);".  */
1338           ULONGEST tmp;
1339           frame_read_unsigned_register (frame, O7_REGNUM, &tmp);
1340           pc = PC_ADJUST (tmp);
1341         }
1342
1343       write_register (PC_REGNUM, pc);
1344       write_register (NPC_REGNUM, pc + 4);
1345     }
1346   else if (fsr[I7_REGNUM])
1347     {
1348       /* Return address in %i7 -- adjust it, then restore PC and NPC from it */
1349       pc = PC_ADJUST ((CORE_ADDR) read_memory_integer (fsr[I7_REGNUM],
1350                                                        SPARC_INTREG_SIZE));
1351       write_register (PC_REGNUM, pc);
1352       write_register (NPC_REGNUM, pc + 4);
1353     }
1354   flush_cached_frames ();
1355 }
1356
1357 /* On the Sun 4 under SunOS, the compile will leave a fake insn which
1358    encodes the structure size being returned.  If we detect such
1359    a fake insn, step past it.  */
1360
1361 CORE_ADDR
1362 sparc_pc_adjust (CORE_ADDR pc)
1363 {
1364   unsigned long insn;
1365   char buf[4];
1366   int err;
1367
1368   err = target_read_memory (pc + 8, buf, 4);
1369   insn = extract_unsigned_integer (buf, 4);
1370   if ((err == 0) && (insn & 0xffc00000) == 0)
1371     return pc + 12;
1372   else
1373     return pc + 8;
1374 }
1375
1376 /* If pc is in a shared library trampoline, return its target.
1377    The SunOs 4.x linker rewrites the jump table entries for PIC
1378    compiled modules in the main executable to bypass the dynamic linker
1379    with jumps of the form
1380    sethi %hi(addr),%g1
1381    jmp %g1+%lo(addr)
1382    and removes the corresponding jump table relocation entry in the
1383    dynamic relocations.
1384    find_solib_trampoline_target relies on the presence of the jump
1385    table relocation entry, so we have to detect these jump instructions
1386    by hand.  */
1387
1388 CORE_ADDR
1389 sunos4_skip_trampoline_code (CORE_ADDR pc)
1390 {
1391   unsigned long insn1;
1392   char buf[4];
1393   int err;
1394
1395   err = target_read_memory (pc, buf, 4);
1396   insn1 = extract_unsigned_integer (buf, 4);
1397   if (err == 0 && (insn1 & 0xffc00000) == 0x03000000)
1398     {
1399       unsigned long insn2;
1400
1401       err = target_read_memory (pc + 4, buf, 4);
1402       insn2 = extract_unsigned_integer (buf, 4);
1403       if (err == 0 && (insn2 & 0xffffe000) == 0x81c06000)
1404         {
1405           CORE_ADDR target_pc = (insn1 & 0x3fffff) << 10;
1406           int delta = insn2 & 0x1fff;
1407
1408           /* Sign extend the displacement.  */
1409           if (delta & 0x1000)
1410             delta |= ~0x1fff;
1411           return target_pc + delta;
1412         }
1413     }
1414   return find_solib_trampoline_target (pc);
1415 }
1416 \f
1417 #ifdef USE_PROC_FS              /* Target dependent support for /proc */
1418 /* *INDENT-OFF* */
1419 /*  The /proc interface divides the target machine's register set up into
1420     two different sets, the general register set (gregset) and the floating
1421     point register set (fpregset).  For each set, there is an ioctl to get
1422     the current register set and another ioctl to set the current values.
1423
1424     The actual structure passed through the ioctl interface is, of course,
1425     naturally machine dependent, and is different for each set of registers.
1426     For the sparc for example, the general register set is typically defined
1427     by:
1428
1429         typedef int gregset_t[38];
1430
1431         #define R_G0    0
1432         ...
1433         #define R_TBR   37
1434
1435     and the floating point set by:
1436
1437         typedef struct prfpregset {
1438                 union { 
1439                         u_long  pr_regs[32]; 
1440                         double  pr_dregs[16];
1441                 } pr_fr;
1442                 void *  pr_filler;
1443                 u_long  pr_fsr;
1444                 u_char  pr_qcnt;
1445                 u_char  pr_q_entrysize;
1446                 u_char  pr_en;
1447                 u_long  pr_q[64];
1448         } prfpregset_t;
1449
1450     These routines provide the packing and unpacking of gregset_t and
1451     fpregset_t formatted data.
1452
1453  */
1454 /* *INDENT-ON* */
1455
1456 /* Given a pointer to a general register set in /proc format (gregset_t *),
1457    unpack the register contents and supply them as gdb's idea of the current
1458    register values. */
1459
1460 void
1461 supply_gregset (gdb_gregset_t *gregsetp)
1462 {
1463   prgreg_t *regp = (prgreg_t *) gregsetp;
1464   int regi, offset = 0;
1465
1466   /* If the host is 64-bit sparc, but the target is 32-bit sparc, 
1467      then the gregset may contain 64-bit ints while supply_register
1468      is expecting 32-bit ints.  Compensate.  */
1469   if (sizeof (regp[0]) == 8 && SPARC_INTREG_SIZE == 4)
1470     offset = 4;
1471
1472   /* GDB register numbers for Gn, On, Ln, In all match /proc reg numbers.  */
1473   /* FIXME MVS: assumes the order of the first 32 elements... */
1474   for (regi = G0_REGNUM; regi <= I7_REGNUM; regi++)
1475     {
1476       supply_register (regi, ((char *) (regp + regi)) + offset);
1477     }
1478
1479   /* These require a bit more care.  */
1480   supply_register (PC_REGNUM, ((char *) (regp + R_PC)) + offset);
1481   supply_register (NPC_REGNUM, ((char *) (regp + R_nPC)) + offset);
1482   supply_register (Y_REGNUM, ((char *) (regp + R_Y)) + offset);
1483
1484   if (GDB_TARGET_IS_SPARC64)
1485     {
1486 #ifdef R_CCR
1487       supply_register (CCR_REGNUM, ((char *) (regp + R_CCR)) + offset);
1488 #else
1489       supply_register (CCR_REGNUM, NULL);
1490 #endif
1491 #ifdef R_FPRS
1492       supply_register (FPRS_REGNUM, ((char *) (regp + R_FPRS)) + offset);
1493 #else
1494       supply_register (FPRS_REGNUM, NULL);
1495 #endif
1496 #ifdef R_ASI
1497       supply_register (ASI_REGNUM, ((char *) (regp + R_ASI)) + offset);
1498 #else
1499       supply_register (ASI_REGNUM, NULL);
1500 #endif
1501     }
1502   else  /* sparc32 */
1503     {
1504 #ifdef R_PS
1505       supply_register (PS_REGNUM, ((char *) (regp + R_PS)) + offset);
1506 #else
1507       supply_register (PS_REGNUM, NULL);
1508 #endif
1509
1510       /* For 64-bit hosts, R_WIM and R_TBR may not be defined.
1511          Steal R_ASI and R_FPRS, and hope for the best!  */
1512
1513 #if !defined (R_WIM) && defined (R_ASI)
1514 #define R_WIM R_ASI
1515 #endif
1516
1517 #if !defined (R_TBR) && defined (R_FPRS)
1518 #define R_TBR R_FPRS
1519 #endif
1520
1521 #if defined (R_WIM)
1522       supply_register (WIM_REGNUM, ((char *) (regp + R_WIM)) + offset);
1523 #else
1524       supply_register (WIM_REGNUM, NULL);
1525 #endif
1526
1527 #if defined (R_TBR)
1528       supply_register (TBR_REGNUM, ((char *) (regp + R_TBR)) + offset);
1529 #else
1530       supply_register (TBR_REGNUM, NULL);
1531 #endif
1532     }
1533
1534   /* Fill inaccessible registers with zero.  */
1535   if (GDB_TARGET_IS_SPARC64)
1536     {
1537       /*
1538        * don't know how to get value of any of the following:
1539        */
1540       supply_register (VER_REGNUM, NULL);
1541       supply_register (TICK_REGNUM, NULL);
1542       supply_register (PIL_REGNUM, NULL);
1543       supply_register (PSTATE_REGNUM, NULL);
1544       supply_register (TSTATE_REGNUM, NULL);
1545       supply_register (TBA_REGNUM, NULL);
1546       supply_register (TL_REGNUM, NULL);
1547       supply_register (TT_REGNUM, NULL);
1548       supply_register (TPC_REGNUM, NULL);
1549       supply_register (TNPC_REGNUM, NULL);
1550       supply_register (WSTATE_REGNUM, NULL);
1551       supply_register (CWP_REGNUM, NULL);
1552       supply_register (CANSAVE_REGNUM, NULL);
1553       supply_register (CANRESTORE_REGNUM, NULL);
1554       supply_register (CLEANWIN_REGNUM, NULL);
1555       supply_register (OTHERWIN_REGNUM, NULL);
1556       supply_register (ASR16_REGNUM, NULL);
1557       supply_register (ASR17_REGNUM, NULL);
1558       supply_register (ASR18_REGNUM, NULL);
1559       supply_register (ASR19_REGNUM, NULL);
1560       supply_register (ASR20_REGNUM, NULL);
1561       supply_register (ASR21_REGNUM, NULL);
1562       supply_register (ASR22_REGNUM, NULL);
1563       supply_register (ASR23_REGNUM, NULL);
1564       supply_register (ASR24_REGNUM, NULL);
1565       supply_register (ASR25_REGNUM, NULL);
1566       supply_register (ASR26_REGNUM, NULL);
1567       supply_register (ASR27_REGNUM, NULL);
1568       supply_register (ASR28_REGNUM, NULL);
1569       supply_register (ASR29_REGNUM, NULL);
1570       supply_register (ASR30_REGNUM, NULL);
1571       supply_register (ASR31_REGNUM, NULL);
1572       supply_register (ICC_REGNUM, NULL);
1573       supply_register (XCC_REGNUM, NULL);
1574     }
1575   else
1576     {
1577       supply_register (CPS_REGNUM, NULL);
1578     }
1579 }
1580
1581 void
1582 fill_gregset (gdb_gregset_t *gregsetp, int regno)
1583 {
1584   prgreg_t *regp = (prgreg_t *) gregsetp;
1585   int regi, offset = 0;
1586
1587   /* If the host is 64-bit sparc, but the target is 32-bit sparc, 
1588      then the gregset may contain 64-bit ints while supply_register
1589      is expecting 32-bit ints.  Compensate.  */
1590   if (sizeof (regp[0]) == 8 && SPARC_INTREG_SIZE == 4)
1591     offset = 4;
1592
1593   for (regi = 0; regi <= R_I7; regi++)
1594     if ((regno == -1) || (regno == regi))
1595       deprecated_read_register_gen (regi, (char *) (regp + regi) + offset);
1596
1597   if ((regno == -1) || (regno == PC_REGNUM))
1598     deprecated_read_register_gen (PC_REGNUM, (char *) (regp + R_PC) + offset);
1599
1600   if ((regno == -1) || (regno == NPC_REGNUM))
1601     deprecated_read_register_gen (NPC_REGNUM, (char *) (regp + R_nPC) + offset);
1602
1603   if ((regno == -1) || (regno == Y_REGNUM))
1604     deprecated_read_register_gen (Y_REGNUM, (char *) (regp + R_Y) + offset);
1605
1606   if (GDB_TARGET_IS_SPARC64)
1607     {
1608 #ifdef R_CCR
1609       if (regno == -1 || regno == CCR_REGNUM)
1610         deprecated_read_register_gen (CCR_REGNUM, ((char *) (regp + R_CCR)) + offset);
1611 #endif
1612 #ifdef R_FPRS
1613       if (regno == -1 || regno == FPRS_REGNUM)
1614         deprecated_read_register_gen (FPRS_REGNUM, ((char *) (regp + R_FPRS)) + offset);
1615 #endif
1616 #ifdef R_ASI
1617       if (regno == -1 || regno == ASI_REGNUM)
1618         deprecated_read_register_gen (ASI_REGNUM, ((char *) (regp + R_ASI)) + offset);
1619 #endif
1620     }
1621   else /* sparc32 */
1622     {
1623 #ifdef R_PS
1624       if (regno == -1 || regno == PS_REGNUM)
1625         deprecated_read_register_gen (PS_REGNUM, ((char *) (regp + R_PS)) + offset);
1626 #endif
1627
1628       /* For 64-bit hosts, R_WIM and R_TBR may not be defined.
1629          Steal R_ASI and R_FPRS, and hope for the best!  */
1630
1631 #if !defined (R_WIM) && defined (R_ASI)
1632 #define R_WIM R_ASI
1633 #endif
1634
1635 #if !defined (R_TBR) && defined (R_FPRS)
1636 #define R_TBR R_FPRS
1637 #endif
1638
1639 #if defined (R_WIM)
1640       if (regno == -1 || regno == WIM_REGNUM)
1641         deprecated_read_register_gen (WIM_REGNUM, ((char *) (regp + R_WIM)) + offset);
1642 #else
1643       if (regno == -1 || regno == WIM_REGNUM)
1644         deprecated_read_register_gen (WIM_REGNUM, NULL);
1645 #endif
1646
1647 #if defined (R_TBR)
1648       if (regno == -1 || regno == TBR_REGNUM)
1649         deprecated_read_register_gen (TBR_REGNUM, ((char *) (regp + R_TBR)) + offset);
1650 #else
1651       if (regno == -1 || regno == TBR_REGNUM)
1652         deprecated_read_register_gen (TBR_REGNUM, NULL);
1653 #endif
1654     }
1655 }
1656
1657 /*  Given a pointer to a floating point register set in /proc format
1658    (fpregset_t *), unpack the register contents and supply them as gdb's
1659    idea of the current floating point register values. */
1660
1661 void
1662 supply_fpregset (gdb_fpregset_t *fpregsetp)
1663 {
1664   register int regi;
1665   char *from;
1666
1667   if (!SPARC_HAS_FPU)
1668     return;
1669
1670   for (regi = FP0_REGNUM; regi < FP_MAX_REGNUM; regi++)
1671     {
1672       from = (char *) &fpregsetp->pr_fr.pr_regs[regi - FP0_REGNUM];
1673       supply_register (regi, from);
1674     }
1675
1676   if (GDB_TARGET_IS_SPARC64)
1677     {
1678       /*
1679        * don't know how to get value of the following.  
1680        */
1681       supply_register (FSR_REGNUM, NULL);       /* zero it out for now */
1682       supply_register (FCC0_REGNUM, NULL);
1683       supply_register (FCC1_REGNUM, NULL); /* don't know how to get value */
1684       supply_register (FCC2_REGNUM, NULL); /* don't know how to get value */
1685       supply_register (FCC3_REGNUM, NULL); /* don't know how to get value */
1686     }
1687   else
1688     {
1689       supply_register (FPS_REGNUM, (char *) &(fpregsetp->pr_fsr));
1690     }
1691 }
1692
1693 /*  Given a pointer to a floating point register set in /proc format
1694    (fpregset_t *), update the register specified by REGNO from gdb's idea
1695    of the current floating point register set.  If REGNO is -1, update
1696    them all. */
1697 /* This will probably need some changes for sparc64.  */
1698
1699 void
1700 fill_fpregset (gdb_fpregset_t *fpregsetp, int regno)
1701 {
1702   int regi;
1703   char *to;
1704   char *from;
1705
1706   if (!SPARC_HAS_FPU)
1707     return;
1708
1709   for (regi = FP0_REGNUM; regi < FP_MAX_REGNUM; regi++)
1710     {
1711       if ((regno == -1) || (regno == regi))
1712         {
1713           from = (char *) &deprecated_registers[REGISTER_BYTE (regi)];
1714           to = (char *) &fpregsetp->pr_fr.pr_regs[regi - FP0_REGNUM];
1715           memcpy (to, from, REGISTER_RAW_SIZE (regi));
1716         }
1717     }
1718
1719   if (!(GDB_TARGET_IS_SPARC64)) /* FIXME: does Sparc64 have this register? */
1720     if ((regno == -1) || (regno == FPS_REGNUM))
1721       {
1722         from = (char *)&deprecated_registers[REGISTER_BYTE (FPS_REGNUM)];
1723         to = (char *) &fpregsetp->pr_fsr;
1724         memcpy (to, from, REGISTER_RAW_SIZE (FPS_REGNUM));
1725       }
1726 }
1727
1728 #endif /* USE_PROC_FS */
1729
1730 /* Because of Multi-arch, GET_LONGJMP_TARGET is always defined.  So test
1731    for a definition of JB_PC.  */
1732 #ifdef JB_PC
1733
1734 /* Figure out where the longjmp will land.  We expect that we have just entered
1735    longjmp and haven't yet setup the stack frame, so the args are still in the
1736    output regs.  %o0 (O0_REGNUM) points at the jmp_buf structure from which we
1737    extract the pc (JB_PC) that we will land at.  The pc is copied into ADDR.
1738    This routine returns true on success */
1739
1740 int
1741 get_longjmp_target (CORE_ADDR *pc)
1742 {
1743   CORE_ADDR jb_addr;
1744 #define LONGJMP_TARGET_SIZE 4
1745   char buf[LONGJMP_TARGET_SIZE];
1746
1747   jb_addr = read_register (O0_REGNUM);
1748
1749   if (target_read_memory (jb_addr + JB_PC * JB_ELEMENT_SIZE, buf,
1750                           LONGJMP_TARGET_SIZE))
1751     return 0;
1752
1753   *pc = extract_unsigned_integer (buf, LONGJMP_TARGET_SIZE);
1754
1755   return 1;
1756 }
1757 #endif /* GET_LONGJMP_TARGET */
1758 \f
1759 #ifdef STATIC_TRANSFORM_NAME
1760 /* SunPRO (3.0 at least), encodes the static variables.  This is not
1761    related to C++ mangling, it is done for C too.  */
1762
1763 char *
1764 sunpro_static_transform_name (char *name)
1765 {
1766   char *p;
1767   if (name[0] == '$')
1768     {
1769       /* For file-local statics there will be a dollar sign, a bunch
1770          of junk (the contents of which match a string given in the
1771          N_OPT), a period and the name.  For function-local statics
1772          there will be a bunch of junk (which seems to change the
1773          second character from 'A' to 'B'), a period, the name of the
1774          function, and the name.  So just skip everything before the
1775          last period.  */
1776       p = strrchr (name, '.');
1777       if (p != NULL)
1778         name = p + 1;
1779     }
1780   return name;
1781 }
1782 #endif /* STATIC_TRANSFORM_NAME */
1783 \f
1784
1785 /* Utilities for printing registers.
1786    Page numbers refer to the SPARC Architecture Manual.  */
1787
1788 static void dump_ccreg (char *, int);
1789
1790 static void
1791 dump_ccreg (char *reg, int val)
1792 {
1793   /* page 41 */
1794   printf_unfiltered ("%s:%s,%s,%s,%s", reg,
1795                      val & 8 ? "N" : "NN",
1796                      val & 4 ? "Z" : "NZ",
1797                      val & 2 ? "O" : "NO",
1798                      val & 1 ? "C" : "NC");
1799 }
1800
1801 static char *
1802 decode_asi (int val)
1803 {
1804   /* page 72 */
1805   switch (val)
1806     {
1807     case 4:
1808       return "ASI_NUCLEUS";
1809     case 0x0c:
1810       return "ASI_NUCLEUS_LITTLE";
1811     case 0x10:
1812       return "ASI_AS_IF_USER_PRIMARY";
1813     case 0x11:
1814       return "ASI_AS_IF_USER_SECONDARY";
1815     case 0x18:
1816       return "ASI_AS_IF_USER_PRIMARY_LITTLE";
1817     case 0x19:
1818       return "ASI_AS_IF_USER_SECONDARY_LITTLE";
1819     case 0x80:
1820       return "ASI_PRIMARY";
1821     case 0x81:
1822       return "ASI_SECONDARY";
1823     case 0x82:
1824       return "ASI_PRIMARY_NOFAULT";
1825     case 0x83:
1826       return "ASI_SECONDARY_NOFAULT";
1827     case 0x88:
1828       return "ASI_PRIMARY_LITTLE";
1829     case 0x89:
1830       return "ASI_SECONDARY_LITTLE";
1831     case 0x8a:
1832       return "ASI_PRIMARY_NOFAULT_LITTLE";
1833     case 0x8b:
1834       return "ASI_SECONDARY_NOFAULT_LITTLE";
1835     default:
1836       return NULL;
1837     }
1838 }
1839
1840 /* Pretty print various registers.  */
1841 /* FIXME: Would be nice if this did some fancy things for 32 bit sparc.  */
1842
1843 static void
1844 sparc_print_register_hook (int regno)
1845 {
1846   ULONGEST val;
1847
1848   /* Handle double/quad versions of lower 32 fp regs.  */
1849   if (regno >= FP0_REGNUM && regno < FP0_REGNUM + 32
1850       && (regno & 1) == 0)
1851     {
1852       char value[16];
1853
1854       if (frame_register_read (deprecated_selected_frame, regno, value)
1855           && frame_register_read (deprecated_selected_frame, regno + 1, value + 4))
1856         {
1857           printf_unfiltered ("\t");
1858           print_floating (value, builtin_type_double, gdb_stdout);
1859         }
1860 #if 0                           /* FIXME: gdb doesn't handle long doubles */
1861       if ((regno & 3) == 0)
1862         {
1863           if (frame_register_read (deprecated_selected_frame, regno + 2, value + 8)
1864               && frame_register_read (deprecated_selected_frame, regno + 3, value + 12))
1865             {
1866               printf_unfiltered ("\t");
1867               print_floating (value, builtin_type_long_double, gdb_stdout);
1868             }
1869         }
1870 #endif
1871       return;
1872     }
1873
1874 #if 0                           /* FIXME: gdb doesn't handle long doubles */
1875   /* Print upper fp regs as long double if appropriate.  */
1876   if (regno >= FP0_REGNUM + 32 && regno < FP_MAX_REGNUM
1877   /* We test for even numbered regs and not a multiple of 4 because
1878      the upper fp regs are recorded as doubles.  */
1879       && (regno & 1) == 0)
1880     {
1881       char value[16];
1882
1883       if (frame_register_read (deprecated_selected_frame, regno, value)
1884           && frame_register_read (deprecated_selected_frame, regno + 1, value + 8))
1885         {
1886           printf_unfiltered ("\t");
1887           print_floating (value, builtin_type_long_double, gdb_stdout);
1888         }
1889       return;
1890     }
1891 #endif
1892
1893   /* FIXME: Some of these are priviledged registers.
1894      Not sure how they should be handled.  */
1895
1896 #define BITS(n, mask) ((int) (((val) >> (n)) & (mask)))
1897
1898   val = read_register (regno);
1899
1900   /* pages 40 - 60 */
1901   if (GDB_TARGET_IS_SPARC64)
1902     switch (regno)
1903       {
1904       case CCR_REGNUM:
1905         printf_unfiltered ("\t");
1906         dump_ccreg ("xcc", val >> 4);
1907         printf_unfiltered (", ");
1908         dump_ccreg ("icc", val & 15);
1909         break;
1910       case FPRS_REGNUM:
1911         printf ("\tfef:%d, du:%d, dl:%d",
1912                 BITS (2, 1), BITS (1, 1), BITS (0, 1));
1913         break;
1914       case FSR_REGNUM:
1915         {
1916           static char *fcc[4] =
1917           {"=", "<", ">", "?"};
1918           static char *rd[4] =
1919           {"N", "0", "+", "-"};
1920           /* Long, but I'd rather leave it as is and use a wide screen.  */
1921           printf_filtered ("\t0:%s, 1:%s, 2:%s, 3:%s, rd:%s, tem:%d, ",
1922                            fcc[BITS (10, 3)], fcc[BITS (32, 3)],
1923                            fcc[BITS (34, 3)], fcc[BITS (36, 3)],
1924                            rd[BITS (30, 3)], BITS (23, 31));
1925           printf_filtered ("ns:%d, ver:%d, ftt:%d, qne:%d, aexc:%d, cexc:%d",
1926                            BITS (22, 1), BITS (17, 7), BITS (14, 7), 
1927                            BITS (13, 1), BITS (5, 31), BITS (0, 31));
1928           break;
1929         }
1930       case ASI_REGNUM:
1931         {
1932           char *asi = decode_asi (val);
1933           if (asi != NULL)
1934             printf ("\t%s", asi);
1935           break;
1936         }
1937       case VER_REGNUM:
1938         printf ("\tmanuf:%d, impl:%d, mask:%d, maxtl:%d, maxwin:%d",
1939                 BITS (48, 0xffff), BITS (32, 0xffff),
1940                 BITS (24, 0xff), BITS (8, 0xff), BITS (0, 31));
1941         break;
1942       case PSTATE_REGNUM:
1943         {
1944           static char *mm[4] =
1945           {"tso", "pso", "rso", "?"};
1946           printf_filtered ("\tcle:%d, tle:%d, mm:%s, red:%d, ",
1947                            BITS (9, 1), BITS (8, 1), 
1948                            mm[BITS (6, 3)], BITS (5, 1));
1949           printf_filtered ("pef:%d, am:%d, priv:%d, ie:%d, ag:%d",
1950                            BITS (4, 1), BITS (3, 1), BITS (2, 1), 
1951                            BITS (1, 1), BITS (0, 1));
1952           break;
1953         }
1954       case TSTATE_REGNUM:
1955         /* FIXME: print all 4? */
1956         break;
1957       case TT_REGNUM:
1958         /* FIXME: print all 4? */
1959         break;
1960       case TPC_REGNUM:
1961         /* FIXME: print all 4? */
1962         break;
1963       case TNPC_REGNUM:
1964         /* FIXME: print all 4? */
1965         break;
1966       case WSTATE_REGNUM:
1967         printf ("\tother:%d, normal:%d", BITS (3, 7), BITS (0, 7));
1968         break;
1969       case CWP_REGNUM:
1970         printf ("\t%d", BITS (0, 31));
1971         break;
1972       case CANSAVE_REGNUM:
1973         printf ("\t%-2d before spill", BITS (0, 31));
1974         break;
1975       case CANRESTORE_REGNUM:
1976         printf ("\t%-2d before fill", BITS (0, 31));
1977         break;
1978       case CLEANWIN_REGNUM:
1979         printf ("\t%-2d before clean", BITS (0, 31));
1980         break;
1981       case OTHERWIN_REGNUM:
1982         printf ("\t%d", BITS (0, 31));
1983         break;
1984       }
1985   else  /* Sparc32 */
1986     switch (regno) 
1987       {
1988       case PS_REGNUM:
1989         printf ("\ticc:%c%c%c%c, pil:%d, s:%d, ps:%d, et:%d, cwp:%d",
1990                 BITS (23, 1) ? 'N' : '-', BITS (22, 1) ? 'Z' : '-',
1991                 BITS (21, 1) ? 'V' : '-', BITS (20, 1) ? 'C' : '-',
1992                 BITS (8, 15), BITS (7, 1), BITS (6, 1), BITS (5, 1),
1993                 BITS (0, 31));
1994         break;
1995       case FPS_REGNUM:
1996         {
1997           static char *fcc[4] =
1998           {"=", "<", ">", "?"};
1999           static char *rd[4] =
2000           {"N", "0", "+", "-"};
2001           /* Long, but I'd rather leave it as is and use a wide screen.  */
2002           printf ("\trd:%s, tem:%d, ns:%d, ver:%d, ftt:%d, qne:%d, "
2003                   "fcc:%s, aexc:%d, cexc:%d",
2004                   rd[BITS (30, 3)], BITS (23, 31), BITS (22, 1), BITS (17, 7),
2005                   BITS (14, 7), BITS (13, 1), fcc[BITS (10, 3)], BITS (5, 31),
2006                   BITS (0, 31));
2007           break;
2008         }
2009       }
2010
2011 #undef BITS
2012 }
2013
2014 static void
2015 sparc_print_registers (struct gdbarch *gdbarch,
2016                        struct ui_file *file,
2017                        struct frame_info *frame,
2018                        int regnum, int print_all,
2019                        void (*print_register_hook) (int))
2020 {
2021   int i;
2022   const int numregs = NUM_REGS + NUM_PSEUDO_REGS;
2023   char raw_buffer[MAX_REGISTER_SIZE];
2024   char virtual_buffer[MAX_REGISTER_SIZE];
2025
2026   for (i = 0; i < numregs; i++)
2027     {
2028       /* Decide between printing all regs, non-float / vector regs, or
2029          specific reg.  */
2030       if (regnum == -1)
2031         {
2032           if (!print_all)
2033             {
2034               if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
2035                 continue;
2036               if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)))
2037                 continue;
2038             }
2039         }
2040       else
2041         {
2042           if (i != regnum)
2043             continue;
2044         }
2045
2046       /* If the register name is empty, it is undefined for this
2047          processor, so don't display anything.  */
2048       if (REGISTER_NAME (i) == NULL || *(REGISTER_NAME (i)) == '\0')
2049         continue;
2050
2051       fputs_filtered (REGISTER_NAME (i), file);
2052       print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), file);
2053
2054       /* Get the data in raw format.  */
2055       if (! frame_register_read (frame, i, raw_buffer))
2056         {
2057           fprintf_filtered (file, "*value not available*\n");
2058           continue;
2059         }
2060
2061       memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (i));
2062
2063       /* If virtual format is floating, print it that way, and in raw
2064          hex.  */
2065       if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
2066         {
2067           int j;
2068
2069           val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
2070                      file, 0, 1, 0, Val_pretty_default);
2071
2072           fprintf_filtered (file, "\t(raw 0x");
2073           for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
2074             {
2075               int idx;
2076               if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2077                 idx = j;
2078               else
2079                 idx = REGISTER_RAW_SIZE (i) - 1 - j;
2080               fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[idx]);
2081             }
2082           fprintf_filtered (file, ")");
2083         }
2084       else
2085         {
2086           /* Print the register in hex.  */
2087           val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
2088                      file, 'x', 1, 0, Val_pretty_default);
2089           /* If not a vector register, print it also according to its
2090              natural format.  */
2091           if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)) == 0)
2092             {
2093               fprintf_filtered (file, "\t");
2094               val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
2095                          file, 0, 1, 0, Val_pretty_default);
2096             }
2097         }
2098
2099       /* Some sparc specific info.  */
2100       if (print_register_hook != NULL)
2101         print_register_hook (i);
2102
2103       fprintf_filtered (file, "\n");
2104     }
2105 }
2106
2107 static void
2108 sparc_print_registers_info (struct gdbarch *gdbarch,
2109                             struct ui_file *file,
2110                             struct frame_info *frame,
2111                             int regnum, int print_all)
2112 {
2113   sparc_print_registers (gdbarch, file, frame, regnum, print_all,
2114                          sparc_print_register_hook);
2115 }
2116
2117 void
2118 sparc_do_registers_info (int regnum, int all)
2119 {
2120   sparc_print_registers_info (current_gdbarch, gdb_stdout, deprecated_selected_frame,
2121                               regnum, all);
2122 }
2123
2124 #if 0
2125 // OBSOLETE static void
2126 // OBSOLETE sparclet_print_registers_info (struct gdbarch *gdbarch,
2127 // OBSOLETE                            struct ui_file *file,
2128 // OBSOLETE                            struct frame_info *frame,
2129 // OBSOLETE                            int regnum, int print_all)
2130 // OBSOLETE {
2131 // OBSOLETE   sparc_print_registers (gdbarch, file, frame, regnum, print_all, NULL);
2132 // OBSOLETE }
2133 // OBSOLETE 
2134 // OBSOLETE void
2135 // OBSOLETE sparclet_do_registers_info (int regnum, int all)
2136 // OBSOLETE {
2137 // OBSOLETE   sparclet_print_registers_info (current_gdbarch, gdb_stdout,
2138 // OBSOLETE                              deprecated_selected_frame, regnum, all);
2139 // OBSOLETE }
2140 #endif
2141
2142 #define SPARC_F0_REGNUM         FP0_REGNUM      /* %f0 */
2143 #define SPARC_F1_REGNUM         (FP0_REGNUM + 1)/* %f1 */
2144 #define SPARC_O0_REGNUM         O0_REGNUM       /* %o0 */
2145 #define SPARC_O1_REGNUM         O1_REGNUM       /* %o1 */
2146
2147 /* Push the arguments onto the stack and into the appropriate registers.  */
2148
2149 static CORE_ADDR
2150 sparc32_do_push_arguments (struct regcache *regcache, int nargs,
2151                            struct value **args, CORE_ADDR sp)
2152 {
2153   CORE_ADDR *addr;
2154   int size = 0;
2155   int i;
2156
2157   /* Structure, union and quad-precision arguments are passed by
2158      reference.  We allocate space for these arguments on the stack
2159      and record their addresses in an array.  Array elements for
2160      arguments that are passed by value will be set to zero.*/
2161   addr = alloca (nargs * sizeof (CORE_ADDR));
2162
2163   for (i = nargs - 1; i >= 0; i--)
2164     {
2165       struct type *type = VALUE_ENCLOSING_TYPE (args[i]);
2166       enum type_code code = TYPE_CODE (type);
2167       int len = TYPE_LENGTH (type);
2168
2169       /* Push the contents of structure, union and quad-precision
2170          arguments on the stack.  */
2171       if (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION || len > 8)
2172         {
2173           /* Keep the stack doubleword aligned.  */
2174           sp -= (len + 7) & ~7;
2175           write_memory (sp, VALUE_CONTENTS_ALL (args[i]), len);
2176           addr[i] = sp;
2177           size += 4;
2178         }
2179       else
2180         {
2181           addr[i] = 0;
2182           size += (len > 4) ? 8 : 4;
2183         }
2184     }
2185
2186   /* The needed space for outgoing arguments should be a multiple of 4.  */
2187   gdb_assert (size % 4 == 0);
2188
2189   /* Make sure we reserve space for the first six words of arguments
2190      in the stack frame, even if we don't need them.  */
2191   if (size < 24)
2192     sp -= (24 - size);
2193
2194   /* Make sure we end up with a doubleword aligned stack in the end.
2195      Reserve an extra word if necessary in order to accomplish this.  */
2196   if ((sp - size) % 8 == 0)
2197     sp -= 4;
2198
2199   /* Now push the arguments onto the stack.  */
2200   for (i = nargs - 1; i >=0; i--)
2201     {
2202       char buf[8];
2203       int len;
2204
2205       if (addr[i])
2206         {
2207           store_unsigned_integer (buf, 4, addr[i]);
2208           len = 4;
2209         }
2210       else
2211         {
2212           struct value *arg = args[i];
2213
2214           len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg));
2215
2216           /* Expand signed and unsigned bytes and halfwords as needed.  */
2217           if (len < 4)
2218             {
2219               arg = value_cast (builtin_type_long, arg);
2220               len = 4;
2221             }
2222           else if (len > 4 && len < 8)
2223             {
2224               arg = value_cast (builtin_type_long_long, arg);
2225               len = 4;
2226             }
2227
2228           gdb_assert (len == 4 || len == 8);
2229           memcpy (buf, VALUE_CONTENTS_ALL (arg), len);
2230         }
2231
2232       /* We always write the argument word on the stack.  */
2233       sp -= len;
2234       write_memory (sp, buf, len);
2235
2236       /* If this argument occupies one of the first 6 words, write it
2237          into the appropriate register too.  */
2238       size -= len;
2239       if (size < 24)
2240         {
2241           int regnum = SPARC_O0_REGNUM + (size / 4);
2242
2243           regcache_cooked_write (regcache, regnum, buf);
2244           if (len == 8 && size < 20)
2245             regcache_cooked_write (regcache, regnum + 1, buf + 4);
2246         }
2247     }
2248
2249   /* Reserve space for the struct/union return value pointer.  */
2250   sp -= 4;
2251
2252   /* Stack should be doubleword aligned at this point.  */
2253   gdb_assert (sp % 8 == 0);
2254
2255   /* Return the adjusted stack pointer.  */
2256   return sp;
2257 }
2258
2259 /* The SPARC passes the arguments on the stack; arguments smaller
2260    than an int are promoted to an int.  The first 6 words worth of 
2261    args are also passed in registers o0 - o5.  */
2262
2263 CORE_ADDR
2264 sparc32_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
2265                         int struct_return, CORE_ADDR struct_addr)
2266 {
2267   sp = sparc32_do_push_arguments (current_regcache, nargs, args, sp);
2268
2269   /* FIXME: kettenis/20030525: We don't let this function set the
2270      struct/union return pointer just yet.  */
2271 #if 0
2272   if (struct_return)
2273     {
2274       char buf[4];
2275
2276       /* The space for the struct/union return value pointer has
2277          already been reserved.  */
2278       store_unsigned_integer (buf, 4, struct_addr);
2279       write (sp, buf, 4);
2280     }
2281
2282   return sp;
2283 #else
2284   return sp + 4;
2285 #endif
2286 }
2287
2288 /* Extract from REGCACHE a function return value of type TYPE and copy
2289    that into VALBUF.
2290
2291    Note that REGCACHE specifies the register values for the frame of
2292    the calling function.  This means that we need to fetch the value
2293    form %o0 and %o1, which correspond to %i0 and %i1 in the frame of
2294    the called function.  */
2295
2296 void
2297 sparc32_extract_return_value (struct type *type, struct regcache *regcache,
2298                               void *valbuf)
2299 {
2300   int len = TYPE_LENGTH (type);
2301   char buf[8];
2302
2303   if (TYPE_CODE (type) == TYPE_CODE_FLT && SPARC_HAS_FPU)
2304     {
2305       if (len == 4 || len == 8)
2306         {
2307           regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
2308           regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
2309           memcpy (valbuf, buf, len);
2310           return;
2311         }
2312       else
2313         internal_error (__FILE__, __LINE__, "\
2314 Cannot extract floating-point return value of %d bytes long.", len);
2315     }
2316
2317   if (len <= 4)
2318     {
2319       regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
2320       memcpy (valbuf, buf + 4 - len, len);
2321     }
2322   else if (len <= 8)
2323     {
2324       regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
2325       regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
2326       memcpy (valbuf, buf + 8 - len, len);
2327     }
2328   else
2329     internal_error (__FILE__, __LINE__,
2330                     "Cannot extract return value of %d bytes long.", len);
2331 }
2332
2333 /* Write into REGBUF a function return value VALBUF of type TYPE.  */
2334
2335 void
2336 sparc32_store_return_value (struct type *type, struct regcache *regcache,
2337                             const void *valbuf)
2338 {
2339   int len = TYPE_LENGTH (type);
2340   char buf[8];
2341
2342   if (TYPE_CODE (type) == TYPE_CODE_FLT && SPARC_HAS_FPU)
2343     {
2344       const char *buf = valbuf;
2345
2346       if (len == 4)
2347         {
2348           regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
2349           return;
2350         }
2351       else if (len == 8)
2352         {
2353           regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
2354           regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
2355           return;
2356         }
2357       else
2358         internal_error (__FILE__, __LINE__, "\
2359 Cannot extract floating-point return value of %d bytes long.", len);
2360     }
2361
2362   /* Add leading zeros to the value.  */
2363   memset (buf, 0, sizeof buf);
2364
2365   if (len <= 4)
2366     {
2367       memcpy (buf + 4 - len, valbuf, len);
2368       regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
2369     }
2370   else if (len <= 8)
2371     {
2372       memcpy (buf + 8 - len, valbuf, len);
2373       regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
2374       regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf);
2375     }
2376   else
2377     internal_error (__FILE__, __LINE__,
2378                     "Cannot extract return value of %d bytes long.", len);
2379 }
2380
2381 /* Extract from REGCACHE the address in which a function should return
2382    its structure value.  */
2383
2384 CORE_ADDR
2385 sparc_extract_struct_value_address (struct regcache *regcache)
2386 {
2387   ULONGEST addr;
2388
2389   regcache_cooked_read_unsigned (regcache, SPARC_O0_REGNUM, &addr);
2390   return addr;
2391 }
2392
2393 /* FIXME: kettenis/2003/05/24: Still used for sparc64.  */
2394
2395 static void
2396 sparc_store_return_value (struct type *type, char *valbuf)
2397 {
2398   int regno;
2399   char buffer[MAX_REGISTER_SIZE];
2400
2401   if (TYPE_CODE (type) == TYPE_CODE_FLT && SPARC_HAS_FPU)
2402     /* Floating-point values are returned in the register pair */
2403     /* formed by %f0 and %f1 (doubles are, anyway).  */
2404     regno = FP0_REGNUM;
2405   else
2406     /* Other values are returned in register %o0.  */
2407     regno = O0_REGNUM;
2408
2409   /* Add leading zeros to the value. */
2410   if (TYPE_LENGTH (type) < REGISTER_RAW_SIZE (regno))
2411     {
2412       memset (buffer, 0, REGISTER_RAW_SIZE (regno));
2413       memcpy (buffer + REGISTER_RAW_SIZE (regno) - TYPE_LENGTH (type), valbuf,
2414               TYPE_LENGTH (type));
2415       deprecated_write_register_gen (regno, buffer);
2416     }
2417   else
2418     deprecated_write_register_bytes (REGISTER_BYTE (regno), valbuf,
2419                                      TYPE_LENGTH (type));
2420 }
2421
2422 #if 0
2423 // OBSOLETE extern void
2424 // OBSOLETE sparclet_store_return_value (struct type *type, char *valbuf)
2425 // OBSOLETE {
2426 // OBSOLETE   /* Other values are returned in register %o0.  */
2427 // OBSOLETE   deprecated_write_register_bytes (REGISTER_BYTE (O0_REGNUM), valbuf,
2428 // OBSOLETE                                TYPE_LENGTH (type));
2429 // OBSOLETE }
2430 #endif
2431
2432
2433 #ifndef CALL_DUMMY_CALL_OFFSET
2434 #define CALL_DUMMY_CALL_OFFSET \
2435      (gdbarch_tdep (current_gdbarch)->call_dummy_call_offset)
2436 #endif /* CALL_DUMMY_CALL_OFFSET */
2437
2438 /* Insert the function address into a call dummy instruction sequence
2439    stored at DUMMY.
2440
2441    For structs and unions, if the function was compiled with Sun cc,
2442    it expects 'unimp' after the call.  But gcc doesn't use that
2443    (twisted) convention.  So leave a nop there for gcc
2444    (DEPRECATED_FIX_CALL_DUMMY can assume it is operating on a pristine
2445    CALL_DUMMY, not one that has already been customized for a
2446    different function).  */
2447
2448 void
2449 sparc_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun,
2450                       struct type *value_type, int using_gcc)
2451 {
2452   int i;
2453
2454   /* Store the relative adddress of the target function into the
2455      'call' instruction. */
2456   store_unsigned_integer (dummy + CALL_DUMMY_CALL_OFFSET, 4,
2457                           (0x40000000
2458                            | (((fun - (pc + CALL_DUMMY_CALL_OFFSET)) >> 2)
2459                               & 0x3fffffff)));
2460
2461   /* If the called function returns an aggregate value, fill in the UNIMP
2462      instruction containing the size of the returned aggregate return value,
2463      which follows the call instruction.
2464      For details see the SPARC Architecture Manual Version 8, Appendix D.3.
2465
2466      Adjust the call_dummy_breakpoint_offset for the bp_call_dummy breakpoint
2467      to the proper address in the call dummy, so that `finish' after a stop
2468      in a call dummy works.
2469
2470      Tweeking current_gdbarch is not an optimal solution, but the call
2471      to sparc_fix_call_dummy is immediately followed by a call to
2472      call_function_by_hand, which is the only function where
2473      dummy_breakpoint_offset is actually used, if it is non-zero.  */
2474   if (TYPE_CODE (value_type) == TYPE_CODE_STRUCT
2475        || TYPE_CODE (value_type) == TYPE_CODE_UNION)
2476     {
2477       store_unsigned_integer (dummy + CALL_DUMMY_CALL_OFFSET + 8, 4,
2478                               TYPE_LENGTH (value_type) & 0x1fff);
2479       set_gdbarch_deprecated_call_dummy_breakpoint_offset (current_gdbarch, 0x30);
2480     }
2481   else
2482     set_gdbarch_deprecated_call_dummy_breakpoint_offset (current_gdbarch, 0x2c);
2483
2484   if (!(GDB_TARGET_IS_SPARC64))
2485     {
2486       /* If this is not a simulator target, change the first four
2487          instructions of the call dummy to NOPs.  Those instructions
2488          include a 'save' instruction and are designed to work around
2489          problems with register window flushing in the simulator. */
2490       
2491       if (strcmp (target_shortname, "sim") != 0)
2492         {
2493           for (i = 0; i < 4; i++)
2494             store_unsigned_integer (dummy + (i * 4), 4, 0x01000000);
2495         }
2496     }
2497
2498 #if 0
2499 // OBSOLETE   /* If this is a bi-endian target, GDB has written the call dummy
2500 // OBSOLETE      in little-endian order.  We must byte-swap it back to big-endian. */
2501 // OBSOLETE   if (bi_endian)
2502 // OBSOLETE     {
2503 // OBSOLETE       for (i = 0; i < CALL_DUMMY_LENGTH; i += 4)
2504 // OBSOLETE     {
2505 // OBSOLETE       char tmp = dummy[i];
2506 // OBSOLETE       dummy[i] = dummy[i + 3];
2507 // OBSOLETE       dummy[i + 3] = tmp;
2508 // OBSOLETE       tmp = dummy[i + 1];
2509 // OBSOLETE       dummy[i + 1] = dummy[i + 2];
2510 // OBSOLETE       dummy[i + 2] = tmp;
2511 // OBSOLETE     }
2512 // OBSOLETE     }
2513 #endif
2514 }
2515
2516
2517 #if 0
2518 // OBSOLETE /* Set target byte order based on machine type. */
2519 // OBSOLETE 
2520 // OBSOLETE static int
2521 // OBSOLETE sparc_target_architecture_hook (const bfd_arch_info_type *ap)
2522 // OBSOLETE {
2523 // OBSOLETE   int i, j;
2524 // OBSOLETE 
2525 // OBSOLETE   if (ap->mach == bfd_mach_sparc_sparclite_le)
2526 // OBSOLETE     {
2527 // OBSOLETE       target_byte_order = BFD_ENDIAN_LITTLE;
2528 // OBSOLETE       bi_endian = 1;
2529 // OBSOLETE     }
2530 // OBSOLETE   else
2531 // OBSOLETE     bi_endian = 0;
2532 // OBSOLETE   return 1;
2533 // OBSOLETE }
2534 #endif
2535
2536 /*
2537  * Module "constructor" function. 
2538  */
2539
2540 static struct gdbarch * sparc_gdbarch_init (struct gdbarch_info info,
2541                                             struct gdbarch_list *arches);
2542 static void sparc_dump_tdep (struct gdbarch *, struct ui_file *);
2543
2544 extern initialize_file_ftype _initialize_sparc_tdep; /* -Wmissing-prototypes */
2545
2546 void
2547 _initialize_sparc_tdep (void)
2548 {
2549   /* Hook us into the gdbarch mechanism.  */
2550   gdbarch_register (bfd_arch_sparc, sparc_gdbarch_init, sparc_dump_tdep);
2551
2552   /* OBSOLETE target_architecture_hook = sparc_target_architecture_hook; */
2553 }
2554
2555 /* Compensate for stack bias. Note that we currently don't handle
2556    mixed 32/64 bit code. */
2557
2558 static CORE_ADDR
2559 sparc64_read_sp (void)
2560 {
2561   CORE_ADDR sp = read_register (SP_REGNUM);
2562
2563   if (sp & 1)
2564     sp += 2047;
2565   return sp;
2566 }
2567
2568 static CORE_ADDR
2569 sparc64_read_fp (void)
2570 {
2571   CORE_ADDR fp = read_register (DEPRECATED_FP_REGNUM);
2572
2573   if (fp & 1)
2574     fp += 2047;
2575   return fp;
2576 }
2577
2578 static void
2579 sparc64_write_sp (CORE_ADDR val)
2580 {
2581   CORE_ADDR oldsp = read_register (SP_REGNUM);
2582   if (oldsp & 1)
2583     write_register (SP_REGNUM, val - 2047);
2584   else
2585     write_register (SP_REGNUM, val);
2586 }
2587
2588 /* The SPARC 64 ABI passes floating-point arguments in FP0 to FP31,
2589    and all other arguments in O0 to O5.  They are also copied onto
2590    the stack in the correct places.  Apparently (empirically), 
2591    structs of less than 16 bytes are passed member-by-member in
2592    separate registers, but I am unable to figure out the algorithm.
2593    Some members go in floating point regs, but I don't know which.
2594
2595    FIXME: Handle small structs (less than 16 bytes containing floats).
2596
2597    The counting regimen for using both integer and FP registers
2598    for argument passing is rather odd -- a single counter is used
2599    for both; this means that if the arguments alternate between
2600    int and float, we will waste every other register of both types.  */
2601
2602 static CORE_ADDR
2603 sparc64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
2604                         int struct_return, CORE_ADDR struct_retaddr)
2605 {
2606   int i, j, register_counter = 0;
2607   CORE_ADDR tempsp;
2608   struct type *sparc_intreg_type = 
2609     TYPE_LENGTH (builtin_type_long) == SPARC_INTREG_SIZE ?
2610     builtin_type_long : builtin_type_long_long;
2611
2612   sp = (sp & ~(((unsigned long) SPARC_INTREG_SIZE) - 1UL));
2613
2614   /* Figure out how much space we'll need. */
2615   for (i = nargs - 1; i >= 0; i--)
2616     {
2617       int len = TYPE_LENGTH (check_typedef (VALUE_TYPE (args[i])));
2618       struct value *copyarg = args[i];
2619       int copylen = len;
2620
2621       if (copylen < SPARC_INTREG_SIZE)
2622         {
2623           copyarg = value_cast (sparc_intreg_type, copyarg);
2624           copylen = SPARC_INTREG_SIZE;
2625         }
2626       sp -= copylen;
2627     }
2628
2629   /* Round down. */
2630   sp = sp & ~7;
2631   tempsp = sp;
2632
2633   /* if STRUCT_RETURN, then first argument is the struct return location. */
2634   if (struct_return)
2635     write_register (O0_REGNUM + register_counter++, struct_retaddr);
2636
2637   /* Now write the arguments onto the stack, while writing FP
2638      arguments into the FP registers, and other arguments into the
2639      first six 'O' registers.  */
2640
2641   for (i = 0; i < nargs; i++)
2642     {
2643       int len = TYPE_LENGTH (check_typedef (VALUE_TYPE (args[i])));
2644       struct value *copyarg = args[i];
2645       enum type_code typecode = TYPE_CODE (VALUE_TYPE (args[i]));
2646       int copylen = len;
2647
2648       if (typecode == TYPE_CODE_INT   ||
2649           typecode == TYPE_CODE_BOOL  ||
2650           typecode == TYPE_CODE_CHAR  ||
2651           typecode == TYPE_CODE_RANGE ||
2652           typecode == TYPE_CODE_ENUM)
2653         if (len < SPARC_INTREG_SIZE)
2654           {
2655             /* Small ints will all take up the size of one intreg on
2656                the stack.  */
2657             copyarg = value_cast (sparc_intreg_type, copyarg);
2658             copylen = SPARC_INTREG_SIZE;
2659           }
2660
2661       write_memory (tempsp, VALUE_CONTENTS (copyarg), copylen);
2662       tempsp += copylen;
2663
2664       /* Corner case: Structs consisting of a single float member are floats.
2665        * FIXME!  I don't know about structs containing multiple floats!
2666        * Structs containing mixed floats and ints are even more weird.
2667        */
2668
2669
2670
2671       /* Separate float args from all other args.  */
2672       if (typecode == TYPE_CODE_FLT && SPARC_HAS_FPU)
2673         {
2674           if (register_counter < 16)
2675             {
2676               /* This arg gets copied into a FP register. */
2677               int fpreg;
2678
2679               switch (len) {
2680               case 4:   /* Single-precision (float) */
2681                 fpreg = FP0_REGNUM + 2 * register_counter + 1;
2682                 register_counter += 1;
2683                 break;
2684               case 8:   /* Double-precision (double) */
2685                 fpreg = FP0_REGNUM + 2 * register_counter;
2686                 register_counter += 1;
2687                 break;
2688               case 16:  /* Quad-precision (long double) */
2689                 fpreg = FP0_REGNUM + 2 * register_counter;
2690                 register_counter += 2;
2691                 break;
2692               default:
2693                 internal_error (__FILE__, __LINE__, "bad switch");
2694               }
2695               deprecated_write_register_bytes (REGISTER_BYTE (fpreg),
2696                                                VALUE_CONTENTS (args[i]),
2697                                                len);
2698             }
2699         }
2700       else /* all other args go into the first six 'o' registers */
2701         {
2702           for (j = 0; 
2703                j < len && register_counter < 6; 
2704                j += SPARC_INTREG_SIZE)
2705             {
2706               int oreg = O0_REGNUM + register_counter;
2707
2708               deprecated_write_register_gen (oreg, VALUE_CONTENTS (copyarg) + j);
2709               register_counter += 1;
2710             }
2711         }
2712     }
2713   return sp;
2714 }
2715
2716 /* Values <= 32 bytes are returned in o0-o3 (floating-point values are
2717    returned in f0-f3). */
2718
2719 static void
2720 sp64_extract_return_value (struct type *type, char *regbuf, char *valbuf,
2721                            int bitoffset)
2722 {
2723   int typelen = TYPE_LENGTH (type);
2724   int regsize = REGISTER_RAW_SIZE (O0_REGNUM);
2725
2726   if (TYPE_CODE (type) == TYPE_CODE_FLT && SPARC_HAS_FPU)
2727     {
2728       memcpy (valbuf, &regbuf[REGISTER_BYTE (FP0_REGNUM)], typelen);
2729       return;
2730     }
2731
2732   if (TYPE_CODE (type) != TYPE_CODE_STRUCT
2733       || (TYPE_LENGTH (type) > 32))
2734     {
2735       memcpy (valbuf,
2736               &regbuf[O0_REGNUM * regsize +
2737                       (typelen >= regsize ? 0 : regsize - typelen)],
2738               typelen);
2739       return;
2740     }
2741   else
2742     {
2743       char *o0 = &regbuf[O0_REGNUM * regsize];
2744       char *f0 = &regbuf[FP0_REGNUM * regsize];
2745       int x;
2746
2747       for (x = 0; x < TYPE_NFIELDS (type); x++)
2748         {
2749           struct field *f = &TYPE_FIELDS (type)[x];
2750           /* FIXME: We may need to handle static fields here. */
2751           int whichreg = (f->loc.bitpos + bitoffset) / 32;
2752           int remainder = ((f->loc.bitpos + bitoffset) % 32) / 8;
2753           int where = (f->loc.bitpos + bitoffset) / 8;
2754           int size = TYPE_LENGTH (f->type);
2755           int typecode = TYPE_CODE (f->type);
2756
2757           if (typecode == TYPE_CODE_STRUCT)
2758             {
2759               sp64_extract_return_value (f->type,
2760                                          regbuf,
2761                                          valbuf,
2762                                          bitoffset + f->loc.bitpos);
2763             }
2764           else if (typecode == TYPE_CODE_FLT && SPARC_HAS_FPU)
2765             {
2766               memcpy (valbuf + where, &f0[whichreg * 4] + remainder, size);
2767             }
2768           else
2769             {
2770               memcpy (valbuf + where, &o0[whichreg * 4] + remainder, size);
2771             }
2772         }
2773     }
2774 }
2775
2776 static void
2777 sparc64_extract_return_value (struct type *type, char *regbuf, char *valbuf)
2778 {
2779   sp64_extract_return_value (type, regbuf, valbuf, 0);
2780 }
2781
2782 #if 0
2783 // OBSOLETE extern void 
2784 // OBSOLETE sparclet_extract_return_value (struct type *type,
2785 // OBSOLETE                            char *regbuf, 
2786 // OBSOLETE                            char *valbuf)
2787 // OBSOLETE {
2788 // OBSOLETE   regbuf += REGISTER_RAW_SIZE (O0_REGNUM) * 8;
2789 // OBSOLETE   if (TYPE_LENGTH (type) < REGISTER_RAW_SIZE (O0_REGNUM))
2790 // OBSOLETE     regbuf += REGISTER_RAW_SIZE (O0_REGNUM) - TYPE_LENGTH (type);
2791 // OBSOLETE 
2792 // OBSOLETE   memcpy ((void *) valbuf, regbuf, TYPE_LENGTH (type));
2793 // OBSOLETE }
2794 #endif
2795
2796 extern CORE_ADDR
2797 sparc32_stack_align (CORE_ADDR addr)
2798 {
2799   return ((addr + 7) & -8);
2800 }
2801
2802 static CORE_ADDR
2803 sparc64_stack_align (CORE_ADDR addr)
2804 {
2805   return ((addr + 15) & -16);
2806 }
2807
2808 extern void
2809 sparc_print_extra_frame_info (struct frame_info *fi)
2810 {
2811   if (fi && get_frame_extra_info (fi) && get_frame_extra_info (fi)->flat)
2812     printf_filtered (" flat, pc saved at 0x%s, fp saved at 0x%s\n",
2813                      paddr_nz (get_frame_extra_info (fi)->pc_addr), 
2814                      paddr_nz (get_frame_extra_info (fi)->fp_addr));
2815 }
2816
2817 /* MULTI_ARCH support */
2818
2819 const char *
2820 legacy_register_name (int i)
2821 {
2822 #ifdef REGISTER_NAMES
2823   static char *names[] = REGISTER_NAMES;
2824   if (i < 0 || i >= (sizeof (names) / sizeof (*names)))
2825     return NULL;
2826   else
2827     return names[i];
2828 #else
2829   internal_error (__FILE__, __LINE__,
2830                   "legacy_register_name: called.");
2831   return NULL;
2832 #endif
2833 }
2834
2835 static const char *
2836 sparc32_register_name (int regno)
2837 {
2838   static char *register_names[] = 
2839   { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
2840     "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
2841     "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
2842     "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
2843
2844     "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
2845     "f8",  "f9",  "f10", "f11", "f12", "f13", "f14", "f15",
2846     "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
2847     "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
2848
2849     "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr"
2850   };
2851
2852   if (regno < 0 ||
2853       regno >= (sizeof (register_names) / sizeof (register_names[0])))
2854     return NULL;
2855   else
2856     return register_names[regno];
2857 }
2858
2859 static const char *
2860 sparc64_register_name (int regno)
2861 {
2862   static char *register_names[] = 
2863   { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
2864     "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
2865     "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
2866     "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
2867
2868     "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
2869     "f8",  "f9",  "f10", "f11", "f12", "f13", "f14", "f15",
2870     "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
2871     "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
2872     "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46",
2873     "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62",
2874
2875     "pc", "npc", "ccr", "fsr", "fprs", "y", "asi", "ver", 
2876     "tick", "pil", "pstate", "tstate", "tba", "tl", "tt", "tpc", 
2877     "tnpc", "wstate", "cwp", "cansave", "canrestore", "cleanwin", "otherwin",
2878     "asr16", "asr17", "asr18", "asr19", "asr20", "asr21", "asr22", "asr23", 
2879     "asr24", "asr25", "asr26", "asr27", "asr28", "asr29", "asr30", "asr31",
2880     /* These are here at the end to simplify removing them if we have to.  */
2881     "icc", "xcc", "fcc0", "fcc1", "fcc2", "fcc3"
2882   };
2883
2884   if (regno < 0 ||
2885       regno >= (sizeof (register_names) / sizeof (register_names[0])))
2886     return NULL;
2887   else
2888     return register_names[regno];
2889 }
2890
2891 #if 0
2892 // OBSOLETE static const char *
2893 // OBSOLETE sparclite_register_name (int regno)
2894 // OBSOLETE {
2895 // OBSOLETE   static char *register_names[] = 
2896 // OBSOLETE   { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
2897 // OBSOLETE     "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
2898 // OBSOLETE     "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
2899 // OBSOLETE     "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
2900 // OBSOLETE 
2901 // OBSOLETE     "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
2902 // OBSOLETE     "f8",  "f9",  "f10", "f11", "f12", "f13", "f14", "f15",
2903 // OBSOLETE     "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
2904 // OBSOLETE     "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
2905 // OBSOLETE 
2906 // OBSOLETE     "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr",
2907 // OBSOLETE     "dia1", "dia2", "dda1", "dda2", "ddv1", "ddv2", "dcr", "dsr" 
2908 // OBSOLETE   };
2909 // OBSOLETE 
2910 // OBSOLETE   if (regno < 0 ||
2911 // OBSOLETE       regno >= (sizeof (register_names) / sizeof (register_names[0])))
2912 // OBSOLETE     return NULL;
2913 // OBSOLETE   else
2914 // OBSOLETE     return register_names[regno];
2915 // OBSOLETE }
2916 #endif
2917
2918 #if 0
2919 // OBSOLETE static const char *
2920 // OBSOLETE sparclet_register_name (int regno)
2921 // OBSOLETE {
2922 // OBSOLETE   static char *register_names[] = 
2923 // OBSOLETE   { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
2924 // OBSOLETE     "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
2925 // OBSOLETE     "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
2926 // OBSOLETE     "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
2927 // OBSOLETE 
2928 // OBSOLETE     "", "", "", "", "", "", "", "", /* no floating point registers */
2929 // OBSOLETE     "", "", "", "", "", "", "", "",
2930 // OBSOLETE     "", "", "", "", "", "", "", "",
2931 // OBSOLETE     "", "", "", "", "", "", "", "",
2932 // OBSOLETE 
2933 // OBSOLETE     "y", "psr", "wim", "tbr", "pc", "npc", "", "", /* no FPSR or CPSR */
2934 // OBSOLETE     "ccsr", "ccpr", "cccrcr", "ccor", "ccobr", "ccibr", "ccir", "", 
2935 // OBSOLETE 
2936 // OBSOLETE     /*       ASR15                 ASR19 (don't display them) */    
2937 // OBSOLETE     "asr1",  "", "asr17", "asr18", "", "asr20", "asr21", "asr22"
2938 // OBSOLETE     /* None of the rest get displayed */
2939 // OBSOLETE #if 0
2940 // OBSOLETE     "awr0",  "awr1",  "awr2",  "awr3",  "awr4",  "awr5",  "awr6",  "awr7",  
2941 // OBSOLETE     "awr8",  "awr9",  "awr10", "awr11", "awr12", "awr13", "awr14", "awr15", 
2942 // OBSOLETE     "awr16", "awr17", "awr18", "awr19", "awr20", "awr21", "awr22", "awr23", 
2943 // OBSOLETE     "awr24", "awr25", "awr26", "awr27", "awr28", "awr29", "awr30", "awr31", 
2944 // OBSOLETE     "apsr"
2945 // OBSOLETE #endif /* 0 */
2946 // OBSOLETE   };
2947 // OBSOLETE 
2948 // OBSOLETE   if (regno < 0 ||
2949 // OBSOLETE       regno >= (sizeof (register_names) / sizeof (register_names[0])))
2950 // OBSOLETE     return NULL;
2951 // OBSOLETE   else
2952 // OBSOLETE     return register_names[regno];
2953 // OBSOLETE }
2954 #endif
2955
2956 static CORE_ADDR
2957 sparc_push_return_address (CORE_ADDR pc_unused, CORE_ADDR sp)
2958 {
2959   if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
2960     {
2961       /* The return PC of the dummy_frame is the former 'current' PC
2962          (where we were before we made the target function call).
2963          This is saved in %i7 by push_dummy_frame.
2964
2965          We will save the 'call dummy location' (ie. the address
2966          to which the target function will return) in %o7.  
2967          This address will actually be the program's entry point.  
2968          There will be a special call_dummy breakpoint there.  */
2969
2970       if (DEPRECATED_CALL_DUMMY_ADDRESS_P ())
2971         write_register (O7_REGNUM, DEPRECATED_CALL_DUMMY_ADDRESS () - 8);
2972       else
2973         write_register (O7_REGNUM, entry_point_address () - 8);
2974     }
2975
2976   return sp;
2977 }
2978
2979 /* Should call_function allocate stack space for a struct return?  */
2980
2981 static int
2982 sparc64_use_struct_convention (int gcc_p, struct type *type)
2983 {
2984   return (TYPE_LENGTH (type) > 32);
2985 }
2986
2987 /* Store the address of the place in which to copy the structure the
2988    subroutine will return.  This is called from call_function_by_hand.
2989    The ultimate mystery is, tho, what is the value "16"?
2990
2991    MVS: That's the offset from where the sp is now, to where the
2992    subroutine is gonna expect to find the struct return address.  */
2993
2994 static void
2995 sparc32_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
2996 {
2997   char *val;
2998   CORE_ADDR o7;
2999
3000   val = alloca (SPARC_INTREG_SIZE); 
3001   store_unsigned_integer (val, SPARC_INTREG_SIZE, addr);
3002   write_memory (sp + (16 * SPARC_INTREG_SIZE), val, SPARC_INTREG_SIZE); 
3003
3004   if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
3005     {
3006       /* Now adjust the value of the link register, which was previously
3007          stored by push_return_address.  Functions that return structs are
3008          peculiar in that they return to link register + 12, rather than
3009          link register + 8.  */
3010
3011       o7 = read_register (O7_REGNUM);
3012       write_register (O7_REGNUM, o7 - 4);
3013     }
3014 }
3015
3016 static void
3017 sparc64_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
3018 {
3019   /* FIXME: V9 uses %o0 for this.  */
3020   /* FIXME MVS: Only for small enough structs!!! */
3021
3022   target_write_memory (sp + (16 * SPARC_INTREG_SIZE), 
3023                        (char *) &addr, SPARC_INTREG_SIZE); 
3024 #if 0
3025   if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
3026     {
3027       /* Now adjust the value of the link register, which was previously
3028          stored by push_return_address.  Functions that return structs are
3029          peculiar in that they return to link register + 12, rather than
3030          link register + 8.  */
3031
3032       write_register (O7_REGNUM, read_register (O7_REGNUM) - 4);
3033     }
3034 #endif
3035 }
3036
3037 /* Default target data type for register REGNO.  */
3038
3039 static struct type *
3040 sparc32_register_virtual_type (int regno)
3041 {
3042   if (regno == PC_REGNUM ||
3043       regno == DEPRECATED_FP_REGNUM ||
3044       regno == SP_REGNUM)
3045     return builtin_type_unsigned_int;
3046   if (regno < 32)
3047     return builtin_type_int;
3048   if (regno < 64)
3049     return builtin_type_float;
3050   return builtin_type_int;
3051 }
3052
3053 static struct type *
3054 sparc64_register_virtual_type (int regno)
3055 {
3056   if (regno == PC_REGNUM ||
3057       regno == DEPRECATED_FP_REGNUM ||
3058       regno == SP_REGNUM)
3059     return builtin_type_unsigned_long_long;
3060   if (regno < 32)
3061     return builtin_type_long_long;
3062   if (regno < 64)
3063     return builtin_type_float;
3064   if (regno < 80)
3065     return builtin_type_double;
3066   return builtin_type_long_long;
3067 }
3068
3069 /* Number of bytes of storage in the actual machine representation for
3070    register REGNO.  */
3071
3072 static int
3073 sparc32_register_size (int regno)
3074 {
3075   return 4;
3076 }
3077
3078 static int
3079 sparc64_register_size (int regno)
3080 {
3081   return (regno < 32 ? 8 : regno < 64 ? 4 : 8);
3082 }
3083
3084 /* Index within the `registers' buffer of the first byte of the space
3085    for register REGNO.  */
3086
3087 static int
3088 sparc32_register_byte (int regno)
3089 {
3090   return (regno * 4);
3091 }
3092
3093 static int
3094 sparc64_register_byte (int regno)
3095 {
3096   if (regno < 32)
3097     return regno * 8;
3098   else if (regno < 64)
3099     return 32 * 8 + (regno - 32) * 4;
3100   else if (regno < 80)
3101     return 32 * 8 + 32 * 4 + (regno - 64) * 8;
3102   else
3103     return 64 * 8 + (regno - 80) * 8;
3104 }
3105
3106 /* Immediately after a function call, return the saved pc.
3107    Can't go through the frames for this because on some machines
3108    the new frame is not set up until the new function executes
3109    some instructions.  */
3110
3111 static CORE_ADDR
3112 sparc_saved_pc_after_call (struct frame_info *fi)
3113 {
3114   return sparc_pc_adjust (read_register (RP_REGNUM));
3115 }
3116
3117 /* Init saved regs: nothing to do, just a place-holder function.  */
3118
3119 static void
3120 sparc_frame_init_saved_regs (struct frame_info *fi_ignored)
3121 {       /* no-op */
3122 }
3123
3124 /* gdbarch fix call dummy:
3125    All this function does is rearrange the arguments before calling
3126    sparc_fix_call_dummy (which does the real work).  */
3127
3128 static void
3129 sparc_gdbarch_fix_call_dummy (char *dummy, 
3130                               CORE_ADDR pc, 
3131                               CORE_ADDR fun, 
3132                               int nargs, 
3133                               struct value **args, 
3134                               struct type *type, 
3135                               int gcc_p)
3136 {
3137   if (CALL_DUMMY_LOCATION == ON_STACK)
3138     sparc_fix_call_dummy (dummy, pc, fun, type, gcc_p);
3139 }
3140
3141 /* DEPRECATED_CALL_DUMMY_ADDRESS: fetch the breakpoint address for a
3142    call dummy.  */
3143
3144 static CORE_ADDR
3145 sparc_call_dummy_address (void)
3146 {
3147   return (DEPRECATED_CALL_DUMMY_START_OFFSET) + DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET;
3148 }
3149
3150 /* Supply the Y register number to those that need it.  */
3151
3152 int
3153 sparc_y_regnum (void)
3154 {
3155   return gdbarch_tdep (current_gdbarch)->y_regnum;
3156 }
3157
3158 int
3159 sparc_reg_struct_has_addr (int gcc_p, struct type *type)
3160 {
3161   if (GDB_TARGET_IS_SPARC64)
3162     return (TYPE_LENGTH (type) > 32);
3163   else
3164     return (gcc_p != 1);
3165 }
3166
3167 int
3168 sparc_intreg_size (void)
3169 {
3170   return SPARC_INTREG_SIZE;
3171 }
3172
3173 static int
3174 sparc_return_value_on_stack (struct type *type)
3175 {
3176   if (TYPE_CODE (type) == TYPE_CODE_FLT &&
3177       TYPE_LENGTH (type) > 8)
3178     return 1;
3179   else
3180     return 0;
3181 }
3182
3183 /* Get the ith function argument for the current function.  */
3184 static CORE_ADDR
3185 sparc_fetch_pointer_argument (struct frame_info *frame, int argi,
3186                               struct type *type)
3187 {
3188   CORE_ADDR addr;
3189   frame_read_register (frame, O0_REGNUM + argi, &addr);
3190   return addr;
3191 }
3192
3193 /*
3194  * Gdbarch "constructor" function.
3195  */
3196
3197 #define SPARC32_CALL_DUMMY_ON_STACK
3198
3199 #define SPARC_SP_REGNUM    14
3200 #define SPARC_FP_REGNUM    30
3201 #define SPARC_FP0_REGNUM   32
3202 #define SPARC32_NPC_REGNUM 69
3203 #define SPARC32_PC_REGNUM  68
3204 #define SPARC32_Y_REGNUM   64
3205 #define SPARC64_PC_REGNUM  80
3206 #define SPARC64_NPC_REGNUM 81
3207 #define SPARC64_Y_REGNUM   85
3208
3209 static struct gdbarch *
3210 sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3211 {
3212   struct gdbarch *gdbarch;
3213   struct gdbarch_tdep *tdep;
3214
3215   static LONGEST call_dummy_32[] = 
3216     { 0xbc100001, 0x9de38000, 0xbc100002, 0xbe100003,
3217       0xda03a058, 0xd803a054, 0xd603a050, 0xd403a04c,
3218       0xd203a048, 0x40000000, 0xd003a044, 0x01000000,
3219       0x91d02001, 0x01000000
3220     };
3221   static LONGEST call_dummy_64[] = 
3222     { 0x9de3bec0fd3fa7f7LL, 0xf93fa7eff53fa7e7LL,
3223       0xf13fa7dfed3fa7d7LL, 0xe93fa7cfe53fa7c7LL,
3224       0xe13fa7bfdd3fa7b7LL, 0xd93fa7afd53fa7a7LL,
3225       0xd13fa79fcd3fa797LL, 0xc93fa78fc53fa787LL,
3226       0xc13fa77fcc3fa777LL, 0xc83fa76fc43fa767LL,
3227       0xc03fa75ffc3fa757LL, 0xf83fa74ff43fa747LL,
3228       0xf03fa73f01000000LL, 0x0100000001000000LL,
3229       0x0100000091580000LL, 0xd027a72b93500000LL,
3230       0xd027a72791480000LL, 0xd027a72391400000LL,
3231       0xd027a71fda5ba8a7LL, 0xd85ba89fd65ba897LL,
3232       0xd45ba88fd25ba887LL, 0x9fc02000d05ba87fLL,
3233       0x0100000091d02001LL, 0x0100000001000000LL 
3234     };
3235   static LONGEST call_dummy_nil[] = {0};
3236
3237   /* Try to determine the OS ABI of the object we are loading.  */
3238
3239   if (info.abfd != NULL
3240       && info.osabi == GDB_OSABI_UNKNOWN)
3241     {
3242       /* If it's an ELF file, assume it's Solaris.  */
3243       if (bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
3244         info.osabi = GDB_OSABI_SOLARIS;
3245     }
3246
3247   /* First see if there is already a gdbarch that can satisfy the request.  */
3248   arches = gdbarch_list_lookup_by_info (arches, &info);
3249   if (arches != NULL)
3250     return arches->gdbarch;
3251
3252   /* None found: is the request for a sparc architecture? */
3253   if (info.bfd_arch_info->arch != bfd_arch_sparc)
3254     return NULL;        /* No; then it's not for us.  */
3255
3256   /* Yes: create a new gdbarch for the specified machine type.  */
3257   tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
3258   gdbarch = gdbarch_alloc (&info, tdep);
3259
3260   /* First set settings that are common for all sparc architectures.  */
3261   set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3262   set_gdbarch_breakpoint_from_pc (gdbarch, sparc_breakpoint_from_pc);
3263   set_gdbarch_decr_pc_after_break (gdbarch, 0);
3264   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3265   set_gdbarch_extract_struct_value_address (gdbarch,
3266                                            sparc_extract_struct_value_address);
3267   set_gdbarch_deprecated_fix_call_dummy (gdbarch, sparc_gdbarch_fix_call_dummy);
3268   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3269   set_gdbarch_deprecated_fp_regnum (gdbarch, SPARC_FP_REGNUM);
3270   set_gdbarch_fp0_regnum (gdbarch, SPARC_FP0_REGNUM);
3271   set_gdbarch_deprecated_frame_chain (gdbarch, sparc_frame_chain);
3272   set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sparc_frame_init_saved_regs);
3273   set_gdbarch_deprecated_frame_saved_pc (gdbarch, sparc_frame_saved_pc);
3274   set_gdbarch_frameless_function_invocation (gdbarch, 
3275                                              frameless_look_for_prologue);
3276   set_gdbarch_deprecated_get_saved_register (gdbarch, sparc_get_saved_register);
3277   set_gdbarch_deprecated_init_extra_frame_info (gdbarch, sparc_init_extra_frame_info);
3278   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3279   set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3280   set_gdbarch_long_double_bit (gdbarch, 16 * TARGET_CHAR_BIT);
3281   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3282   set_gdbarch_deprecated_max_register_raw_size (gdbarch, 8);
3283   set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 8);
3284   set_gdbarch_deprecated_pop_frame (gdbarch, sparc_pop_frame);
3285   set_gdbarch_deprecated_push_return_address (gdbarch, sparc_push_return_address);
3286   set_gdbarch_deprecated_push_dummy_frame (gdbarch, sparc_push_dummy_frame);
3287   set_gdbarch_reg_struct_has_addr (gdbarch, sparc_reg_struct_has_addr);
3288   set_gdbarch_return_value_on_stack (gdbarch, sparc_return_value_on_stack);
3289   set_gdbarch_deprecated_saved_pc_after_call (gdbarch, sparc_saved_pc_after_call);
3290   set_gdbarch_prologue_frameless_p (gdbarch, sparc_prologue_frameless_p);
3291   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
3292   set_gdbarch_skip_prologue (gdbarch, sparc_skip_prologue);
3293   set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM);
3294   set_gdbarch_deprecated_use_generic_dummy_frames (gdbarch, 0);
3295   set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
3296
3297   /* Helper for function argument information.  */
3298   set_gdbarch_fetch_pointer_argument (gdbarch, sparc_fetch_pointer_argument);
3299
3300   /*
3301    * Settings that depend only on 32/64 bit word size 
3302    */
3303
3304   switch (info.bfd_arch_info->mach)
3305     {
3306     case bfd_mach_sparc:
3307 #if 0
3308       // OBSOLETE     case bfd_mach_sparc_sparclet:
3309       // OBSOLETE     case bfd_mach_sparc_sparclite:
3310 #endif
3311     case bfd_mach_sparc_v8plus:
3312     case bfd_mach_sparc_v8plusa:
3313 #if 0
3314       // OBSOLETE     case bfd_mach_sparc_sparclite_le:
3315 #endif
3316       /* 32-bit machine types: */
3317
3318 #ifdef SPARC32_CALL_DUMMY_ON_STACK
3319       set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_on_stack);
3320       set_gdbarch_deprecated_call_dummy_address (gdbarch, sparc_call_dummy_address);
3321       set_gdbarch_deprecated_call_dummy_breakpoint_offset (gdbarch, 0x30);
3322       set_gdbarch_deprecated_call_dummy_length (gdbarch, 0x38);
3323
3324       /* NOTE: cagney/2003-05-01: Using the just added push_dummy_code
3325          architecture method, it is now possible to implement a
3326          generic dummy frames based inferior function call that stores
3327          the breakpoint (and struct info) on the stack.  Further, by
3328          treating a SIGSEG at a breakpoint as equivalent to a SIGTRAP
3329          it is even possible to make this work when the stack is
3330          no-execute.
3331
3332          NOTE: cagney/2002-04-26: Based from info posted by Peter
3333          Schauer around Oct '99.  Briefly, due to aspects of the SPARC
3334          ABI, it isn't possible to use ON_STACK with a strictly
3335          compliant compiler.
3336
3337          Peter Schauer writes ...
3338
3339          No, any call from GDB to a user function returning a
3340          struct/union will fail miserably. Try this:
3341
3342          *NOINDENT*
3343          struct x
3344          {
3345            int a[4];
3346          };
3347
3348          struct x gx;
3349
3350          struct x
3351          sret ()
3352          {
3353            return gx;
3354          }
3355
3356          main ()
3357          {
3358            int i;
3359            for (i = 0; i < 4; i++)
3360              gx.a[i] = i + 1;
3361            gx = sret ();
3362          }
3363          *INDENT*
3364
3365          Set a breakpoint at the gx = sret () statement, run to it and
3366          issue a `print sret()'. It will not succed with your
3367          approach, and I doubt that continuing the program will work
3368          as well.
3369
3370          For details of the ABI see the Sparc Architecture Manual.  I
3371          have Version 8 (Prentice Hall ISBN 0-13-825001-4) and the
3372          calling conventions for functions returning aggregate values
3373          are explained in Appendix D.3.  */
3374
3375       set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
3376       set_gdbarch_deprecated_call_dummy_words (gdbarch, call_dummy_32);
3377 #else
3378       set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
3379       set_gdbarch_deprecated_call_dummy_words (gdbarch, call_dummy_nil);
3380 #endif
3381       set_gdbarch_deprecated_call_dummy_stack_adjust (gdbarch, 68);
3382       set_gdbarch_frame_args_skip (gdbarch, 68);
3383       set_gdbarch_function_start_offset (gdbarch, 0);
3384       set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3385       set_gdbarch_npc_regnum (gdbarch, SPARC32_NPC_REGNUM);
3386       set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM);
3387       set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
3388       set_gdbarch_deprecated_push_arguments (gdbarch, sparc32_push_arguments);
3389
3390       set_gdbarch_deprecated_register_byte (gdbarch, sparc32_register_byte);
3391       set_gdbarch_deprecated_register_raw_size (gdbarch, sparc32_register_size);
3392       set_gdbarch_deprecated_register_size (gdbarch, 4);
3393       set_gdbarch_deprecated_register_virtual_size (gdbarch, sparc32_register_size);
3394       set_gdbarch_deprecated_register_virtual_type (gdbarch, sparc32_register_virtual_type);
3395 #ifdef SPARC32_CALL_DUMMY_ON_STACK
3396       set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, sizeof (call_dummy_32));
3397 #else
3398       set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, 0);
3399 #endif
3400       set_gdbarch_stack_align (gdbarch, sparc32_stack_align);
3401       set_gdbarch_deprecated_extra_stack_alignment_needed (gdbarch, 1);
3402       set_gdbarch_deprecated_store_struct_return (gdbarch, sparc32_store_struct_return);
3403       set_gdbarch_use_struct_convention (gdbarch, 
3404                                          generic_use_struct_convention);
3405       set_gdbarch_deprecated_dummy_write_sp (gdbarch, deprecated_write_sp);
3406       tdep->y_regnum = SPARC32_Y_REGNUM;
3407       tdep->fp_max_regnum = SPARC_FP0_REGNUM + 32;
3408       tdep->intreg_size = 4;
3409       tdep->reg_save_offset = 0x60;
3410       tdep->call_dummy_call_offset = 0x24;
3411       break;
3412
3413     case bfd_mach_sparc_v9:
3414     case bfd_mach_sparc_v9a:
3415       /* 64-bit machine types: */
3416     default:    /* Any new machine type is likely to be 64-bit.  */
3417
3418 #ifdef SPARC64_CALL_DUMMY_ON_STACK
3419       set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_on_stack);
3420       set_gdbarch_deprecated_call_dummy_address (gdbarch, sparc_call_dummy_address);
3421       set_gdbarch_deprecated_call_dummy_breakpoint_offset (gdbarch, 8 * 4);
3422       set_gdbarch_deprecated_call_dummy_length (gdbarch, 192);
3423       set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
3424       set_gdbarch_deprecated_call_dummy_start_offset (gdbarch, 148);
3425       set_gdbarch_deprecated_call_dummy_words (gdbarch, call_dummy_64);
3426 #else
3427       set_gdbarch_deprecated_pc_in_call_dummy (gdbarch, deprecated_pc_in_call_dummy_at_entry_point);
3428       set_gdbarch_deprecated_call_dummy_words (gdbarch, call_dummy_nil);
3429 #endif
3430       set_gdbarch_deprecated_call_dummy_stack_adjust (gdbarch, 128);
3431       set_gdbarch_frame_args_skip (gdbarch, 136);
3432       set_gdbarch_function_start_offset (gdbarch, 0);
3433       set_gdbarch_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3434       set_gdbarch_npc_regnum (gdbarch, SPARC64_NPC_REGNUM);
3435       set_gdbarch_pc_regnum (gdbarch, SPARC64_PC_REGNUM);
3436       set_gdbarch_ptr_bit (gdbarch, 8 * TARGET_CHAR_BIT);
3437       set_gdbarch_deprecated_push_arguments (gdbarch, sparc64_push_arguments);
3438       /* NOTE different for at_entry */
3439       set_gdbarch_deprecated_target_read_fp (gdbarch, sparc64_read_fp);
3440       set_gdbarch_read_sp (gdbarch, sparc64_read_sp);
3441       /* Some of the registers aren't 64 bits, but it's a lot simpler just
3442          to assume they all are (since most of them are).  */
3443       set_gdbarch_deprecated_register_byte (gdbarch, sparc64_register_byte);
3444       set_gdbarch_deprecated_register_raw_size (gdbarch, sparc64_register_size);
3445       set_gdbarch_deprecated_register_size (gdbarch, 8);
3446       set_gdbarch_deprecated_register_virtual_size (gdbarch, sparc64_register_size);
3447       set_gdbarch_deprecated_register_virtual_type (gdbarch, sparc64_register_virtual_type);
3448 #ifdef SPARC64_CALL_DUMMY_ON_STACK
3449       set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, sizeof (call_dummy_64));
3450 #else
3451       set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, 0);
3452 #endif
3453       set_gdbarch_stack_align (gdbarch, sparc64_stack_align);
3454       set_gdbarch_deprecated_extra_stack_alignment_needed (gdbarch, 1);
3455       set_gdbarch_deprecated_store_struct_return (gdbarch, sparc64_store_struct_return);
3456       set_gdbarch_use_struct_convention (gdbarch, 
3457                                          sparc64_use_struct_convention);
3458       set_gdbarch_deprecated_dummy_write_sp (gdbarch, sparc64_write_sp);
3459       tdep->y_regnum = SPARC64_Y_REGNUM;
3460       tdep->fp_max_regnum = SPARC_FP0_REGNUM + 48;
3461       tdep->intreg_size = 8;
3462       tdep->reg_save_offset = 0x90;
3463       tdep->call_dummy_call_offset = 148 + 4 * 5;
3464       break;
3465     }
3466
3467   /* 
3468    * Settings that vary per-architecture:
3469    */
3470
3471   switch (info.bfd_arch_info->mach)
3472     {
3473     case bfd_mach_sparc:
3474       set_gdbarch_extract_return_value (gdbarch, sparc32_extract_return_value);
3475       set_gdbarch_store_return_value (gdbarch, sparc32_store_return_value);
3476       set_gdbarch_num_regs (gdbarch, 72);
3477       set_gdbarch_deprecated_register_bytes (gdbarch, 32*4 + 32*4 + 8*4);
3478       set_gdbarch_register_name (gdbarch, sparc32_register_name);
3479 #if 0
3480       // OBSOLETE       tdep->has_fpu = 1;      /* (all but sparclet and sparclite) */
3481 #endif
3482       tdep->fp_register_bytes = 32 * 4;
3483       tdep->print_insn_mach = bfd_mach_sparc;
3484       break;
3485 #if 0
3486       // OBSOLETE     case bfd_mach_sparc_sparclet:
3487       // OBSOLETE       set_gdbarch_deprecated_extract_return_value (gdbarch, sparclet_extract_return_value);
3488       // OBSOLETE       set_gdbarch_num_regs (gdbarch, 32 + 32 + 8 + 8 + 8);
3489       // OBSOLETE       set_gdbarch_register_bytes (gdbarch, 32*4 + 32*4 + 8*4 + 8*4 + 8*4);
3490       // OBSOLETE       set_gdbarch_register_name (gdbarch, sparclet_register_name);
3491       // OBSOLETE       set_gdbarch_deprecated_store_return_value (gdbarch, sparclet_store_return_value);
3492       // OBSOLETE       tdep->has_fpu = 0;      /* (all but sparclet and sparclite) */
3493       // OBSOLETE       tdep->fp_register_bytes = 0;
3494       // OBSOLETE       tdep->print_insn_mach = bfd_mach_sparc_sparclet;
3495       // OBSOLETE       break;
3496 #endif
3497 #if 0
3498       // OBSOLETE     case bfd_mach_sparc_sparclite:
3499       // OBSOLETE       set_gdbarch_deprecated_extract_return_value (gdbarch, sparc32_extract_return_value);
3500       // OBSOLETE       set_gdbarch_num_regs (gdbarch, 80);
3501       // OBSOLETE       set_gdbarch_register_bytes (gdbarch, 32*4 + 32*4 + 8*4 + 8*4);
3502       // OBSOLETE       set_gdbarch_register_name (gdbarch, sparclite_register_name);
3503       // OBSOLETE       set_gdbarch_deprecated_store_return_value (gdbarch, sparc_store_return_value);
3504       // OBSOLETE       tdep->has_fpu = 0;      /* (all but sparclet and sparclite) */
3505       // OBSOLETE       tdep->fp_register_bytes = 0;
3506       // OBSOLETE       tdep->print_insn_mach = bfd_mach_sparc_sparclite;
3507       // OBSOLETE       break;
3508 #endif
3509     case bfd_mach_sparc_v8plus:
3510       set_gdbarch_extract_return_value (gdbarch, sparc32_extract_return_value);
3511       set_gdbarch_store_return_value (gdbarch, sparc32_store_return_value);
3512       set_gdbarch_num_regs (gdbarch, 72);
3513       set_gdbarch_deprecated_register_bytes (gdbarch, 32*4 + 32*4 + 8*4);
3514       set_gdbarch_register_name (gdbarch, sparc32_register_name);
3515       tdep->print_insn_mach = bfd_mach_sparc;
3516       tdep->fp_register_bytes = 32 * 4;
3517 #if 0
3518       // OBSOLETE       tdep->has_fpu = 1;      /* (all but sparclet and sparclite) */
3519 #endif
3520       break;
3521     case bfd_mach_sparc_v8plusa:
3522       set_gdbarch_extract_return_value (gdbarch, sparc32_extract_return_value);
3523       set_gdbarch_store_return_value (gdbarch, sparc32_store_return_value);
3524       set_gdbarch_num_regs (gdbarch, 72);
3525       set_gdbarch_deprecated_register_bytes (gdbarch, 32*4 + 32*4 + 8*4);
3526       set_gdbarch_register_name (gdbarch, sparc32_register_name);
3527 #if 0
3528       // OBSOLETE       tdep->has_fpu = 1;      /* (all but sparclet and sparclite) */
3529 #endif
3530       tdep->fp_register_bytes = 32 * 4;
3531       tdep->print_insn_mach = bfd_mach_sparc;
3532       break;
3533 #if 0
3534 // OBSOLETE     case bfd_mach_sparc_sparclite_le:
3535 // OBSOLETE       set_gdbarch_deprecated_extract_return_value (gdbarch, sparc32_extract_return_value);
3536 // OBSOLETE       set_gdbarch_num_regs (gdbarch, 80);
3537 // OBSOLETE       set_gdbarch_register_bytes (gdbarch, 32*4 + 32*4 + 8*4 + 8*4);
3538 // OBSOLETE       set_gdbarch_register_name (gdbarch, sparclite_register_name);
3539 // OBSOLETE       set_gdbarch_deprecated_store_return_value (gdbarch, sparc_store_return_value);
3540 // OBSOLETE       tdep->has_fpu = 0;    /* (all but sparclet and sparclite) */
3541 // OBSOLETE       tdep->fp_register_bytes = 0;
3542 // OBSOLETE       tdep->print_insn_mach = bfd_mach_sparc_sparclite;
3543 // OBSOLETE       break;
3544 #endif
3545     case bfd_mach_sparc_v9:
3546       set_gdbarch_deprecated_extract_return_value (gdbarch, sparc64_extract_return_value);
3547       set_gdbarch_num_regs (gdbarch, 125);
3548       set_gdbarch_deprecated_register_bytes (gdbarch, 32*8 + 32*8 + 45*8);
3549       set_gdbarch_register_name (gdbarch, sparc64_register_name);
3550       set_gdbarch_deprecated_store_return_value (gdbarch, sparc_store_return_value);
3551 #if 0
3552       // OBSOLETE       tdep->has_fpu = 1;      /* (all but sparclet and sparclite) */
3553 #endif
3554       tdep->fp_register_bytes = 64 * 4;
3555       tdep->print_insn_mach = bfd_mach_sparc_v9a;
3556       break;
3557     case bfd_mach_sparc_v9a:
3558       set_gdbarch_deprecated_extract_return_value (gdbarch, sparc64_extract_return_value);
3559       set_gdbarch_num_regs (gdbarch, 125);
3560       set_gdbarch_deprecated_register_bytes (gdbarch, 32*8 + 32*8 + 45*8);
3561       set_gdbarch_register_name (gdbarch, sparc64_register_name);
3562       set_gdbarch_deprecated_store_return_value (gdbarch, sparc_store_return_value);
3563 #if 0
3564       // OBSOLETE       tdep->has_fpu = 1;      /* (all but sparclet and sparclite) */
3565 #endif
3566       tdep->fp_register_bytes = 64 * 4;
3567       tdep->print_insn_mach = bfd_mach_sparc_v9a;
3568       break;
3569     }
3570
3571   set_gdbarch_print_insn (gdbarch, print_insn_sparc);
3572
3573   /* Hook in OS ABI-specific overrides, if they have been registered.  */
3574   gdbarch_init_osabi (info, gdbarch);
3575
3576   return gdbarch;
3577 }
3578
3579 static void
3580 sparc_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3581 {
3582   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3583
3584   if (tdep == NULL)
3585     return;
3586
3587 #if 0
3588   // OBSOLETE   fprintf_unfiltered (file, "sparc_dump_tdep: has_fpu = %d\n",
3589   // OBSOLETE                 tdep->has_fpu);
3590 #endif
3591   fprintf_unfiltered (file, "sparc_dump_tdep: fp_register_bytes = %d\n",
3592                       tdep->fp_register_bytes);
3593   fprintf_unfiltered (file, "sparc_dump_tdep: y_regnum = %d\n",
3594                       tdep->y_regnum);
3595   fprintf_unfiltered (file, "sparc_dump_tdep: fp_max_regnum = %d\n",
3596                       tdep->fp_max_regnum);
3597   fprintf_unfiltered (file, "sparc_dump_tdep: intreg_size = %d\n",
3598                       tdep->intreg_size);
3599   fprintf_unfiltered (file, "sparc_dump_tdep: reg_save_offset = %d\n",
3600                       tdep->reg_save_offset);
3601   fprintf_unfiltered (file, "sparc_dump_tdep: call_dummy_call_offset = %d\n",
3602                       tdep->call_dummy_call_offset);
3603   fprintf_unfiltered (file, "sparc_dump_tdep: print_insn_match = %d\n",
3604                       tdep->print_insn_mach);
3605 }