rx: Treat scalars larger than 8 bytes as aggregates in rx_push_dummy_call.
[external/binutils.git] / gdb / rx-tdep.c
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 }