1 /* Target-dependent code for the RISC-V architecture, for GDB.
3 Copyright (C) 2018-2020 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
32 #include "arch-utils.h"
35 #include "riscv-tdep.h"
37 #include "reggroups.h"
38 #include "opcode/riscv.h"
39 #include "elf/riscv.h"
43 #include "frame-unwind.h"
44 #include "frame-base.h"
45 #include "trad-frame.h"
47 #include "floatformat.h"
49 #include "target-descriptions.h"
50 #include "dwarf2/frame.h"
51 #include "user-regs.h"
53 #include "gdbsupport/common-defs.h"
54 #include "opcode/riscv-opc.h"
55 #include "cli/cli-decode.h"
56 #include "observable.h"
57 #include "prologue-value.h"
58 #include "arch/riscv.h"
59 #include "riscv-ravenscar-thread.h"
61 /* The stack must be 16-byte aligned. */
62 #define SP_ALIGNMENT 16
64 /* The biggest alignment that the target supports. */
65 #define BIGGEST_ALIGNMENT 16
67 /* Define a series of is_XXX_insn functions to check if the value INSN
68 is an instance of instruction XXX. */
69 #define DECLARE_INSN(INSN_NAME, INSN_MATCH, INSN_MASK) \
70 static inline bool is_ ## INSN_NAME ## _insn (long insn) \
72 return (insn & INSN_MASK) == INSN_MATCH; \
74 #include "opcode/riscv-opc.h"
77 /* Cached information about a frame. */
79 struct riscv_unwind_cache
81 /* The register from which we can calculate the frame base. This is
82 usually $sp or $fp. */
85 /* The offset from the current value in register FRAME_BASE_REG to the
86 actual frame base address. */
87 int frame_base_offset
;
89 /* Information about previous register values. */
90 struct trad_frame_saved_reg
*regs
;
92 /* The id for this frame. */
93 struct frame_id this_id
;
95 /* The base (stack) address for this frame. This is the stack pointer
96 value on entry to this frame before any adjustments are made. */
100 /* RISC-V specific register group for CSRs. */
102 static reggroup
*csr_reggroup
= NULL
;
104 /* A set of registers that we expect to find in a tdesc_feature. These
105 are use in RISCV_GDBARCH_INIT when processing the target description. */
107 struct riscv_register_feature
109 /* Information for a single register. */
112 /* The GDB register number for this register. */
115 /* List of names for this register. The first name in this list is the
116 preferred name, the name GDB should use when describing this
118 std::vector
<const char *> names
;
120 /* When true this register is required in this feature set. */
124 /* The name for this feature. This is the name used to find this feature
125 within the target description. */
128 /* List of all the registers that we expect that we might find in this
130 std::vector
<struct register_info
> registers
;
133 /* The general x-registers feature set. */
135 static const struct riscv_register_feature riscv_xreg_feature
=
137 "org.gnu.gdb.riscv.cpu",
139 { RISCV_ZERO_REGNUM
+ 0, { "zero", "x0" }, true },
140 { RISCV_ZERO_REGNUM
+ 1, { "ra", "x1" }, true },
141 { RISCV_ZERO_REGNUM
+ 2, { "sp", "x2" }, true },
142 { RISCV_ZERO_REGNUM
+ 3, { "gp", "x3" }, true },
143 { RISCV_ZERO_REGNUM
+ 4, { "tp", "x4" }, true },
144 { RISCV_ZERO_REGNUM
+ 5, { "t0", "x5" }, true },
145 { RISCV_ZERO_REGNUM
+ 6, { "t1", "x6" }, true },
146 { RISCV_ZERO_REGNUM
+ 7, { "t2", "x7" }, true },
147 { RISCV_ZERO_REGNUM
+ 8, { "fp", "x8", "s0" }, true },
148 { RISCV_ZERO_REGNUM
+ 9, { "s1", "x9" }, true },
149 { RISCV_ZERO_REGNUM
+ 10, { "a0", "x10" }, true },
150 { RISCV_ZERO_REGNUM
+ 11, { "a1", "x11" }, true },
151 { RISCV_ZERO_REGNUM
+ 12, { "a2", "x12" }, true },
152 { RISCV_ZERO_REGNUM
+ 13, { "a3", "x13" }, true },
153 { RISCV_ZERO_REGNUM
+ 14, { "a4", "x14" }, true },
154 { RISCV_ZERO_REGNUM
+ 15, { "a5", "x15" }, true },
155 { RISCV_ZERO_REGNUM
+ 16, { "a6", "x16" }, true },
156 { RISCV_ZERO_REGNUM
+ 17, { "a7", "x17" }, true },
157 { RISCV_ZERO_REGNUM
+ 18, { "s2", "x18" }, true },
158 { RISCV_ZERO_REGNUM
+ 19, { "s3", "x19" }, true },
159 { RISCV_ZERO_REGNUM
+ 20, { "s4", "x20" }, true },
160 { RISCV_ZERO_REGNUM
+ 21, { "s5", "x21" }, true },
161 { RISCV_ZERO_REGNUM
+ 22, { "s6", "x22" }, true },
162 { RISCV_ZERO_REGNUM
+ 23, { "s7", "x23" }, true },
163 { RISCV_ZERO_REGNUM
+ 24, { "s8", "x24" }, true },
164 { RISCV_ZERO_REGNUM
+ 25, { "s9", "x25" }, true },
165 { RISCV_ZERO_REGNUM
+ 26, { "s10", "x26" }, true },
166 { RISCV_ZERO_REGNUM
+ 27, { "s11", "x27" }, true },
167 { RISCV_ZERO_REGNUM
+ 28, { "t3", "x28" }, true },
168 { RISCV_ZERO_REGNUM
+ 29, { "t4", "x29" }, true },
169 { RISCV_ZERO_REGNUM
+ 30, { "t5", "x30" }, true },
170 { RISCV_ZERO_REGNUM
+ 31, { "t6", "x31" }, true },
171 { RISCV_ZERO_REGNUM
+ 32, { "pc" }, true }
175 /* The f-registers feature set. */
177 static const struct riscv_register_feature riscv_freg_feature
=
179 "org.gnu.gdb.riscv.fpu",
181 { RISCV_FIRST_FP_REGNUM
+ 0, { "ft0", "f0" }, true },
182 { RISCV_FIRST_FP_REGNUM
+ 1, { "ft1", "f1" }, true },
183 { RISCV_FIRST_FP_REGNUM
+ 2, { "ft2", "f2" }, true },
184 { RISCV_FIRST_FP_REGNUM
+ 3, { "ft3", "f3" }, true },
185 { RISCV_FIRST_FP_REGNUM
+ 4, { "ft4", "f4" }, true },
186 { RISCV_FIRST_FP_REGNUM
+ 5, { "ft5", "f5" }, true },
187 { RISCV_FIRST_FP_REGNUM
+ 6, { "ft6", "f6" }, true },
188 { RISCV_FIRST_FP_REGNUM
+ 7, { "ft7", "f7" }, true },
189 { RISCV_FIRST_FP_REGNUM
+ 8, { "fs0", "f8" }, true },
190 { RISCV_FIRST_FP_REGNUM
+ 9, { "fs1", "f9" }, true },
191 { RISCV_FIRST_FP_REGNUM
+ 10, { "fa0", "f10" }, true },
192 { RISCV_FIRST_FP_REGNUM
+ 11, { "fa1", "f11" }, true },
193 { RISCV_FIRST_FP_REGNUM
+ 12, { "fa2", "f12" }, true },
194 { RISCV_FIRST_FP_REGNUM
+ 13, { "fa3", "f13" }, true },
195 { RISCV_FIRST_FP_REGNUM
+ 14, { "fa4", "f14" }, true },
196 { RISCV_FIRST_FP_REGNUM
+ 15, { "fa5", "f15" }, true },
197 { RISCV_FIRST_FP_REGNUM
+ 16, { "fa6", "f16" }, true },
198 { RISCV_FIRST_FP_REGNUM
+ 17, { "fa7", "f17" }, true },
199 { RISCV_FIRST_FP_REGNUM
+ 18, { "fs2", "f18" }, true },
200 { RISCV_FIRST_FP_REGNUM
+ 19, { "fs3", "f19" }, true },
201 { RISCV_FIRST_FP_REGNUM
+ 20, { "fs4", "f20" }, true },
202 { RISCV_FIRST_FP_REGNUM
+ 21, { "fs5", "f21" }, true },
203 { RISCV_FIRST_FP_REGNUM
+ 22, { "fs6", "f22" }, true },
204 { RISCV_FIRST_FP_REGNUM
+ 23, { "fs7", "f23" }, true },
205 { RISCV_FIRST_FP_REGNUM
+ 24, { "fs8", "f24" }, true },
206 { RISCV_FIRST_FP_REGNUM
+ 25, { "fs9", "f25" }, true },
207 { RISCV_FIRST_FP_REGNUM
+ 26, { "fs10", "f26" }, true },
208 { RISCV_FIRST_FP_REGNUM
+ 27, { "fs11", "f27" }, true },
209 { RISCV_FIRST_FP_REGNUM
+ 28, { "ft8", "f28" }, true },
210 { RISCV_FIRST_FP_REGNUM
+ 29, { "ft9", "f29" }, true },
211 { RISCV_FIRST_FP_REGNUM
+ 30, { "ft10", "f30" }, true },
212 { RISCV_FIRST_FP_REGNUM
+ 31, { "ft11", "f31" }, true },
214 { RISCV_CSR_FFLAGS_REGNUM
, { "fflags" }, true },
215 { RISCV_CSR_FRM_REGNUM
, { "frm" }, true },
216 { RISCV_CSR_FCSR_REGNUM
, { "fcsr" }, true },
221 /* Set of virtual registers. These are not physical registers on the
222 hardware, but might be available from the target. These are not pseudo
223 registers, reading these really does result in a register read from the
224 target, it is just that there might not be a physical register backing
227 static const struct riscv_register_feature riscv_virtual_feature
=
229 "org.gnu.gdb.riscv.virtual",
231 { RISCV_PRIV_REGNUM
, { "priv" }, false }
235 /* Feature set for CSRs. This set is NOT constant as the register names
236 list for each register is not complete. The aliases are computed
237 during RISCV_CREATE_CSR_ALIASES. */
239 static struct riscv_register_feature riscv_csr_feature
=
241 "org.gnu.gdb.riscv.csr",
243 #define DECLARE_CSR(NAME,VALUE) \
244 { RISCV_ ## VALUE ## _REGNUM, { # NAME }, false },
245 #include "opcode/riscv-opc.h"
250 /* Complete RISCV_CSR_FEATURE, building the CSR alias names and adding them
251 to the name list for each register. */
254 riscv_create_csr_aliases ()
256 for (auto ®
: riscv_csr_feature
.registers
)
258 int csr_num
= reg
.regnum
- RISCV_FIRST_CSR_REGNUM
;
259 const char *alias
= xstrprintf ("csr%d", csr_num
);
260 reg
.names
.push_back (alias
);
264 /* Controls whether we place compressed breakpoints or not. When in auto
265 mode GDB tries to determine if the target supports compressed
266 breakpoints, and uses them if it does. */
268 static enum auto_boolean use_compressed_breakpoints
;
270 /* The show callback for 'show riscv use-compressed-breakpoints'. */
273 show_use_compressed_breakpoints (struct ui_file
*file
, int from_tty
,
274 struct cmd_list_element
*c
,
277 fprintf_filtered (file
,
278 _("Debugger's use of compressed breakpoints is set "
282 /* The set and show lists for 'set riscv' and 'show riscv' prefixes. */
284 static struct cmd_list_element
*setriscvcmdlist
= NULL
;
285 static struct cmd_list_element
*showriscvcmdlist
= NULL
;
287 /* The show callback for the 'show riscv' prefix command. */
290 show_riscv_command (const char *args
, int from_tty
)
292 help_list (showriscvcmdlist
, "show riscv ", all_commands
, gdb_stdout
);
295 /* The set callback for the 'set riscv' prefix command. */
298 set_riscv_command (const char *args
, int from_tty
)
301 (_("\"set riscv\" must be followed by an appropriate subcommand.\n"));
302 help_list (setriscvcmdlist
, "set riscv ", all_commands
, gdb_stdout
);
305 /* The set and show lists for 'set riscv' and 'show riscv' prefixes. */
307 static struct cmd_list_element
*setdebugriscvcmdlist
= NULL
;
308 static struct cmd_list_element
*showdebugriscvcmdlist
= NULL
;
310 /* The show callback for the 'show debug riscv' prefix command. */
313 show_debug_riscv_command (const char *args
, int from_tty
)
315 help_list (showdebugriscvcmdlist
, "show debug riscv ", all_commands
, gdb_stdout
);
318 /* The set callback for the 'set debug riscv' prefix command. */
321 set_debug_riscv_command (const char *args
, int from_tty
)
324 (_("\"set debug riscv\" must be followed by an appropriate subcommand.\n"));
325 help_list (setdebugriscvcmdlist
, "set debug riscv ", all_commands
, gdb_stdout
);
328 /* The show callback for all 'show debug riscv VARNAME' variables. */
331 show_riscv_debug_variable (struct ui_file
*file
, int from_tty
,
332 struct cmd_list_element
*c
,
335 fprintf_filtered (file
,
336 _("RiscV debug variable `%s' is set to: %s\n"),
340 /* When this is set to non-zero debugging information about breakpoint
341 kinds will be printed. */
343 static unsigned int riscv_debug_breakpoints
= 0;
345 /* When this is set to non-zero debugging information about inferior calls
348 static unsigned int riscv_debug_infcall
= 0;
350 /* When this is set to non-zero debugging information about stack unwinding
353 static unsigned int riscv_debug_unwinder
= 0;
355 /* When this is set to non-zero debugging information about gdbarch
356 initialisation will be printed. */
358 static unsigned int riscv_debug_gdbarch
= 0;
360 /* See riscv-tdep.h. */
363 riscv_isa_xlen (struct gdbarch
*gdbarch
)
365 return gdbarch_tdep (gdbarch
)->isa_features
.xlen
;
368 /* See riscv-tdep.h. */
371 riscv_abi_xlen (struct gdbarch
*gdbarch
)
373 return gdbarch_tdep (gdbarch
)->abi_features
.xlen
;
376 /* See riscv-tdep.h. */
379 riscv_isa_flen (struct gdbarch
*gdbarch
)
381 return gdbarch_tdep (gdbarch
)->isa_features
.flen
;
384 /* See riscv-tdep.h. */
387 riscv_abi_flen (struct gdbarch
*gdbarch
)
389 return gdbarch_tdep (gdbarch
)->abi_features
.flen
;
392 /* Return true if the target for GDBARCH has floating point hardware. */
395 riscv_has_fp_regs (struct gdbarch
*gdbarch
)
397 return (riscv_isa_flen (gdbarch
) > 0);
400 /* Return true if GDBARCH is using any of the floating point hardware ABIs. */
403 riscv_has_fp_abi (struct gdbarch
*gdbarch
)
405 return gdbarch_tdep (gdbarch
)->abi_features
.flen
> 0;
408 /* Return true if REGNO is a floating pointer register. */
411 riscv_is_fp_regno_p (int regno
)
413 return (regno
>= RISCV_FIRST_FP_REGNUM
414 && regno
<= RISCV_LAST_FP_REGNUM
);
417 /* Implement the breakpoint_kind_from_pc gdbarch method. */
420 riscv_breakpoint_kind_from_pc (struct gdbarch
*gdbarch
, CORE_ADDR
*pcptr
)
422 if (use_compressed_breakpoints
== AUTO_BOOLEAN_AUTO
)
424 bool unaligned_p
= false;
427 /* Some targets don't support unaligned reads. The address can only
428 be unaligned if the C extension is supported. So it is safe to
429 use a compressed breakpoint in this case. */
434 /* Read the opcode byte to determine the instruction length. If
435 the read fails this may be because we tried to set the
436 breakpoint at an invalid address, in this case we provide a
437 fake result which will give a breakpoint length of 4.
438 Hopefully when we try to actually insert the breakpoint we
439 will see a failure then too which will be reported to the
441 if (target_read_code (*pcptr
, buf
, 1) == -1)
443 read_code (*pcptr
, buf
, 1);
446 if (riscv_debug_breakpoints
)
448 const char *bp
= (unaligned_p
|| riscv_insn_length (buf
[0]) == 2
449 ? "C.EBREAK" : "EBREAK");
451 fprintf_unfiltered (gdb_stdlog
, "Using %s for breakpoint at %s ",
452 bp
, paddress (gdbarch
, *pcptr
));
454 fprintf_unfiltered (gdb_stdlog
, "(unaligned address)\n");
456 fprintf_unfiltered (gdb_stdlog
, "(instruction length %d)\n",
457 riscv_insn_length (buf
[0]));
459 if (unaligned_p
|| riscv_insn_length (buf
[0]) == 2)
464 else if (use_compressed_breakpoints
== AUTO_BOOLEAN_TRUE
)
470 /* Implement the sw_breakpoint_from_kind gdbarch method. */
472 static const gdb_byte
*
473 riscv_sw_breakpoint_from_kind (struct gdbarch
*gdbarch
, int kind
, int *size
)
475 static const gdb_byte ebreak
[] = { 0x73, 0x00, 0x10, 0x00, };
476 static const gdb_byte c_ebreak
[] = { 0x02, 0x90 };
486 gdb_assert_not_reached (_("unhandled breakpoint kind"));
490 /* Callback function for user_reg_add. */
492 static struct value
*
493 value_of_riscv_user_reg (struct frame_info
*frame
, const void *baton
)
495 const int *reg_p
= (const int *) baton
;
496 return value_of_register (*reg_p
, frame
);
499 /* Implement the register_name gdbarch method. This is used instead of
500 the function supplied by calling TDESC_USE_REGISTERS so that we can
501 ensure the preferred names are offered. */
504 riscv_register_name (struct gdbarch
*gdbarch
, int regnum
)
506 /* Lookup the name through the target description. If we get back NULL
507 then this is an unknown register. If we do get a name back then we
508 look up the registers preferred name below. */
509 const char *name
= tdesc_register_name (gdbarch
, regnum
);
510 if (name
== NULL
|| name
[0] == '\0')
513 if (regnum
>= RISCV_ZERO_REGNUM
&& regnum
< RISCV_FIRST_FP_REGNUM
)
515 gdb_assert (regnum
< riscv_xreg_feature
.registers
.size ());
516 return riscv_xreg_feature
.registers
[regnum
].names
[0];
519 if (regnum
>= RISCV_FIRST_FP_REGNUM
&& regnum
<= RISCV_LAST_FP_REGNUM
)
521 if (riscv_has_fp_regs (gdbarch
))
523 regnum
-= RISCV_FIRST_FP_REGNUM
;
524 gdb_assert (regnum
< riscv_freg_feature
.registers
.size ());
525 return riscv_freg_feature
.registers
[regnum
].names
[0];
531 /* Check that there's no gap between the set of registers handled above,
532 and the set of registers handled next. */
533 gdb_assert ((RISCV_LAST_FP_REGNUM
+ 1) == RISCV_FIRST_CSR_REGNUM
);
535 if (regnum
>= RISCV_FIRST_CSR_REGNUM
&& regnum
<= RISCV_LAST_CSR_REGNUM
)
537 #define DECLARE_CSR(NAME,VALUE) \
538 case RISCV_ ## VALUE ## _REGNUM: return # NAME;
542 #include "opcode/riscv-opc.h"
547 if (regnum
== RISCV_PRIV_REGNUM
)
550 /* It is possible that that the target provides some registers that GDB
551 is unaware of, in that case just return the NAME from the target
556 /* Construct a type for 64-bit FP registers. */
559 riscv_fpreg_d_type (struct gdbarch
*gdbarch
)
561 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
563 if (tdep
->riscv_fpreg_d_type
== nullptr)
565 const struct builtin_type
*bt
= builtin_type (gdbarch
);
567 /* The type we're building is this: */
569 union __gdb_builtin_type_fpreg_d
578 t
= arch_composite_type (gdbarch
,
579 "__gdb_builtin_type_fpreg_d", TYPE_CODE_UNION
);
580 append_composite_type_field (t
, "float", bt
->builtin_float
);
581 append_composite_type_field (t
, "double", bt
->builtin_double
);
583 TYPE_NAME (t
) = "builtin_type_fpreg_d";
584 tdep
->riscv_fpreg_d_type
= t
;
587 return tdep
->riscv_fpreg_d_type
;
590 /* Implement the register_type gdbarch method. This is installed as an
591 for the override setup by TDESC_USE_REGISTERS, for most registers we
592 delegate the type choice to the target description, but for a few
593 registers we try to improve the types if the target description has
594 taken a simplistic approach. */
597 riscv_register_type (struct gdbarch
*gdbarch
, int regnum
)
599 struct type
*type
= tdesc_register_type (gdbarch
, regnum
);
600 int xlen
= riscv_isa_xlen (gdbarch
);
602 /* We want to perform some specific type "fixes" in cases where we feel
603 that we really can do better than the target description. For all
604 other cases we just return what the target description says. */
605 if (riscv_is_fp_regno_p (regnum
))
607 /* This spots the case for RV64 where the double is defined as
608 either 'ieee_double' or 'float' (which is the generic name that
609 converts to 'double' on 64-bit). In these cases its better to
610 present the registers using a union type. */
611 int flen
= riscv_isa_flen (gdbarch
);
613 && TYPE_CODE (type
) == TYPE_CODE_FLT
614 && TYPE_LENGTH (type
) == flen
615 && (strcmp (TYPE_NAME (type
), "builtin_type_ieee_double") == 0
616 || strcmp (TYPE_NAME (type
), "double") == 0))
617 type
= riscv_fpreg_d_type (gdbarch
);
620 if ((regnum
== gdbarch_pc_regnum (gdbarch
)
621 || regnum
== RISCV_RA_REGNUM
622 || regnum
== RISCV_FP_REGNUM
623 || regnum
== RISCV_SP_REGNUM
624 || regnum
== RISCV_GP_REGNUM
625 || regnum
== RISCV_TP_REGNUM
)
626 && TYPE_CODE (type
) == TYPE_CODE_INT
627 && TYPE_LENGTH (type
) == xlen
)
629 /* This spots the case where some interesting registers are defined
630 as simple integers of the expected size, we force these registers
631 to be pointers as we believe that is more useful. */
632 if (regnum
== gdbarch_pc_regnum (gdbarch
)
633 || regnum
== RISCV_RA_REGNUM
)
634 type
= builtin_type (gdbarch
)->builtin_func_ptr
;
635 else if (regnum
== RISCV_FP_REGNUM
636 || regnum
== RISCV_SP_REGNUM
637 || regnum
== RISCV_GP_REGNUM
638 || regnum
== RISCV_TP_REGNUM
)
639 type
= builtin_type (gdbarch
)->builtin_data_ptr
;
645 /* Helper for riscv_print_registers_info, prints info for a single register
649 riscv_print_one_register_info (struct gdbarch
*gdbarch
,
650 struct ui_file
*file
,
651 struct frame_info
*frame
,
654 const char *name
= gdbarch_register_name (gdbarch
, regnum
);
656 struct type
*regtype
;
657 int print_raw_format
;
658 enum tab_stops
{ value_column_1
= 15 };
660 fputs_filtered (name
, file
);
661 print_spaces_filtered (value_column_1
- strlen (name
), file
);
665 val
= value_of_register (regnum
, frame
);
666 regtype
= value_type (val
);
668 catch (const gdb_exception_error
&ex
)
670 /* Handle failure to read a register without interrupting the entire
671 'info registers' flow. */
672 fprintf_filtered (file
, "%s\n", ex
.what ());
676 print_raw_format
= (value_entirely_available (val
)
677 && !value_optimized_out (val
));
679 if (TYPE_CODE (regtype
) == TYPE_CODE_FLT
680 || (TYPE_CODE (regtype
) == TYPE_CODE_UNION
681 && TYPE_NFIELDS (regtype
) == 2
682 && TYPE_CODE (TYPE_FIELD_TYPE (regtype
, 0)) == TYPE_CODE_FLT
683 && TYPE_CODE (TYPE_FIELD_TYPE (regtype
, 1)) == TYPE_CODE_FLT
)
684 || (TYPE_CODE (regtype
) == TYPE_CODE_UNION
685 && TYPE_NFIELDS (regtype
) == 3
686 && TYPE_CODE (TYPE_FIELD_TYPE (regtype
, 0)) == TYPE_CODE_FLT
687 && TYPE_CODE (TYPE_FIELD_TYPE (regtype
, 1)) == TYPE_CODE_FLT
688 && TYPE_CODE (TYPE_FIELD_TYPE (regtype
, 2)) == TYPE_CODE_FLT
))
690 struct value_print_options opts
;
691 const gdb_byte
*valaddr
= value_contents_for_printing (val
);
692 enum bfd_endian byte_order
= type_byte_order (regtype
);
694 get_user_print_options (&opts
);
698 value_embedded_offset (val
), 0,
699 file
, 0, val
, &opts
, current_language
);
701 if (print_raw_format
)
703 fprintf_filtered (file
, "\t(raw ");
704 print_hex_chars (file
, valaddr
, TYPE_LENGTH (regtype
), byte_order
,
706 fprintf_filtered (file
, ")");
711 struct value_print_options opts
;
713 /* Print the register in hex. */
714 get_formatted_print_options (&opts
, 'x');
717 value_embedded_offset (val
), 0,
718 file
, 0, val
, &opts
, current_language
);
720 if (print_raw_format
)
722 if (regnum
== RISCV_CSR_MSTATUS_REGNUM
)
725 int size
= register_size (gdbarch
, regnum
);
728 /* The SD field is always in the upper bit of MSTATUS, regardless
729 of the number of bits in MSTATUS. */
730 d
= value_as_long (val
);
732 fprintf_filtered (file
,
733 "\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
734 "FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
735 "SPIE:%X UPIE:%X MIE:%X HIE:%X SIE:%X UIE:%X",
736 (int) ((d
>> (xlen
- 1)) & 0x1),
737 (int) ((d
>> 24) & 0x1f),
738 (int) ((d
>> 19) & 0x1),
739 (int) ((d
>> 18) & 0x1),
740 (int) ((d
>> 17) & 0x1),
741 (int) ((d
>> 15) & 0x3),
742 (int) ((d
>> 13) & 0x3),
743 (int) ((d
>> 11) & 0x3),
744 (int) ((d
>> 9) & 0x3),
745 (int) ((d
>> 8) & 0x1),
746 (int) ((d
>> 7) & 0x1),
747 (int) ((d
>> 6) & 0x1),
748 (int) ((d
>> 5) & 0x1),
749 (int) ((d
>> 4) & 0x1),
750 (int) ((d
>> 3) & 0x1),
751 (int) ((d
>> 2) & 0x1),
752 (int) ((d
>> 1) & 0x1),
753 (int) ((d
>> 0) & 0x1));
755 else if (regnum
== RISCV_CSR_MISA_REGNUM
)
760 int size
= register_size (gdbarch
, regnum
);
762 /* The MXL field is always in the upper two bits of MISA,
763 regardless of the number of bits in MISA. Mask out other
764 bits to ensure we have a positive value. */
765 d
= value_as_long (val
);
766 base
= (d
>> ((size
* 8) - 2)) & 0x3;
769 for (; base
> 0; base
--)
771 fprintf_filtered (file
, "\tRV%d", xlen
);
773 for (i
= 0; i
< 26; i
++)
776 fprintf_filtered (file
, "%c", 'A' + i
);
779 else if (regnum
== RISCV_CSR_FCSR_REGNUM
780 || regnum
== RISCV_CSR_FFLAGS_REGNUM
781 || regnum
== RISCV_CSR_FRM_REGNUM
)
785 d
= value_as_long (val
);
787 fprintf_filtered (file
, "\t");
788 if (regnum
!= RISCV_CSR_FRM_REGNUM
)
789 fprintf_filtered (file
,
790 "RD:%01X NV:%d DZ:%d OF:%d UF:%d NX:%d",
791 (int) ((d
>> 5) & 0x7),
792 (int) ((d
>> 4) & 0x1),
793 (int) ((d
>> 3) & 0x1),
794 (int) ((d
>> 2) & 0x1),
795 (int) ((d
>> 1) & 0x1),
796 (int) ((d
>> 0) & 0x1));
798 if (regnum
!= RISCV_CSR_FFLAGS_REGNUM
)
800 static const char * const sfrm
[] =
802 "RNE (round to nearest; ties to even)",
803 "RTZ (Round towards zero)",
804 "RDN (Round down towards -INF)",
805 "RUP (Round up towards +INF)",
806 "RMM (Round to nearest; ties to max magnitude)",
809 "dynamic rounding mode",
811 int frm
= ((regnum
== RISCV_CSR_FCSR_REGNUM
)
812 ? (d
>> 5) : d
) & 0x3;
814 fprintf_filtered (file
, "%sFRM:%i [%s]",
815 (regnum
== RISCV_CSR_FCSR_REGNUM
820 else if (regnum
== RISCV_PRIV_REGNUM
)
825 d
= value_as_long (val
);
830 static const char * const sprv
[] =
837 fprintf_filtered (file
, "\tprv:%d [%s]",
841 fprintf_filtered (file
, "\tprv:%d [INVALID]", priv
);
845 /* If not a vector register, print it also according to its
847 if (TYPE_VECTOR (regtype
) == 0)
849 get_user_print_options (&opts
);
851 fprintf_filtered (file
, "\t");
853 value_embedded_offset (val
), 0,
854 file
, 0, val
, &opts
, current_language
);
859 fprintf_filtered (file
, "\n");
862 /* Return true if REGNUM is a valid CSR register. The CSR register space
863 is sparsely populated, so not every number is a named CSR. */
866 riscv_is_regnum_a_named_csr (int regnum
)
868 gdb_assert (regnum
>= RISCV_FIRST_CSR_REGNUM
869 && regnum
<= RISCV_LAST_CSR_REGNUM
);
873 #define DECLARE_CSR(name, num) case RISCV_ ## num ## _REGNUM:
874 #include "opcode/riscv-opc.h"
883 /* Implement the register_reggroup_p gdbarch method. Is REGNUM a member
887 riscv_register_reggroup_p (struct gdbarch
*gdbarch
, int regnum
,
888 struct reggroup
*reggroup
)
890 /* Used by 'info registers' and 'info registers <groupname>'. */
892 if (gdbarch_register_name (gdbarch
, regnum
) == NULL
893 || gdbarch_register_name (gdbarch
, regnum
)[0] == '\0')
896 if (regnum
> RISCV_LAST_REGNUM
)
898 int ret
= tdesc_register_in_reggroup_p (gdbarch
, regnum
, reggroup
);
902 return default_register_reggroup_p (gdbarch
, regnum
, reggroup
);
905 if (reggroup
== all_reggroup
)
907 if (regnum
< RISCV_FIRST_CSR_REGNUM
|| regnum
== RISCV_PRIV_REGNUM
)
909 if (riscv_is_regnum_a_named_csr (regnum
))
913 else if (reggroup
== float_reggroup
)
914 return (riscv_is_fp_regno_p (regnum
)
915 || regnum
== RISCV_CSR_FCSR_REGNUM
916 || regnum
== RISCV_CSR_FFLAGS_REGNUM
917 || regnum
== RISCV_CSR_FRM_REGNUM
);
918 else if (reggroup
== general_reggroup
)
919 return regnum
< RISCV_FIRST_FP_REGNUM
;
920 else if (reggroup
== restore_reggroup
|| reggroup
== save_reggroup
)
922 if (riscv_has_fp_regs (gdbarch
))
923 return (regnum
<= RISCV_LAST_FP_REGNUM
924 || regnum
== RISCV_CSR_FCSR_REGNUM
925 || regnum
== RISCV_CSR_FFLAGS_REGNUM
926 || regnum
== RISCV_CSR_FRM_REGNUM
);
928 return regnum
< RISCV_FIRST_FP_REGNUM
;
930 else if (reggroup
== system_reggroup
|| reggroup
== csr_reggroup
)
932 if (regnum
== RISCV_PRIV_REGNUM
)
934 if (regnum
< RISCV_FIRST_CSR_REGNUM
|| regnum
> RISCV_LAST_CSR_REGNUM
)
936 if (riscv_is_regnum_a_named_csr (regnum
))
940 else if (reggroup
== vector_reggroup
)
946 /* Implement the print_registers_info gdbarch method. This is used by
947 'info registers' and 'info all-registers'. */
950 riscv_print_registers_info (struct gdbarch
*gdbarch
,
951 struct ui_file
*file
,
952 struct frame_info
*frame
,
953 int regnum
, int print_all
)
957 /* Print one specified register. */
958 if (gdbarch_register_name (gdbarch
, regnum
) == NULL
959 || *(gdbarch_register_name (gdbarch
, regnum
)) == '\0')
960 error (_("Not a valid register for the current processor type"));
961 riscv_print_one_register_info (gdbarch
, file
, frame
, regnum
);
965 struct reggroup
*reggroup
;
968 reggroup
= all_reggroup
;
970 reggroup
= general_reggroup
;
972 for (regnum
= 0; regnum
<= RISCV_LAST_REGNUM
; ++regnum
)
974 /* Zero never changes, so might as well hide by default. */
975 if (regnum
== RISCV_ZERO_REGNUM
&& !print_all
)
978 /* Registers with no name are not valid on this ISA. */
979 if (gdbarch_register_name (gdbarch
, regnum
) == NULL
980 || *(gdbarch_register_name (gdbarch
, regnum
)) == '\0')
983 /* Is the register in the group we're interested in? */
984 if (!gdbarch_register_reggroup_p (gdbarch
, regnum
, reggroup
))
987 riscv_print_one_register_info (gdbarch
, file
, frame
, regnum
);
992 /* Class that handles one decoded RiscV instruction. */
998 /* Enum of all the opcodes that GDB cares about during the prologue scan. */
1001 /* Unknown value is used at initialisation time. */
1004 /* These instructions are all the ones we are interested in during the
1014 /* These are needed for software breakpoint support. */
1023 /* These are needed for stepping over atomic sequences. */
1027 /* Other instructions are not interesting during the prologue scan, and
1042 void decode (struct gdbarch
*gdbarch
, CORE_ADDR pc
);
1044 /* Get the length of the instruction in bytes. */
1046 { return m_length
; }
1048 /* Get the opcode for this instruction. */
1049 enum opcode
opcode () const
1050 { return m_opcode
; }
1052 /* Get destination register field for this instruction. This is only
1053 valid if the OPCODE implies there is such a field for this
1058 /* Get the RS1 register field for this instruction. This is only valid
1059 if the OPCODE implies there is such a field for this instruction. */
1063 /* Get the RS2 register field for this instruction. This is only valid
1064 if the OPCODE implies there is such a field for this instruction. */
1068 /* Get the immediate for this instruction in signed form. This is only
1069 valid if the OPCODE implies there is such a field for this
1071 int imm_signed () const
1076 /* Extract 5 bit register field at OFFSET from instruction OPCODE. */
1077 int decode_register_index (unsigned long opcode
, int offset
)
1079 return (opcode
>> offset
) & 0x1F;
1082 /* Extract 5 bit register field at OFFSET from instruction OPCODE. */
1083 int decode_register_index_short (unsigned long opcode
, int offset
)
1085 return ((opcode
>> offset
) & 0x7) + 8;
1088 /* Helper for DECODE, decode 32-bit R-type instruction. */
1089 void decode_r_type_insn (enum opcode opcode
, ULONGEST ival
)
1092 m_rd
= decode_register_index (ival
, OP_SH_RD
);
1093 m_rs1
= decode_register_index (ival
, OP_SH_RS1
);
1094 m_rs2
= decode_register_index (ival
, OP_SH_RS2
);
1097 /* Helper for DECODE, decode 16-bit compressed R-type instruction. */
1098 void decode_cr_type_insn (enum opcode opcode
, ULONGEST ival
)
1101 m_rd
= m_rs1
= decode_register_index (ival
, OP_SH_CRS1S
);
1102 m_rs2
= decode_register_index (ival
, OP_SH_CRS2
);
1105 /* Helper for DECODE, decode 32-bit I-type instruction. */
1106 void decode_i_type_insn (enum opcode opcode
, ULONGEST ival
)
1109 m_rd
= decode_register_index (ival
, OP_SH_RD
);
1110 m_rs1
= decode_register_index (ival
, OP_SH_RS1
);
1111 m_imm
.s
= EXTRACT_ITYPE_IMM (ival
);
1114 /* Helper for DECODE, decode 16-bit compressed I-type instruction. */
1115 void decode_ci_type_insn (enum opcode opcode
, ULONGEST ival
)
1118 m_rd
= m_rs1
= decode_register_index (ival
, OP_SH_CRS1S
);
1119 m_imm
.s
= EXTRACT_RVC_IMM (ival
);
1122 /* Helper for DECODE, decode 32-bit S-type instruction. */
1123 void decode_s_type_insn (enum opcode opcode
, ULONGEST ival
)
1126 m_rs1
= decode_register_index (ival
, OP_SH_RS1
);
1127 m_rs2
= decode_register_index (ival
, OP_SH_RS2
);
1128 m_imm
.s
= EXTRACT_STYPE_IMM (ival
);
1131 /* Helper for DECODE, decode 16-bit CS-type instruction. The immediate
1132 encoding is different for each CS format instruction, so extracting
1133 the immediate is left up to the caller, who should pass the extracted
1134 immediate value through in IMM. */
1135 void decode_cs_type_insn (enum opcode opcode
, ULONGEST ival
, int imm
)
1139 m_rs1
= decode_register_index_short (ival
, OP_SH_CRS1S
);
1140 m_rs2
= decode_register_index_short (ival
, OP_SH_CRS2S
);
1143 /* Helper for DECODE, decode 16-bit CSS-type instruction. The immediate
1144 encoding is different for each CSS format instruction, so extracting
1145 the immediate is left up to the caller, who should pass the extracted
1146 immediate value through in IMM. */
1147 void decode_css_type_insn (enum opcode opcode
, ULONGEST ival
, int imm
)
1151 m_rs1
= RISCV_SP_REGNUM
;
1152 /* Not a compressed register number in this case. */
1153 m_rs2
= decode_register_index (ival
, OP_SH_CRS2
);
1156 /* Helper for DECODE, decode 32-bit U-type instruction. */
1157 void decode_u_type_insn (enum opcode opcode
, ULONGEST ival
)
1160 m_rd
= decode_register_index (ival
, OP_SH_RD
);
1161 m_imm
.s
= EXTRACT_UTYPE_IMM (ival
);
1164 /* Helper for DECODE, decode 32-bit J-type instruction. */
1165 void decode_j_type_insn (enum opcode opcode
, ULONGEST ival
)
1168 m_rd
= decode_register_index (ival
, OP_SH_RD
);
1169 m_imm
.s
= EXTRACT_UJTYPE_IMM (ival
);
1172 /* Helper for DECODE, decode 32-bit J-type instruction. */
1173 void decode_cj_type_insn (enum opcode opcode
, ULONGEST ival
)
1176 m_imm
.s
= EXTRACT_RVC_J_IMM (ival
);
1179 void decode_b_type_insn (enum opcode opcode
, ULONGEST ival
)
1182 m_rs1
= decode_register_index (ival
, OP_SH_RS1
);
1183 m_rs2
= decode_register_index (ival
, OP_SH_RS2
);
1184 m_imm
.s
= EXTRACT_SBTYPE_IMM (ival
);
1187 void decode_cb_type_insn (enum opcode opcode
, ULONGEST ival
)
1190 m_rs1
= decode_register_index_short (ival
, OP_SH_CRS1S
);
1191 m_imm
.s
= EXTRACT_RVC_B_IMM (ival
);
1194 /* Fetch instruction from target memory at ADDR, return the content of
1195 the instruction, and update LEN with the instruction length. */
1196 static ULONGEST
fetch_instruction (struct gdbarch
*gdbarch
,
1197 CORE_ADDR addr
, int *len
);
1199 /* The length of the instruction in bytes. Should be 2 or 4. */
1202 /* The instruction opcode. */
1203 enum opcode m_opcode
;
1205 /* The three possible registers an instruction might reference. Not
1206 every instruction fills in all of these registers. Which fields are
1207 valid depends on the opcode. The naming of these fields matches the
1208 naming in the riscv isa manual. */
1213 /* Possible instruction immediate. This is only valid if the instruction
1214 format contains an immediate, not all instruction, whether this is
1215 valid depends on the opcode. Despite only having one format for now
1216 the immediate is packed into a union, later instructions might require
1217 an unsigned formatted immediate, having the union in place now will
1218 reduce the need for code churn later. */
1219 union riscv_insn_immediate
1221 riscv_insn_immediate ()
1231 /* Fetch instruction from target memory at ADDR, return the content of the
1232 instruction, and update LEN with the instruction length. */
1235 riscv_insn::fetch_instruction (struct gdbarch
*gdbarch
,
1236 CORE_ADDR addr
, int *len
)
1238 enum bfd_endian byte_order
= gdbarch_byte_order_for_code (gdbarch
);
1240 int instlen
, status
;
1242 /* All insns are at least 16 bits. */
1243 status
= target_read_memory (addr
, buf
, 2);
1245 memory_error (TARGET_XFER_E_IO
, addr
);
1247 /* If we need more, grab it now. */
1248 instlen
= riscv_insn_length (buf
[0]);
1249 gdb_assert (instlen
<= sizeof (buf
));
1254 status
= target_read_memory (addr
+ 2, buf
+ 2, instlen
- 2);
1256 memory_error (TARGET_XFER_E_IO
, addr
+ 2);
1259 return extract_unsigned_integer (buf
, instlen
, byte_order
);
1262 /* Fetch from target memory an instruction at PC and decode it. This can
1263 throw an error if the memory access fails, callers are responsible for
1264 handling this error if that is appropriate. */
1267 riscv_insn::decode (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
1271 /* Fetch the instruction, and the instructions length. */
1272 ival
= fetch_instruction (gdbarch
, pc
, &m_length
);
1276 if (is_add_insn (ival
))
1277 decode_r_type_insn (ADD
, ival
);
1278 else if (is_addw_insn (ival
))
1279 decode_r_type_insn (ADDW
, ival
);
1280 else if (is_addi_insn (ival
))
1281 decode_i_type_insn (ADDI
, ival
);
1282 else if (is_addiw_insn (ival
))
1283 decode_i_type_insn (ADDIW
, ival
);
1284 else if (is_auipc_insn (ival
))
1285 decode_u_type_insn (AUIPC
, ival
);
1286 else if (is_lui_insn (ival
))
1287 decode_u_type_insn (LUI
, ival
);
1288 else if (is_sd_insn (ival
))
1289 decode_s_type_insn (SD
, ival
);
1290 else if (is_sw_insn (ival
))
1291 decode_s_type_insn (SW
, ival
);
1292 else if (is_jal_insn (ival
))
1293 decode_j_type_insn (JAL
, ival
);
1294 else if (is_jalr_insn (ival
))
1295 decode_i_type_insn (JALR
, ival
);
1296 else if (is_beq_insn (ival
))
1297 decode_b_type_insn (BEQ
, ival
);
1298 else if (is_bne_insn (ival
))
1299 decode_b_type_insn (BNE
, ival
);
1300 else if (is_blt_insn (ival
))
1301 decode_b_type_insn (BLT
, ival
);
1302 else if (is_bge_insn (ival
))
1303 decode_b_type_insn (BGE
, ival
);
1304 else if (is_bltu_insn (ival
))
1305 decode_b_type_insn (BLTU
, ival
);
1306 else if (is_bgeu_insn (ival
))
1307 decode_b_type_insn (BGEU
, ival
);
1308 else if (is_lr_w_insn (ival
))
1309 decode_r_type_insn (LR
, ival
);
1310 else if (is_lr_d_insn (ival
))
1311 decode_r_type_insn (LR
, ival
);
1312 else if (is_sc_w_insn (ival
))
1313 decode_r_type_insn (SC
, ival
);
1314 else if (is_sc_d_insn (ival
))
1315 decode_r_type_insn (SC
, ival
);
1317 /* None of the other fields are valid in this case. */
1320 else if (m_length
== 2)
1322 int xlen
= riscv_isa_xlen (gdbarch
);
1324 /* C_ADD and C_JALR have the same opcode. If RS2 is 0, then this is a
1325 C_JALR. So must try to match C_JALR first as it has more bits in
1327 if (is_c_jalr_insn (ival
))
1328 decode_cr_type_insn (JALR
, ival
);
1329 else if (is_c_add_insn (ival
))
1330 decode_cr_type_insn (ADD
, ival
);
1331 /* C_ADDW is RV64 and RV128 only. */
1332 else if (xlen
!= 4 && is_c_addw_insn (ival
))
1333 decode_cr_type_insn (ADDW
, ival
);
1334 else if (is_c_addi_insn (ival
))
1335 decode_ci_type_insn (ADDI
, ival
);
1336 /* C_ADDIW and C_JAL have the same opcode. C_ADDIW is RV64 and RV128
1337 only and C_JAL is RV32 only. */
1338 else if (xlen
!= 4 && is_c_addiw_insn (ival
))
1339 decode_ci_type_insn (ADDIW
, ival
);
1340 else if (xlen
== 4 && is_c_jal_insn (ival
))
1341 decode_cj_type_insn (JAL
, ival
);
1342 /* C_ADDI16SP and C_LUI have the same opcode. If RD is 2, then this is a
1343 C_ADDI16SP. So must try to match C_ADDI16SP first as it has more bits
1345 else if (is_c_addi16sp_insn (ival
))
1348 m_rd
= m_rs1
= decode_register_index (ival
, OP_SH_RD
);
1349 m_imm
.s
= EXTRACT_RVC_ADDI16SP_IMM (ival
);
1351 else if (is_c_addi4spn_insn (ival
))
1354 m_rd
= decode_register_index_short (ival
, OP_SH_CRS2S
);
1355 m_rs1
= RISCV_SP_REGNUM
;
1356 m_imm
.s
= EXTRACT_RVC_ADDI4SPN_IMM (ival
);
1358 else if (is_c_lui_insn (ival
))
1361 m_rd
= decode_register_index (ival
, OP_SH_CRS1S
);
1362 m_imm
.s
= EXTRACT_RVC_LUI_IMM (ival
);
1364 /* C_SD and C_FSW have the same opcode. C_SD is RV64 and RV128 only,
1365 and C_FSW is RV32 only. */
1366 else if (xlen
!= 4 && is_c_sd_insn (ival
))
1367 decode_cs_type_insn (SD
, ival
, EXTRACT_RVC_LD_IMM (ival
));
1368 else if (is_c_sw_insn (ival
))
1369 decode_cs_type_insn (SW
, ival
, EXTRACT_RVC_LW_IMM (ival
));
1370 else if (is_c_swsp_insn (ival
))
1371 decode_css_type_insn (SW
, ival
, EXTRACT_RVC_SWSP_IMM (ival
));
1372 else if (xlen
!= 4 && is_c_sdsp_insn (ival
))
1373 decode_css_type_insn (SW
, ival
, EXTRACT_RVC_SDSP_IMM (ival
));
1374 /* C_JR and C_MV have the same opcode. If RS2 is 0, then this is a C_JR.
1375 So must try to match C_JR first as it ahs more bits in mask. */
1376 else if (is_c_jr_insn (ival
))
1377 decode_cr_type_insn (JALR
, ival
);
1378 else if (is_c_j_insn (ival
))
1379 decode_cj_type_insn (JAL
, ival
);
1380 else if (is_c_beqz_insn (ival
))
1381 decode_cb_type_insn (BEQ
, ival
);
1382 else if (is_c_bnez_insn (ival
))
1383 decode_cb_type_insn (BNE
, ival
);
1385 /* None of the other fields of INSN are valid in this case. */
1390 /* This must be a 6 or 8 byte instruction, we don't currently decode
1391 any of these, so just ignore it. */
1392 gdb_assert (m_length
== 6 || m_length
== 8);
1397 /* The prologue scanner. This is currently only used for skipping the
1398 prologue of a function when the DWARF information is not sufficient.
1399 However, it is written with filling of the frame cache in mind, which
1400 is why different groups of stack setup instructions are split apart
1401 during the core of the inner loop. In the future, the intention is to
1402 extend this function to fully support building up a frame cache that
1403 can unwind register values when there is no DWARF information. */
1406 riscv_scan_prologue (struct gdbarch
*gdbarch
,
1407 CORE_ADDR start_pc
, CORE_ADDR end_pc
,
1408 struct riscv_unwind_cache
*cache
)
1410 CORE_ADDR cur_pc
, next_pc
, after_prologue_pc
;
1411 CORE_ADDR end_prologue_addr
= 0;
1413 /* Find an upper limit on the function prologue using the debug
1414 information. If the debug information could not be used to provide
1415 that bound, then use an arbitrary large number as the upper bound. */
1416 after_prologue_pc
= skip_prologue_using_sal (gdbarch
, start_pc
);
1417 if (after_prologue_pc
== 0)
1418 after_prologue_pc
= start_pc
+ 100; /* Arbitrary large number. */
1419 if (after_prologue_pc
< end_pc
)
1420 end_pc
= after_prologue_pc
;
1422 pv_t regs
[RISCV_NUM_INTEGER_REGS
]; /* Number of GPR. */
1423 for (int regno
= 0; regno
< RISCV_NUM_INTEGER_REGS
; regno
++)
1424 regs
[regno
] = pv_register (regno
, 0);
1425 pv_area
stack (RISCV_SP_REGNUM
, gdbarch_addr_bit (gdbarch
));
1427 if (riscv_debug_unwinder
)
1430 "Prologue scan for function starting at %s (limit %s)\n",
1431 core_addr_to_string (start_pc
),
1432 core_addr_to_string (end_pc
));
1434 for (next_pc
= cur_pc
= start_pc
; cur_pc
< end_pc
; cur_pc
= next_pc
)
1436 struct riscv_insn insn
;
1438 /* Decode the current instruction, and decide where the next
1439 instruction lives based on the size of this instruction. */
1440 insn
.decode (gdbarch
, cur_pc
);
1441 gdb_assert (insn
.length () > 0);
1442 next_pc
= cur_pc
+ insn
.length ();
1444 /* Look for common stack adjustment insns. */
1445 if ((insn
.opcode () == riscv_insn::ADDI
1446 || insn
.opcode () == riscv_insn::ADDIW
)
1447 && insn
.rd () == RISCV_SP_REGNUM
1448 && insn
.rs1 () == RISCV_SP_REGNUM
)
1450 /* Handle: addi sp, sp, -i
1451 or: addiw sp, sp, -i */
1452 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1453 gdb_assert (insn
.rs1 () < RISCV_NUM_INTEGER_REGS
);
1455 = pv_add_constant (regs
[insn
.rs1 ()], insn
.imm_signed ());
1457 else if ((insn
.opcode () == riscv_insn::SW
1458 || insn
.opcode () == riscv_insn::SD
)
1459 && (insn
.rs1 () == RISCV_SP_REGNUM
1460 || insn
.rs1 () == RISCV_FP_REGNUM
))
1462 /* Handle: sw reg, offset(sp)
1463 or: sd reg, offset(sp)
1464 or: sw reg, offset(s0)
1465 or: sd reg, offset(s0) */
1466 /* Instruction storing a register onto the stack. */
1467 gdb_assert (insn
.rs1 () < RISCV_NUM_INTEGER_REGS
);
1468 gdb_assert (insn
.rs2 () < RISCV_NUM_INTEGER_REGS
);
1469 stack
.store (pv_add_constant (regs
[insn
.rs1 ()], insn
.imm_signed ()),
1470 (insn
.opcode () == riscv_insn::SW
? 4 : 8),
1473 else if (insn
.opcode () == riscv_insn::ADDI
1474 && insn
.rd () == RISCV_FP_REGNUM
1475 && insn
.rs1 () == RISCV_SP_REGNUM
)
1477 /* Handle: addi s0, sp, size */
1478 /* Instructions setting up the frame pointer. */
1479 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1480 gdb_assert (insn
.rs1 () < RISCV_NUM_INTEGER_REGS
);
1482 = pv_add_constant (regs
[insn
.rs1 ()], insn
.imm_signed ());
1484 else if ((insn
.opcode () == riscv_insn::ADD
1485 || insn
.opcode () == riscv_insn::ADDW
)
1486 && insn
.rd () == RISCV_FP_REGNUM
1487 && insn
.rs1 () == RISCV_SP_REGNUM
1488 && insn
.rs2 () == RISCV_ZERO_REGNUM
)
1490 /* Handle: add s0, sp, 0
1491 or: addw s0, sp, 0 */
1492 /* Instructions setting up the frame pointer. */
1493 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1494 gdb_assert (insn
.rs1 () < RISCV_NUM_INTEGER_REGS
);
1495 regs
[insn
.rd ()] = pv_add_constant (regs
[insn
.rs1 ()], 0);
1497 else if ((insn
.opcode () == riscv_insn::ADDI
1498 && insn
.rd () == RISCV_ZERO_REGNUM
1499 && insn
.rs1 () == RISCV_ZERO_REGNUM
1500 && insn
.imm_signed () == 0))
1502 /* Handle: add x0, x0, 0 (NOP) */
1504 else if (insn
.opcode () == riscv_insn::AUIPC
)
1506 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1507 regs
[insn
.rd ()] = pv_constant (cur_pc
+ insn
.imm_signed ());
1509 else if (insn
.opcode () == riscv_insn::LUI
)
1511 /* Handle: lui REG, n
1512 Where REG is not gp register. */
1513 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1514 regs
[insn
.rd ()] = pv_constant (insn
.imm_signed ());
1516 else if (insn
.opcode () == riscv_insn::ADDI
)
1518 /* Handle: addi REG1, REG2, IMM */
1519 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1520 gdb_assert (insn
.rs1 () < RISCV_NUM_INTEGER_REGS
);
1522 = pv_add_constant (regs
[insn
.rs1 ()], insn
.imm_signed ());
1524 else if (insn
.opcode () == riscv_insn::ADD
)
1526 /* Handle: addi REG1, REG2, IMM */
1527 gdb_assert (insn
.rd () < RISCV_NUM_INTEGER_REGS
);
1528 gdb_assert (insn
.rs1 () < RISCV_NUM_INTEGER_REGS
);
1529 gdb_assert (insn
.rs2 () < RISCV_NUM_INTEGER_REGS
);
1530 regs
[insn
.rd ()] = pv_add (regs
[insn
.rs1 ()], regs
[insn
.rs2 ()]);
1534 end_prologue_addr
= cur_pc
;
1539 if (end_prologue_addr
== 0)
1540 end_prologue_addr
= cur_pc
;
1542 if (riscv_debug_unwinder
)
1543 fprintf_unfiltered (gdb_stdlog
, "End of prologue at %s\n",
1544 core_addr_to_string (end_prologue_addr
));
1548 /* Figure out if it is a frame pointer or just a stack pointer. Also
1549 the offset held in the pv_t is from the original register value to
1550 the current value, which for a grows down stack means a negative
1551 value. The FRAME_BASE_OFFSET is the negation of this, how to get
1552 from the current value to the original value. */
1553 if (pv_is_register (regs
[RISCV_FP_REGNUM
], RISCV_SP_REGNUM
))
1555 cache
->frame_base_reg
= RISCV_FP_REGNUM
;
1556 cache
->frame_base_offset
= -regs
[RISCV_FP_REGNUM
].k
;
1560 cache
->frame_base_reg
= RISCV_SP_REGNUM
;
1561 cache
->frame_base_offset
= -regs
[RISCV_SP_REGNUM
].k
;
1564 /* Assign offset from old SP to all saved registers. As we don't
1565 have the previous value for the frame base register at this
1566 point, we store the offset as the address in the trad_frame, and
1567 then convert this to an actual address later. */
1568 for (int i
= 0; i
<= RISCV_NUM_INTEGER_REGS
; i
++)
1571 if (stack
.find_reg (gdbarch
, i
, &offset
))
1573 if (riscv_debug_unwinder
)
1575 /* Display OFFSET as a signed value, the offsets are from
1576 the frame base address to the registers location on
1577 the stack, with a descending stack this means the
1578 offsets are always negative. */
1579 fprintf_unfiltered (gdb_stdlog
,
1580 "Register $%s at stack offset %s\n",
1581 gdbarch_register_name (gdbarch
, i
),
1582 plongest ((LONGEST
) offset
));
1584 trad_frame_set_addr (cache
->regs
, i
, offset
);
1589 return end_prologue_addr
;
1592 /* Implement the riscv_skip_prologue gdbarch method. */
1595 riscv_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
1597 CORE_ADDR func_addr
;
1599 /* See if we can determine the end of the prologue via the symbol
1600 table. If so, then return either PC, or the PC after the
1601 prologue, whichever is greater. */
1602 if (find_pc_partial_function (pc
, NULL
, &func_addr
, NULL
))
1604 CORE_ADDR post_prologue_pc
1605 = skip_prologue_using_sal (gdbarch
, func_addr
);
1607 if (post_prologue_pc
!= 0)
1608 return std::max (pc
, post_prologue_pc
);
1611 /* Can't determine prologue from the symbol table, need to examine
1612 instructions. Pass -1 for the end address to indicate the prologue
1613 scanner can scan as far as it needs to find the end of the prologue. */
1614 return riscv_scan_prologue (gdbarch
, pc
, ((CORE_ADDR
) -1), NULL
);
1617 /* Implement the gdbarch push dummy code callback. */
1620 riscv_push_dummy_code (struct gdbarch
*gdbarch
, CORE_ADDR sp
,
1621 CORE_ADDR funaddr
, struct value
**args
, int nargs
,
1622 struct type
*value_type
, CORE_ADDR
*real_pc
,
1623 CORE_ADDR
*bp_addr
, struct regcache
*regcache
)
1625 /* A nop instruction is 'add x0, x0, 0'. */
1626 static const gdb_byte nop_insn
[] = { 0x13, 0x00, 0x00, 0x00 };
1628 /* Allocate space for a breakpoint, and keep the stack correctly
1629 aligned. The space allocated here must be at least big enough to
1630 accommodate the NOP_INSN defined above. */
1635 /* When we insert a breakpoint we select whether to use a compressed
1636 breakpoint or not based on the existing contents of the memory.
1638 If the breakpoint is being placed onto the stack as part of setting up
1639 for an inferior call from GDB, then the existing stack contents may
1640 randomly appear to be a compressed instruction, causing GDB to insert
1641 a compressed breakpoint. If this happens on a target that does not
1642 support compressed instructions then this could cause problems.
1644 To prevent this issue we write an uncompressed nop onto the stack at
1645 the location where the breakpoint will be inserted. In this way we
1646 ensure that we always use an uncompressed breakpoint, which should
1647 work on all targets.
1649 We call TARGET_WRITE_MEMORY here so that if the write fails we don't
1650 throw an exception. Instead we ignore the error and move on. The
1651 assumption is that either GDB will error later when actually trying to
1652 insert a software breakpoint, or GDB will use hardware breakpoints and
1653 there will be no need to write to memory later. */
1654 int status
= target_write_memory (*bp_addr
, nop_insn
, sizeof (nop_insn
));
1656 if (riscv_debug_breakpoints
|| riscv_debug_infcall
)
1657 fprintf_unfiltered (gdb_stdlog
,
1658 "Writing %s-byte nop instruction to %s: %s\n",
1659 plongest (sizeof (nop_insn
)),
1660 paddress (gdbarch
, *bp_addr
),
1661 (status
== 0 ? "success" : "failed"));
1666 /* Implement the gdbarch type alignment method, overrides the generic
1667 alignment algorithm for anything that is RISC-V specific. */
1670 riscv_type_align (gdbarch
*gdbarch
, type
*type
)
1672 type
= check_typedef (type
);
1673 if (TYPE_CODE (type
) == TYPE_CODE_ARRAY
&& TYPE_VECTOR (type
))
1674 return std::min (TYPE_LENGTH (type
), (ULONGEST
) BIGGEST_ALIGNMENT
);
1676 /* Anything else will be aligned by the generic code. */
1680 /* Holds information about a single argument either being passed to an
1681 inferior function, or returned from an inferior function. This includes
1682 information about the size, type, etc of the argument, and also
1683 information about how the argument will be passed (or returned). */
1685 struct riscv_arg_info
1687 /* Contents of the argument. */
1688 const gdb_byte
*contents
;
1690 /* Length of argument. */
1693 /* Alignment required for an argument of this type. */
1696 /* The type for this argument. */
1699 /* Each argument can have either 1 or 2 locations assigned to it. Each
1700 location describes where part of the argument will be placed. The
1701 second location is valid based on the LOC_TYPE and C_LENGTH fields
1702 of the first location (which is always valid). */
1705 /* What type of location this is. */
1708 /* Argument passed in a register. */
1711 /* Argument passed as an on stack argument. */
1714 /* Argument passed by reference. The second location is always
1715 valid for a BY_REF argument, and describes where the address
1716 of the BY_REF argument should be placed. */
1720 /* Information that depends on the location type. */
1723 /* Which register number to use. */
1726 /* The offset into the stack region. */
1730 /* The length of contents covered by this location. If this is less
1731 than the total length of the argument, then the second location
1732 will be valid, and will describe where the rest of the argument
1736 /* The offset within CONTENTS for this part of the argument. Will
1737 always be 0 for the first part. For the second part of the
1738 argument, this might be the C_LENGTH value of the first part,
1739 however, if we are passing a structure in two registers, and there's
1740 is padding between the first and second field, then this offset
1741 might be greater than the length of the first argument part. When
1742 the second argument location is not holding part of the argument
1743 value, but is instead holding the address of a reference argument,
1744 then this offset will be set to 0. */
1748 /* TRUE if this is an unnamed argument. */
1752 /* Information about a set of registers being used for passing arguments as
1753 part of a function call. The register set must be numerically
1754 sequential from NEXT_REGNUM to LAST_REGNUM. The register set can be
1755 disabled from use by setting NEXT_REGNUM greater than LAST_REGNUM. */
1757 struct riscv_arg_reg
1759 riscv_arg_reg (int first
, int last
)
1760 : next_regnum (first
),
1766 /* The GDB register number to use in this set. */
1769 /* The last GDB register number to use in this set. */
1773 /* Arguments can be passed as on stack arguments, or by reference. The
1774 on stack arguments must be in a continuous region starting from $sp,
1775 while the by reference arguments can be anywhere, but we'll put them
1776 on the stack after (at higher address) the on stack arguments.
1778 This might not be the right approach to take. The ABI is clear that
1779 an argument passed by reference can be modified by the callee, which
1780 us placing the argument (temporarily) onto the stack will not achieve
1781 (changes will be lost). There's also the possibility that very large
1782 arguments could overflow the stack.
1784 This struct is used to track offset into these two areas for where
1785 arguments are to be placed. */
1786 struct riscv_memory_offsets
1788 riscv_memory_offsets ()
1795 /* Offset into on stack argument area. */
1798 /* Offset into the pass by reference area. */
1802 /* Holds information about where arguments to a call will be placed. This
1803 is updated as arguments are added onto the call, and can be used to
1804 figure out where the next argument should be placed. */
1806 struct riscv_call_info
1808 riscv_call_info (struct gdbarch
*gdbarch
)
1809 : int_regs (RISCV_A0_REGNUM
, RISCV_A0_REGNUM
+ 7),
1810 float_regs (RISCV_FA0_REGNUM
, RISCV_FA0_REGNUM
+ 7)
1812 xlen
= riscv_abi_xlen (gdbarch
);
1813 flen
= riscv_abi_flen (gdbarch
);
1815 /* Disable use of floating point registers if needed. */
1816 if (!riscv_has_fp_abi (gdbarch
))
1817 float_regs
.next_regnum
= float_regs
.last_regnum
+ 1;
1820 /* Track the memory areas used for holding in-memory arguments to a
1822 struct riscv_memory_offsets memory
;
1824 /* Holds information about the next integer register to use for passing
1826 struct riscv_arg_reg int_regs
;
1828 /* Holds information about the next floating point register to use for
1829 passing an argument. */
1830 struct riscv_arg_reg float_regs
;
1832 /* The XLEN and FLEN are copied in to this structure for convenience, and
1833 are just the results of calling RISCV_ABI_XLEN and RISCV_ABI_FLEN. */
1838 /* Return the number of registers available for use as parameters in the
1839 register set REG. Returned value can be 0 or more. */
1842 riscv_arg_regs_available (struct riscv_arg_reg
*reg
)
1844 if (reg
->next_regnum
> reg
->last_regnum
)
1847 return (reg
->last_regnum
- reg
->next_regnum
+ 1);
1850 /* If there is at least one register available in the register set REG then
1851 the next register from REG is assigned to LOC and the length field of
1852 LOC is updated to LENGTH. The register set REG is updated to indicate
1853 that the assigned register is no longer available and the function
1856 If there are no registers available in REG then the function returns
1857 false, and LOC and REG are unchanged. */
1860 riscv_assign_reg_location (struct riscv_arg_info::location
*loc
,
1861 struct riscv_arg_reg
*reg
,
1862 int length
, int offset
)
1864 if (reg
->next_regnum
<= reg
->last_regnum
)
1866 loc
->loc_type
= riscv_arg_info::location::in_reg
;
1867 loc
->loc_data
.regno
= reg
->next_regnum
;
1869 loc
->c_length
= length
;
1870 loc
->c_offset
= offset
;
1877 /* Assign LOC a location as the next stack parameter, and update MEMORY to
1878 record that an area of stack has been used to hold the parameter
1881 The length field of LOC is updated to LENGTH, the length of the
1882 parameter being stored, and ALIGN is the alignment required by the
1883 parameter, which will affect how memory is allocated out of MEMORY. */
1886 riscv_assign_stack_location (struct riscv_arg_info::location
*loc
,
1887 struct riscv_memory_offsets
*memory
,
1888 int length
, int align
)
1890 loc
->loc_type
= riscv_arg_info::location::on_stack
;
1892 = align_up (memory
->arg_offset
, align
);
1893 loc
->loc_data
.offset
= memory
->arg_offset
;
1894 memory
->arg_offset
+= length
;
1895 loc
->c_length
= length
;
1897 /* Offset is always 0, either we're the first location part, in which
1898 case we're reading content from the start of the argument, or we're
1899 passing the address of a reference argument, so 0. */
1903 /* Update AINFO, which describes an argument that should be passed or
1904 returned using the integer ABI. The argloc fields within AINFO are
1905 updated to describe the location in which the argument will be passed to
1906 a function, or returned from a function.
1908 The CINFO structure contains the ongoing call information, the holds
1909 information such as which argument registers are remaining to be
1910 assigned to parameter, and how much memory has been used by parameters
1913 By examining the state of CINFO a suitable location can be selected,
1914 and assigned to AINFO. */
1917 riscv_call_arg_scalar_int (struct riscv_arg_info
*ainfo
,
1918 struct riscv_call_info
*cinfo
)
1920 if (ainfo
->length
> (2 * cinfo
->xlen
))
1922 /* Argument is going to be passed by reference. */
1923 ainfo
->argloc
[0].loc_type
1924 = riscv_arg_info::location::by_ref
;
1925 cinfo
->memory
.ref_offset
1926 = align_up (cinfo
->memory
.ref_offset
, ainfo
->align
);
1927 ainfo
->argloc
[0].loc_data
.offset
= cinfo
->memory
.ref_offset
;
1928 cinfo
->memory
.ref_offset
+= ainfo
->length
;
1929 ainfo
->argloc
[0].c_length
= ainfo
->length
;
1931 /* The second location for this argument is given over to holding the
1932 address of the by-reference data. Pass 0 for the offset as this
1933 is not part of the actual argument value. */
1934 if (!riscv_assign_reg_location (&ainfo
->argloc
[1],
1937 riscv_assign_stack_location (&ainfo
->argloc
[1],
1938 &cinfo
->memory
, cinfo
->xlen
,
1943 int len
= std::min (ainfo
->length
, cinfo
->xlen
);
1944 int align
= std::max (ainfo
->align
, cinfo
->xlen
);
1946 /* Unnamed arguments in registers that require 2*XLEN alignment are
1947 passed in an aligned register pair. */
1948 if (ainfo
->is_unnamed
&& (align
== cinfo
->xlen
* 2)
1949 && cinfo
->int_regs
.next_regnum
& 1)
1950 cinfo
->int_regs
.next_regnum
++;
1952 if (!riscv_assign_reg_location (&ainfo
->argloc
[0],
1953 &cinfo
->int_regs
, len
, 0))
1954 riscv_assign_stack_location (&ainfo
->argloc
[0],
1955 &cinfo
->memory
, len
, align
);
1957 if (len
< ainfo
->length
)
1959 len
= ainfo
->length
- len
;
1960 if (!riscv_assign_reg_location (&ainfo
->argloc
[1],
1961 &cinfo
->int_regs
, len
,
1963 riscv_assign_stack_location (&ainfo
->argloc
[1],
1964 &cinfo
->memory
, len
, cinfo
->xlen
);
1969 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
1970 is being passed with the floating point ABI. */
1973 riscv_call_arg_scalar_float (struct riscv_arg_info
*ainfo
,
1974 struct riscv_call_info
*cinfo
)
1976 if (ainfo
->length
> cinfo
->flen
|| ainfo
->is_unnamed
)
1977 return riscv_call_arg_scalar_int (ainfo
, cinfo
);
1980 if (!riscv_assign_reg_location (&ainfo
->argloc
[0],
1983 return riscv_call_arg_scalar_int (ainfo
, cinfo
);
1987 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
1988 is a complex floating point argument, and is therefore handled
1989 differently to other argument types. */
1992 riscv_call_arg_complex_float (struct riscv_arg_info
*ainfo
,
1993 struct riscv_call_info
*cinfo
)
1995 if (ainfo
->length
<= (2 * cinfo
->flen
)
1996 && riscv_arg_regs_available (&cinfo
->float_regs
) >= 2
1997 && !ainfo
->is_unnamed
)
2000 int len
= ainfo
->length
/ 2;
2002 result
= riscv_assign_reg_location (&ainfo
->argloc
[0],
2003 &cinfo
->float_regs
, len
, 0);
2004 gdb_assert (result
);
2006 result
= riscv_assign_reg_location (&ainfo
->argloc
[1],
2007 &cinfo
->float_regs
, len
, len
);
2008 gdb_assert (result
);
2011 return riscv_call_arg_scalar_int (ainfo
, cinfo
);
2014 /* A structure used for holding information about a structure type within
2015 the inferior program. The RiscV ABI has special rules for handling some
2016 structures with a single field or with two fields. The counting of
2017 fields here is done after flattening out all nested structures. */
2019 class riscv_struct_info
2022 riscv_struct_info ()
2023 : m_number_of_fields (0),
2024 m_types
{ nullptr, nullptr },
2030 /* Analyse TYPE descending into nested structures, count the number of
2031 scalar fields and record the types of the first two fields found. */
2032 void analyse (struct type
*type
)
2034 analyse_inner (type
, 0);
2037 /* The number of scalar fields found in the analysed type. This is
2038 currently only accurate if the value returned is 0, 1, or 2 as the
2039 analysis stops counting when the number of fields is 3. This is
2040 because the RiscV ABI only has special cases for 1 or 2 fields,
2041 anything else we just don't care about. */
2042 int number_of_fields () const
2043 { return m_number_of_fields
; }
2045 /* Return the type for scalar field INDEX within the analysed type. Will
2046 return nullptr if there is no field at that index. Only INDEX values
2047 0 and 1 can be requested as the RiscV ABI only has special cases for
2048 structures with 1 or 2 fields. */
2049 struct type
*field_type (int index
) const
2051 gdb_assert (index
< (sizeof (m_types
) / sizeof (m_types
[0])));
2052 return m_types
[index
];
2055 /* Return the offset of scalar field INDEX within the analysed type. Will
2056 return 0 if there is no field at that index. Only INDEX values 0 and
2057 1 can be requested as the RiscV ABI only has special cases for
2058 structures with 1 or 2 fields. */
2059 int field_offset (int index
) const
2061 gdb_assert (index
< (sizeof (m_offsets
) / sizeof (m_offsets
[0])));
2062 return m_offsets
[index
];
2066 /* The number of scalar fields found within the structure after recursing
2067 into nested structures. */
2068 int m_number_of_fields
;
2070 /* The types of the first two scalar fields found within the structure
2071 after recursing into nested structures. */
2072 struct type
*m_types
[2];
2074 /* The offsets of the first two scalar fields found within the structure
2075 after recursing into nested structures. */
2078 /* Recursive core for ANALYSE, the OFFSET parameter tracks the byte
2079 offset from the start of the top level structure being analysed. */
2080 void analyse_inner (struct type
*type
, int offset
);
2083 /* See description in class declaration. */
2086 riscv_struct_info::analyse_inner (struct type
*type
, int offset
)
2088 unsigned int count
= TYPE_NFIELDS (type
);
2091 for (i
= 0; i
< count
; ++i
)
2093 if (TYPE_FIELD_LOC_KIND (type
, i
) != FIELD_LOC_KIND_BITPOS
)
2096 struct type
*field_type
= TYPE_FIELD_TYPE (type
, i
);
2097 field_type
= check_typedef (field_type
);
2099 = offset
+ TYPE_FIELD_BITPOS (type
, i
) / TARGET_CHAR_BIT
;
2101 switch (TYPE_CODE (field_type
))
2103 case TYPE_CODE_STRUCT
:
2104 analyse_inner (field_type
, field_offset
);
2108 /* RiscV only flattens out structures. Anything else does not
2109 need to be flattened, we just record the type, and when we
2110 look at the analysis results we'll realise this is not a
2111 structure we can special case, and pass the structure in
2113 if (m_number_of_fields
< 2)
2115 m_types
[m_number_of_fields
] = field_type
;
2116 m_offsets
[m_number_of_fields
] = field_offset
;
2118 m_number_of_fields
++;
2122 /* RiscV only has special handling for structures with 1 or 2 scalar
2123 fields, any more than that and the structure is just passed in
2124 memory. We can safely drop out early when we find 3 or more
2127 if (m_number_of_fields
> 2)
2132 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
2133 is a structure. Small structures on RiscV have some special case
2134 handling in order that the structure might be passed in register.
2135 Larger structures are passed in memory. After assigning location
2136 information to AINFO, CINFO will have been updated. */
2139 riscv_call_arg_struct (struct riscv_arg_info
*ainfo
,
2140 struct riscv_call_info
*cinfo
)
2142 if (riscv_arg_regs_available (&cinfo
->float_regs
) >= 1)
2144 struct riscv_struct_info sinfo
;
2146 sinfo
.analyse (ainfo
->type
);
2147 if (sinfo
.number_of_fields () == 1
2148 && TYPE_CODE (sinfo
.field_type (0)) == TYPE_CODE_COMPLEX
)
2150 /* The following is similar to RISCV_CALL_ARG_COMPLEX_FLOAT,
2151 except we use the type of the complex field instead of the
2152 type from AINFO, and the first location might be at a non-zero
2154 if (TYPE_LENGTH (sinfo
.field_type (0)) <= (2 * cinfo
->flen
)
2155 && riscv_arg_regs_available (&cinfo
->float_regs
) >= 2
2156 && !ainfo
->is_unnamed
)
2159 int len
= TYPE_LENGTH (sinfo
.field_type (0)) / 2;
2160 int offset
= sinfo
.field_offset (0);
2162 result
= riscv_assign_reg_location (&ainfo
->argloc
[0],
2163 &cinfo
->float_regs
, len
,
2165 gdb_assert (result
);
2167 result
= riscv_assign_reg_location (&ainfo
->argloc
[1],
2168 &cinfo
->float_regs
, len
,
2170 gdb_assert (result
);
2173 riscv_call_arg_scalar_int (ainfo
, cinfo
);
2177 if (sinfo
.number_of_fields () == 1
2178 && TYPE_CODE (sinfo
.field_type (0)) == TYPE_CODE_FLT
)
2180 /* The following is similar to RISCV_CALL_ARG_SCALAR_FLOAT,
2181 except we use the type of the first scalar field instead of
2182 the type from AINFO. Also the location might be at a non-zero
2184 if (TYPE_LENGTH (sinfo
.field_type (0)) > cinfo
->flen
2185 || ainfo
->is_unnamed
)
2186 riscv_call_arg_scalar_int (ainfo
, cinfo
);
2189 int offset
= sinfo
.field_offset (0);
2190 int len
= TYPE_LENGTH (sinfo
.field_type (0));
2192 if (!riscv_assign_reg_location (&ainfo
->argloc
[0],
2195 riscv_call_arg_scalar_int (ainfo
, cinfo
);
2200 if (sinfo
.number_of_fields () == 2
2201 && TYPE_CODE (sinfo
.field_type (0)) == TYPE_CODE_FLT
2202 && TYPE_LENGTH (sinfo
.field_type (0)) <= cinfo
->flen
2203 && TYPE_CODE (sinfo
.field_type (1)) == TYPE_CODE_FLT
2204 && TYPE_LENGTH (sinfo
.field_type (1)) <= cinfo
->flen
2205 && riscv_arg_regs_available (&cinfo
->float_regs
) >= 2)
2207 int len0
= TYPE_LENGTH (sinfo
.field_type (0));
2208 int offset
= sinfo
.field_offset (0);
2209 if (!riscv_assign_reg_location (&ainfo
->argloc
[0],
2210 &cinfo
->float_regs
, len0
, offset
))
2211 error (_("failed during argument setup"));
2213 int len1
= TYPE_LENGTH (sinfo
.field_type (1));
2214 offset
= sinfo
.field_offset (1);
2215 gdb_assert (len1
<= (TYPE_LENGTH (ainfo
->type
)
2216 - TYPE_LENGTH (sinfo
.field_type (0))));
2218 if (!riscv_assign_reg_location (&ainfo
->argloc
[1],
2221 error (_("failed during argument setup"));
2225 if (sinfo
.number_of_fields () == 2
2226 && riscv_arg_regs_available (&cinfo
->int_regs
) >= 1
2227 && (TYPE_CODE (sinfo
.field_type (0)) == TYPE_CODE_FLT
2228 && TYPE_LENGTH (sinfo
.field_type (0)) <= cinfo
->flen
2229 && is_integral_type (sinfo
.field_type (1))
2230 && TYPE_LENGTH (sinfo
.field_type (1)) <= cinfo
->xlen
))
2232 int len0
= TYPE_LENGTH (sinfo
.field_type (0));
2233 int offset
= sinfo
.field_offset (0);
2234 if (!riscv_assign_reg_location (&ainfo
->argloc
[0],
2235 &cinfo
->float_regs
, len0
, offset
))
2236 error (_("failed during argument setup"));
2238 int len1
= TYPE_LENGTH (sinfo
.field_type (1));
2239 offset
= sinfo
.field_offset (1);
2240 gdb_assert (len1
<= cinfo
->xlen
);
2241 if (!riscv_assign_reg_location (&ainfo
->argloc
[1],
2242 &cinfo
->int_regs
, len1
, offset
))
2243 error (_("failed during argument setup"));
2247 if (sinfo
.number_of_fields () == 2
2248 && riscv_arg_regs_available (&cinfo
->int_regs
) >= 1
2249 && (is_integral_type (sinfo
.field_type (0))
2250 && TYPE_LENGTH (sinfo
.field_type (0)) <= cinfo
->xlen
2251 && TYPE_CODE (sinfo
.field_type (1)) == TYPE_CODE_FLT
2252 && TYPE_LENGTH (sinfo
.field_type (1)) <= cinfo
->flen
))
2254 int len0
= TYPE_LENGTH (sinfo
.field_type (0));
2255 int len1
= TYPE_LENGTH (sinfo
.field_type (1));
2257 gdb_assert (len0
<= cinfo
->xlen
);
2258 gdb_assert (len1
<= cinfo
->flen
);
2260 int offset
= sinfo
.field_offset (0);
2261 if (!riscv_assign_reg_location (&ainfo
->argloc
[0],
2262 &cinfo
->int_regs
, len0
, offset
))
2263 error (_("failed during argument setup"));
2265 offset
= sinfo
.field_offset (1);
2266 if (!riscv_assign_reg_location (&ainfo
->argloc
[1],
2269 error (_("failed during argument setup"));
2275 /* Non of the structure flattening cases apply, so we just pass using
2277 riscv_call_arg_scalar_int (ainfo
, cinfo
);
2280 /* Assign a location to call (or return) argument AINFO, the location is
2281 selected from CINFO which holds information about what call argument
2282 locations are available for use next. The TYPE is the type of the
2283 argument being passed, this information is recorded into AINFO (along
2284 with some additional information derived from the type). IS_UNNAMED
2285 is true if this is an unnamed (stdarg) argument, this info is also
2286 recorded into AINFO.
2288 After assigning a location to AINFO, CINFO will have been updated. */
2291 riscv_arg_location (struct gdbarch
*gdbarch
,
2292 struct riscv_arg_info
*ainfo
,
2293 struct riscv_call_info
*cinfo
,
2294 struct type
*type
, bool is_unnamed
)
2297 ainfo
->length
= TYPE_LENGTH (ainfo
->type
);
2298 ainfo
->align
= type_align (ainfo
->type
);
2299 ainfo
->is_unnamed
= is_unnamed
;
2300 ainfo
->contents
= nullptr;
2301 ainfo
->argloc
[0].c_length
= 0;
2302 ainfo
->argloc
[1].c_length
= 0;
2304 switch (TYPE_CODE (ainfo
->type
))
2307 case TYPE_CODE_BOOL
:
2308 case TYPE_CODE_CHAR
:
2309 case TYPE_CODE_RANGE
:
2310 case TYPE_CODE_ENUM
:
2312 if (ainfo
->length
<= cinfo
->xlen
)
2314 ainfo
->type
= builtin_type (gdbarch
)->builtin_long
;
2315 ainfo
->length
= cinfo
->xlen
;
2317 else if (ainfo
->length
<= (2 * cinfo
->xlen
))
2319 ainfo
->type
= builtin_type (gdbarch
)->builtin_long_long
;
2320 ainfo
->length
= 2 * cinfo
->xlen
;
2323 /* Recalculate the alignment requirement. */
2324 ainfo
->align
= type_align (ainfo
->type
);
2325 riscv_call_arg_scalar_int (ainfo
, cinfo
);
2329 riscv_call_arg_scalar_float (ainfo
, cinfo
);
2332 case TYPE_CODE_COMPLEX
:
2333 riscv_call_arg_complex_float (ainfo
, cinfo
);
2336 case TYPE_CODE_STRUCT
:
2337 riscv_call_arg_struct (ainfo
, cinfo
);
2341 riscv_call_arg_scalar_int (ainfo
, cinfo
);
2346 /* Used for printing debug information about the call argument location in
2347 INFO to STREAM. The addresses in SP_REFS and SP_ARGS are the base
2348 addresses for the location of pass-by-reference and
2349 arguments-on-the-stack memory areas. */
2352 riscv_print_arg_location (ui_file
*stream
, struct gdbarch
*gdbarch
,
2353 struct riscv_arg_info
*info
,
2354 CORE_ADDR sp_refs
, CORE_ADDR sp_args
)
2356 fprintf_unfiltered (stream
, "type: '%s', length: 0x%x, alignment: 0x%x",
2357 TYPE_SAFE_NAME (info
->type
), info
->length
, info
->align
);
2358 switch (info
->argloc
[0].loc_type
)
2360 case riscv_arg_info::location::in_reg
:
2362 (stream
, ", register %s",
2363 gdbarch_register_name (gdbarch
, info
->argloc
[0].loc_data
.regno
));
2364 if (info
->argloc
[0].c_length
< info
->length
)
2366 switch (info
->argloc
[1].loc_type
)
2368 case riscv_arg_info::location::in_reg
:
2370 (stream
, ", register %s",
2371 gdbarch_register_name (gdbarch
,
2372 info
->argloc
[1].loc_data
.regno
));
2375 case riscv_arg_info::location::on_stack
:
2376 fprintf_unfiltered (stream
, ", on stack at offset 0x%x",
2377 info
->argloc
[1].loc_data
.offset
);
2380 case riscv_arg_info::location::by_ref
:
2382 /* The second location should never be a reference, any
2383 argument being passed by reference just places its address
2384 in the first location and is done. */
2385 error (_("invalid argument location"));
2389 if (info
->argloc
[1].c_offset
> info
->argloc
[0].c_length
)
2390 fprintf_unfiltered (stream
, " (offset 0x%x)",
2391 info
->argloc
[1].c_offset
);
2395 case riscv_arg_info::location::on_stack
:
2396 fprintf_unfiltered (stream
, ", on stack at offset 0x%x",
2397 info
->argloc
[0].loc_data
.offset
);
2400 case riscv_arg_info::location::by_ref
:
2402 (stream
, ", by reference, data at offset 0x%x (%s)",
2403 info
->argloc
[0].loc_data
.offset
,
2404 core_addr_to_string (sp_refs
+ info
->argloc
[0].loc_data
.offset
));
2405 if (info
->argloc
[1].loc_type
2406 == riscv_arg_info::location::in_reg
)
2408 (stream
, ", address in register %s",
2409 gdbarch_register_name (gdbarch
, info
->argloc
[1].loc_data
.regno
));
2412 gdb_assert (info
->argloc
[1].loc_type
2413 == riscv_arg_info::location::on_stack
);
2415 (stream
, ", address on stack at offset 0x%x (%s)",
2416 info
->argloc
[1].loc_data
.offset
,
2417 core_addr_to_string (sp_args
+ info
->argloc
[1].loc_data
.offset
));
2422 gdb_assert_not_reached (_("unknown argument location type"));
2426 /* Implement the push dummy call gdbarch callback. */
2429 riscv_push_dummy_call (struct gdbarch
*gdbarch
,
2430 struct value
*function
,
2431 struct regcache
*regcache
,
2434 struct value
**args
,
2436 function_call_return_method return_method
,
2437 CORE_ADDR struct_addr
)
2440 CORE_ADDR sp_args
, sp_refs
;
2441 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2443 struct riscv_arg_info
*arg_info
=
2444 (struct riscv_arg_info
*) alloca (nargs
* sizeof (struct riscv_arg_info
));
2446 struct riscv_call_info
call_info (gdbarch
);
2450 struct type
*ftype
= check_typedef (value_type (function
));
2452 if (TYPE_CODE (ftype
) == TYPE_CODE_PTR
)
2453 ftype
= check_typedef (TYPE_TARGET_TYPE (ftype
));
2455 /* We'll use register $a0 if we're returning a struct. */
2456 if (return_method
== return_method_struct
)
2457 ++call_info
.int_regs
.next_regnum
;
2459 for (i
= 0; i
< nargs
; ++i
)
2461 struct value
*arg_value
;
2462 struct type
*arg_type
;
2463 struct riscv_arg_info
*info
= &arg_info
[i
];
2465 arg_value
= args
[i
];
2466 arg_type
= check_typedef (value_type (arg_value
));
2468 riscv_arg_location (gdbarch
, info
, &call_info
, arg_type
,
2469 TYPE_VARARGS (ftype
) && i
>= TYPE_NFIELDS (ftype
));
2471 if (info
->type
!= arg_type
)
2472 arg_value
= value_cast (info
->type
, arg_value
);
2473 info
->contents
= value_contents (arg_value
);
2476 /* Adjust the stack pointer and align it. */
2477 sp
= sp_refs
= align_down (sp
- call_info
.memory
.ref_offset
, SP_ALIGNMENT
);
2478 sp
= sp_args
= align_down (sp
- call_info
.memory
.arg_offset
, SP_ALIGNMENT
);
2480 if (riscv_debug_infcall
> 0)
2482 fprintf_unfiltered (gdb_stdlog
, "dummy call args:\n");
2483 fprintf_unfiltered (gdb_stdlog
, ": floating point ABI %s in use\n",
2484 (riscv_has_fp_abi (gdbarch
) ? "is" : "is not"));
2485 fprintf_unfiltered (gdb_stdlog
, ": xlen: %d\n: flen: %d\n",
2486 call_info
.xlen
, call_info
.flen
);
2487 if (return_method
== return_method_struct
)
2488 fprintf_unfiltered (gdb_stdlog
,
2489 "[*] struct return pointer in register $A0\n");
2490 for (i
= 0; i
< nargs
; ++i
)
2492 struct riscv_arg_info
*info
= &arg_info
[i
];
2494 fprintf_unfiltered (gdb_stdlog
, "[%2d] ", i
);
2495 riscv_print_arg_location (gdb_stdlog
, gdbarch
, info
, sp_refs
, sp_args
);
2496 fprintf_unfiltered (gdb_stdlog
, "\n");
2498 if (call_info
.memory
.arg_offset
> 0
2499 || call_info
.memory
.ref_offset
> 0)
2501 fprintf_unfiltered (gdb_stdlog
, " Original sp: %s\n",
2502 core_addr_to_string (osp
));
2503 fprintf_unfiltered (gdb_stdlog
, "Stack required (for args): 0x%x\n",
2504 call_info
.memory
.arg_offset
);
2505 fprintf_unfiltered (gdb_stdlog
, "Stack required (for refs): 0x%x\n",
2506 call_info
.memory
.ref_offset
);
2507 fprintf_unfiltered (gdb_stdlog
, " Stack allocated: %s\n",
2508 core_addr_to_string_nz (osp
- sp
));
2512 /* Now load the argument into registers, or onto the stack. */
2514 if (return_method
== return_method_struct
)
2516 gdb_byte buf
[sizeof (LONGEST
)];
2518 store_unsigned_integer (buf
, call_info
.xlen
, byte_order
, struct_addr
);
2519 regcache
->cooked_write (RISCV_A0_REGNUM
, buf
);
2522 for (i
= 0; i
< nargs
; ++i
)
2525 int second_arg_length
= 0;
2526 const gdb_byte
*second_arg_data
;
2527 struct riscv_arg_info
*info
= &arg_info
[i
];
2529 gdb_assert (info
->length
> 0);
2531 switch (info
->argloc
[0].loc_type
)
2533 case riscv_arg_info::location::in_reg
:
2535 gdb_byte tmp
[sizeof (ULONGEST
)];
2537 gdb_assert (info
->argloc
[0].c_length
<= info
->length
);
2538 /* FP values in FP registers must be NaN-boxed. */
2539 if (riscv_is_fp_regno_p (info
->argloc
[0].loc_data
.regno
)
2540 && info
->argloc
[0].c_length
< call_info
.flen
)
2541 memset (tmp
, -1, sizeof (tmp
));
2543 memset (tmp
, 0, sizeof (tmp
));
2544 memcpy (tmp
, (info
->contents
+ info
->argloc
[0].c_offset
),
2545 info
->argloc
[0].c_length
);
2546 regcache
->cooked_write (info
->argloc
[0].loc_data
.regno
, tmp
);
2548 (((info
->argloc
[0].c_length
+ info
->argloc
[0].c_offset
) < info
->length
)
2549 ? info
->argloc
[1].c_length
: 0);
2550 second_arg_data
= info
->contents
+ info
->argloc
[1].c_offset
;
2554 case riscv_arg_info::location::on_stack
:
2555 dst
= sp_args
+ info
->argloc
[0].loc_data
.offset
;
2556 write_memory (dst
, info
->contents
, info
->length
);
2557 second_arg_length
= 0;
2560 case riscv_arg_info::location::by_ref
:
2561 dst
= sp_refs
+ info
->argloc
[0].loc_data
.offset
;
2562 write_memory (dst
, info
->contents
, info
->length
);
2564 second_arg_length
= call_info
.xlen
;
2565 second_arg_data
= (gdb_byte
*) &dst
;
2569 gdb_assert_not_reached (_("unknown argument location type"));
2572 if (second_arg_length
> 0)
2574 switch (info
->argloc
[1].loc_type
)
2576 case riscv_arg_info::location::in_reg
:
2578 gdb_byte tmp
[sizeof (ULONGEST
)];
2580 gdb_assert ((riscv_is_fp_regno_p (info
->argloc
[1].loc_data
.regno
)
2581 && second_arg_length
<= call_info
.flen
)
2582 || second_arg_length
<= call_info
.xlen
);
2583 /* FP values in FP registers must be NaN-boxed. */
2584 if (riscv_is_fp_regno_p (info
->argloc
[1].loc_data
.regno
)
2585 && second_arg_length
< call_info
.flen
)
2586 memset (tmp
, -1, sizeof (tmp
));
2588 memset (tmp
, 0, sizeof (tmp
));
2589 memcpy (tmp
, second_arg_data
, second_arg_length
);
2590 regcache
->cooked_write (info
->argloc
[1].loc_data
.regno
, tmp
);
2594 case riscv_arg_info::location::on_stack
:
2598 arg_addr
= sp_args
+ info
->argloc
[1].loc_data
.offset
;
2599 write_memory (arg_addr
, second_arg_data
, second_arg_length
);
2603 case riscv_arg_info::location::by_ref
:
2605 /* The second location should never be a reference, any
2606 argument being passed by reference just places its address
2607 in the first location and is done. */
2608 error (_("invalid argument location"));
2614 /* Set the dummy return value to bp_addr.
2615 A dummy breakpoint will be setup to execute the call. */
2617 if (riscv_debug_infcall
> 0)
2618 fprintf_unfiltered (gdb_stdlog
, ": writing $ra = %s\n",
2619 core_addr_to_string (bp_addr
));
2620 regcache_cooked_write_unsigned (regcache
, RISCV_RA_REGNUM
, bp_addr
);
2622 /* Finally, update the stack pointer. */
2624 if (riscv_debug_infcall
> 0)
2625 fprintf_unfiltered (gdb_stdlog
, ": writing $sp = %s\n",
2626 core_addr_to_string (sp
));
2627 regcache_cooked_write_unsigned (regcache
, RISCV_SP_REGNUM
, sp
);
2632 /* Implement the return_value gdbarch method. */
2634 static enum return_value_convention
2635 riscv_return_value (struct gdbarch
*gdbarch
,
2636 struct value
*function
,
2638 struct regcache
*regcache
,
2640 const gdb_byte
*writebuf
)
2642 struct riscv_call_info
call_info (gdbarch
);
2643 struct riscv_arg_info info
;
2644 struct type
*arg_type
;
2646 arg_type
= check_typedef (type
);
2647 riscv_arg_location (gdbarch
, &info
, &call_info
, arg_type
, false);
2649 if (riscv_debug_infcall
> 0)
2651 fprintf_unfiltered (gdb_stdlog
, "riscv return value:\n");
2652 fprintf_unfiltered (gdb_stdlog
, "[R] ");
2653 riscv_print_arg_location (gdb_stdlog
, gdbarch
, &info
, 0, 0);
2654 fprintf_unfiltered (gdb_stdlog
, "\n");
2657 if (readbuf
!= nullptr || writebuf
!= nullptr)
2659 unsigned int arg_len
;
2660 struct value
*abi_val
;
2661 gdb_byte
*old_readbuf
= nullptr;
2664 /* We only do one thing at a time. */
2665 gdb_assert (readbuf
== nullptr || writebuf
== nullptr);
2667 /* In some cases the argument is not returned as the declared type,
2668 and we need to cast to or from the ABI type in order to
2669 correctly access the argument. When writing to the machine we
2670 do the cast here, when reading from the machine the cast occurs
2671 later, after extracting the value. As the ABI type can be
2672 larger than the declared type, then the read or write buffers
2673 passed in might be too small. Here we ensure that we are using
2674 buffers of sufficient size. */
2675 if (writebuf
!= nullptr)
2677 struct value
*arg_val
= value_from_contents (arg_type
, writebuf
);
2678 abi_val
= value_cast (info
.type
, arg_val
);
2679 writebuf
= value_contents_raw (abi_val
);
2683 abi_val
= allocate_value (info
.type
);
2684 old_readbuf
= readbuf
;
2685 readbuf
= value_contents_raw (abi_val
);
2687 arg_len
= TYPE_LENGTH (info
.type
);
2689 switch (info
.argloc
[0].loc_type
)
2691 /* Return value in register(s). */
2692 case riscv_arg_info::location::in_reg
:
2694 regnum
= info
.argloc
[0].loc_data
.regno
;
2695 gdb_assert (info
.argloc
[0].c_length
<= arg_len
);
2696 gdb_assert (info
.argloc
[0].c_length
2697 <= register_size (gdbarch
, regnum
));
2701 gdb_byte
*ptr
= readbuf
+ info
.argloc
[0].c_offset
;
2702 regcache
->cooked_read_part (regnum
, 0,
2703 info
.argloc
[0].c_length
,
2709 const gdb_byte
*ptr
= writebuf
+ info
.argloc
[0].c_offset
;
2710 regcache
->cooked_write_part (regnum
, 0,
2711 info
.argloc
[0].c_length
,
2715 /* A return value in register can have a second part in a
2717 if (info
.argloc
[1].c_length
> 0)
2719 switch (info
.argloc
[1].loc_type
)
2721 case riscv_arg_info::location::in_reg
:
2722 regnum
= info
.argloc
[1].loc_data
.regno
;
2724 gdb_assert ((info
.argloc
[0].c_length
2725 + info
.argloc
[1].c_length
) <= arg_len
);
2726 gdb_assert (info
.argloc
[1].c_length
2727 <= register_size (gdbarch
, regnum
));
2731 readbuf
+= info
.argloc
[1].c_offset
;
2732 regcache
->cooked_read_part (regnum
, 0,
2733 info
.argloc
[1].c_length
,
2739 writebuf
+= info
.argloc
[1].c_offset
;
2740 regcache
->cooked_write_part (regnum
, 0,
2741 info
.argloc
[1].c_length
,
2746 case riscv_arg_info::location::by_ref
:
2747 case riscv_arg_info::location::on_stack
:
2749 error (_("invalid argument location"));
2756 /* Return value by reference will have its address in A0. */
2757 case riscv_arg_info::location::by_ref
:
2761 regcache_cooked_read_unsigned (regcache
, RISCV_A0_REGNUM
,
2763 if (readbuf
!= nullptr)
2764 read_memory (addr
, readbuf
, info
.length
);
2765 if (writebuf
!= nullptr)
2766 write_memory (addr
, writebuf
, info
.length
);
2770 case riscv_arg_info::location::on_stack
:
2772 error (_("invalid argument location"));
2776 /* This completes the cast from abi type back to the declared type
2777 in the case that we are reading from the machine. See the
2778 comment at the head of this block for more details. */
2779 if (readbuf
!= nullptr)
2781 struct value
*arg_val
= value_cast (arg_type
, abi_val
);
2782 memcpy (old_readbuf
, value_contents_raw (arg_val
),
2783 TYPE_LENGTH (arg_type
));
2787 switch (info
.argloc
[0].loc_type
)
2789 case riscv_arg_info::location::in_reg
:
2790 return RETURN_VALUE_REGISTER_CONVENTION
;
2791 case riscv_arg_info::location::by_ref
:
2792 return RETURN_VALUE_ABI_RETURNS_ADDRESS
;
2793 case riscv_arg_info::location::on_stack
:
2795 error (_("invalid argument location"));
2799 /* Implement the frame_align gdbarch method. */
2802 riscv_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
2804 return align_down (addr
, 16);
2807 /* Generate, or return the cached frame cache for the RiscV frame
2810 static struct riscv_unwind_cache
*
2811 riscv_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
2813 CORE_ADDR pc
, start_addr
;
2814 struct riscv_unwind_cache
*cache
;
2815 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2818 if ((*this_cache
) != NULL
)
2819 return (struct riscv_unwind_cache
*) *this_cache
;
2821 cache
= FRAME_OBSTACK_ZALLOC (struct riscv_unwind_cache
);
2822 cache
->regs
= trad_frame_alloc_saved_regs (this_frame
);
2823 (*this_cache
) = cache
;
2825 /* Scan the prologue, filling in the cache. */
2826 start_addr
= get_frame_func (this_frame
);
2827 pc
= get_frame_pc (this_frame
);
2828 riscv_scan_prologue (gdbarch
, start_addr
, pc
, cache
);
2830 /* We can now calculate the frame base address. */
2832 = (get_frame_register_signed (this_frame
, cache
->frame_base_reg
)
2833 + cache
->frame_base_offset
);
2834 if (riscv_debug_unwinder
)
2835 fprintf_unfiltered (gdb_stdlog
, "Frame base is %s ($%s + 0x%x)\n",
2836 core_addr_to_string (cache
->frame_base
),
2837 gdbarch_register_name (gdbarch
,
2838 cache
->frame_base_reg
),
2839 cache
->frame_base_offset
);
2841 /* The prologue scanner sets the address of registers stored to the stack
2842 as the offset of that register from the frame base. The prologue
2843 scanner doesn't know the actual frame base value, and so is unable to
2844 compute the exact address. We do now know the frame base value, so
2845 update the address of registers stored to the stack. */
2846 numregs
= gdbarch_num_regs (gdbarch
) + gdbarch_num_pseudo_regs (gdbarch
);
2847 for (regno
= 0; regno
< numregs
; ++regno
)
2849 if (trad_frame_addr_p (cache
->regs
, regno
))
2850 cache
->regs
[regno
].addr
+= cache
->frame_base
;
2853 /* The previous $pc can be found wherever the $ra value can be found.
2854 The previous $ra value is gone, this would have been stored be the
2855 previous frame if required. */
2856 cache
->regs
[gdbarch_pc_regnum (gdbarch
)] = cache
->regs
[RISCV_RA_REGNUM
];
2857 trad_frame_set_unknown (cache
->regs
, RISCV_RA_REGNUM
);
2859 /* Build the frame id. */
2860 cache
->this_id
= frame_id_build (cache
->frame_base
, start_addr
);
2862 /* The previous $sp value is the frame base value. */
2863 trad_frame_set_value (cache
->regs
, gdbarch_sp_regnum (gdbarch
),
2869 /* Implement the this_id callback for RiscV frame unwinder. */
2872 riscv_frame_this_id (struct frame_info
*this_frame
,
2873 void **prologue_cache
,
2874 struct frame_id
*this_id
)
2876 struct riscv_unwind_cache
*cache
;
2880 cache
= riscv_frame_cache (this_frame
, prologue_cache
);
2881 *this_id
= cache
->this_id
;
2883 catch (const gdb_exception_error
&ex
)
2885 /* Ignore errors, this leaves the frame id as the predefined outer
2886 frame id which terminates the backtrace at this point. */
2890 /* Implement the prev_register callback for RiscV frame unwinder. */
2892 static struct value
*
2893 riscv_frame_prev_register (struct frame_info
*this_frame
,
2894 void **prologue_cache
,
2897 struct riscv_unwind_cache
*cache
;
2899 cache
= riscv_frame_cache (this_frame
, prologue_cache
);
2900 return trad_frame_get_prev_register (this_frame
, cache
->regs
, regnum
);
2903 /* Structure defining the RiscV normal frame unwind functions. Since we
2904 are the fallback unwinder (DWARF unwinder is used first), we use the
2905 default frame sniffer, which always accepts the frame. */
2907 static const struct frame_unwind riscv_frame_unwind
=
2909 /*.type =*/ NORMAL_FRAME
,
2910 /*.stop_reason =*/ default_frame_unwind_stop_reason
,
2911 /*.this_id =*/ riscv_frame_this_id
,
2912 /*.prev_register =*/ riscv_frame_prev_register
,
2913 /*.unwind_data =*/ NULL
,
2914 /*.sniffer =*/ default_frame_sniffer
,
2915 /*.dealloc_cache =*/ NULL
,
2916 /*.prev_arch =*/ NULL
,
2919 /* Extract a set of required target features out of INFO, specifically the
2920 bfd being executed is examined to see what target features it requires.
2921 IF there is no current bfd, or the bfd doesn't indicate any useful
2922 features then a RISCV_GDBARCH_FEATURES is returned in its default state. */
2924 static struct riscv_gdbarch_features
2925 riscv_features_from_gdbarch_info (const struct gdbarch_info info
)
2927 struct riscv_gdbarch_features features
;
2929 /* Now try to improve on the defaults by looking at the binary we are
2930 going to execute. We assume the user knows what they are doing and
2931 that the target will match the binary. Remember, this code path is
2932 only used at all if the target hasn't given us a description, so this
2933 is really a last ditched effort to do something sane before giving
2935 if (info
.abfd
!= NULL
2936 && bfd_get_flavour (info
.abfd
) == bfd_target_elf_flavour
)
2938 unsigned char eclass
= elf_elfheader (info
.abfd
)->e_ident
[EI_CLASS
];
2939 int e_flags
= elf_elfheader (info
.abfd
)->e_flags
;
2941 if (eclass
== ELFCLASS32
)
2943 else if (eclass
== ELFCLASS64
)
2946 internal_error (__FILE__
, __LINE__
,
2947 _("unknown ELF header class %d"), eclass
);
2949 if (e_flags
& EF_RISCV_FLOAT_ABI_DOUBLE
)
2951 else if (e_flags
& EF_RISCV_FLOAT_ABI_SINGLE
)
2958 /* Find a suitable default target description. Use the contents of INFO,
2959 specifically the bfd object being executed, to guide the selection of a
2960 suitable default target description. */
2962 static const struct target_desc
*
2963 riscv_find_default_target_description (const struct gdbarch_info info
)
2965 /* Extract desired feature set from INFO. */
2966 struct riscv_gdbarch_features features
2967 = riscv_features_from_gdbarch_info (info
);
2969 /* If the XLEN field is still 0 then we got nothing useful from INFO. In
2970 this case we fall back to a minimal useful target, 8-byte x-registers,
2971 with no floating point. */
2972 if (features
.xlen
== 0)
2975 /* Now build a target description based on the feature set. */
2976 return riscv_create_target_description (features
);
2979 /* All of the registers in REG_SET are checked for in FEATURE, TDESC_DATA
2980 is updated with the register numbers for each register as listed in
2981 REG_SET. If any register marked as required in REG_SET is not found in
2982 FEATURE then this function returns false, otherwise, it returns true. */
2985 riscv_check_tdesc_feature (struct tdesc_arch_data
*tdesc_data
,
2986 const struct tdesc_feature
*feature
,
2987 const struct riscv_register_feature
*reg_set
)
2989 for (const auto ®
: reg_set
->registers
)
2993 for (const char *name
: reg
.names
)
2996 tdesc_numbered_register (feature
, tdesc_data
, reg
.regnum
, name
);
3002 if (!found
&& reg
.required_p
)
3009 /* Add all the expected register sets into GDBARCH. */
3012 riscv_add_reggroups (struct gdbarch
*gdbarch
)
3014 /* Add predefined register groups. */
3015 reggroup_add (gdbarch
, all_reggroup
);
3016 reggroup_add (gdbarch
, save_reggroup
);
3017 reggroup_add (gdbarch
, restore_reggroup
);
3018 reggroup_add (gdbarch
, system_reggroup
);
3019 reggroup_add (gdbarch
, vector_reggroup
);
3020 reggroup_add (gdbarch
, general_reggroup
);
3021 reggroup_add (gdbarch
, float_reggroup
);
3023 /* Add RISC-V specific register groups. */
3024 reggroup_add (gdbarch
, csr_reggroup
);
3027 /* Create register aliases for all the alternative names that exist for
3028 registers in REG_SET. */
3031 riscv_setup_register_aliases (struct gdbarch
*gdbarch
,
3032 const struct riscv_register_feature
*reg_set
)
3034 for (auto ®
: reg_set
->registers
)
3036 /* The first item in the names list is the preferred name for the
3037 register, this is what RISCV_REGISTER_NAME returns, and so we
3038 don't need to create an alias with that name here. */
3039 for (int i
= 1; i
< reg
.names
.size (); ++i
)
3040 user_reg_add (gdbarch
, reg
.names
[i
], value_of_riscv_user_reg
,
3045 /* Implement the "dwarf2_reg_to_regnum" gdbarch method. */
3048 riscv_dwarf_reg_to_regnum (struct gdbarch
*gdbarch
, int reg
)
3050 if (reg
< RISCV_DWARF_REGNUM_X31
)
3051 return RISCV_ZERO_REGNUM
+ (reg
- RISCV_DWARF_REGNUM_X0
);
3053 else if (reg
< RISCV_DWARF_REGNUM_F31
)
3054 return RISCV_FIRST_FP_REGNUM
+ (reg
- RISCV_DWARF_REGNUM_F0
);
3059 /* Implement the gcc_target_options method. We have to select the arch and abi
3060 from the feature info. We have enough feature info to select the abi, but
3061 not enough info for the arch given all of the possible architecture
3062 extensions. So choose reasonable defaults for now. */
3065 riscv_gcc_target_options (struct gdbarch
*gdbarch
)
3067 int isa_xlen
= riscv_isa_xlen (gdbarch
);
3068 int isa_flen
= riscv_isa_flen (gdbarch
);
3069 int abi_xlen
= riscv_abi_xlen (gdbarch
);
3070 int abi_flen
= riscv_abi_flen (gdbarch
);
3071 std::string target_options
;
3073 target_options
= "-march=rv";
3075 target_options
+= "64";
3077 target_options
+= "32";
3079 target_options
+= "gc";
3080 else if (isa_flen
== 4)
3081 target_options
+= "imafc";
3083 target_options
+= "imac";
3085 target_options
+= " -mabi=";
3087 target_options
+= "lp64";
3089 target_options
+= "ilp32";
3091 target_options
+= "d";
3092 else if (abi_flen
== 4)
3093 target_options
+= "f";
3095 /* The gdb loader doesn't handle link-time relaxation relocations. */
3096 target_options
+= " -mno-relax";
3098 return target_options
;
3101 /* Implement the gnu_triplet_regexp method. A single compiler supports both
3102 32-bit and 64-bit code, and may be named riscv32 or riscv64 or (not
3103 recommended) riscv. */
3106 riscv_gnu_triplet_regexp (struct gdbarch
*gdbarch
)
3108 return "riscv(32|64)?";
3111 /* Initialize the current architecture based on INFO. If possible,
3112 re-use an architecture from ARCHES, which is a list of
3113 architectures already created during this debugging session.
3115 Called e.g. at program startup, when reading a core file, and when
3116 reading a binary file. */
3118 static struct gdbarch
*
3119 riscv_gdbarch_init (struct gdbarch_info info
,
3120 struct gdbarch_list
*arches
)
3122 struct gdbarch
*gdbarch
;
3123 struct gdbarch_tdep
*tdep
;
3124 struct riscv_gdbarch_features features
;
3125 const struct target_desc
*tdesc
= info
.target_desc
;
3127 /* Ensure we always have a target description. */
3128 if (!tdesc_has_registers (tdesc
))
3129 tdesc
= riscv_find_default_target_description (info
);
3132 if (riscv_debug_gdbarch
)
3133 fprintf_unfiltered (gdb_stdlog
, "Have got a target description\n");
3135 const struct tdesc_feature
*feature_cpu
3136 = tdesc_find_feature (tdesc
, riscv_xreg_feature
.name
);
3137 const struct tdesc_feature
*feature_fpu
3138 = tdesc_find_feature (tdesc
, riscv_freg_feature
.name
);
3139 const struct tdesc_feature
*feature_virtual
3140 = tdesc_find_feature (tdesc
, riscv_virtual_feature
.name
);
3141 const struct tdesc_feature
*feature_csr
3142 = tdesc_find_feature (tdesc
, riscv_csr_feature
.name
);
3144 if (feature_cpu
== NULL
)
3147 struct tdesc_arch_data
*tdesc_data
= tdesc_data_alloc ();
3149 bool valid_p
= riscv_check_tdesc_feature (tdesc_data
,
3151 &riscv_xreg_feature
);
3154 /* Check that all of the core cpu registers have the same bitsize. */
3155 int xlen_bitsize
= tdesc_register_bitsize (feature_cpu
, "pc");
3157 for (auto &tdesc_reg
: feature_cpu
->registers
)
3158 valid_p
&= (tdesc_reg
->bitsize
== xlen_bitsize
);
3160 if (riscv_debug_gdbarch
)
3163 "From target-description, xlen = %d\n", xlen_bitsize
);
3165 features
.xlen
= (xlen_bitsize
/ 8);
3168 if (feature_fpu
!= NULL
)
3170 valid_p
&= riscv_check_tdesc_feature (tdesc_data
, feature_fpu
,
3171 &riscv_freg_feature
);
3173 /* Search for the first floating point register (by any alias), to
3174 determine the bitsize. */
3176 const auto &fp0
= riscv_freg_feature
.registers
[0];
3178 for (const char *name
: fp0
.names
)
3180 if (tdesc_unnumbered_register (feature_fpu
, name
))
3182 bitsize
= tdesc_register_bitsize (feature_fpu
, name
);
3187 gdb_assert (bitsize
!= -1);
3188 features
.flen
= (bitsize
/ 8);
3190 if (riscv_debug_gdbarch
)
3193 "From target-description, flen = %d\n", bitsize
);
3199 if (riscv_debug_gdbarch
)
3202 "No FPU in target-description, assume soft-float ABI\n");
3205 if (feature_virtual
)
3206 riscv_check_tdesc_feature (tdesc_data
, feature_virtual
,
3207 &riscv_virtual_feature
);
3210 riscv_check_tdesc_feature (tdesc_data
, feature_csr
,
3211 &riscv_csr_feature
);
3215 if (riscv_debug_gdbarch
)
3216 fprintf_unfiltered (gdb_stdlog
, "Target description is not valid\n");
3217 tdesc_data_cleanup (tdesc_data
);
3221 /* Have a look at what the supplied (if any) bfd object requires of the
3222 target, then check that this matches with what the target is
3224 struct riscv_gdbarch_features abi_features
3225 = riscv_features_from_gdbarch_info (info
);
3226 /* In theory a binary compiled for RV32 could run on an RV64 target,
3227 however, this has not been tested in GDB yet, so for now we require
3228 that the requested xlen match the targets xlen. */
3229 if (abi_features
.xlen
!= 0 && abi_features
.xlen
!= features
.xlen
)
3230 error (_("bfd requires xlen %d, but target has xlen %d"),
3231 abi_features
.xlen
, features
.xlen
);
3232 /* We do support running binaries compiled for 32-bit float on targets
3233 with 64-bit float, so we only complain if the binary requires more
3234 than the target has available. */
3235 if (abi_features
.flen
> features
.flen
)
3236 error (_("bfd requires flen %d, but target has flen %d"),
3237 abi_features
.flen
, features
.flen
);
3239 /* If the ABI_FEATURES xlen is 0 then this indicates we got no useful abi
3240 features from the INFO object. In this case we assume that the xlen
3241 abi matches the hardware. */
3242 if (abi_features
.xlen
== 0)
3243 abi_features
.xlen
= features
.xlen
;
3245 /* Find a candidate among the list of pre-declared architectures. */
3246 for (arches
= gdbarch_list_lookup_by_info (arches
, &info
);
3248 arches
= gdbarch_list_lookup_by_info (arches
->next
, &info
))
3250 /* Check that the feature set of the ARCHES matches the feature set
3251 we are looking for. If it doesn't then we can't reuse this
3253 struct gdbarch_tdep
*other_tdep
= gdbarch_tdep (arches
->gdbarch
);
3255 if (other_tdep
->isa_features
!= features
3256 || other_tdep
->abi_features
!= abi_features
)
3264 tdesc_data_cleanup (tdesc_data
);
3265 return arches
->gdbarch
;
3268 /* None found, so create a new architecture from the information provided. */
3269 tdep
= new (struct gdbarch_tdep
);
3270 gdbarch
= gdbarch_alloc (&info
, tdep
);
3271 tdep
->isa_features
= features
;
3272 tdep
->abi_features
= abi_features
;
3274 /* Target data types. */
3275 set_gdbarch_short_bit (gdbarch
, 16);
3276 set_gdbarch_int_bit (gdbarch
, 32);
3277 set_gdbarch_long_bit (gdbarch
, riscv_isa_xlen (gdbarch
) * 8);
3278 set_gdbarch_long_long_bit (gdbarch
, 64);
3279 set_gdbarch_float_bit (gdbarch
, 32);
3280 set_gdbarch_double_bit (gdbarch
, 64);
3281 set_gdbarch_long_double_bit (gdbarch
, 128);
3282 set_gdbarch_long_double_format (gdbarch
, floatformats_ia64_quad
);
3283 set_gdbarch_ptr_bit (gdbarch
, riscv_isa_xlen (gdbarch
) * 8);
3284 set_gdbarch_char_signed (gdbarch
, 0);
3285 set_gdbarch_type_align (gdbarch
, riscv_type_align
);
3287 /* Information about the target architecture. */
3288 set_gdbarch_return_value (gdbarch
, riscv_return_value
);
3289 set_gdbarch_breakpoint_kind_from_pc (gdbarch
, riscv_breakpoint_kind_from_pc
);
3290 set_gdbarch_sw_breakpoint_from_kind (gdbarch
, riscv_sw_breakpoint_from_kind
);
3291 set_gdbarch_have_nonsteppable_watchpoint (gdbarch
, 1);
3293 /* Functions to analyze frames. */
3294 set_gdbarch_skip_prologue (gdbarch
, riscv_skip_prologue
);
3295 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
3296 set_gdbarch_frame_align (gdbarch
, riscv_frame_align
);
3298 /* Functions handling dummy frames. */
3299 set_gdbarch_call_dummy_location (gdbarch
, ON_STACK
);
3300 set_gdbarch_push_dummy_code (gdbarch
, riscv_push_dummy_code
);
3301 set_gdbarch_push_dummy_call (gdbarch
, riscv_push_dummy_call
);
3303 /* Frame unwinders. Use DWARF debug info if available, otherwise use our own
3305 dwarf2_append_unwinders (gdbarch
);
3306 frame_unwind_append_unwinder (gdbarch
, &riscv_frame_unwind
);
3308 /* Register architecture. */
3309 riscv_add_reggroups (gdbarch
);
3311 /* Internal <-> external register number maps. */
3312 set_gdbarch_dwarf2_reg_to_regnum (gdbarch
, riscv_dwarf_reg_to_regnum
);
3314 /* We reserve all possible register numbers for the known registers.
3315 This means the target description mechanism will add any target
3316 specific registers after this number. This helps make debugging GDB
3317 just a little easier. */
3318 set_gdbarch_num_regs (gdbarch
, RISCV_LAST_REGNUM
+ 1);
3320 /* We don't have to provide the count of 0 here (its the default) but
3321 include this line to make it explicit that, right now, we don't have
3322 any pseudo registers on RISC-V. */
3323 set_gdbarch_num_pseudo_regs (gdbarch
, 0);
3325 /* Some specific register numbers GDB likes to know about. */
3326 set_gdbarch_sp_regnum (gdbarch
, RISCV_SP_REGNUM
);
3327 set_gdbarch_pc_regnum (gdbarch
, RISCV_PC_REGNUM
);
3329 set_gdbarch_print_registers_info (gdbarch
, riscv_print_registers_info
);
3331 /* Finalise the target description registers. */
3332 tdesc_use_registers (gdbarch
, tdesc
, tdesc_data
);
3334 /* Override the register type callback setup by the target description
3335 mechanism. This allows us to provide special type for floating point
3337 set_gdbarch_register_type (gdbarch
, riscv_register_type
);
3339 /* Override the register name callback setup by the target description
3340 mechanism. This allows us to force our preferred names for the
3341 registers, no matter what the target description called them. */
3342 set_gdbarch_register_name (gdbarch
, riscv_register_name
);
3344 /* Override the register group callback setup by the target description
3345 mechanism. This allows us to force registers into the groups we
3346 want, ignoring what the target tells us. */
3347 set_gdbarch_register_reggroup_p (gdbarch
, riscv_register_reggroup_p
);
3349 /* Create register aliases for alternative register names. */
3350 riscv_setup_register_aliases (gdbarch
, &riscv_xreg_feature
);
3351 if (riscv_has_fp_regs (gdbarch
))
3352 riscv_setup_register_aliases (gdbarch
, &riscv_freg_feature
);
3353 riscv_setup_register_aliases (gdbarch
, &riscv_csr_feature
);
3355 /* Compile command hooks. */
3356 set_gdbarch_gcc_target_options (gdbarch
, riscv_gcc_target_options
);
3357 set_gdbarch_gnu_triplet_regexp (gdbarch
, riscv_gnu_triplet_regexp
);
3359 /* Hook in OS ABI-specific overrides, if they have been registered. */
3360 gdbarch_init_osabi (info
, gdbarch
);
3362 register_riscv_ravenscar_ops (gdbarch
);
3367 /* This decodes the current instruction and determines the address of the
3368 next instruction. */
3371 riscv_next_pc (struct regcache
*regcache
, CORE_ADDR pc
)
3373 struct gdbarch
*gdbarch
= regcache
->arch ();
3374 struct riscv_insn insn
;
3377 insn
.decode (gdbarch
, pc
);
3378 next_pc
= pc
+ insn
.length ();
3380 if (insn
.opcode () == riscv_insn::JAL
)
3381 next_pc
= pc
+ insn
.imm_signed ();
3382 else if (insn
.opcode () == riscv_insn::JALR
)
3385 regcache
->cooked_read (insn
.rs1 (), &source
);
3386 next_pc
= (source
+ insn
.imm_signed ()) & ~(CORE_ADDR
) 0x1;
3388 else if (insn
.opcode () == riscv_insn::BEQ
)
3391 regcache
->cooked_read (insn
.rs1 (), &src1
);
3392 regcache
->cooked_read (insn
.rs2 (), &src2
);
3394 next_pc
= pc
+ insn
.imm_signed ();
3396 else if (insn
.opcode () == riscv_insn::BNE
)
3399 regcache
->cooked_read (insn
.rs1 (), &src1
);
3400 regcache
->cooked_read (insn
.rs2 (), &src2
);
3402 next_pc
= pc
+ insn
.imm_signed ();
3404 else if (insn
.opcode () == riscv_insn::BLT
)
3407 regcache
->cooked_read (insn
.rs1 (), &src1
);
3408 regcache
->cooked_read (insn
.rs2 (), &src2
);
3410 next_pc
= pc
+ insn
.imm_signed ();
3412 else if (insn
.opcode () == riscv_insn::BGE
)
3415 regcache
->cooked_read (insn
.rs1 (), &src1
);
3416 regcache
->cooked_read (insn
.rs2 (), &src2
);
3418 next_pc
= pc
+ insn
.imm_signed ();
3420 else if (insn
.opcode () == riscv_insn::BLTU
)
3422 ULONGEST src1
, src2
;
3423 regcache
->cooked_read (insn
.rs1 (), &src1
);
3424 regcache
->cooked_read (insn
.rs2 (), &src2
);
3426 next_pc
= pc
+ insn
.imm_signed ();
3428 else if (insn
.opcode () == riscv_insn::BGEU
)
3430 ULONGEST src1
, src2
;
3431 regcache
->cooked_read (insn
.rs1 (), &src1
);
3432 regcache
->cooked_read (insn
.rs2 (), &src2
);
3434 next_pc
= pc
+ insn
.imm_signed ();
3440 /* We can't put a breakpoint in the middle of a lr/sc atomic sequence, so look
3441 for the end of the sequence and put the breakpoint there. */
3444 riscv_next_pc_atomic_sequence (struct regcache
*regcache
, CORE_ADDR pc
,
3447 struct gdbarch
*gdbarch
= regcache
->arch ();
3448 struct riscv_insn insn
;
3449 CORE_ADDR cur_step_pc
= pc
;
3450 CORE_ADDR last_addr
= 0;
3452 /* First instruction has to be a load reserved. */
3453 insn
.decode (gdbarch
, cur_step_pc
);
3454 if (insn
.opcode () != riscv_insn::LR
)
3456 cur_step_pc
= cur_step_pc
+ insn
.length ();
3458 /* Next instruction should be branch to exit. */
3459 insn
.decode (gdbarch
, cur_step_pc
);
3460 if (insn
.opcode () != riscv_insn::BNE
)
3462 last_addr
= cur_step_pc
+ insn
.imm_signed ();
3463 cur_step_pc
= cur_step_pc
+ insn
.length ();
3465 /* Next instruction should be store conditional. */
3466 insn
.decode (gdbarch
, cur_step_pc
);
3467 if (insn
.opcode () != riscv_insn::SC
)
3469 cur_step_pc
= cur_step_pc
+ insn
.length ();
3471 /* Next instruction should be branch to start. */
3472 insn
.decode (gdbarch
, cur_step_pc
);
3473 if (insn
.opcode () != riscv_insn::BNE
)
3475 if (pc
!= (cur_step_pc
+ insn
.imm_signed ()))
3477 cur_step_pc
= cur_step_pc
+ insn
.length ();
3479 /* We should now be at the end of the sequence. */
3480 if (cur_step_pc
!= last_addr
)
3483 *next_pc
= cur_step_pc
;
3487 /* This is called just before we want to resume the inferior, if we want to
3488 single-step it but there is no hardware or kernel single-step support. We
3489 find the target of the coming instruction and breakpoint it. */
3491 std::vector
<CORE_ADDR
>
3492 riscv_software_single_step (struct regcache
*regcache
)
3494 CORE_ADDR pc
, next_pc
;
3496 pc
= regcache_read_pc (regcache
);
3498 if (riscv_next_pc_atomic_sequence (regcache
, pc
, &next_pc
))
3501 next_pc
= riscv_next_pc (regcache
, pc
);
3506 /* Create RISC-V specific reggroups. */
3509 riscv_init_reggroups ()
3511 csr_reggroup
= reggroup_new ("csr", USER_REGGROUP
);
3514 void _initialize_riscv_tdep ();
3516 _initialize_riscv_tdep ()
3518 riscv_create_csr_aliases ();
3519 riscv_init_reggroups ();
3521 gdbarch_register (bfd_arch_riscv
, riscv_gdbarch_init
, NULL
);
3523 /* Add root prefix command for all "set debug riscv" and "show debug
3525 add_prefix_cmd ("riscv", no_class
, set_debug_riscv_command
,
3526 _("RISC-V specific debug commands."),
3527 &setdebugriscvcmdlist
, "set debug riscv ", 0,
3530 add_prefix_cmd ("riscv", no_class
, show_debug_riscv_command
,
3531 _("RISC-V specific debug commands."),
3532 &showdebugriscvcmdlist
, "show debug riscv ", 0,
3535 add_setshow_zuinteger_cmd ("breakpoints", class_maintenance
,
3536 &riscv_debug_breakpoints
, _("\
3537 Set riscv breakpoint debugging."), _("\
3538 Show riscv breakpoint debugging."), _("\
3539 When non-zero, print debugging information for the riscv specific parts\n\
3540 of the breakpoint mechanism."),
3542 show_riscv_debug_variable
,
3543 &setdebugriscvcmdlist
, &showdebugriscvcmdlist
);
3545 add_setshow_zuinteger_cmd ("infcall", class_maintenance
,
3546 &riscv_debug_infcall
, _("\
3547 Set riscv inferior call debugging."), _("\
3548 Show riscv inferior call debugging."), _("\
3549 When non-zero, print debugging information for the riscv specific parts\n\
3550 of the inferior call mechanism."),
3552 show_riscv_debug_variable
,
3553 &setdebugriscvcmdlist
, &showdebugriscvcmdlist
);
3555 add_setshow_zuinteger_cmd ("unwinder", class_maintenance
,
3556 &riscv_debug_unwinder
, _("\
3557 Set riscv stack unwinding debugging."), _("\
3558 Show riscv stack unwinding debugging."), _("\
3559 When non-zero, print debugging information for the riscv specific parts\n\
3560 of the stack unwinding mechanism."),
3562 show_riscv_debug_variable
,
3563 &setdebugriscvcmdlist
, &showdebugriscvcmdlist
);
3565 add_setshow_zuinteger_cmd ("gdbarch", class_maintenance
,
3566 &riscv_debug_gdbarch
, _("\
3567 Set riscv gdbarch initialisation debugging."), _("\
3568 Show riscv gdbarch initialisation debugging."), _("\
3569 When non-zero, print debugging information for the riscv gdbarch\n\
3570 initialisation process."),
3572 show_riscv_debug_variable
,
3573 &setdebugriscvcmdlist
, &showdebugriscvcmdlist
);
3575 /* Add root prefix command for all "set riscv" and "show riscv" commands. */
3576 add_prefix_cmd ("riscv", no_class
, set_riscv_command
,
3577 _("RISC-V specific commands."),
3578 &setriscvcmdlist
, "set riscv ", 0, &setlist
);
3580 add_prefix_cmd ("riscv", no_class
, show_riscv_command
,
3581 _("RISC-V specific commands."),
3582 &showriscvcmdlist
, "show riscv ", 0, &showlist
);
3585 use_compressed_breakpoints
= AUTO_BOOLEAN_AUTO
;
3586 add_setshow_auto_boolean_cmd ("use-compressed-breakpoints", no_class
,
3587 &use_compressed_breakpoints
,
3589 Set debugger's use of compressed breakpoints."), _(" \
3590 Show debugger's use of compressed breakpoints."), _("\
3591 Debugging compressed code requires compressed breakpoints to be used. If\n\
3592 left to 'auto' then gdb will use them if the existing instruction is a\n\
3593 compressed instruction. If that doesn't give the correct behavior, then\n\
3594 this option can be used."),
3596 show_use_compressed_breakpoints
,