xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/rx-tdep.c (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /* Target-dependent code for the Renesas RX for GDB, the GNU debugger.
2 
3    Copyright (C) 2008-2016 Free Software Foundation, Inc.
4 
5    Contributed by Red Hat, 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 3 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, see <http://www.gnu.org/licenses/>.  */
21 
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "prologue-value.h"
25 #include "target.h"
26 #include "regcache.h"
27 #include "opcode/rx.h"
28 #include "dis-asm.h"
29 #include "gdbtypes.h"
30 #include "frame.h"
31 #include "frame-unwind.h"
32 #include "frame-base.h"
33 #include "value.h"
34 #include "gdbcore.h"
35 #include "dwarf2-frame.h"
36 
37 #include "elf/rx.h"
38 #include "elf-bfd.h"
39 
40 /* Certain important register numbers.  */
41 enum
42 {
43   RX_SP_REGNUM = 0,
44   RX_R1_REGNUM = 1,
45   RX_R4_REGNUM = 4,
46   RX_FP_REGNUM = 6,
47   RX_R15_REGNUM = 15,
48   RX_USP_REGNUM = 16,
49   RX_PSW_REGNUM = 18,
50   RX_PC_REGNUM = 19,
51   RX_BPSW_REGNUM = 21,
52   RX_BPC_REGNUM = 22,
53   RX_FPSW_REGNUM = 24,
54   RX_ACC_REGNUM = 25,
55   RX_NUM_REGS = 26
56 };
57 
58 /* RX frame types.  */
59 enum rx_frame_type {
60   RX_FRAME_TYPE_NORMAL,
61   RX_FRAME_TYPE_EXCEPTION,
62   RX_FRAME_TYPE_FAST_INTERRUPT
63 };
64 
65 /* Architecture specific data.  */
66 struct gdbarch_tdep
67 {
68   /* The ELF header flags specify the multilib used.  */
69   int elf_flags;
70 
71   /* Type of PSW and BPSW.  */
72   struct type *rx_psw_type;
73 
74   /* Type of FPSW.  */
75   struct type *rx_fpsw_type;
76 };
77 
78 /* This structure holds the results of a prologue analysis.  */
79 struct rx_prologue
80 {
81   /* Frame type, either a normal frame or one of two types of exception
82      frames.  */
83   enum rx_frame_type frame_type;
84 
85   /* The offset from the frame base to the stack pointer --- always
86      zero or negative.
87 
88      Calling this a "size" is a bit misleading, but given that the
89      stack grows downwards, using offsets for everything keeps one
90      from going completely sign-crazy: you never change anything's
91      sign for an ADD instruction; always change the second operand's
92      sign for a SUB instruction; and everything takes care of
93      itself.  */
94   int frame_size;
95 
96   /* Non-zero if this function has initialized the frame pointer from
97      the stack pointer, zero otherwise.  */
98   int has_frame_ptr;
99 
100   /* If has_frame_ptr is non-zero, this is the offset from the frame
101      base to where the frame pointer points.  This is always zero or
102      negative.  */
103   int frame_ptr_offset;
104 
105   /* The address of the first instruction at which the frame has been
106      set up and the arguments are where the debug info says they are
107      --- as best as we can tell.  */
108   CORE_ADDR prologue_end;
109 
110   /* reg_offset[R] is the offset from the CFA at which register R is
111      saved, or 1 if register R has not been saved.  (Real values are
112      always zero or negative.)  */
113   int reg_offset[RX_NUM_REGS];
114 };
115 
116 /* Implement the "register_name" gdbarch method.  */
117 static const char *
118 rx_register_name (struct gdbarch *gdbarch, int regnr)
119 {
120   static const char *const reg_names[] = {
121     "r0",
122     "r1",
123     "r2",
124     "r3",
125     "r4",
126     "r5",
127     "r6",
128     "r7",
129     "r8",
130     "r9",
131     "r10",
132     "r11",
133     "r12",
134     "r13",
135     "r14",
136     "r15",
137     "usp",
138     "isp",
139     "psw",
140     "pc",
141     "intb",
142     "bpsw",
143     "bpc",
144     "fintv",
145     "fpsw",
146     "acc"
147   };
148 
149   return reg_names[regnr];
150 }
151 
152 /* Implement the "register_type" gdbarch method.  */
153 static struct type *
154 rx_register_type (struct gdbarch *gdbarch, int reg_nr)
155 {
156   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
157 
158   if (reg_nr == RX_PC_REGNUM)
159     return builtin_type (gdbarch)->builtin_func_ptr;
160   else if (reg_nr == RX_PSW_REGNUM || reg_nr == RX_BPSW_REGNUM)
161     return tdep->rx_psw_type;
162   else if (reg_nr == RX_FPSW_REGNUM)
163     return tdep->rx_fpsw_type;
164   else if (reg_nr == RX_ACC_REGNUM)
165     return builtin_type (gdbarch)->builtin_unsigned_long_long;
166   else
167     return builtin_type (gdbarch)->builtin_unsigned_long;
168 }
169 
170 
171 /* Function for finding saved registers in a 'struct pv_area'; this
172    function is passed to pv_area_scan.
173 
174    If VALUE is a saved register, ADDR says it was saved at a constant
175    offset from the frame base, and SIZE indicates that the whole
176    register was saved, record its offset.  */
177 static void
178 check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
179 {
180   struct rx_prologue *result = (struct rx_prologue *) result_untyped;
181 
182   if (value.kind == pvk_register
183       && value.k == 0
184       && pv_is_register (addr, RX_SP_REGNUM)
185       && size == register_size (target_gdbarch (), value.reg))
186     result->reg_offset[value.reg] = addr.k;
187 }
188 
189 /* Define a "handle" struct for fetching the next opcode.  */
190 struct rx_get_opcode_byte_handle
191 {
192   CORE_ADDR pc;
193 };
194 
195 /* Fetch a byte on behalf of the opcode decoder.  HANDLE contains
196    the memory address of the next byte to fetch.  If successful,
197    the address in the handle is updated and the byte fetched is
198    returned as the value of the function.  If not successful, -1
199    is returned.  */
200 static int
201 rx_get_opcode_byte (void *handle)
202 {
203   struct rx_get_opcode_byte_handle *opcdata
204     = (struct rx_get_opcode_byte_handle *) handle;
205   int status;
206   gdb_byte byte;
207 
208   status = target_read_code (opcdata->pc, &byte, 1);
209   if (status == 0)
210     {
211       opcdata->pc += 1;
212       return byte;
213     }
214   else
215     return -1;
216 }
217 
218 /* Analyze a prologue starting at START_PC, going no further than
219    LIMIT_PC.  Fill in RESULT as appropriate.  */
220 
221 static void
222 rx_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc,
223                      enum rx_frame_type frame_type,
224 		     struct rx_prologue *result)
225 {
226   CORE_ADDR pc, next_pc;
227   int rn;
228   pv_t reg[RX_NUM_REGS];
229   struct pv_area *stack;
230   struct cleanup *back_to;
231   CORE_ADDR after_last_frame_setup_insn = start_pc;
232 
233   memset (result, 0, sizeof (*result));
234 
235   result->frame_type = frame_type;
236 
237   for (rn = 0; rn < RX_NUM_REGS; rn++)
238     {
239       reg[rn] = pv_register (rn, 0);
240       result->reg_offset[rn] = 1;
241     }
242 
243   stack = make_pv_area (RX_SP_REGNUM, gdbarch_addr_bit (target_gdbarch ()));
244   back_to = make_cleanup_free_pv_area (stack);
245 
246   if (frame_type == RX_FRAME_TYPE_FAST_INTERRUPT)
247     {
248       /* This code won't do anything useful at present, but this is
249          what happens for fast interrupts.  */
250       reg[RX_BPSW_REGNUM] = reg[RX_PSW_REGNUM];
251       reg[RX_BPC_REGNUM] = reg[RX_PC_REGNUM];
252     }
253   else
254     {
255       /* When an exception occurs, the PSW is saved to the interrupt stack
256          first.  */
257       if (frame_type == RX_FRAME_TYPE_EXCEPTION)
258 	{
259 	  reg[RX_SP_REGNUM] = pv_add_constant (reg[RX_SP_REGNUM], -4);
260 	  pv_area_store (stack, reg[RX_SP_REGNUM], 4, reg[RX_PSW_REGNUM]);
261 	}
262 
263       /* The call instruction (or an exception/interrupt) has saved the return
264           address on the stack.  */
265       reg[RX_SP_REGNUM] = pv_add_constant (reg[RX_SP_REGNUM], -4);
266       pv_area_store (stack, reg[RX_SP_REGNUM], 4, reg[RX_PC_REGNUM]);
267 
268     }
269 
270 
271   pc = start_pc;
272   while (pc < limit_pc)
273     {
274       int bytes_read;
275       struct rx_get_opcode_byte_handle opcode_handle;
276       RX_Opcode_Decoded opc;
277 
278       opcode_handle.pc = pc;
279       bytes_read = rx_decode_opcode (pc, &opc, rx_get_opcode_byte,
280 				     &opcode_handle);
281       next_pc = pc + bytes_read;
282 
283       if (opc.id == RXO_pushm	/* pushm r1, r2 */
284 	  && opc.op[1].type == RX_Operand_Register
285 	  && opc.op[2].type == RX_Operand_Register)
286 	{
287 	  int r1, r2;
288 	  int r;
289 
290 	  r1 = opc.op[1].reg;
291 	  r2 = opc.op[2].reg;
292 	  for (r = r2; r >= r1; r--)
293 	    {
294 	      reg[RX_SP_REGNUM] = pv_add_constant (reg[RX_SP_REGNUM], -4);
295 	      pv_area_store (stack, reg[RX_SP_REGNUM], 4, reg[r]);
296 	    }
297 	  after_last_frame_setup_insn = next_pc;
298 	}
299       else if (opc.id == RXO_mov	/* mov.l rdst, rsrc */
300 	       && opc.op[0].type == RX_Operand_Register
301 	       && opc.op[1].type == RX_Operand_Register
302 	       && opc.size == RX_Long)
303 	{
304 	  int rdst, rsrc;
305 
306 	  rdst = opc.op[0].reg;
307 	  rsrc = opc.op[1].reg;
308 	  reg[rdst] = reg[rsrc];
309 	  if (rdst == RX_FP_REGNUM && rsrc == RX_SP_REGNUM)
310 	    after_last_frame_setup_insn = next_pc;
311 	}
312       else if (opc.id == RXO_mov	/* mov.l rsrc, [-SP] */
313 	       && opc.op[0].type == RX_Operand_Predec
314 	       && opc.op[0].reg == RX_SP_REGNUM
315 	       && opc.op[1].type == RX_Operand_Register
316 	       && opc.size == RX_Long)
317 	{
318 	  int rsrc;
319 
320 	  rsrc = opc.op[1].reg;
321 	  reg[RX_SP_REGNUM] = pv_add_constant (reg[RX_SP_REGNUM], -4);
322 	  pv_area_store (stack, reg[RX_SP_REGNUM], 4, reg[rsrc]);
323 	  after_last_frame_setup_insn = next_pc;
324 	}
325       else if (opc.id == RXO_add	/* add #const, rsrc, rdst */
326 	       && opc.op[0].type == RX_Operand_Register
327 	       && opc.op[1].type == RX_Operand_Immediate
328 	       && opc.op[2].type == RX_Operand_Register)
329 	{
330 	  int rdst = opc.op[0].reg;
331 	  int addend = opc.op[1].addend;
332 	  int rsrc = opc.op[2].reg;
333 	  reg[rdst] = pv_add_constant (reg[rsrc], addend);
334 	  /* Negative adjustments to the stack pointer or frame pointer
335 	     are (most likely) part of the prologue.  */
336 	  if ((rdst == RX_SP_REGNUM || rdst == RX_FP_REGNUM) && addend < 0)
337 	    after_last_frame_setup_insn = next_pc;
338 	}
339       else if (opc.id == RXO_mov
340 	       && opc.op[0].type == RX_Operand_Indirect
341 	       && opc.op[1].type == RX_Operand_Register
342 	       && opc.size == RX_Long
343 	       && (opc.op[0].reg == RX_SP_REGNUM
344 		   || opc.op[0].reg == RX_FP_REGNUM)
345 	       && (RX_R1_REGNUM <= opc.op[1].reg
346 		   && opc.op[1].reg <= RX_R4_REGNUM))
347 	{
348 	  /* This moves an argument register to the stack.  Don't
349 	     record it, but allow it to be a part of the prologue.  */
350 	}
351       else if (opc.id == RXO_branch
352 	       && opc.op[0].type == RX_Operand_Immediate
353 	       && next_pc < opc.op[0].addend)
354 	{
355 	  /* When a loop appears as the first statement of a function
356 	     body, gcc 4.x will use a BRA instruction to branch to the
357 	     loop condition checking code.  This BRA instruction is
358 	     marked as part of the prologue.  We therefore set next_pc
359 	     to this branch target and also stop the prologue scan.
360 	     The instructions at and beyond the branch target should
361 	     no longer be associated with the prologue.
362 
363 	     Note that we only consider forward branches here.  We
364 	     presume that a forward branch is being used to skip over
365 	     a loop body.
366 
367 	     A backwards branch is covered by the default case below.
368 	     If we were to encounter a backwards branch, that would
369 	     most likely mean that we've scanned through a loop body.
370 	     We definitely want to stop the prologue scan when this
371 	     happens and that is precisely what is done by the default
372 	     case below.  */
373 
374 	  after_last_frame_setup_insn = opc.op[0].addend;
375 	  break;		/* Scan no further if we hit this case.  */
376 	}
377       else
378 	{
379 	  /* Terminate the prologue scan.  */
380 	  break;
381 	}
382 
383       pc = next_pc;
384     }
385 
386   /* Is the frame size (offset, really) a known constant?  */
387   if (pv_is_register (reg[RX_SP_REGNUM], RX_SP_REGNUM))
388     result->frame_size = reg[RX_SP_REGNUM].k;
389 
390   /* Was the frame pointer initialized?  */
391   if (pv_is_register (reg[RX_FP_REGNUM], RX_SP_REGNUM))
392     {
393       result->has_frame_ptr = 1;
394       result->frame_ptr_offset = reg[RX_FP_REGNUM].k;
395     }
396 
397   /* Record where all the registers were saved.  */
398   pv_area_scan (stack, check_for_saved, (void *) result);
399 
400   result->prologue_end = after_last_frame_setup_insn;
401 
402   do_cleanups (back_to);
403 }
404 
405 
406 /* Implement the "skip_prologue" gdbarch method.  */
407 static CORE_ADDR
408 rx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
409 {
410   const char *name;
411   CORE_ADDR func_addr, func_end;
412   struct rx_prologue p;
413 
414   /* Try to find the extent of the function that contains PC.  */
415   if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
416     return pc;
417 
418   /* The frame type doesn't matter here, since we only care about
419      where the prologue ends.  We'll use RX_FRAME_TYPE_NORMAL.  */
420   rx_analyze_prologue (pc, func_end, RX_FRAME_TYPE_NORMAL, &p);
421   return p.prologue_end;
422 }
423 
424 /* Given a frame described by THIS_FRAME, decode the prologue of its
425    associated function if there is not cache entry as specified by
426    THIS_PROLOGUE_CACHE.  Save the decoded prologue in the cache and
427    return that struct as the value of this function.  */
428 
429 static struct rx_prologue *
430 rx_analyze_frame_prologue (struct frame_info *this_frame,
431 			   enum rx_frame_type frame_type,
432 			   void **this_prologue_cache)
433 {
434   if (!*this_prologue_cache)
435     {
436       CORE_ADDR func_start, stop_addr;
437 
438       *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct rx_prologue);
439 
440       func_start = get_frame_func (this_frame);
441       stop_addr = get_frame_pc (this_frame);
442 
443       /* If we couldn't find any function containing the PC, then
444          just initialize the prologue cache, but don't do anything.  */
445       if (!func_start)
446 	stop_addr = func_start;
447 
448       rx_analyze_prologue (func_start, stop_addr, frame_type,
449 			   (struct rx_prologue *) *this_prologue_cache);
450     }
451 
452   return (struct rx_prologue *) *this_prologue_cache;
453 }
454 
455 /* Determine type of frame by scanning the function for a return
456    instruction.  */
457 
458 static enum rx_frame_type
459 rx_frame_type (struct frame_info *this_frame, void **this_cache)
460 {
461   const char *name;
462   CORE_ADDR pc, start_pc, lim_pc;
463   int bytes_read;
464   struct rx_get_opcode_byte_handle opcode_handle;
465   RX_Opcode_Decoded opc;
466 
467   gdb_assert (this_cache != NULL);
468 
469   /* If we have a cached value, return it.  */
470 
471   if (*this_cache != NULL)
472     {
473       struct rx_prologue *p = (struct rx_prologue *) *this_cache;
474 
475       return p->frame_type;
476     }
477 
478   /* No cached value; scan the function.  The frame type is cached in
479      rx_analyze_prologue / rx_analyze_frame_prologue.  */
480 
481   pc = get_frame_pc (this_frame);
482 
483   /* Attempt to find the last address in the function.  If it cannot
484      be determined, set the limit to be a short ways past the frame's
485      pc.  */
486   if (!find_pc_partial_function (pc, &name, &start_pc, &lim_pc))
487     lim_pc = pc + 20;
488 
489   while (pc < lim_pc)
490     {
491       opcode_handle.pc = pc;
492       bytes_read = rx_decode_opcode (pc, &opc, rx_get_opcode_byte,
493 				     &opcode_handle);
494 
495       if (bytes_read <= 0 || opc.id == RXO_rts)
496 	return RX_FRAME_TYPE_NORMAL;
497       else if (opc.id == RXO_rtfi)
498 	return RX_FRAME_TYPE_FAST_INTERRUPT;
499       else if (opc.id == RXO_rte)
500         return RX_FRAME_TYPE_EXCEPTION;
501 
502       pc += bytes_read;
503     }
504 
505   return RX_FRAME_TYPE_NORMAL;
506 }
507 
508 
509 /* Given the next frame and a prologue cache, return this frame's
510    base.  */
511 
512 static CORE_ADDR
513 rx_frame_base (struct frame_info *this_frame, void **this_cache)
514 {
515   enum rx_frame_type frame_type = rx_frame_type (this_frame, this_cache);
516   struct rx_prologue *p
517     = rx_analyze_frame_prologue (this_frame, frame_type, this_cache);
518 
519   /* In functions that use alloca, the distance between the stack
520      pointer and the frame base varies dynamically, so we can't use
521      the SP plus static information like prologue analysis to find the
522      frame base.  However, such functions must have a frame pointer,
523      to be able to restore the SP on exit.  So whenever we do have a
524      frame pointer, use that to find the base.  */
525   if (p->has_frame_ptr)
526     {
527       CORE_ADDR fp = get_frame_register_unsigned (this_frame, RX_FP_REGNUM);
528       return fp - p->frame_ptr_offset;
529     }
530   else
531     {
532       CORE_ADDR sp = get_frame_register_unsigned (this_frame, RX_SP_REGNUM);
533       return sp - p->frame_size;
534     }
535 }
536 
537 /* Implement the "frame_this_id" method for unwinding frames.  */
538 
539 static void
540 rx_frame_this_id (struct frame_info *this_frame, void **this_cache,
541                   struct frame_id *this_id)
542 {
543   *this_id = frame_id_build (rx_frame_base (this_frame, this_cache),
544 			     get_frame_func (this_frame));
545 }
546 
547 /* Implement the "frame_prev_register" method for unwinding frames.  */
548 
549 static struct value *
550 rx_frame_prev_register (struct frame_info *this_frame, void **this_cache,
551                         int regnum)
552 {
553   enum rx_frame_type frame_type = rx_frame_type (this_frame, this_cache);
554   struct rx_prologue *p
555     = rx_analyze_frame_prologue (this_frame, frame_type, this_cache);
556   CORE_ADDR frame_base = rx_frame_base (this_frame, this_cache);
557 
558   if (regnum == RX_SP_REGNUM)
559     {
560       if (frame_type == RX_FRAME_TYPE_EXCEPTION)
561         {
562 	  struct value *psw_val;
563 	  CORE_ADDR psw;
564 
565 	  psw_val = rx_frame_prev_register (this_frame, this_cache,
566 	                                    RX_PSW_REGNUM);
567 	  psw = extract_unsigned_integer (value_contents_all (psw_val), 4,
568 					  gdbarch_byte_order (
569 					    get_frame_arch (this_frame)));
570 
571 	  if ((psw & 0x20000 /* U bit */) != 0)
572 	    return rx_frame_prev_register (this_frame, this_cache,
573 	                                   RX_USP_REGNUM);
574 
575           /* Fall through for the case where U bit is zero.  */
576 	}
577 
578       return frame_unwind_got_constant (this_frame, regnum, frame_base);
579     }
580 
581   if (frame_type == RX_FRAME_TYPE_FAST_INTERRUPT)
582     {
583       if (regnum == RX_PC_REGNUM)
584         return rx_frame_prev_register (this_frame, this_cache,
585 	                               RX_BPC_REGNUM);
586       if (regnum == RX_PSW_REGNUM)
587         return rx_frame_prev_register (this_frame, this_cache,
588 	                               RX_BPSW_REGNUM);
589     }
590 
591   /* If prologue analysis says we saved this register somewhere,
592      return a description of the stack slot holding it.  */
593   if (p->reg_offset[regnum] != 1)
594     return frame_unwind_got_memory (this_frame, regnum,
595 				    frame_base + p->reg_offset[regnum]);
596 
597   /* Otherwise, presume we haven't changed the value of this
598      register, and get it from the next frame.  */
599   return frame_unwind_got_register (this_frame, regnum, regnum);
600 }
601 
602 /* Return TRUE if the frame indicated by FRAME_TYPE is a normal frame.  */
603 
604 static int
605 normal_frame_p (enum rx_frame_type frame_type)
606 {
607   return (frame_type == RX_FRAME_TYPE_NORMAL);
608 }
609 
610 /* Return TRUE if the frame indicated by FRAME_TYPE is an exception
611    frame.  */
612 
613 static int
614 exception_frame_p (enum rx_frame_type frame_type)
615 {
616   return (frame_type == RX_FRAME_TYPE_EXCEPTION
617           || frame_type == RX_FRAME_TYPE_FAST_INTERRUPT);
618 }
619 
620 /* Common code used by both normal and exception frame sniffers.  */
621 
622 static int
623 rx_frame_sniffer_common (const struct frame_unwind *self,
624                          struct frame_info *this_frame,
625 			 void **this_cache,
626 			 int (*sniff_p)(enum rx_frame_type) )
627 {
628   gdb_assert (this_cache != NULL);
629 
630   if (*this_cache == NULL)
631     {
632       enum rx_frame_type frame_type = rx_frame_type (this_frame, this_cache);
633 
634       if (sniff_p (frame_type))
635         {
636 	  /* The call below will fill in the cache, including the frame
637 	     type.  */
638 	  (void) rx_analyze_frame_prologue (this_frame, frame_type, this_cache);
639 
640 	  return 1;
641         }
642       else
643         return 0;
644     }
645   else
646     {
647       struct rx_prologue *p = (struct rx_prologue *) *this_cache;
648 
649       return sniff_p (p->frame_type);
650     }
651 }
652 
653 /* Frame sniffer for normal (non-exception) frames.  */
654 
655 static int
656 rx_frame_sniffer (const struct frame_unwind *self,
657                   struct frame_info *this_frame,
658 		  void **this_cache)
659 {
660   return rx_frame_sniffer_common (self, this_frame, this_cache,
661                                   normal_frame_p);
662 }
663 
664 /* Frame sniffer for exception frames.  */
665 
666 static int
667 rx_exception_sniffer (const struct frame_unwind *self,
668                              struct frame_info *this_frame,
669 			     void **this_cache)
670 {
671   return rx_frame_sniffer_common (self, this_frame, this_cache,
672                                   exception_frame_p);
673 }
674 
675 /* Data structure for normal code using instruction-based prologue
676    analyzer.  */
677 
678 static const struct frame_unwind rx_frame_unwind = {
679   NORMAL_FRAME,
680   default_frame_unwind_stop_reason,
681   rx_frame_this_id,
682   rx_frame_prev_register,
683   NULL,
684   rx_frame_sniffer
685 };
686 
687 /* Data structure for exception code using instruction-based prologue
688    analyzer.  */
689 
690 static const struct frame_unwind rx_exception_unwind = {
691   /* SIGTRAMP_FRAME could be used here, but backtraces are less informative.  */
692   NORMAL_FRAME,
693   default_frame_unwind_stop_reason,
694   rx_frame_this_id,
695   rx_frame_prev_register,
696   NULL,
697   rx_exception_sniffer
698 };
699 
700 /* Implement the "unwind_pc" gdbarch method.  */
701 static CORE_ADDR
702 rx_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
703 {
704   ULONGEST pc;
705 
706   pc = frame_unwind_register_unsigned (this_frame, RX_PC_REGNUM);
707   return pc;
708 }
709 
710 /* Implement the "unwind_sp" gdbarch method.  */
711 static CORE_ADDR
712 rx_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
713 {
714   ULONGEST sp;
715 
716   sp = frame_unwind_register_unsigned (this_frame, RX_SP_REGNUM);
717   return sp;
718 }
719 
720 /* Implement the "dummy_id" gdbarch method.  */
721 static struct frame_id
722 rx_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
723 {
724   return
725     frame_id_build (get_frame_register_unsigned (this_frame, RX_SP_REGNUM),
726 		    get_frame_pc (this_frame));
727 }
728 
729 /* Implement the "push_dummy_call" gdbarch method.  */
730 static CORE_ADDR
731 rx_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
732 		    struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
733 		    struct value **args, CORE_ADDR sp, int struct_return,
734 		    CORE_ADDR struct_addr)
735 {
736   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
737   int write_pass;
738   int sp_off = 0;
739   CORE_ADDR cfa;
740   int num_register_candidate_args;
741 
742   struct type *func_type = value_type (function);
743 
744   /* Dereference function pointer types.  */
745   while (TYPE_CODE (func_type) == TYPE_CODE_PTR)
746     func_type = TYPE_TARGET_TYPE (func_type);
747 
748   /* The end result had better be a function or a method.  */
749   gdb_assert (TYPE_CODE (func_type) == TYPE_CODE_FUNC
750 	      || TYPE_CODE (func_type) == TYPE_CODE_METHOD);
751 
752   /* Functions with a variable number of arguments have all of their
753      variable arguments and the last non-variable argument passed
754      on the stack.
755 
756      Otherwise, we can pass up to four arguments on the stack.
757 
758      Once computed, we leave this value alone.  I.e. we don't update
759      it in case of a struct return going in a register or an argument
760      requiring multiple registers, etc.  We rely instead on the value
761      of the ``arg_reg'' variable to get these other details correct.  */
762 
763   if (TYPE_VARARGS (func_type))
764     num_register_candidate_args = TYPE_NFIELDS (func_type) - 1;
765   else
766     num_register_candidate_args = 4;
767 
768   /* We make two passes; the first does the stack allocation,
769      the second actually stores the arguments.  */
770   for (write_pass = 0; write_pass <= 1; write_pass++)
771     {
772       int i;
773       int arg_reg = RX_R1_REGNUM;
774 
775       if (write_pass)
776 	sp = align_down (sp - sp_off, 4);
777       sp_off = 0;
778 
779       if (struct_return)
780 	{
781 	  struct type *return_type = TYPE_TARGET_TYPE (func_type);
782 
783 	  gdb_assert (TYPE_CODE (return_type) == TYPE_CODE_STRUCT
784 		      || TYPE_CODE (func_type) == TYPE_CODE_UNION);
785 
786 	  if (TYPE_LENGTH (return_type) > 16
787 	      || TYPE_LENGTH (return_type) % 4 != 0)
788 	    {
789 	      if (write_pass)
790 		regcache_cooked_write_unsigned (regcache, RX_R15_REGNUM,
791 						struct_addr);
792 	    }
793 	}
794 
795       /* Push the arguments.  */
796       for (i = 0; i < nargs; i++)
797 	{
798 	  struct value *arg = args[i];
799 	  const gdb_byte *arg_bits = value_contents_all (arg);
800 	  struct type *arg_type = check_typedef (value_type (arg));
801 	  ULONGEST arg_size = TYPE_LENGTH (arg_type);
802 
803 	  if (i == 0 && struct_addr != 0 && !struct_return
804 	      && TYPE_CODE (arg_type) == TYPE_CODE_PTR
805 	      && extract_unsigned_integer (arg_bits, 4,
806 					   byte_order) == struct_addr)
807 	    {
808 	      /* This argument represents the address at which C++ (and
809 	         possibly other languages) store their return value.
810 	         Put this value in R15.  */
811 	      if (write_pass)
812 		regcache_cooked_write_unsigned (regcache, RX_R15_REGNUM,
813 						struct_addr);
814 	    }
815 	  else if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT
816 		   && TYPE_CODE (arg_type) != TYPE_CODE_UNION
817 		   && arg_size <= 8)
818 	    {
819 	      /* Argument is a scalar.  */
820 	      if (arg_size == 8)
821 		{
822 		  if (i < num_register_candidate_args
823 		      && arg_reg <= RX_R4_REGNUM - 1)
824 		    {
825 		      /* If argument registers are going to be used to pass
826 		         an 8 byte scalar, the ABI specifies that two registers
827 		         must be available.  */
828 		      if (write_pass)
829 			{
830 			  regcache_cooked_write_unsigned (regcache, arg_reg,
831 							  extract_unsigned_integer
832 							  (arg_bits, 4,
833 							   byte_order));
834 			  regcache_cooked_write_unsigned (regcache,
835 							  arg_reg + 1,
836 							  extract_unsigned_integer
837 							  (arg_bits + 4, 4,
838 							   byte_order));
839 			}
840 		      arg_reg += 2;
841 		    }
842 		  else
843 		    {
844 		      sp_off = align_up (sp_off, 4);
845 		      /* Otherwise, pass the 8 byte scalar on the stack.  */
846 		      if (write_pass)
847 			write_memory (sp + sp_off, arg_bits, 8);
848 		      sp_off += 8;
849 		    }
850 		}
851 	      else
852 		{
853 		  ULONGEST u;
854 
855 		  gdb_assert (arg_size <= 4);
856 
857 		  u =
858 		    extract_unsigned_integer (arg_bits, arg_size, byte_order);
859 
860 		  if (i < num_register_candidate_args
861 		      && arg_reg <= RX_R4_REGNUM)
862 		    {
863 		      if (write_pass)
864 			regcache_cooked_write_unsigned (regcache, arg_reg, u);
865 		      arg_reg += 1;
866 		    }
867 		  else
868 		    {
869 		      int p_arg_size = 4;
870 
871 		      if (TYPE_PROTOTYPED (func_type)
872 			  && i < TYPE_NFIELDS (func_type))
873 			{
874 			  struct type *p_arg_type =
875 			    TYPE_FIELD_TYPE (func_type, i);
876 			  p_arg_size = TYPE_LENGTH (p_arg_type);
877 			}
878 
879 		      sp_off = align_up (sp_off, p_arg_size);
880 
881 		      if (write_pass)
882 			write_memory_unsigned_integer (sp + sp_off,
883 						       p_arg_size, byte_order,
884 						       u);
885 		      sp_off += p_arg_size;
886 		    }
887 		}
888 	    }
889 	  else
890 	    {
891 	      /* Argument is a struct or union.  Pass as much of the struct
892 	         in registers, if possible.  Pass the rest on the stack.  */
893 	      while (arg_size > 0)
894 		{
895 		  if (i < num_register_candidate_args
896 		      && arg_reg <= RX_R4_REGNUM
897 		      && arg_size <= 4 * (RX_R4_REGNUM - arg_reg + 1)
898 		      && arg_size % 4 == 0)
899 		    {
900 		      int len = min (arg_size, 4);
901 
902 		      if (write_pass)
903 			regcache_cooked_write_unsigned (regcache, arg_reg,
904 							extract_unsigned_integer
905 							(arg_bits, len,
906 							 byte_order));
907 		      arg_bits += len;
908 		      arg_size -= len;
909 		      arg_reg++;
910 		    }
911 		  else
912 		    {
913 		      sp_off = align_up (sp_off, 4);
914 		      if (write_pass)
915 			write_memory (sp + sp_off, arg_bits, arg_size);
916 		      sp_off += align_up (arg_size, 4);
917 		      arg_size = 0;
918 		    }
919 		}
920 	    }
921 	}
922     }
923 
924   /* Keep track of the stack address prior to pushing the return address.
925      This is the value that we'll return.  */
926   cfa = sp;
927 
928   /* Push the return address.  */
929   sp = sp - 4;
930   write_memory_unsigned_integer (sp, 4, byte_order, bp_addr);
931 
932   /* Update the stack pointer.  */
933   regcache_cooked_write_unsigned (regcache, RX_SP_REGNUM, sp);
934 
935   return cfa;
936 }
937 
938 /* Implement the "return_value" gdbarch method.  */
939 static enum return_value_convention
940 rx_return_value (struct gdbarch *gdbarch,
941 		 struct value *function,
942 		 struct type *valtype,
943 		 struct regcache *regcache,
944 		 gdb_byte *readbuf, const gdb_byte *writebuf)
945 {
946   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
947   ULONGEST valtype_len = TYPE_LENGTH (valtype);
948 
949   if (TYPE_LENGTH (valtype) > 16
950       || ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
951 	   || TYPE_CODE (valtype) == TYPE_CODE_UNION)
952 	  && TYPE_LENGTH (valtype) % 4 != 0))
953     return RETURN_VALUE_STRUCT_CONVENTION;
954 
955   if (readbuf)
956     {
957       ULONGEST u;
958       int argreg = RX_R1_REGNUM;
959       int offset = 0;
960 
961       while (valtype_len > 0)
962 	{
963 	  int len = min (valtype_len, 4);
964 
965 	  regcache_cooked_read_unsigned (regcache, argreg, &u);
966 	  store_unsigned_integer (readbuf + offset, len, byte_order, u);
967 	  valtype_len -= len;
968 	  offset += len;
969 	  argreg++;
970 	}
971     }
972 
973   if (writebuf)
974     {
975       ULONGEST u;
976       int argreg = RX_R1_REGNUM;
977       int offset = 0;
978 
979       while (valtype_len > 0)
980 	{
981 	  int len = min (valtype_len, 4);
982 
983 	  u = extract_unsigned_integer (writebuf + offset, len, byte_order);
984 	  regcache_cooked_write_unsigned (regcache, argreg, u);
985 	  valtype_len -= len;
986 	  offset += len;
987 	  argreg++;
988 	}
989     }
990 
991   return RETURN_VALUE_REGISTER_CONVENTION;
992 }
993 
994 /* Implement the "breakpoint_from_pc" gdbarch method.  */
995 static const gdb_byte *
996 rx_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
997 {
998   static gdb_byte breakpoint[] = { 0x00 };
999   *lenptr = sizeof breakpoint;
1000   return breakpoint;
1001 }
1002 
1003 /* Implement the dwarf_reg_to_regnum" gdbarch method.  */
1004 
1005 static int
1006 rx_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
1007 {
1008   if (0 <= reg && reg <= 15)
1009     return reg;
1010   else if (reg == 16)
1011     return RX_PSW_REGNUM;
1012   else if (reg == 17)
1013     return RX_PC_REGNUM;
1014   else
1015     return -1;
1016 }
1017 
1018 /* Allocate and initialize a gdbarch object.  */
1019 static struct gdbarch *
1020 rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1021 {
1022   struct gdbarch *gdbarch;
1023   struct gdbarch_tdep *tdep;
1024   int elf_flags;
1025 
1026   /* Extract the elf_flags if available.  */
1027   if (info.abfd != NULL
1028       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
1029     elf_flags = elf_elfheader (info.abfd)->e_flags;
1030   else
1031     elf_flags = 0;
1032 
1033 
1034   /* Try to find the architecture in the list of already defined
1035      architectures.  */
1036   for (arches = gdbarch_list_lookup_by_info (arches, &info);
1037        arches != NULL;
1038        arches = gdbarch_list_lookup_by_info (arches->next, &info))
1039     {
1040       if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
1041 	continue;
1042 
1043       return arches->gdbarch;
1044     }
1045 
1046   /* None found, create a new architecture from the information
1047      provided.  */
1048   tdep = XNEW (struct gdbarch_tdep);
1049   gdbarch = gdbarch_alloc (&info, tdep);
1050   tdep->elf_flags = elf_flags;
1051 
1052   /* Initialize the flags type for PSW and BPSW.  */
1053 
1054   tdep->rx_psw_type = arch_flags_type (gdbarch, "rx_psw_type", 4);
1055   append_flags_type_flag (tdep->rx_psw_type, 0, "C");
1056   append_flags_type_flag (tdep->rx_psw_type, 1, "Z");
1057   append_flags_type_flag (tdep->rx_psw_type, 2, "S");
1058   append_flags_type_flag (tdep->rx_psw_type, 3, "O");
1059   append_flags_type_flag (tdep->rx_psw_type, 16, "I");
1060   append_flags_type_flag (tdep->rx_psw_type, 17, "U");
1061   append_flags_type_flag (tdep->rx_psw_type, 20, "PM");
1062   append_flags_type_flag (tdep->rx_psw_type, 24, "IPL0");
1063   append_flags_type_flag (tdep->rx_psw_type, 25, "IPL1");
1064   append_flags_type_flag (tdep->rx_psw_type, 26, "IPL2");
1065   append_flags_type_flag (tdep->rx_psw_type, 27, "IPL3");
1066 
1067   /* Initialize flags type for FPSW.  */
1068 
1069   tdep->rx_fpsw_type = arch_flags_type (gdbarch, "rx_fpsw_type", 4);
1070   append_flags_type_flag (tdep->rx_fpsw_type, 0, "RM0");
1071   append_flags_type_flag (tdep->rx_fpsw_type, 1, "RM1");
1072   append_flags_type_flag (tdep->rx_fpsw_type, 2, "CV");
1073   append_flags_type_flag (tdep->rx_fpsw_type, 3, "CO");
1074   append_flags_type_flag (tdep->rx_fpsw_type, 4, "CZ");
1075   append_flags_type_flag (tdep->rx_fpsw_type, 5, "CU");
1076   append_flags_type_flag (tdep->rx_fpsw_type, 6, "CX");
1077   append_flags_type_flag (tdep->rx_fpsw_type, 7, "CE");
1078   append_flags_type_flag (tdep->rx_fpsw_type, 8, "DN");
1079   append_flags_type_flag (tdep->rx_fpsw_type, 10, "EV");
1080   append_flags_type_flag (tdep->rx_fpsw_type, 11, "EO");
1081   append_flags_type_flag (tdep->rx_fpsw_type, 12, "EZ");
1082   append_flags_type_flag (tdep->rx_fpsw_type, 13, "EU");
1083   append_flags_type_flag (tdep->rx_fpsw_type, 14, "EX");
1084   append_flags_type_flag (tdep->rx_fpsw_type, 26, "FV");
1085   append_flags_type_flag (tdep->rx_fpsw_type, 27, "FO");
1086   append_flags_type_flag (tdep->rx_fpsw_type, 28, "FZ");
1087   append_flags_type_flag (tdep->rx_fpsw_type, 29, "FU");
1088   append_flags_type_flag (tdep->rx_fpsw_type, 30, "FX");
1089   append_flags_type_flag (tdep->rx_fpsw_type, 31, "FS");
1090 
1091   set_gdbarch_num_regs (gdbarch, RX_NUM_REGS);
1092   set_gdbarch_num_pseudo_regs (gdbarch, 0);
1093   set_gdbarch_register_name (gdbarch, rx_register_name);
1094   set_gdbarch_register_type (gdbarch, rx_register_type);
1095   set_gdbarch_pc_regnum (gdbarch, RX_PC_REGNUM);
1096   set_gdbarch_sp_regnum (gdbarch, RX_SP_REGNUM);
1097   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1098   set_gdbarch_decr_pc_after_break (gdbarch, 1);
1099   set_gdbarch_breakpoint_from_pc (gdbarch, rx_breakpoint_from_pc);
1100   set_gdbarch_skip_prologue (gdbarch, rx_skip_prologue);
1101 
1102   set_gdbarch_print_insn (gdbarch, print_insn_rx);
1103 
1104   set_gdbarch_unwind_pc (gdbarch, rx_unwind_pc);
1105   set_gdbarch_unwind_sp (gdbarch, rx_unwind_sp);
1106 
1107   /* Target builtin data types.  */
1108   set_gdbarch_char_signed (gdbarch, 0);
1109   set_gdbarch_short_bit (gdbarch, 16);
1110   set_gdbarch_int_bit (gdbarch, 32);
1111   set_gdbarch_long_bit (gdbarch, 32);
1112   set_gdbarch_long_long_bit (gdbarch, 64);
1113   set_gdbarch_ptr_bit (gdbarch, 32);
1114   set_gdbarch_float_bit (gdbarch, 32);
1115   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
1116   if (elf_flags & E_FLAG_RX_64BIT_DOUBLES)
1117     {
1118       set_gdbarch_double_bit (gdbarch, 64);
1119       set_gdbarch_long_double_bit (gdbarch, 64);
1120       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
1121       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
1122     }
1123   else
1124     {
1125       set_gdbarch_double_bit (gdbarch, 32);
1126       set_gdbarch_long_double_bit (gdbarch, 32);
1127       set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
1128       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_single);
1129     }
1130 
1131   /* DWARF register mapping.  */
1132   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rx_dwarf_reg_to_regnum);
1133 
1134   /* Frame unwinding.  */
1135   frame_unwind_append_unwinder (gdbarch, &rx_exception_unwind);
1136   dwarf2_append_unwinders (gdbarch);
1137   frame_unwind_append_unwinder (gdbarch, &rx_frame_unwind);
1138 
1139   /* Methods for saving / extracting a dummy frame's ID.
1140      The ID's stack address must match the SP value returned by
1141      PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos.  */
1142   set_gdbarch_dummy_id (gdbarch, rx_dummy_id);
1143   set_gdbarch_push_dummy_call (gdbarch, rx_push_dummy_call);
1144   set_gdbarch_return_value (gdbarch, rx_return_value);
1145 
1146   /* Virtual tables.  */
1147   set_gdbarch_vbit_in_delta (gdbarch, 1);
1148 
1149   return gdbarch;
1150 }
1151 
1152 /* -Wmissing-prototypes */
1153 extern initialize_file_ftype _initialize_rx_tdep;
1154 
1155 /* Register the above initialization routine.  */
1156 
1157 void
1158 _initialize_rx_tdep (void)
1159 {
1160   register_gdbarch_init (bfd_arch_rx, rx_gdbarch_init);
1161 }
1162