packaging: Add python3-base dependency
[platform/upstream/gdb.git] / gdb / frv-tdep.c
1 /* Target-dependent code for the Fujitsu FR-V, for GDB, the GNU Debugger.
2
3    Copyright (C) 2002-2023 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "inferior.h"
22 #include "gdbcore.h"
23 #include "arch-utils.h"
24 #include "regcache.h"
25 #include "frame.h"
26 #include "frame-unwind.h"
27 #include "frame-base.h"
28 #include "trad-frame.h"
29 #include "dis-asm.h"
30 #include "sim-regno.h"
31 #include "gdb/sim-frv.h"
32 #include "opcodes/frv-desc.h"   /* for the H_SPR_... enums */
33 #include "symtab.h"
34 #include "elf-bfd.h"
35 #include "elf/frv.h"
36 #include "osabi.h"
37 #include "infcall.h"
38 #include "solib.h"
39 #include "frv-tdep.h"
40 #include "objfiles.h"
41 #include "gdbarch.h"
42
43 struct frv_unwind_cache         /* was struct frame_extra_info */
44   {
45     /* The previous frame's inner-most stack address.  Used as this
46        frame ID's stack_addr.  */
47     CORE_ADDR prev_sp;
48
49     /* The frame's base, optionally used by the high-level debug info.  */
50     CORE_ADDR base;
51
52     /* Table indicating the location of each and every register.  */
53     trad_frame_saved_reg *saved_regs;
54   };
55
56 /* A structure describing a particular variant of the FRV.
57    We allocate and initialize one of these structures when we create
58    the gdbarch object for a variant.
59
60    At the moment, all the FR variants we support differ only in which
61    registers are present; the portable code of GDB knows that
62    registers whose names are the empty string don't exist, so the
63    `register_names' array captures all the per-variant information we
64    need.
65
66    in the future, if we need to have per-variant maps for raw size,
67    virtual type, etc., we should replace register_names with an array
68    of structures, each of which gives all the necessary info for one
69    register.  Don't stick parallel arrays in here --- that's so
70    Fortran.  */
71 struct frv_gdbarch_tdep : gdbarch_tdep_base
72 {
73   /* Which ABI is in use?  */
74   enum frv_abi frv_abi {};
75
76   /* How many general-purpose registers does this variant have?  */
77   int num_gprs = 0;
78
79   /* How many floating-point registers does this variant have?  */
80   int num_fprs = 0;
81
82   /* How many hardware watchpoints can it support?  */
83   int num_hw_watchpoints = 0;
84
85   /* How many hardware breakpoints can it support?  */
86   int num_hw_breakpoints = 0;
87
88   /* Register names.  */
89   const char **register_names = nullptr;
90 };
91
92 /* Return the FR-V ABI associated with GDBARCH.  */
93 enum frv_abi
94 frv_abi (struct gdbarch *gdbarch)
95 {
96   frv_gdbarch_tdep *tdep = gdbarch_tdep<frv_gdbarch_tdep> (gdbarch);
97   return tdep->frv_abi;
98 }
99
100 /* Fetch the interpreter and executable loadmap addresses (for shared
101    library support) for the FDPIC ABI.  Return 0 if successful, -1 if
102    not.  (E.g, -1 will be returned if the ABI isn't the FDPIC ABI.)  */
103 int
104 frv_fdpic_loadmap_addresses (struct gdbarch *gdbarch, CORE_ADDR *interp_addr,
105                              CORE_ADDR *exec_addr)
106 {
107   if (frv_abi (gdbarch) != FRV_ABI_FDPIC)
108     return -1;
109   else
110     {
111       struct regcache *regcache = get_current_regcache ();
112
113       if (interp_addr != NULL)
114         {
115           ULONGEST val;
116           regcache_cooked_read_unsigned (regcache,
117                                          fdpic_loadmap_interp_regnum, &val);
118           *interp_addr = val;
119         }
120       if (exec_addr != NULL)
121         {
122           ULONGEST val;
123           regcache_cooked_read_unsigned (regcache,
124                                          fdpic_loadmap_exec_regnum, &val);
125           *exec_addr = val;
126         }
127       return 0;
128     }
129 }
130
131 /* Allocate a new variant structure, and set up default values for all
132    the fields.  */
133 static frv_gdbarch_tdep *
134 new_variant (void)
135 {
136   int r;
137
138   frv_gdbarch_tdep *var = new frv_gdbarch_tdep;
139
140   var->frv_abi = FRV_ABI_EABI;
141   var->num_gprs = 64;
142   var->num_fprs = 64;
143   var->num_hw_watchpoints = 0;
144   var->num_hw_breakpoints = 0;
145
146   /* By default, don't supply any general-purpose or floating-point
147      register names.  */
148   var->register_names 
149     = (const char **) xmalloc ((frv_num_regs + frv_num_pseudo_regs)
150                                * sizeof (const char *));
151   for (r = 0; r < frv_num_regs + frv_num_pseudo_regs; r++)
152     var->register_names[r] = "";
153
154   /* Do, however, supply default names for the known special-purpose
155      registers.  */
156
157   var->register_names[pc_regnum] = "pc";
158   var->register_names[lr_regnum] = "lr";
159   var->register_names[lcr_regnum] = "lcr";
160      
161   var->register_names[psr_regnum] = "psr";
162   var->register_names[ccr_regnum] = "ccr";
163   var->register_names[cccr_regnum] = "cccr";
164   var->register_names[tbr_regnum] = "tbr";
165
166   /* Debug registers.  */
167   var->register_names[brr_regnum] = "brr";
168   var->register_names[dbar0_regnum] = "dbar0";
169   var->register_names[dbar1_regnum] = "dbar1";
170   var->register_names[dbar2_regnum] = "dbar2";
171   var->register_names[dbar3_regnum] = "dbar3";
172
173   /* iacc0 (Only found on MB93405.)  */
174   var->register_names[iacc0h_regnum] = "iacc0h";
175   var->register_names[iacc0l_regnum] = "iacc0l";
176   var->register_names[iacc0_regnum] = "iacc0";
177
178   /* fsr0 (Found on FR555 and FR501.)  */
179   var->register_names[fsr0_regnum] = "fsr0";
180
181   /* acc0 - acc7.  The architecture provides for the possibility of many
182      more (up to 64 total), but we don't want to make that big of a hole
183      in the G packet.  If we need more in the future, we'll add them
184      elsewhere.  */
185   for (r = acc0_regnum; r <= acc7_regnum; r++)
186     var->register_names[r]
187       = xstrprintf ("acc%d", r - acc0_regnum).release ();
188
189   /* accg0 - accg7: These are one byte registers.  The remote protocol
190      provides the raw values packed four into a slot.  accg0123 and
191      accg4567 correspond to accg0 - accg3 and accg4-accg7 respectively.
192      We don't provide names for accg0123 and accg4567 since the user will
193      likely not want to see these raw values.  */
194
195   for (r = accg0_regnum; r <= accg7_regnum; r++)
196     var->register_names[r]
197       = xstrprintf ("accg%d", r - accg0_regnum).release ();
198
199   /* msr0 and msr1.  */
200
201   var->register_names[msr0_regnum] = "msr0";
202   var->register_names[msr1_regnum] = "msr1";
203
204   /* gner and fner registers.  */
205   var->register_names[gner0_regnum] = "gner0";
206   var->register_names[gner1_regnum] = "gner1";
207   var->register_names[fner0_regnum] = "fner0";
208   var->register_names[fner1_regnum] = "fner1";
209
210   return var;
211 }
212
213
214 /* Indicate that the variant VAR has NUM_GPRS general-purpose
215    registers, and fill in the names array appropriately.  */
216 static void
217 set_variant_num_gprs (frv_gdbarch_tdep *var, int num_gprs)
218 {
219   int r;
220
221   var->num_gprs = num_gprs;
222
223   for (r = 0; r < num_gprs; ++r)
224     {
225       char buf[20];
226
227       xsnprintf (buf, sizeof (buf), "gr%d", r);
228       var->register_names[first_gpr_regnum + r] = xstrdup (buf);
229     }
230 }
231
232
233 /* Indicate that the variant VAR has NUM_FPRS floating-point
234    registers, and fill in the names array appropriately.  */
235 static void
236 set_variant_num_fprs (frv_gdbarch_tdep *var, int num_fprs)
237 {
238   int r;
239
240   var->num_fprs = num_fprs;
241
242   for (r = 0; r < num_fprs; ++r)
243     {
244       char buf[20];
245
246       xsnprintf (buf, sizeof (buf), "fr%d", r);
247       var->register_names[first_fpr_regnum + r] = xstrdup (buf);
248     }
249 }
250
251 static void
252 set_variant_abi_fdpic (frv_gdbarch_tdep *var)
253 {
254   var->frv_abi = FRV_ABI_FDPIC;
255   var->register_names[fdpic_loadmap_exec_regnum] = xstrdup ("loadmap_exec");
256   var->register_names[fdpic_loadmap_interp_regnum]
257     = xstrdup ("loadmap_interp");
258 }
259
260 static void
261 set_variant_scratch_registers (frv_gdbarch_tdep *var)
262 {
263   var->register_names[scr0_regnum] = xstrdup ("scr0");
264   var->register_names[scr1_regnum] = xstrdup ("scr1");
265   var->register_names[scr2_regnum] = xstrdup ("scr2");
266   var->register_names[scr3_regnum] = xstrdup ("scr3");
267 }
268
269 static const char *
270 frv_register_name (struct gdbarch *gdbarch, int reg)
271 {
272   frv_gdbarch_tdep *tdep = gdbarch_tdep<frv_gdbarch_tdep> (gdbarch);
273   return tdep->register_names[reg];
274 }
275
276
277 static struct type *
278 frv_register_type (struct gdbarch *gdbarch, int reg)
279 {
280   if (reg >= first_fpr_regnum && reg <= last_fpr_regnum)
281     return builtin_type (gdbarch)->builtin_float;
282   else if (reg == iacc0_regnum)
283     return builtin_type (gdbarch)->builtin_int64;
284   else
285     return builtin_type (gdbarch)->builtin_int32;
286 }
287
288 static enum register_status
289 frv_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
290                           int reg, gdb_byte *buffer)
291 {
292   enum register_status status;
293
294   if (reg == iacc0_regnum)
295     {
296       status = regcache->raw_read (iacc0h_regnum, buffer);
297       if (status == REG_VALID)
298         status = regcache->raw_read (iacc0l_regnum, (bfd_byte *) buffer + 4);
299     }
300   else if (accg0_regnum <= reg && reg <= accg7_regnum)
301     {
302       /* The accg raw registers have four values in each slot with the
303          lowest register number occupying the first byte.  */
304
305       int raw_regnum = accg0123_regnum + (reg - accg0_regnum) / 4;
306       int byte_num = (reg - accg0_regnum) % 4;
307       gdb_byte buf[4];
308
309       status = regcache->raw_read (raw_regnum, buf);
310       if (status == REG_VALID)
311         {
312           memset (buffer, 0, 4);
313           /* FR-V is big endian, so put the requested byte in the
314              first byte of the buffer allocated to hold the
315              pseudo-register.  */
316           buffer[0] = buf[byte_num];
317         }
318     }
319   else
320     gdb_assert_not_reached ("invalid pseudo register number");
321
322   return status;
323 }
324
325 static void
326 frv_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
327                           int reg, const gdb_byte *buffer)
328 {
329   if (reg == iacc0_regnum)
330     {
331       regcache->raw_write (iacc0h_regnum, buffer);
332       regcache->raw_write (iacc0l_regnum, (bfd_byte *) buffer + 4);
333     }
334   else if (accg0_regnum <= reg && reg <= accg7_regnum)
335     {
336       /* The accg raw registers have four values in each slot with the
337          lowest register number occupying the first byte.  */
338
339       int raw_regnum = accg0123_regnum + (reg - accg0_regnum) / 4;
340       int byte_num = (reg - accg0_regnum) % 4;
341       gdb_byte buf[4];
342
343       regcache->raw_read (raw_regnum, buf);
344       buf[byte_num] = ((bfd_byte *) buffer)[0];
345       regcache->raw_write (raw_regnum, buf);
346     }
347 }
348
349 static int
350 frv_register_sim_regno (struct gdbarch *gdbarch, int reg)
351 {
352   static const int spr_map[] =
353     {
354       H_SPR_PSR,                /* psr_regnum */
355       H_SPR_CCR,                /* ccr_regnum */
356       H_SPR_CCCR,               /* cccr_regnum */
357       -1,                       /* fdpic_loadmap_exec_regnum */
358       -1,                       /* fdpic_loadmap_interp_regnum */
359       -1,                       /* 134 */
360       H_SPR_TBR,                /* tbr_regnum */
361       H_SPR_BRR,                /* brr_regnum */
362       H_SPR_DBAR0,              /* dbar0_regnum */
363       H_SPR_DBAR1,              /* dbar1_regnum */
364       H_SPR_DBAR2,              /* dbar2_regnum */
365       H_SPR_DBAR3,              /* dbar3_regnum */
366       H_SPR_SCR0,               /* scr0_regnum */
367       H_SPR_SCR1,               /* scr1_regnum */
368       H_SPR_SCR2,               /* scr2_regnum */
369       H_SPR_SCR3,               /* scr3_regnum */
370       H_SPR_LR,                 /* lr_regnum */
371       H_SPR_LCR,                /* lcr_regnum */
372       H_SPR_IACC0H,             /* iacc0h_regnum */
373       H_SPR_IACC0L,             /* iacc0l_regnum */
374       H_SPR_FSR0,               /* fsr0_regnum */
375       /* FIXME: Add infrastructure for fetching/setting ACC and ACCG regs.  */
376       -1,                       /* acc0_regnum */
377       -1,                       /* acc1_regnum */
378       -1,                       /* acc2_regnum */
379       -1,                       /* acc3_regnum */
380       -1,                       /* acc4_regnum */
381       -1,                       /* acc5_regnum */
382       -1,                       /* acc6_regnum */
383       -1,                       /* acc7_regnum */
384       -1,                       /* acc0123_regnum */
385       -1,                       /* acc4567_regnum */
386       H_SPR_MSR0,               /* msr0_regnum */
387       H_SPR_MSR1,               /* msr1_regnum */
388       H_SPR_GNER0,              /* gner0_regnum */
389       H_SPR_GNER1,              /* gner1_regnum */
390       H_SPR_FNER0,              /* fner0_regnum */
391       H_SPR_FNER1,              /* fner1_regnum */
392     };
393
394   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
395
396   if (first_gpr_regnum <= reg && reg <= last_gpr_regnum)
397     return reg - first_gpr_regnum + SIM_FRV_GR0_REGNUM;
398   else if (first_fpr_regnum <= reg && reg <= last_fpr_regnum)
399     return reg - first_fpr_regnum + SIM_FRV_FR0_REGNUM;
400   else if (pc_regnum == reg)
401     return SIM_FRV_PC_REGNUM;
402   else if (reg >= first_spr_regnum
403            && reg < first_spr_regnum + sizeof (spr_map) / sizeof (spr_map[0]))
404     {
405       int spr_reg_offset = spr_map[reg - first_spr_regnum];
406
407       if (spr_reg_offset < 0)
408         return SIM_REGNO_DOES_NOT_EXIST;
409       else
410         return SIM_FRV_SPR0_REGNUM + spr_reg_offset;
411     }
412
413   internal_error (_("Bad register number %d"), reg);
414 }
415
416 constexpr gdb_byte frv_break_insn[] = {0xc0, 0x70, 0x00, 0x01};
417
418 typedef BP_MANIPULATION (frv_break_insn) frv_breakpoint;
419
420 /* Define the maximum number of instructions which may be packed into a
421    bundle (VLIW instruction).  */
422 static const int max_instrs_per_bundle = 8;
423
424 /* Define the size (in bytes) of an FR-V instruction.  */
425 static const int frv_instr_size = 4;
426
427 /* Adjust a breakpoint's address to account for the FR-V architecture's
428    constraint that a break instruction must not appear as any but the
429    first instruction in the bundle.  */
430 static CORE_ADDR
431 frv_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
432 {
433   int count = max_instrs_per_bundle;
434   CORE_ADDR addr = bpaddr - frv_instr_size;
435   CORE_ADDR func_start = get_pc_function_start (bpaddr);
436
437   /* Find the end of the previous packing sequence.  This will be indicated
438      by either attempting to access some inaccessible memory or by finding
439      an instruction word whose packing bit is set to one.  */
440   while (count-- > 0 && addr >= func_start)
441     {
442       gdb_byte instr[frv_instr_size];
443       int status;
444
445       status = target_read_memory (addr, instr, sizeof instr);
446
447       if (status != 0)
448         break;
449
450       /* This is a big endian architecture, so byte zero will have most
451          significant byte.  The most significant bit of this byte is the
452          packing bit.  */
453       if (instr[0] & 0x80)
454         break;
455
456       addr -= frv_instr_size;
457     }
458
459   if (count > 0)
460     bpaddr = addr + frv_instr_size;
461
462   return bpaddr;
463 }
464
465
466 /* Return true if REG is a caller-saves ("scratch") register,
467    false otherwise.  */
468 static int
469 is_caller_saves_reg (int reg)
470 {
471   return ((4 <= reg && reg <= 7)
472           || (14 <= reg && reg <= 15)
473           || (32 <= reg && reg <= 47));
474 }
475
476
477 /* Return true if REG is a callee-saves register, false otherwise.  */
478 static int
479 is_callee_saves_reg (int reg)
480 {
481   return ((16 <= reg && reg <= 31)
482           || (48 <= reg && reg <= 63));
483 }
484
485
486 /* Return true if REG is an argument register, false otherwise.  */
487 static int
488 is_argument_reg (int reg)
489 {
490   return (8 <= reg && reg <= 13);
491 }
492
493 /* Scan an FR-V prologue, starting at PC, until frame->PC.
494    If FRAME is non-zero, fill in its saved_regs with appropriate addresses.
495    We assume FRAME's saved_regs array has already been allocated and cleared.
496    Return the first PC value after the prologue.
497
498    Note that, for unoptimized code, we almost don't need this function
499    at all; all arguments and locals live on the stack, so we just need
500    the FP to find everything.  The catch: structures passed by value
501    have their addresses living in registers; they're never spilled to
502    the stack.  So if you ever want to be able to get to these
503    arguments in any frame but the top, you'll need to do this serious
504    prologue analysis.  */
505 static CORE_ADDR
506 frv_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
507                       frame_info_ptr this_frame,
508                       struct frv_unwind_cache *info)
509 {
510   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
511
512   /* When writing out instruction bitpatterns, we use the following
513      letters to label instruction fields:
514      P - The parallel bit.  We don't use this.
515      J - The register number of GRj in the instruction description.
516      K - The register number of GRk in the instruction description.
517      I - The register number of GRi.
518      S - a signed immediate offset.
519      U - an unsigned immediate offset.
520
521      The dots below the numbers indicate where hex digit boundaries
522      fall, to make it easier to check the numbers.  */
523
524   /* Non-zero iff we've seen the instruction that initializes the
525      frame pointer for this function's frame.  */
526   int fp_set = 0;
527
528   /* If fp_set is non_zero, then this is the distance from
529      the stack pointer to frame pointer: fp = sp + fp_offset.  */
530   int fp_offset = 0;
531
532   /* Total size of frame prior to any alloca operations.  */
533   int framesize = 0;
534
535   /* Flag indicating if lr has been saved on the stack.  */
536   int lr_saved_on_stack = 0;
537
538   /* The number of the general-purpose register we saved the return
539      address ("link register") in, or -1 if we haven't moved it yet.  */
540   int lr_save_reg = -1;
541
542   /* Offset (from sp) at which lr has been saved on the stack.  */
543
544   int lr_sp_offset = 0;
545
546   /* If gr_saved[i] is non-zero, then we've noticed that general
547      register i has been saved at gr_sp_offset[i] from the stack
548      pointer.  */
549   char gr_saved[64];
550   int gr_sp_offset[64];
551
552   /* The address of the most recently scanned prologue instruction.  */
553   CORE_ADDR last_prologue_pc;
554
555   /* The address of the next instruction.  */
556   CORE_ADDR next_pc;
557
558   /* The upper bound to of the pc values to scan.  */
559   CORE_ADDR lim_pc;
560
561   memset (gr_saved, 0, sizeof (gr_saved));
562
563   last_prologue_pc = pc;
564
565   /* Try to compute an upper limit (on how far to scan) based on the
566      line number info.  */
567   lim_pc = skip_prologue_using_sal (gdbarch, pc);
568   /* If there's no line number info, lim_pc will be 0.  In that case,
569      set the limit to be 100 instructions away from pc.  Hopefully, this
570      will be far enough away to account for the entire prologue.  Don't
571      worry about overshooting the end of the function.  The scan loop
572      below contains some checks to avoid scanning unreasonably far.  */
573   if (lim_pc == 0)
574     lim_pc = pc + 400;
575
576   /* If we have a frame, we don't want to scan past the frame's pc.  This
577      will catch those cases where the pc is in the prologue.  */
578   if (this_frame)
579     {
580       CORE_ADDR frame_pc = get_frame_pc (this_frame);
581       if (frame_pc < lim_pc)
582         lim_pc = frame_pc;
583     }
584
585   /* Scan the prologue.  */
586   while (pc < lim_pc)
587     {
588       gdb_byte buf[frv_instr_size];
589       LONGEST op;
590
591       if (target_read_memory (pc, buf, sizeof buf) != 0)
592         break;
593       op = extract_signed_integer (buf, byte_order);
594
595       next_pc = pc + 4;
596
597       /* The tests in this chain of ifs should be in order of
598          decreasing selectivity, so that more particular patterns get
599          to fire before less particular patterns.  */
600
601       /* Some sort of control transfer instruction: stop scanning prologue.
602          Integer Conditional Branch:
603           X XXXX XX 0000110 XX XXXXXXXXXXXXXXXX
604          Floating-point / media Conditional Branch:
605           X XXXX XX 0000111 XX XXXXXXXXXXXXXXXX
606          LCR Conditional Branch to LR
607           X XXXX XX 0001110 XX XX 001 X XXXXXXXXXX
608          Integer conditional Branches to LR
609           X XXXX XX 0001110 XX XX 010 X XXXXXXXXXX
610           X XXXX XX 0001110 XX XX 011 X XXXXXXXXXX
611          Floating-point/Media Branches to LR
612           X XXXX XX 0001110 XX XX 110 X XXXXXXXXXX
613           X XXXX XX 0001110 XX XX 111 X XXXXXXXXXX
614          Jump and Link
615           X XXXXX X 0001100 XXXXXX XXXXXX XXXXXX
616           X XXXXX X 0001101 XXXXXX XXXXXX XXXXXX
617          Call
618           X XXXXXX 0001111 XXXXXXXXXXXXXXXXXX
619          Return from Trap
620           X XXXXX X 0000101 XXXXXX XXXXXX XXXXXX
621          Integer Conditional Trap
622           X XXXX XX 0000100 XXXXXX XXXX 00 XXXXXX
623           X XXXX XX 0011100 XXXXXX XXXXXXXXXXXX
624          Floating-point /media Conditional Trap
625           X XXXX XX 0000100 XXXXXX XXXX 01 XXXXXX
626           X XXXX XX 0011101 XXXXXX XXXXXXXXXXXX
627          Break
628           X XXXX XX 0000100 XXXXXX XXXX 11 XXXXXX
629          Media Trap
630           X XXXX XX 0000100 XXXXXX XXXX 10 XXXXXX */
631       if ((op & 0x01d80000) == 0x00180000 /* Conditional branches and Call */
632           || (op & 0x01f80000) == 0x00300000  /* Jump and Link */
633           || (op & 0x01f80000) == 0x00100000  /* Return from Trap, Trap */
634           || (op & 0x01f80000) == 0x00700000) /* Trap immediate */
635         {
636           /* Stop scanning; not in prologue any longer.  */
637           break;
638         }
639
640       /* Loading something from memory into fp probably means that
641          we're in the epilogue.  Stop scanning the prologue.
642          ld @(GRi, GRk), fp
643          X 000010 0000010 XXXXXX 000100 XXXXXX
644          ldi @(GRi, d12), fp
645          X 000010 0110010 XXXXXX XXXXXXXXXXXX */
646       else if ((op & 0x7ffc0fc0) == 0x04080100
647                || (op & 0x7ffc0000) == 0x04c80000)
648         {
649           break;
650         }
651
652       /* Setting the FP from the SP:
653          ori sp, 0, fp
654          P 000010 0100010 000001 000000000000 = 0x04881000
655          0 111111 1111111 111111 111111111111 = 0x7fffffff
656              .    .   .    .   .    .   .   .
657          We treat this as part of the prologue.  */
658       else if ((op & 0x7fffffff) == 0x04881000)
659         {
660           fp_set = 1;
661           fp_offset = 0;
662           last_prologue_pc = next_pc;
663         }
664
665       /* Move the link register to the scratch register grJ, before saving:
666          movsg lr, grJ
667          P 000100 0000011 010000 000111 JJJJJJ = 0x080d01c0
668          0 111111 1111111 111111 111111 000000 = 0x7fffffc0
669              .    .   .    .   .    .    .   .
670          We treat this as part of the prologue.  */
671       else if ((op & 0x7fffffc0) == 0x080d01c0)
672         {
673           int gr_j = op & 0x3f;
674
675           /* If we're moving it to a scratch register, that's fine.  */
676           if (is_caller_saves_reg (gr_j))
677             {
678               lr_save_reg = gr_j;
679               last_prologue_pc = next_pc;
680             }
681         }
682
683       /* To save multiple callee-saves registers on the stack, at
684          offset zero:
685
686          std grK,@(sp,gr0)
687          P KKKKKK 0000011 000001 000011 000000 = 0x000c10c0
688          0 000000 1111111 111111 111111 111111 = 0x01ffffff
689
690          stq grK,@(sp,gr0)
691          P KKKKKK 0000011 000001 000100 000000 = 0x000c1100
692          0 000000 1111111 111111 111111 111111 = 0x01ffffff
693              .    .   .    .   .    .    .   .
694          We treat this as part of the prologue, and record the register's
695          saved address in the frame structure.  */
696       else if ((op & 0x01ffffff) == 0x000c10c0
697             || (op & 0x01ffffff) == 0x000c1100)
698         {
699           int gr_k = ((op >> 25) & 0x3f);
700           int ope  = ((op >> 6)  & 0x3f);
701           int count;
702           int i;
703
704           /* Is it an std or an stq?  */
705           if (ope == 0x03)
706             count = 2;
707           else
708             count = 4;
709
710           /* Is it really a callee-saves register?  */
711           if (is_callee_saves_reg (gr_k))
712             {
713               for (i = 0; i < count; i++)
714                 {
715                   gr_saved[gr_k + i] = 1;
716                   gr_sp_offset[gr_k + i] = 4 * i;
717                 }
718               last_prologue_pc = next_pc;
719             }
720         }
721
722       /* Adjusting the stack pointer.  (The stack pointer is GR1.)
723          addi sp, S, sp
724          P 000001 0010000 000001 SSSSSSSSSSSS = 0x02401000
725          0 111111 1111111 111111 000000000000 = 0x7ffff000
726              .    .   .    .   .    .   .   .
727          We treat this as part of the prologue.  */
728       else if ((op & 0x7ffff000) == 0x02401000)
729         {
730           if (framesize == 0)
731             {
732               /* Sign-extend the twelve-bit field.
733                  (Isn't there a better way to do this?)  */
734               int s = (((op & 0xfff) - 0x800) & 0xfff) - 0x800;
735
736               framesize -= s;
737               last_prologue_pc = pc;
738             }
739           else
740             {
741               /* If the prologue is being adjusted again, we've
742                  likely gone too far; i.e. we're probably in the
743                  epilogue.  */
744               break;
745             }
746         }
747
748       /* Setting the FP to a constant distance from the SP:
749          addi sp, S, fp
750          P 000010 0010000 000001 SSSSSSSSSSSS = 0x04401000
751          0 111111 1111111 111111 000000000000 = 0x7ffff000
752              .    .   .    .   .    .   .   .
753          We treat this as part of the prologue.  */
754       else if ((op & 0x7ffff000) == 0x04401000)
755         {
756           /* Sign-extend the twelve-bit field.
757              (Isn't there a better way to do this?)  */
758           int s = (((op & 0xfff) - 0x800) & 0xfff) - 0x800;
759           fp_set = 1;
760           fp_offset = s;
761           last_prologue_pc = pc;
762         }
763
764       /* To spill an argument register to a scratch register:
765             ori GRi, 0, GRk
766          P KKKKKK 0100010 IIIIII 000000000000 = 0x00880000
767          0 000000 1111111 000000 111111111111 = 0x01fc0fff
768              .    .   .    .   .    .   .   .
769          For the time being, we treat this as a prologue instruction,
770          assuming that GRi is an argument register.  This one's kind
771          of suspicious, because it seems like it could be part of a
772          legitimate body instruction.  But we only come here when the
773          source info wasn't helpful, so we have to do the best we can.
774          Hopefully once GCC and GDB agree on how to emit line number
775          info for prologues, then this code will never come into play.  */
776       else if ((op & 0x01fc0fff) == 0x00880000)
777         {
778           int gr_i = ((op >> 12) & 0x3f);
779
780           /* Make sure that the source is an arg register; if it is, we'll
781              treat it as a prologue instruction.  */
782           if (is_argument_reg (gr_i))
783             last_prologue_pc = next_pc;
784         }
785
786       /* To spill 16-bit values to the stack:
787              sthi GRk, @(fp, s)
788          P KKKKKK 1010001 000010 SSSSSSSSSSSS = 0x01442000
789          0 000000 1111111 111111 000000000000 = 0x01fff000
790              .    .   .    .   .    .   .   . 
791          And for 8-bit values, we use STB instructions.
792              stbi GRk, @(fp, s)
793          P KKKKKK 1010000 000010 SSSSSSSSSSSS = 0x01402000
794          0 000000 1111111 111111 000000000000 = 0x01fff000
795              .    .   .    .   .    .   .   .
796          We check that GRk is really an argument register, and treat
797          all such as part of the prologue.  */
798       else if (   (op & 0x01fff000) == 0x01442000
799                || (op & 0x01fff000) == 0x01402000)
800         {
801           int gr_k = ((op >> 25) & 0x3f);
802
803           /* Make sure that GRk is really an argument register; treat
804              it as a prologue instruction if so.  */
805           if (is_argument_reg (gr_k))
806             last_prologue_pc = next_pc;
807         }
808
809       /* To save multiple callee-saves register on the stack, at a
810          non-zero offset:
811
812          stdi GRk, @(sp, s)
813          P KKKKKK 1010011 000001 SSSSSSSSSSSS = 0x014c1000
814          0 000000 1111111 111111 000000000000 = 0x01fff000
815              .    .   .    .   .    .   .   .
816          stqi GRk, @(sp, s)
817          P KKKKKK 1010100 000001 SSSSSSSSSSSS = 0x01501000
818          0 000000 1111111 111111 000000000000 = 0x01fff000
819              .    .   .    .   .    .   .   .
820          We treat this as part of the prologue, and record the register's
821          saved address in the frame structure.  */
822       else if ((op & 0x01fff000) == 0x014c1000
823             || (op & 0x01fff000) == 0x01501000)
824         {
825           int gr_k = ((op >> 25) & 0x3f);
826           int count;
827           int i;
828
829           /* Is it a stdi or a stqi?  */
830           if ((op & 0x01fff000) == 0x014c1000)
831             count = 2;
832           else
833             count = 4;
834
835           /* Is it really a callee-saves register?  */
836           if (is_callee_saves_reg (gr_k))
837             {
838               /* Sign-extend the twelve-bit field.
839                  (Isn't there a better way to do this?)  */
840               int s = (((op & 0xfff) - 0x800) & 0xfff) - 0x800;
841
842               for (i = 0; i < count; i++)
843                 {
844                   gr_saved[gr_k + i] = 1;
845                   gr_sp_offset[gr_k + i] = s + (4 * i);
846                 }
847               last_prologue_pc = next_pc;
848             }
849         }
850
851       /* Storing any kind of integer register at any constant offset
852          from any other register.
853
854          st GRk, @(GRi, gr0)
855          P KKKKKK 0000011 IIIIII 000010 000000 = 0x000c0080
856          0 000000 1111111 000000 111111 111111 = 0x01fc0fff
857              .    .   .    .   .    .    .   .
858          sti GRk, @(GRi, d12)
859          P KKKKKK 1010010 IIIIII SSSSSSSSSSSS = 0x01480000
860          0 000000 1111111 000000 000000000000 = 0x01fc0000
861              .    .   .    .   .    .   .   .
862          These could be almost anything, but a lot of prologue
863          instructions fall into this pattern, so let's decode the
864          instruction once, and then work at a higher level.  */
865       else if (((op & 0x01fc0fff) == 0x000c0080)
866             || ((op & 0x01fc0000) == 0x01480000))
867         {
868           int gr_k = ((op >> 25) & 0x3f);
869           int gr_i = ((op >> 12) & 0x3f);
870           int offset;
871
872           /* Are we storing with gr0 as an offset, or using an
873              immediate value?  */
874           if ((op & 0x01fc0fff) == 0x000c0080)
875             offset = 0;
876           else
877             offset = (((op & 0xfff) - 0x800) & 0xfff) - 0x800;
878
879           /* If the address isn't relative to the SP or FP, it's not a
880              prologue instruction.  */
881           if (gr_i != sp_regnum && gr_i != fp_regnum)
882             {
883               /* Do nothing; not a prologue instruction.  */
884             }
885
886           /* Saving the old FP in the new frame (relative to the SP).  */
887           else if (gr_k == fp_regnum && gr_i == sp_regnum)
888             {
889               gr_saved[fp_regnum] = 1;
890               gr_sp_offset[fp_regnum] = offset;
891               last_prologue_pc = next_pc;
892             }
893
894           /* Saving callee-saves register(s) on the stack, relative to
895              the SP.  */
896           else if (gr_i == sp_regnum
897                    && is_callee_saves_reg (gr_k))
898             {
899               gr_saved[gr_k] = 1;
900               if (gr_i == sp_regnum)
901                 gr_sp_offset[gr_k] = offset;
902               else
903                 gr_sp_offset[gr_k] = offset + fp_offset;
904               last_prologue_pc = next_pc;
905             }
906
907           /* Saving the scratch register holding the return address.  */
908           else if (lr_save_reg != -1
909                    && gr_k == lr_save_reg)
910             {
911               lr_saved_on_stack = 1;
912               if (gr_i == sp_regnum)
913                 lr_sp_offset = offset;
914               else
915                 lr_sp_offset = offset + fp_offset;
916               last_prologue_pc = next_pc;
917             }
918
919           /* Spilling int-sized arguments to the stack.  */
920           else if (is_argument_reg (gr_k))
921             last_prologue_pc = next_pc;
922         }
923       pc = next_pc;
924     }
925
926   if (this_frame && info)
927     {
928       int i;
929       ULONGEST this_base;
930
931       /* If we know the relationship between the stack and frame
932          pointers, record the addresses of the registers we noticed.
933          Note that we have to do this as a separate step at the end,
934          because instructions may save relative to the SP, but we need
935          their addresses relative to the FP.  */
936       if (fp_set)
937         this_base = get_frame_register_unsigned (this_frame, fp_regnum);
938       else
939         this_base = get_frame_register_unsigned (this_frame, sp_regnum);
940
941       for (i = 0; i < 64; i++)
942         if (gr_saved[i])
943           info->saved_regs[i].set_addr (this_base - fp_offset
944                                         + gr_sp_offset[i]);
945
946       info->prev_sp = this_base - fp_offset + framesize;
947       info->base = this_base;
948
949       /* If LR was saved on the stack, record its location.  */
950       if (lr_saved_on_stack)
951         info->saved_regs[lr_regnum].set_addr (this_base - fp_offset
952                                               + lr_sp_offset);
953
954       /* The call instruction moves the caller's PC in the callee's LR.
955          Since this is an unwind, do the reverse.  Copy the location of LR
956          into PC (the address / regnum) so that a request for PC will be
957          converted into a request for the LR.  */
958       info->saved_regs[pc_regnum] = info->saved_regs[lr_regnum];
959
960       /* Save the previous frame's computed SP value.  */
961       info->saved_regs[sp_regnum].set_value (info->prev_sp);
962     }
963
964   return last_prologue_pc;
965 }
966
967
968 static CORE_ADDR
969 frv_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
970 {
971   CORE_ADDR func_addr, func_end, new_pc;
972
973   new_pc = pc;
974
975   /* If the line table has entry for a line *within* the function
976      (i.e., not in the prologue, and not past the end), then that's
977      our location.  */
978   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
979     {
980       struct symtab_and_line sal;
981
982       sal = find_pc_line (func_addr, 0);
983
984       if (sal.line != 0 && sal.end < func_end)
985         {
986           new_pc = sal.end;
987         }
988     }
989
990   /* The FR-V prologue is at least five instructions long (twenty bytes).
991      If we didn't find a real source location past that, then
992      do a full analysis of the prologue.  */
993   if (new_pc < pc + 20)
994     new_pc = frv_analyze_prologue (gdbarch, pc, 0, 0);
995
996   return new_pc;
997 }
998
999
1000 /* Examine the instruction pointed to by PC.  If it corresponds to
1001    a call to __main, return the address of the next instruction.
1002    Otherwise, return PC.  */
1003
1004 static CORE_ADDR
1005 frv_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1006 {
1007   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1008   gdb_byte buf[4];
1009   unsigned long op;
1010   CORE_ADDR orig_pc = pc;
1011
1012   if (target_read_memory (pc, buf, 4))
1013     return pc;
1014   op = extract_unsigned_integer (buf, 4, byte_order);
1015
1016   /* In PIC code, GR15 may be loaded from some offset off of FP prior
1017      to the call instruction.
1018      
1019      Skip over this instruction if present.  It won't be present in
1020      non-PIC code, and even in PIC code, it might not be present.
1021      (This is due to the fact that GR15, the FDPIC register, already
1022      contains the correct value.)
1023
1024      The general form of the LDI is given first, followed by the
1025      specific instruction with the GRi and GRk filled in as FP and
1026      GR15.
1027
1028      ldi @(GRi, d12), GRk
1029      P KKKKKK 0110010 IIIIII SSSSSSSSSSSS = 0x00c80000
1030      0 000000 1111111 000000 000000000000 = 0x01fc0000
1031          .    .   .    .   .    .   .   .
1032      ldi @(FP, d12), GR15
1033      P KKKKKK 0110010 IIIIII SSSSSSSSSSSS = 0x1ec82000
1034      0 001111 1111111 000010 000000000000 = 0x7ffff000
1035          .    .   .    .   .    .   .   .               */
1036
1037   if ((op & 0x7ffff000) == 0x1ec82000)
1038     {
1039       pc += 4;
1040       if (target_read_memory (pc, buf, 4))
1041         return orig_pc;
1042       op = extract_unsigned_integer (buf, 4, byte_order);
1043     }
1044
1045   /* The format of an FRV CALL instruction is as follows:
1046
1047      call label24
1048      P HHHHHH 0001111 LLLLLLLLLLLLLLLLLL = 0x003c0000
1049      0 000000 1111111 000000000000000000 = 0x01fc0000
1050          .    .   .    .   .   .   .   .
1051
1052      where label24 is constructed by concatenating the H bits with the
1053      L bits.  The call target is PC + (4 * sign_ext(label24)).  */
1054
1055   if ((op & 0x01fc0000) == 0x003c0000)
1056     {
1057       LONGEST displ;
1058       CORE_ADDR call_dest;
1059       struct bound_minimal_symbol s;
1060
1061       displ = ((op & 0xfe000000) >> 7) | (op & 0x0003ffff);
1062       if ((displ & 0x00800000) != 0)
1063         displ |= ~((LONGEST) 0x00ffffff);
1064
1065       call_dest = pc + 4 * displ;
1066       s = lookup_minimal_symbol_by_pc (call_dest);
1067
1068       if (s.minsym != NULL
1069           && s.minsym->linkage_name () != NULL
1070           && strcmp (s.minsym->linkage_name (), "__main") == 0)
1071         {
1072           pc += 4;
1073           return pc;
1074         }
1075     }
1076   return orig_pc;
1077 }
1078
1079
1080 static struct frv_unwind_cache *
1081 frv_frame_unwind_cache (frame_info_ptr this_frame,
1082                          void **this_prologue_cache)
1083 {
1084   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1085   struct frv_unwind_cache *info;
1086
1087   if ((*this_prologue_cache))
1088     return (struct frv_unwind_cache *) (*this_prologue_cache);
1089
1090   info = FRAME_OBSTACK_ZALLOC (struct frv_unwind_cache);
1091   (*this_prologue_cache) = info;
1092   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1093
1094   /* Prologue analysis does the rest...  */
1095   frv_analyze_prologue (gdbarch,
1096                         get_frame_func (this_frame), this_frame, info);
1097
1098   return info;
1099 }
1100
1101 static void
1102 frv_extract_return_value (struct type *type, struct regcache *regcache,
1103                           gdb_byte *valbuf)
1104 {
1105   struct gdbarch *gdbarch = regcache->arch ();
1106   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1107   int len = type->length ();
1108
1109   if (len <= 4)
1110     {
1111       ULONGEST gpr8_val;
1112       regcache_cooked_read_unsigned (regcache, 8, &gpr8_val);
1113       store_unsigned_integer (valbuf, len, byte_order, gpr8_val);
1114     }
1115   else if (len == 8)
1116     {
1117       ULONGEST regval;
1118
1119       regcache_cooked_read_unsigned (regcache, 8, &regval);
1120       store_unsigned_integer (valbuf, 4, byte_order, regval);
1121       regcache_cooked_read_unsigned (regcache, 9, &regval);
1122       store_unsigned_integer ((bfd_byte *) valbuf + 4, 4, byte_order, regval);
1123     }
1124   else
1125     internal_error (_("Illegal return value length: %d"), len);
1126 }
1127
1128 static CORE_ADDR
1129 frv_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1130 {
1131   /* Require dword alignment.  */
1132   return align_down (sp, 8);
1133 }
1134
1135 static CORE_ADDR
1136 find_func_descr (struct gdbarch *gdbarch, CORE_ADDR entry_point)
1137 {
1138   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1139   CORE_ADDR descr;
1140   gdb_byte valbuf[4];
1141   CORE_ADDR start_addr;
1142
1143   /* If we can't find the function in the symbol table, then we assume
1144      that the function address is already in descriptor form.  */
1145   if (!find_pc_partial_function (entry_point, NULL, &start_addr, NULL)
1146       || entry_point != start_addr)
1147     return entry_point;
1148
1149   descr = frv_fdpic_find_canonical_descriptor (entry_point);
1150
1151   if (descr != 0)
1152     return descr;
1153
1154   /* Construct a non-canonical descriptor from space allocated on
1155      the stack.  */
1156
1157   descr = value_as_long (value_allocate_space_in_inferior (8));
1158   store_unsigned_integer (valbuf, 4, byte_order, entry_point);
1159   write_memory (descr, valbuf, 4);
1160   store_unsigned_integer (valbuf, 4, byte_order,
1161                           frv_fdpic_find_global_pointer (entry_point));
1162   write_memory (descr + 4, valbuf, 4);
1163   return descr;
1164 }
1165
1166 static CORE_ADDR
1167 frv_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
1168                                 struct target_ops *targ)
1169 {
1170   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1171   CORE_ADDR entry_point;
1172   CORE_ADDR got_address;
1173
1174   entry_point = get_target_memory_unsigned (targ, addr, 4, byte_order);
1175   got_address = get_target_memory_unsigned (targ, addr + 4, 4, byte_order);
1176
1177   if (got_address == frv_fdpic_find_global_pointer (entry_point))
1178     return entry_point;
1179   else
1180     return addr;
1181 }
1182
1183 static CORE_ADDR
1184 frv_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1185                      struct regcache *regcache, CORE_ADDR bp_addr,
1186                      int nargs, struct value **args, CORE_ADDR sp,
1187                      function_call_return_method return_method,
1188                      CORE_ADDR struct_addr)
1189 {
1190   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1191   int argreg;
1192   int argnum;
1193   const gdb_byte *val;
1194   gdb_byte valbuf[4];
1195   struct value *arg;
1196   struct type *arg_type;
1197   int len;
1198   enum type_code typecode;
1199   CORE_ADDR regval;
1200   int stack_space;
1201   int stack_offset;
1202   enum frv_abi abi = frv_abi (gdbarch);
1203   CORE_ADDR func_addr = find_function_addr (function, NULL);
1204
1205 #if 0
1206   printf("Push %d args at sp = %x, struct_return=%d (%x)\n",
1207          nargs, (int) sp, struct_return, struct_addr);
1208 #endif
1209
1210   stack_space = 0;
1211   for (argnum = 0; argnum < nargs; ++argnum)
1212     stack_space += align_up (value_type (args[argnum])->length (), 4);
1213
1214   stack_space -= (6 * 4);
1215   if (stack_space > 0)
1216     sp -= stack_space;
1217
1218   /* Make sure stack is dword aligned.  */
1219   sp = align_down (sp, 8);
1220
1221   stack_offset = 0;
1222
1223   argreg = 8;
1224
1225   if (return_method == return_method_struct)
1226     regcache_cooked_write_unsigned (regcache, struct_return_regnum,
1227                                     struct_addr);
1228
1229   for (argnum = 0; argnum < nargs; ++argnum)
1230     {
1231       arg = args[argnum];
1232       arg_type = check_typedef (value_type (arg));
1233       len = arg_type->length ();
1234       typecode = arg_type->code ();
1235
1236       if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
1237         {
1238           store_unsigned_integer (valbuf, 4, byte_order,
1239                                   value_address (arg));
1240           typecode = TYPE_CODE_PTR;
1241           len = 4;
1242           val = valbuf;
1243         }
1244       else if (abi == FRV_ABI_FDPIC
1245                && len == 4
1246                && typecode == TYPE_CODE_PTR
1247                && arg_type->target_type ()->code () == TYPE_CODE_FUNC)
1248         {
1249           /* The FDPIC ABI requires function descriptors to be passed instead
1250              of entry points.  */
1251           CORE_ADDR addr = extract_unsigned_integer
1252                              (value_contents (arg).data (), 4, byte_order);
1253           addr = find_func_descr (gdbarch, addr);
1254           store_unsigned_integer (valbuf, 4, byte_order, addr);
1255           typecode = TYPE_CODE_PTR;
1256           len = 4;
1257           val = valbuf;
1258         }
1259       else
1260         {
1261           val = value_contents (arg).data ();
1262         }
1263
1264       while (len > 0)
1265         {
1266           int partial_len = (len < 4 ? len : 4);
1267
1268           if (argreg < 14)
1269             {
1270               regval = extract_unsigned_integer (val, partial_len, byte_order);
1271 #if 0
1272               printf("  Argnum %d data %x -> reg %d\n",
1273                      argnum, (int) regval, argreg);
1274 #endif
1275               regcache_cooked_write_unsigned (regcache, argreg, regval);
1276               ++argreg;
1277             }
1278           else
1279             {
1280 #if 0
1281               printf("  Argnum %d data %x -> offset %d (%x)\n",
1282                      argnum, *((int *)val), stack_offset,
1283                      (int) (sp + stack_offset));
1284 #endif
1285               write_memory (sp + stack_offset, val, partial_len);
1286               stack_offset += align_up (partial_len, 4);
1287             }
1288           len -= partial_len;
1289           val += partial_len;
1290         }
1291     }
1292
1293   /* Set the return address.  For the frv, the return breakpoint is
1294      always at BP_ADDR.  */
1295   regcache_cooked_write_unsigned (regcache, lr_regnum, bp_addr);
1296
1297   if (abi == FRV_ABI_FDPIC)
1298     {
1299       /* Set the GOT register for the FDPIC ABI.  */
1300       regcache_cooked_write_unsigned
1301         (regcache, first_gpr_regnum + 15,
1302          frv_fdpic_find_global_pointer (func_addr));
1303     }
1304
1305   /* Finally, update the SP register.  */
1306   regcache_cooked_write_unsigned (regcache, sp_regnum, sp);
1307
1308   return sp;
1309 }
1310
1311 static void
1312 frv_store_return_value (struct type *type, struct regcache *regcache,
1313                         const gdb_byte *valbuf)
1314 {
1315   int len = type->length ();
1316
1317   if (len <= 4)
1318     {
1319       bfd_byte val[4];
1320       memset (val, 0, sizeof (val));
1321       memcpy (val + (4 - len), valbuf, len);
1322       regcache->cooked_write (8, val);
1323     }
1324   else if (len == 8)
1325     {
1326       regcache->cooked_write (8, valbuf);
1327       regcache->cooked_write (9, (bfd_byte *) valbuf + 4);
1328     }
1329   else
1330     internal_error (_("Don't know how to return a %d-byte value."), len);
1331 }
1332
1333 static enum return_value_convention
1334 frv_return_value (struct gdbarch *gdbarch, struct value *function,
1335                   struct type *valtype, struct regcache *regcache,
1336                   gdb_byte *readbuf, const gdb_byte *writebuf)
1337 {
1338   int struct_return = valtype->code () == TYPE_CODE_STRUCT
1339                       || valtype->code () == TYPE_CODE_UNION
1340                       || valtype->code () == TYPE_CODE_ARRAY;
1341
1342   if (writebuf != NULL)
1343     {
1344       gdb_assert (!struct_return);
1345       frv_store_return_value (valtype, regcache, writebuf);
1346     }
1347
1348   if (readbuf != NULL)
1349     {
1350       gdb_assert (!struct_return);
1351       frv_extract_return_value (valtype, regcache, readbuf);
1352     }
1353
1354   if (struct_return)
1355     return RETURN_VALUE_STRUCT_CONVENTION;
1356   else
1357     return RETURN_VALUE_REGISTER_CONVENTION;
1358 }
1359
1360 /* Given a GDB frame, determine the address of the calling function's
1361    frame.  This will be used to create a new GDB frame struct.  */
1362
1363 static void
1364 frv_frame_this_id (frame_info_ptr this_frame,
1365                     void **this_prologue_cache, struct frame_id *this_id)
1366 {
1367   struct frv_unwind_cache *info
1368     = frv_frame_unwind_cache (this_frame, this_prologue_cache);
1369   CORE_ADDR base;
1370   CORE_ADDR func;
1371   struct bound_minimal_symbol msym_stack;
1372   struct frame_id id;
1373
1374   /* The FUNC is easy.  */
1375   func = get_frame_func (this_frame);
1376
1377   /* Check if the stack is empty.  */
1378   msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
1379   if (msym_stack.minsym && info->base == msym_stack.value_address ())
1380     return;
1381
1382   /* Hopefully the prologue analysis either correctly determined the
1383      frame's base (which is the SP from the previous frame), or set
1384      that base to "NULL".  */
1385   base = info->prev_sp;
1386   if (base == 0)
1387     return;
1388
1389   id = frame_id_build (base, func);
1390   (*this_id) = id;
1391 }
1392
1393 static struct value *
1394 frv_frame_prev_register (frame_info_ptr this_frame,
1395                          void **this_prologue_cache, int regnum)
1396 {
1397   struct frv_unwind_cache *info
1398     = frv_frame_unwind_cache (this_frame, this_prologue_cache);
1399   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
1400 }
1401
1402 static const struct frame_unwind frv_frame_unwind = {
1403   "frv prologue",
1404   NORMAL_FRAME,
1405   default_frame_unwind_stop_reason,
1406   frv_frame_this_id,
1407   frv_frame_prev_register,
1408   NULL,
1409   default_frame_sniffer
1410 };
1411
1412 static CORE_ADDR
1413 frv_frame_base_address (frame_info_ptr this_frame, void **this_cache)
1414 {
1415   struct frv_unwind_cache *info
1416     = frv_frame_unwind_cache (this_frame, this_cache);
1417   return info->base;
1418 }
1419
1420 static const struct frame_base frv_frame_base = {
1421   &frv_frame_unwind,
1422   frv_frame_base_address,
1423   frv_frame_base_address,
1424   frv_frame_base_address
1425 };
1426
1427 static struct gdbarch *
1428 frv_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1429 {
1430   struct gdbarch *gdbarch;
1431   int elf_flags = 0;
1432
1433   /* Check to see if we've already built an appropriate architecture
1434      object for this executable.  */
1435   arches = gdbarch_list_lookup_by_info (arches, &info);
1436   if (arches)
1437     return arches->gdbarch;
1438
1439   /* Select the right tdep structure for this variant.  */
1440   frv_gdbarch_tdep *var = new_variant ();
1441   switch (info.bfd_arch_info->mach)
1442     {
1443     case bfd_mach_frv:
1444     case bfd_mach_frvsimple:
1445     case bfd_mach_fr300:
1446     case bfd_mach_fr500:
1447     case bfd_mach_frvtomcat:
1448     case bfd_mach_fr550:
1449       set_variant_num_gprs (var, 64);
1450       set_variant_num_fprs (var, 64);
1451       break;
1452
1453     case bfd_mach_fr400:
1454     case bfd_mach_fr450:
1455       set_variant_num_gprs (var, 32);
1456       set_variant_num_fprs (var, 32);
1457       break;
1458
1459     default:
1460       /* Never heard of this variant.  */
1461       return 0;
1462     }
1463
1464   /* Extract the ELF flags, if available.  */
1465   if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
1466     elf_flags = elf_elfheader (info.abfd)->e_flags;
1467
1468   if (elf_flags & EF_FRV_FDPIC)
1469     set_variant_abi_fdpic (var);
1470
1471   if (elf_flags & EF_FRV_CPU_FR450)
1472     set_variant_scratch_registers (var);
1473
1474   gdbarch = gdbarch_alloc (&info, var);
1475
1476   set_gdbarch_short_bit (gdbarch, 16);
1477   set_gdbarch_int_bit (gdbarch, 32);
1478   set_gdbarch_long_bit (gdbarch, 32);
1479   set_gdbarch_long_long_bit (gdbarch, 64);
1480   set_gdbarch_float_bit (gdbarch, 32);
1481   set_gdbarch_double_bit (gdbarch, 64);
1482   set_gdbarch_long_double_bit (gdbarch, 64);
1483   set_gdbarch_ptr_bit (gdbarch, 32);
1484
1485   set_gdbarch_num_regs (gdbarch, frv_num_regs);
1486   set_gdbarch_num_pseudo_regs (gdbarch, frv_num_pseudo_regs);
1487
1488   set_gdbarch_sp_regnum (gdbarch, sp_regnum);
1489   set_gdbarch_deprecated_fp_regnum (gdbarch, fp_regnum);
1490   set_gdbarch_pc_regnum (gdbarch, pc_regnum);
1491
1492   set_gdbarch_register_name (gdbarch, frv_register_name);
1493   set_gdbarch_register_type (gdbarch, frv_register_type);
1494   set_gdbarch_register_sim_regno (gdbarch, frv_register_sim_regno);
1495
1496   set_gdbarch_pseudo_register_read (gdbarch, frv_pseudo_register_read);
1497   set_gdbarch_pseudo_register_write (gdbarch, frv_pseudo_register_write);
1498
1499   set_gdbarch_skip_prologue (gdbarch, frv_skip_prologue);
1500   set_gdbarch_skip_main_prologue (gdbarch, frv_skip_main_prologue);
1501   set_gdbarch_breakpoint_kind_from_pc (gdbarch, frv_breakpoint::kind_from_pc);
1502   set_gdbarch_sw_breakpoint_from_kind (gdbarch, frv_breakpoint::bp_from_kind);
1503   set_gdbarch_adjust_breakpoint_address
1504     (gdbarch, frv_adjust_breakpoint_address);
1505
1506   set_gdbarch_return_value (gdbarch, frv_return_value);
1507
1508   /* Frame stuff.  */
1509   set_gdbarch_frame_align (gdbarch, frv_frame_align);
1510   frame_base_set_default (gdbarch, &frv_frame_base);
1511   /* We set the sniffer lower down after the OSABI hooks have been
1512      established.  */
1513
1514   /* Settings for calling functions in the inferior.  */
1515   set_gdbarch_push_dummy_call (gdbarch, frv_push_dummy_call);
1516
1517   /* Settings that should be unnecessary.  */
1518   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1519
1520   /* Hardware watchpoint / breakpoint support.  */
1521   switch (info.bfd_arch_info->mach)
1522     {
1523     case bfd_mach_frv:
1524     case bfd_mach_frvsimple:
1525     case bfd_mach_fr300:
1526     case bfd_mach_fr500:
1527     case bfd_mach_frvtomcat:
1528       /* fr500-style hardware debugging support.  */
1529       var->num_hw_watchpoints = 4;
1530       var->num_hw_breakpoints = 4;
1531       break;
1532
1533     case bfd_mach_fr400:
1534     case bfd_mach_fr450:
1535       /* fr400-style hardware debugging support.  */
1536       var->num_hw_watchpoints = 2;
1537       var->num_hw_breakpoints = 4;
1538       break;
1539
1540     default:
1541       /* Otherwise, assume we don't have hardware debugging support.  */
1542       var->num_hw_watchpoints = 0;
1543       var->num_hw_breakpoints = 0;
1544       break;
1545     }
1546
1547   if (frv_abi (gdbarch) == FRV_ABI_FDPIC)
1548     set_gdbarch_convert_from_func_ptr_addr (gdbarch,
1549                                             frv_convert_from_func_ptr_addr);
1550
1551   set_gdbarch_so_ops (gdbarch, &frv_so_ops);
1552
1553   /* Hook in ABI-specific overrides, if they have been registered.  */
1554   gdbarch_init_osabi (info, gdbarch);
1555
1556   /* Set the fallback (prologue based) frame sniffer.  */
1557   frame_unwind_append_unwinder (gdbarch, &frv_frame_unwind);
1558
1559   /* Enable TLS support.  */
1560   set_gdbarch_fetch_tls_load_module_address (gdbarch,
1561                                              frv_fetch_objfile_link_map);
1562
1563   return gdbarch;
1564 }
1565
1566 void _initialize_frv_tdep ();
1567 void
1568 _initialize_frv_tdep ()
1569 {
1570   gdbarch_register (bfd_arch_frv, frv_gdbarch_init);
1571 }