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