1 /* Target-dependent code for the Renesas RX for GDB, the GNU debugger.
3 Copyright (C) 2008, 2009, 2010 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. */
52 /* Architecture specific data. */
55 /* The ELF header flags specify the multilib used. */
59 /* This structure holds the results of a prologue analysis. */
62 /* The offset from the frame base to the stack pointer --- always
65 Calling this a "size" is a bit misleading, but given that the
66 stack grows downwards, using offsets for everything keeps one
67 from going completely sign-crazy: you never change anything's
68 sign for an ADD instruction; always change the second operand's
69 sign for a SUB instruction; and everything takes care of
73 /* Non-zero if this function has initialized the frame pointer from
74 the stack pointer, zero otherwise. */
77 /* If has_frame_ptr is non-zero, this is the offset from the frame
78 base to where the frame pointer points. This is always zero or
82 /* The address of the first instruction at which the frame has been
83 set up and the arguments are where the debug info says they are
84 --- as best as we can tell. */
85 CORE_ADDR prologue_end
;
87 /* reg_offset[R] is the offset from the CFA at which register R is
88 saved, or 1 if register R has not been saved. (Real values are
89 always zero or negative.) */
90 int reg_offset
[RX_NUM_REGS
];
93 /* Implement the "register_name" gdbarch method. */
95 rx_register_name (struct gdbarch
*gdbarch
, int regnr
)
97 static const char *const reg_names
[] = {
125 return reg_names
[regnr
];
128 /* Implement the "register_type" gdbarch method. */
130 rx_register_type (struct gdbarch
*gdbarch
, int reg_nr
)
132 if (reg_nr
== RX_PC_REGNUM
)
133 return builtin_type (gdbarch
)->builtin_func_ptr
;
135 return builtin_type (gdbarch
)->builtin_unsigned_long
;
139 /* Function for finding saved registers in a 'struct pv_area'; this
140 function is passed to pv_area_scan.
142 If VALUE is a saved register, ADDR says it was saved at a constant
143 offset from the frame base, and SIZE indicates that the whole
144 register was saved, record its offset. */
146 check_for_saved (void *result_untyped
, pv_t addr
, CORE_ADDR size
, pv_t value
)
148 struct rx_prologue
*result
= (struct rx_prologue
*) result_untyped
;
150 if (value
.kind
== pvk_register
152 && pv_is_register (addr
, RX_SP_REGNUM
)
153 && size
== register_size (target_gdbarch
, value
.reg
))
154 result
->reg_offset
[value
.reg
] = addr
.k
;
157 /* Define a "handle" struct for fetching the next opcode. */
158 struct rx_get_opcode_byte_handle
163 /* Fetch a byte on behalf of the opcode decoder. HANDLE contains
164 the memory address of the next byte to fetch. If successful,
165 the address in the handle is updated and the byte fetched is
166 returned as the value of the function. If not successful, -1
169 rx_get_opcode_byte (void *handle
)
171 struct rx_get_opcode_byte_handle
*opcdata
= handle
;
175 status
= target_read_memory (opcdata
->pc
, &byte
, 1);
185 /* Analyze a prologue starting at START_PC, going no further than
186 LIMIT_PC. Fill in RESULT as appropriate. */
188 rx_analyze_prologue (CORE_ADDR start_pc
,
189 CORE_ADDR limit_pc
, struct rx_prologue
*result
)
191 CORE_ADDR pc
, next_pc
;
193 pv_t reg
[RX_NUM_REGS
];
194 struct pv_area
*stack
;
195 struct cleanup
*back_to
;
196 CORE_ADDR after_last_frame_setup_insn
= start_pc
;
198 memset (result
, 0, sizeof (*result
));
200 for (rn
= 0; rn
< RX_NUM_REGS
; rn
++)
202 reg
[rn
] = pv_register (rn
, 0);
203 result
->reg_offset
[rn
] = 1;
206 stack
= make_pv_area (RX_SP_REGNUM
, gdbarch_addr_bit (target_gdbarch
));
207 back_to
= make_cleanup_free_pv_area (stack
);
209 /* The call instruction has saved the return address on the stack. */
210 reg
[RX_SP_REGNUM
] = pv_add_constant (reg
[RX_SP_REGNUM
], -4);
211 pv_area_store (stack
, reg
[RX_SP_REGNUM
], 4, reg
[RX_PC_REGNUM
]);
214 while (pc
< limit_pc
)
217 struct rx_get_opcode_byte_handle opcode_handle
;
218 RX_Opcode_Decoded opc
;
220 opcode_handle
.pc
= pc
;
221 bytes_read
= rx_decode_opcode (pc
, &opc
, rx_get_opcode_byte
,
223 next_pc
= pc
+ bytes_read
;
225 if (opc
.id
== RXO_pushm
/* pushm r1, r2 */
226 && opc
.op
[1].type
== RX_Operand_Register
227 && opc
.op
[2].type
== RX_Operand_Register
)
234 for (r
= r2
; r
>= r1
; r
--)
236 reg
[RX_SP_REGNUM
] = pv_add_constant (reg
[RX_SP_REGNUM
], -4);
237 pv_area_store (stack
, reg
[RX_SP_REGNUM
], 4, reg
[r
]);
239 after_last_frame_setup_insn
= next_pc
;
241 else if (opc
.id
== RXO_mov
/* mov.l rdst, rsrc */
242 && opc
.op
[0].type
== RX_Operand_Register
243 && opc
.op
[1].type
== RX_Operand_Register
244 && opc
.size
== RX_Long
)
248 rdst
= opc
.op
[0].reg
;
249 rsrc
= opc
.op
[1].reg
;
250 reg
[rdst
] = reg
[rsrc
];
251 if (rdst
== RX_FP_REGNUM
&& rsrc
== RX_SP_REGNUM
)
252 after_last_frame_setup_insn
= next_pc
;
254 else if (opc
.id
== RXO_mov
/* mov.l rsrc, [-SP] */
255 && opc
.op
[0].type
== RX_Operand_Predec
256 && opc
.op
[0].reg
== RX_SP_REGNUM
257 && opc
.op
[1].type
== RX_Operand_Register
258 && opc
.size
== RX_Long
)
262 rsrc
= opc
.op
[1].reg
;
263 reg
[RX_SP_REGNUM
] = pv_add_constant (reg
[RX_SP_REGNUM
], -4);
264 pv_area_store (stack
, reg
[RX_SP_REGNUM
], 4, reg
[rsrc
]);
265 after_last_frame_setup_insn
= next_pc
;
267 else if (opc
.id
== RXO_add
/* add #const, rsrc, rdst */
268 && opc
.op
[0].type
== RX_Operand_Register
269 && opc
.op
[1].type
== RX_Operand_Immediate
270 && opc
.op
[2].type
== RX_Operand_Register
)
272 int rdst
= opc
.op
[0].reg
;
273 int addend
= opc
.op
[1].addend
;
274 int rsrc
= opc
.op
[2].reg
;
275 reg
[rdst
] = pv_add_constant (reg
[rsrc
], addend
);
276 /* Negative adjustments to the stack pointer or frame pointer
277 are (most likely) part of the prologue. */
278 if ((rdst
== RX_SP_REGNUM
|| rdst
== RX_FP_REGNUM
) && addend
< 0)
279 after_last_frame_setup_insn
= next_pc
;
281 else if (opc
.id
== RXO_mov
282 && opc
.op
[0].type
== RX_Operand_Indirect
283 && opc
.op
[1].type
== RX_Operand_Register
284 && opc
.size
== RX_Long
285 && (opc
.op
[0].reg
== RX_SP_REGNUM
286 || opc
.op
[0].reg
== RX_FP_REGNUM
)
287 && (RX_R1_REGNUM
<= opc
.op
[1].reg
288 && opc
.op
[1].reg
<= RX_R4_REGNUM
))
290 /* This moves an argument register to the stack. Don't
291 record it, but allow it to be a part of the prologue. */
293 else if (opc
.id
== RXO_branch
294 && opc
.op
[0].type
== RX_Operand_Immediate
295 && opc
.op
[1].type
== RX_Operand_Condition
296 && next_pc
< opc
.op
[0].addend
)
298 /* When a loop appears as the first statement of a function
299 body, gcc 4.x will use a BRA instruction to branch to the
300 loop condition checking code. This BRA instruction is
301 marked as part of the prologue. We therefore set next_pc
302 to this branch target and also stop the prologue scan.
303 The instructions at and beyond the branch target should
304 no longer be associated with the prologue.
306 Note that we only consider forward branches here. We
307 presume that a forward branch is being used to skip over
310 A backwards branch is covered by the default case below.
311 If we were to encounter a backwards branch, that would
312 most likely mean that we've scanned through a loop body.
313 We definitely want to stop the prologue scan when this
314 happens and that is precisely what is done by the default
317 after_last_frame_setup_insn
= opc
.op
[0].addend
;
318 break; /* Scan no further if we hit this case. */
322 /* Terminate the prologue scan. */
329 /* Is the frame size (offset, really) a known constant? */
330 if (pv_is_register (reg
[RX_SP_REGNUM
], RX_SP_REGNUM
))
331 result
->frame_size
= reg
[RX_SP_REGNUM
].k
;
333 /* Was the frame pointer initialized? */
334 if (pv_is_register (reg
[RX_FP_REGNUM
], RX_SP_REGNUM
))
336 result
->has_frame_ptr
= 1;
337 result
->frame_ptr_offset
= reg
[RX_FP_REGNUM
].k
;
340 /* Record where all the registers were saved. */
341 pv_area_scan (stack
, check_for_saved
, (void *) result
);
343 result
->prologue_end
= after_last_frame_setup_insn
;
345 do_cleanups (back_to
);
349 /* Implement the "skip_prologue" gdbarch method. */
351 rx_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
354 CORE_ADDR func_addr
, func_end
;
355 struct rx_prologue p
;
357 /* Try to find the extent of the function that contains PC. */
358 if (!find_pc_partial_function (pc
, &name
, &func_addr
, &func_end
))
361 rx_analyze_prologue (pc
, func_end
, &p
);
362 return p
.prologue_end
;
365 /* Given a frame described by THIS_FRAME, decode the prologue of its
366 associated function if there is not cache entry as specified by
367 THIS_PROLOGUE_CACHE. Save the decoded prologue in the cache and
368 return that struct as the value of this function. */
369 static struct rx_prologue
*
370 rx_analyze_frame_prologue (struct frame_info
*this_frame
,
371 void **this_prologue_cache
)
373 if (!*this_prologue_cache
)
375 CORE_ADDR func_start
, stop_addr
;
377 *this_prologue_cache
= FRAME_OBSTACK_ZALLOC (struct rx_prologue
);
379 func_start
= get_frame_func (this_frame
);
380 stop_addr
= get_frame_pc (this_frame
);
382 /* If we couldn't find any function containing the PC, then
383 just initialize the prologue cache, but don't do anything. */
385 stop_addr
= func_start
;
387 rx_analyze_prologue (func_start
, stop_addr
, *this_prologue_cache
);
390 return *this_prologue_cache
;
393 /* Given the next frame and a prologue cache, return this frame's
396 rx_frame_base (struct frame_info
*this_frame
, void **this_prologue_cache
)
398 struct rx_prologue
*p
399 = rx_analyze_frame_prologue (this_frame
, this_prologue_cache
);
401 /* In functions that use alloca, the distance between the stack
402 pointer and the frame base varies dynamically, so we can't use
403 the SP plus static information like prologue analysis to find the
404 frame base. However, such functions must have a frame pointer,
405 to be able to restore the SP on exit. So whenever we do have a
406 frame pointer, use that to find the base. */
407 if (p
->has_frame_ptr
)
409 CORE_ADDR fp
= get_frame_register_unsigned (this_frame
, RX_FP_REGNUM
);
410 return fp
- p
->frame_ptr_offset
;
414 CORE_ADDR sp
= get_frame_register_unsigned (this_frame
, RX_SP_REGNUM
);
415 return sp
- p
->frame_size
;
419 /* Implement the "frame_this_id" method for unwinding frames. */
421 rx_frame_this_id (struct frame_info
*this_frame
,
422 void **this_prologue_cache
, struct frame_id
*this_id
)
424 *this_id
= frame_id_build (rx_frame_base (this_frame
, this_prologue_cache
),
425 get_frame_func (this_frame
));
428 /* Implement the "frame_prev_register" method for unwinding frames. */
429 static struct value
*
430 rx_frame_prev_register (struct frame_info
*this_frame
,
431 void **this_prologue_cache
, int regnum
)
433 struct rx_prologue
*p
434 = rx_analyze_frame_prologue (this_frame
, this_prologue_cache
);
435 CORE_ADDR frame_base
= rx_frame_base (this_frame
, this_prologue_cache
);
436 int reg_size
= register_size (get_frame_arch (this_frame
), regnum
);
438 if (regnum
== RX_SP_REGNUM
)
439 return frame_unwind_got_constant (this_frame
, regnum
, frame_base
);
441 /* If prologue analysis says we saved this register somewhere,
442 return a description of the stack slot holding it. */
443 else if (p
->reg_offset
[regnum
] != 1)
444 return frame_unwind_got_memory (this_frame
, regnum
,
445 frame_base
+ p
->reg_offset
[regnum
]);
447 /* Otherwise, presume we haven't changed the value of this
448 register, and get it from the next frame. */
450 return frame_unwind_got_register (this_frame
, regnum
, regnum
);
453 static const struct frame_unwind rx_frame_unwind
= {
456 rx_frame_prev_register
,
458 default_frame_sniffer
461 /* Implement the "unwind_pc" gdbarch method. */
463 rx_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
467 pc
= frame_unwind_register_unsigned (this_frame
, RX_PC_REGNUM
);
471 /* Implement the "unwind_sp" gdbarch method. */
473 rx_unwind_sp (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
477 sp
= frame_unwind_register_unsigned (this_frame
, RX_SP_REGNUM
);
481 /* Implement the "dummy_id" gdbarch method. */
482 static struct frame_id
483 rx_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
486 frame_id_build (get_frame_register_unsigned (this_frame
, RX_SP_REGNUM
),
487 get_frame_pc (this_frame
));
490 /* Implement the "push_dummy_call" gdbarch method. */
492 rx_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
493 struct regcache
*regcache
, CORE_ADDR bp_addr
, int nargs
,
494 struct value
**args
, CORE_ADDR sp
, int struct_return
,
495 CORE_ADDR struct_addr
)
497 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
501 int num_register_candidate_args
;
503 struct type
*func_type
= value_type (function
);
505 /* Dereference function pointer types. */
506 while (TYPE_CODE (func_type
) == TYPE_CODE_PTR
)
507 func_type
= TYPE_TARGET_TYPE (func_type
);
509 /* The end result had better be a function or a method. */
510 gdb_assert (TYPE_CODE (func_type
) == TYPE_CODE_FUNC
511 || TYPE_CODE (func_type
) == TYPE_CODE_METHOD
);
513 /* Functions with a variable number of arguments have all of their
514 variable arguments and the last non-variable argument passed
517 Otherwise, we can pass up to four arguments on the stack.
519 Once computed, we leave this value alone. I.e. we don't update
520 it in case of a struct return going in a register or an argument
521 requiring multiple registers, etc. We rely instead on the value
522 of the ``arg_reg'' variable to get these other details correct. */
524 if (TYPE_VARARGS (func_type
))
525 num_register_candidate_args
= TYPE_NFIELDS (func_type
) - 1;
527 num_register_candidate_args
= 4;
529 /* We make two passes; the first does the stack allocation,
530 the second actually stores the arguments. */
531 for (write_pass
= 0; write_pass
<= 1; write_pass
++)
534 int arg_reg
= RX_R1_REGNUM
;
537 sp
= align_down (sp
- sp_off
, 4);
542 struct type
*return_type
= TYPE_TARGET_TYPE (func_type
);
544 gdb_assert (TYPE_CODE (return_type
) == TYPE_CODE_STRUCT
545 || TYPE_CODE (func_type
) == TYPE_CODE_UNION
);
547 if (TYPE_LENGTH (return_type
) > 16
548 || TYPE_LENGTH (return_type
) % 4 != 0)
551 regcache_cooked_write_unsigned (regcache
, RX_R15_REGNUM
,
556 /* Push the arguments. */
557 for (i
= 0; i
< nargs
; i
++)
559 struct value
*arg
= args
[i
];
560 const gdb_byte
*arg_bits
= value_contents_all (arg
);
561 struct type
*arg_type
= check_typedef (value_type (arg
));
562 ULONGEST arg_size
= TYPE_LENGTH (arg_type
);
564 if (i
== 0 && struct_addr
!= 0 && !struct_return
565 && TYPE_CODE (arg_type
) == TYPE_CODE_PTR
566 && extract_unsigned_integer (arg_bits
, 4,
567 byte_order
) == struct_addr
)
569 /* This argument represents the address at which C++ (and
570 possibly other languages) store their return value.
571 Put this value in R15. */
573 regcache_cooked_write_unsigned (regcache
, RX_R15_REGNUM
,
576 else if (TYPE_CODE (arg_type
) != TYPE_CODE_STRUCT
577 && TYPE_CODE (arg_type
) != TYPE_CODE_UNION
)
579 /* Argument is a scalar. */
582 if (i
< num_register_candidate_args
583 && arg_reg
<= RX_R4_REGNUM
- 1)
585 /* If argument registers are going to be used to pass
586 an 8 byte scalar, the ABI specifies that two registers
587 must be available. */
590 regcache_cooked_write_unsigned (regcache
, arg_reg
,
591 extract_unsigned_integer
594 regcache_cooked_write_unsigned (regcache
,
596 extract_unsigned_integer
604 sp_off
= align_up (sp_off
, 4);
605 /* Otherwise, pass the 8 byte scalar on the stack. */
607 write_memory (sp
+ sp_off
, arg_bits
, 8);
615 gdb_assert (arg_size
<= 4);
618 extract_unsigned_integer (arg_bits
, arg_size
, byte_order
);
620 if (i
< num_register_candidate_args
621 && arg_reg
<= RX_R4_REGNUM
)
624 regcache_cooked_write_unsigned (regcache
, arg_reg
, u
);
631 if (TYPE_PROTOTYPED (func_type
)
632 && i
< TYPE_NFIELDS (func_type
))
634 struct type
*p_arg_type
=
635 TYPE_FIELD_TYPE (func_type
, i
);
636 p_arg_size
= TYPE_LENGTH (p_arg_type
);
639 sp_off
= align_up (sp_off
, p_arg_size
);
642 write_memory_unsigned_integer (sp
+ sp_off
,
643 p_arg_size
, byte_order
,
645 sp_off
+= p_arg_size
;
651 /* Argument is a struct or union. Pass as much of the struct
652 in registers, if possible. Pass the rest on the stack. */
655 if (i
< num_register_candidate_args
656 && arg_reg
<= RX_R4_REGNUM
657 && arg_size
<= 4 * (RX_R4_REGNUM
- arg_reg
+ 1)
658 && arg_size
% 4 == 0)
660 int len
= min (arg_size
, 4);
663 regcache_cooked_write_unsigned (regcache
, arg_reg
,
664 extract_unsigned_integer
673 sp_off
= align_up (sp_off
, 4);
675 write_memory (sp
+ sp_off
, arg_bits
, arg_size
);
676 sp_off
+= align_up (arg_size
, 4);
684 /* Keep track of the stack address prior to pushing the return address.
685 This is the value that we'll return. */
688 /* Push the return address. */
690 write_memory_unsigned_integer (sp
, 4, byte_order
, bp_addr
);
692 /* Update the stack pointer. */
693 regcache_cooked_write_unsigned (regcache
, RX_SP_REGNUM
, sp
);
698 /* Implement the "return_value" gdbarch method. */
699 static enum return_value_convention
700 rx_return_value (struct gdbarch
*gdbarch
,
701 struct type
*func_type
,
702 struct type
*valtype
,
703 struct regcache
*regcache
,
704 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
706 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
707 ULONGEST valtype_len
= TYPE_LENGTH (valtype
);
709 if (TYPE_LENGTH (valtype
) > 16
710 || ((TYPE_CODE (valtype
) == TYPE_CODE_STRUCT
711 || TYPE_CODE (valtype
) == TYPE_CODE_UNION
)
712 && TYPE_LENGTH (valtype
) % 4 != 0))
713 return RETURN_VALUE_STRUCT_CONVENTION
;
718 int argreg
= RX_R1_REGNUM
;
721 while (valtype_len
> 0)
723 int len
= min (valtype_len
, 4);
725 regcache_cooked_read_unsigned (regcache
, argreg
, &u
);
726 store_unsigned_integer (readbuf
+ offset
, len
, byte_order
, u
);
736 int argreg
= RX_R1_REGNUM
;
739 while (valtype_len
> 0)
741 int len
= min (valtype_len
, 4);
743 u
= extract_unsigned_integer (writebuf
+ offset
, len
, byte_order
);
744 regcache_cooked_write_unsigned (regcache
, argreg
, u
);
751 return RETURN_VALUE_REGISTER_CONVENTION
;
754 /* Implement the "breakpoint_from_pc" gdbarch method. */
756 rx_breakpoint_from_pc (struct gdbarch
*gdbarch
, CORE_ADDR
*pcptr
, int *lenptr
)
758 static gdb_byte breakpoint
[] = { 0x00 };
759 *lenptr
= sizeof breakpoint
;
763 /* Allocate and initialize a gdbarch object. */
764 static struct gdbarch
*
765 rx_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
767 struct gdbarch
*gdbarch
;
768 struct gdbarch_tdep
*tdep
;
771 /* Extract the elf_flags if available. */
772 if (info
.abfd
!= NULL
773 && bfd_get_flavour (info
.abfd
) == bfd_target_elf_flavour
)
774 elf_flags
= elf_elfheader (info
.abfd
)->e_flags
;
779 /* Try to find the architecture in the list of already defined
781 for (arches
= gdbarch_list_lookup_by_info (arches
, &info
);
783 arches
= gdbarch_list_lookup_by_info (arches
->next
, &info
))
785 if (gdbarch_tdep (arches
->gdbarch
)->elf_flags
!= elf_flags
)
788 return arches
->gdbarch
;
791 /* None found, create a new architecture from the information
793 tdep
= (struct gdbarch_tdep
*) xmalloc (sizeof (struct gdbarch_tdep
));
794 gdbarch
= gdbarch_alloc (&info
, tdep
);
795 tdep
->elf_flags
= elf_flags
;
797 set_gdbarch_num_regs (gdbarch
, RX_NUM_REGS
);
798 set_gdbarch_num_pseudo_regs (gdbarch
, 0);
799 set_gdbarch_register_name (gdbarch
, rx_register_name
);
800 set_gdbarch_register_type (gdbarch
, rx_register_type
);
801 set_gdbarch_pc_regnum (gdbarch
, RX_PC_REGNUM
);
802 set_gdbarch_sp_regnum (gdbarch
, RX_SP_REGNUM
);
803 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
804 set_gdbarch_decr_pc_after_break (gdbarch
, 1);
805 set_gdbarch_breakpoint_from_pc (gdbarch
, rx_breakpoint_from_pc
);
806 set_gdbarch_skip_prologue (gdbarch
, rx_skip_prologue
);
808 set_gdbarch_print_insn (gdbarch
, print_insn_rx
);
810 set_gdbarch_unwind_pc (gdbarch
, rx_unwind_pc
);
811 set_gdbarch_unwind_sp (gdbarch
, rx_unwind_sp
);
813 /* Target builtin data types. */
814 set_gdbarch_char_signed (gdbarch
, 0);
815 set_gdbarch_short_bit (gdbarch
, 16);
816 set_gdbarch_int_bit (gdbarch
, 32);
817 set_gdbarch_long_bit (gdbarch
, 32);
818 set_gdbarch_long_long_bit (gdbarch
, 64);
819 set_gdbarch_ptr_bit (gdbarch
, 32);
820 set_gdbarch_float_bit (gdbarch
, 32);
821 set_gdbarch_float_format (gdbarch
, floatformats_ieee_single
);
822 if (elf_flags
& E_FLAG_RX_64BIT_DOUBLES
)
824 set_gdbarch_double_bit (gdbarch
, 64);
825 set_gdbarch_long_double_bit (gdbarch
, 64);
826 set_gdbarch_double_format (gdbarch
, floatformats_ieee_double
);
827 set_gdbarch_long_double_format (gdbarch
, floatformats_ieee_double
);
831 set_gdbarch_double_bit (gdbarch
, 32);
832 set_gdbarch_long_double_bit (gdbarch
, 32);
833 set_gdbarch_double_format (gdbarch
, floatformats_ieee_single
);
834 set_gdbarch_long_double_format (gdbarch
, floatformats_ieee_single
);
837 /* Frame unwinding. */
839 /* Note: The test results are better with the dwarf2 unwinder disabled,
840 so it's turned off for now. */
841 dwarf2_append_unwinders (gdbarch
);
843 frame_unwind_append_unwinder (gdbarch
, &rx_frame_unwind
);
845 /* Methods for saving / extracting a dummy frame's ID.
846 The ID's stack address must match the SP value returned by
847 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
848 set_gdbarch_dummy_id (gdbarch
, rx_dummy_id
);
849 set_gdbarch_push_dummy_call (gdbarch
, rx_push_dummy_call
);
850 set_gdbarch_return_value (gdbarch
, rx_return_value
);
852 /* Virtual tables. */
853 set_gdbarch_vbit_in_delta (gdbarch
, 1);
858 /* Register the above initialization routine. */
860 _initialize_rx_tdep (void)
862 register_gdbarch_init (bfd_arch_rx
, rx_gdbarch_init
);