1 /* Target-dependent code for the Renesas RX for GDB, the GNU debugger.
3 Copyright (C) 2008-2016 Free Software Foundation, Inc.
5 Contributed by Red Hat, Inc.
7 This file is part of GDB.
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.
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.
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/>. */
23 #include "arch-utils.h"
24 #include "prologue-value.h"
27 #include "opcode/rx.h"
31 #include "frame-unwind.h"
32 #include "frame-base.h"
35 #include "dwarf2-frame.h"
40 /* Certain important register numbers. */
61 RX_FRAME_TYPE_EXCEPTION,
62 RX_FRAME_TYPE_FAST_INTERRUPT
65 /* Architecture specific data. */
68 /* The ELF header flags specify the multilib used. */
71 /* Type of PSW and BPSW. */
72 struct type *rx_psw_type;
75 struct type *rx_fpsw_type;
78 /* This structure holds the results of a prologue analysis. */
81 /* Frame type, either a normal frame or one of two types of exception
83 enum rx_frame_type frame_type;
85 /* The offset from the frame base to the stack pointer --- always
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
96 /* Non-zero if this function has initialized the frame pointer from
97 the stack pointer, zero otherwise. */
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
103 int frame_ptr_offset;
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;
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];
116 /* Implement the "register_name" gdbarch method. */
118 rx_register_name (struct gdbarch *gdbarch, int regnr)
120 static const char *const reg_names[] = {
149 return reg_names[regnr];
152 /* Implement the "register_type" gdbarch method. */
154 rx_register_type (struct gdbarch *gdbarch, int reg_nr)
156 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
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;
167 return builtin_type (gdbarch)->builtin_unsigned_long;
171 /* Function for finding saved registers in a 'struct pv_area'; this
172 function is passed to pv_area_scan.
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. */
178 check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size, pv_t value)
180 struct rx_prologue *result = (struct rx_prologue *) result_untyped;
182 if (value.kind == pvk_register
184 && pv_is_register (addr, RX_SP_REGNUM)
185 && size == register_size (target_gdbarch (), value.reg))
186 result->reg_offset[value.reg] = addr.k;
189 /* Define a "handle" struct for fetching the next opcode. */
190 struct rx_get_opcode_byte_handle
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
201 rx_get_opcode_byte (void *handle)
203 struct rx_get_opcode_byte_handle *opcdata
204 = (struct rx_get_opcode_byte_handle *) handle;
208 status = target_read_code (opcdata->pc, &byte, 1);
218 /* Analyze a prologue starting at START_PC, going no further than
219 LIMIT_PC. Fill in RESULT as appropriate. */
222 rx_analyze_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc,
223 enum rx_frame_type frame_type,
224 struct rx_prologue *result)
226 CORE_ADDR pc, next_pc;
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;
233 memset (result, 0, sizeof (*result));
235 result->frame_type = frame_type;
237 for (rn = 0; rn < RX_NUM_REGS; rn++)
239 reg[rn] = pv_register (rn, 0);
240 result->reg_offset[rn] = 1;
243 stack = make_pv_area (RX_SP_REGNUM, gdbarch_addr_bit (target_gdbarch ()));
244 back_to = make_cleanup_free_pv_area (stack);
246 if (frame_type == RX_FRAME_TYPE_FAST_INTERRUPT)
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];
255 /* When an exception occurs, the PSW is saved to the interrupt stack
257 if (frame_type == RX_FRAME_TYPE_EXCEPTION)
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]);
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]);
272 while (pc < limit_pc)
275 struct rx_get_opcode_byte_handle opcode_handle;
276 RX_Opcode_Decoded opc;
278 opcode_handle.pc = pc;
279 bytes_read = rx_decode_opcode (pc, &opc, rx_get_opcode_byte,
281 next_pc = pc + bytes_read;
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)
292 for (r = r2; r >= r1; r--)
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]);
297 after_last_frame_setup_insn = next_pc;
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)
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;
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)
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;
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)
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;
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))
348 /* This moves an argument register to the stack. Don't
349 record it, but allow it to be a part of the prologue. */
351 else if (opc.id == RXO_branch
352 && opc.op[0].type == RX_Operand_Immediate
353 && next_pc < opc.op[0].addend)
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.
363 Note that we only consider forward branches here. We
364 presume that a forward branch is being used to skip over
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
374 after_last_frame_setup_insn = opc.op[0].addend;
375 break; /* Scan no further if we hit this case. */
379 /* Terminate the prologue scan. */
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;
390 /* Was the frame pointer initialized? */
391 if (pv_is_register (reg[RX_FP_REGNUM], RX_SP_REGNUM))
393 result->has_frame_ptr = 1;
394 result->frame_ptr_offset = reg[RX_FP_REGNUM].k;
397 /* Record where all the registers were saved. */
398 pv_area_scan (stack, check_for_saved, (void *) result);
400 result->prologue_end = after_last_frame_setup_insn;
402 do_cleanups (back_to);
406 /* Implement the "skip_prologue" gdbarch method. */
408 rx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
411 CORE_ADDR func_addr, func_end;
412 struct rx_prologue p;
414 /* Try to find the extent of the function that contains PC. */
415 if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
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;
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. */
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)
434 if (!*this_prologue_cache)
436 CORE_ADDR func_start, stop_addr;
438 *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct rx_prologue);
440 func_start = get_frame_func (this_frame);
441 stop_addr = get_frame_pc (this_frame);
443 /* If we couldn't find any function containing the PC, then
444 just initialize the prologue cache, but don't do anything. */
446 stop_addr = func_start;
448 rx_analyze_prologue (func_start, stop_addr, frame_type,
449 (struct rx_prologue *) *this_prologue_cache);
452 return (struct rx_prologue *) *this_prologue_cache;
455 /* Determine type of frame by scanning the function for a return
458 static enum rx_frame_type
459 rx_frame_type (struct frame_info *this_frame, void **this_cache)
462 CORE_ADDR pc, start_pc, lim_pc;
464 struct rx_get_opcode_byte_handle opcode_handle;
465 RX_Opcode_Decoded opc;
467 gdb_assert (this_cache != NULL);
469 /* If we have a cached value, return it. */
471 if (*this_cache != NULL)
473 struct rx_prologue *p = (struct rx_prologue *) *this_cache;
475 return p->frame_type;
478 /* No cached value; scan the function. The frame type is cached in
479 rx_analyze_prologue / rx_analyze_frame_prologue. */
481 pc = get_frame_pc (this_frame);
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
486 if (!find_pc_partial_function (pc, &name, &start_pc, &lim_pc))
491 opcode_handle.pc = pc;
492 bytes_read = rx_decode_opcode (pc, &opc, rx_get_opcode_byte,
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;
505 return RX_FRAME_TYPE_NORMAL;
509 /* Given the next frame and a prologue cache, return this frame's
513 rx_frame_base (struct frame_info *this_frame, void **this_cache)
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);
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)
527 CORE_ADDR fp = get_frame_register_unsigned (this_frame, RX_FP_REGNUM);
528 return fp - p->frame_ptr_offset;
532 CORE_ADDR sp = get_frame_register_unsigned (this_frame, RX_SP_REGNUM);
533 return sp - p->frame_size;
537 /* Implement the "frame_this_id" method for unwinding frames. */
540 rx_frame_this_id (struct frame_info *this_frame, void **this_cache,
541 struct frame_id *this_id)
543 *this_id = frame_id_build (rx_frame_base (this_frame, this_cache),
544 get_frame_func (this_frame));
547 /* Implement the "frame_prev_register" method for unwinding frames. */
549 static struct value *
550 rx_frame_prev_register (struct frame_info *this_frame, void **this_cache,
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);
558 if (regnum == RX_SP_REGNUM)
560 if (frame_type == RX_FRAME_TYPE_EXCEPTION)
562 struct value *psw_val;
565 psw_val = rx_frame_prev_register (this_frame, this_cache,
567 psw = extract_unsigned_integer (value_contents_all (psw_val), 4,
569 get_frame_arch (this_frame)));
571 if ((psw & 0x20000 /* U bit */) != 0)
572 return rx_frame_prev_register (this_frame, this_cache,
575 /* Fall through for the case where U bit is zero. */
578 return frame_unwind_got_constant (this_frame, regnum, frame_base);
581 if (frame_type == RX_FRAME_TYPE_FAST_INTERRUPT)
583 if (regnum == RX_PC_REGNUM)
584 return rx_frame_prev_register (this_frame, this_cache,
586 if (regnum == RX_PSW_REGNUM)
587 return rx_frame_prev_register (this_frame, this_cache,
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]);
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);
602 /* Return TRUE if the frame indicated by FRAME_TYPE is a normal frame. */
605 normal_frame_p (enum rx_frame_type frame_type)
607 return (frame_type == RX_FRAME_TYPE_NORMAL);
610 /* Return TRUE if the frame indicated by FRAME_TYPE is an exception
614 exception_frame_p (enum rx_frame_type frame_type)
616 return (frame_type == RX_FRAME_TYPE_EXCEPTION
617 || frame_type == RX_FRAME_TYPE_FAST_INTERRUPT);
620 /* Common code used by both normal and exception frame sniffers. */
623 rx_frame_sniffer_common (const struct frame_unwind *self,
624 struct frame_info *this_frame,
626 int (*sniff_p)(enum rx_frame_type) )
628 gdb_assert (this_cache != NULL);
630 if (*this_cache == NULL)
632 enum rx_frame_type frame_type = rx_frame_type (this_frame, this_cache);
634 if (sniff_p (frame_type))
636 /* The call below will fill in the cache, including the frame
638 (void) rx_analyze_frame_prologue (this_frame, frame_type, this_cache);
647 struct rx_prologue *p = (struct rx_prologue *) *this_cache;
649 return sniff_p (p->frame_type);
653 /* Frame sniffer for normal (non-exception) frames. */
656 rx_frame_sniffer (const struct frame_unwind *self,
657 struct frame_info *this_frame,
660 return rx_frame_sniffer_common (self, this_frame, this_cache,
664 /* Frame sniffer for exception frames. */
667 rx_exception_sniffer (const struct frame_unwind *self,
668 struct frame_info *this_frame,
671 return rx_frame_sniffer_common (self, this_frame, this_cache,
675 /* Data structure for normal code using instruction-based prologue
678 static const struct frame_unwind rx_frame_unwind = {
680 default_frame_unwind_stop_reason,
682 rx_frame_prev_register,
687 /* Data structure for exception code using instruction-based prologue
690 static const struct frame_unwind rx_exception_unwind = {
691 /* SIGTRAMP_FRAME could be used here, but backtraces are less informative. */
693 default_frame_unwind_stop_reason,
695 rx_frame_prev_register,
700 /* Implement the "unwind_pc" gdbarch method. */
702 rx_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
706 pc = frame_unwind_register_unsigned (this_frame, RX_PC_REGNUM);
710 /* Implement the "unwind_sp" gdbarch method. */
712 rx_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
716 sp = frame_unwind_register_unsigned (this_frame, RX_SP_REGNUM);
720 /* Implement the "dummy_id" gdbarch method. */
721 static struct frame_id
722 rx_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
725 frame_id_build (get_frame_register_unsigned (this_frame, RX_SP_REGNUM),
726 get_frame_pc (this_frame));
729 /* Implement the "push_dummy_call" gdbarch method. */
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)
736 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
740 int num_register_candidate_args;
742 struct type *func_type = value_type (function);
744 /* Dereference function pointer types. */
745 while (TYPE_CODE (func_type) == TYPE_CODE_PTR)
746 func_type = TYPE_TARGET_TYPE (func_type);
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);
752 /* Functions with a variable number of arguments have all of their
753 variable arguments and the last non-variable argument passed
756 Otherwise, we can pass up to four arguments on the stack.
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. */
763 if (TYPE_VARARGS (func_type))
764 num_register_candidate_args = TYPE_NFIELDS (func_type) - 1;
766 num_register_candidate_args = 4;
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++)
773 int arg_reg = RX_R1_REGNUM;
776 sp = align_down (sp - sp_off, 4);
781 struct type *return_type = TYPE_TARGET_TYPE (func_type);
783 gdb_assert (TYPE_CODE (return_type) == TYPE_CODE_STRUCT
784 || TYPE_CODE (func_type) == TYPE_CODE_UNION);
786 if (TYPE_LENGTH (return_type) > 16
787 || TYPE_LENGTH (return_type) % 4 != 0)
790 regcache_cooked_write_unsigned (regcache, RX_R15_REGNUM,
795 /* Push the arguments. */
796 for (i = 0; i < nargs; i++)
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);
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)
808 /* This argument represents the address at which C++ (and
809 possibly other languages) store their return value.
810 Put this value in R15. */
812 regcache_cooked_write_unsigned (regcache, RX_R15_REGNUM,
815 else if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT
816 && TYPE_CODE (arg_type) != TYPE_CODE_UNION
819 /* Argument is a scalar. */
822 if (i < num_register_candidate_args
823 && arg_reg <= RX_R4_REGNUM - 1)
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. */
830 regcache_cooked_write_unsigned (regcache, arg_reg,
831 extract_unsigned_integer
834 regcache_cooked_write_unsigned (regcache,
836 extract_unsigned_integer
844 sp_off = align_up (sp_off, 4);
845 /* Otherwise, pass the 8 byte scalar on the stack. */
847 write_memory (sp + sp_off, arg_bits, 8);
855 gdb_assert (arg_size <= 4);
858 extract_unsigned_integer (arg_bits, arg_size, byte_order);
860 if (i < num_register_candidate_args
861 && arg_reg <= RX_R4_REGNUM)
864 regcache_cooked_write_unsigned (regcache, arg_reg, u);
871 if (TYPE_PROTOTYPED (func_type)
872 && i < TYPE_NFIELDS (func_type))
874 struct type *p_arg_type =
875 TYPE_FIELD_TYPE (func_type, i);
876 p_arg_size = TYPE_LENGTH (p_arg_type);
879 sp_off = align_up (sp_off, p_arg_size);
882 write_memory_unsigned_integer (sp + sp_off,
883 p_arg_size, byte_order,
885 sp_off += p_arg_size;
891 /* Argument is a struct or union. Pass as much of the struct
892 in registers, if possible. Pass the rest on the stack. */
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)
900 int len = min (arg_size, 4);
903 regcache_cooked_write_unsigned (regcache, arg_reg,
904 extract_unsigned_integer
913 sp_off = align_up (sp_off, 4);
915 write_memory (sp + sp_off, arg_bits, arg_size);
916 sp_off += align_up (arg_size, 4);
924 /* Keep track of the stack address prior to pushing the return address.
925 This is the value that we'll return. */
928 /* Push the return address. */
930 write_memory_unsigned_integer (sp, 4, byte_order, bp_addr);
932 /* Update the stack pointer. */
933 regcache_cooked_write_unsigned (regcache, RX_SP_REGNUM, sp);
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)
946 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
947 ULONGEST valtype_len = TYPE_LENGTH (valtype);
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;
958 int argreg = RX_R1_REGNUM;
961 while (valtype_len > 0)
963 int len = min (valtype_len, 4);
965 regcache_cooked_read_unsigned (regcache, argreg, &u);
966 store_unsigned_integer (readbuf + offset, len, byte_order, u);
976 int argreg = RX_R1_REGNUM;
979 while (valtype_len > 0)
981 int len = min (valtype_len, 4);
983 u = extract_unsigned_integer (writebuf + offset, len, byte_order);
984 regcache_cooked_write_unsigned (regcache, argreg, u);
991 return RETURN_VALUE_REGISTER_CONVENTION;
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)
998 static gdb_byte breakpoint[] = { 0x00 };
999 *lenptr = sizeof breakpoint;
1003 /* Implement the dwarf_reg_to_regnum" gdbarch method. */
1006 rx_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
1008 if (0 <= reg && reg <= 15)
1011 return RX_PSW_REGNUM;
1013 return RX_PC_REGNUM;
1018 /* Allocate and initialize a gdbarch object. */
1019 static struct gdbarch *
1020 rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1022 struct gdbarch *gdbarch;
1023 struct gdbarch_tdep *tdep;
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;
1034 /* Try to find the architecture in the list of already defined
1036 for (arches = gdbarch_list_lookup_by_info (arches, &info);
1038 arches = gdbarch_list_lookup_by_info (arches->next, &info))
1040 if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
1043 return arches->gdbarch;
1046 /* None found, create a new architecture from the information
1048 tdep = XNEW (struct gdbarch_tdep);
1049 gdbarch = gdbarch_alloc (&info, tdep);
1050 tdep->elf_flags = elf_flags;
1052 /* Initialize the flags type for PSW and BPSW. */
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");
1067 /* Initialize flags type for FPSW. */
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");
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);
1102 set_gdbarch_print_insn (gdbarch, print_insn_rx);
1104 set_gdbarch_unwind_pc (gdbarch, rx_unwind_pc);
1105 set_gdbarch_unwind_sp (gdbarch, rx_unwind_sp);
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)
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);
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);
1131 /* DWARF register mapping. */
1132 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rx_dwarf_reg_to_regnum);
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);
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);
1146 /* Virtual tables. */
1147 set_gdbarch_vbit_in_delta (gdbarch, 1);
1152 /* -Wmissing-prototypes */
1153 extern initialize_file_ftype _initialize_rx_tdep;
1155 /* Register the above initialization routine. */
1158 _initialize_rx_tdep (void)
1160 register_gdbarch_init (bfd_arch_rx, rx_gdbarch_init);