RISC-V: Linux signal frame support.
[deliverable/binutils-gdb.git] / gdb / riscv-tdep.c
1 /* Target-dependent code for the RISC-V architecture, for GDB.
2
3 Copyright (C) 2018 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
20 #include "defs.h"
21 #include "frame.h"
22 #include "inferior.h"
23 #include "symtab.h"
24 #include "value.h"
25 #include "gdbcmd.h"
26 #include "language.h"
27 #include "gdbcore.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "gdbtypes.h"
31 #include "target.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "osabi.h"
35 #include "riscv-tdep.h"
36 #include "block.h"
37 #include "reggroups.h"
38 #include "opcode/riscv.h"
39 #include "elf/riscv.h"
40 #include "elf-bfd.h"
41 #include "symcat.h"
42 #include "dis-asm.h"
43 #include "frame-unwind.h"
44 #include "frame-base.h"
45 #include "trad-frame.h"
46 #include "infcall.h"
47 #include "floatformat.h"
48 #include "remote.h"
49 #include "target-descriptions.h"
50 #include "dwarf2-frame.h"
51 #include "user-regs.h"
52 #include "valprint.h"
53 #include "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
59 /* The stack must be 16-byte aligned. */
60 #define SP_ALIGNMENT 16
61
62 /* Forward declarations. */
63 static bool riscv_has_feature (struct gdbarch *gdbarch, char feature);
64
65 /* Define a series of is_XXX_insn functions to check if the value INSN
66 is an instance of instruction XXX. */
67 #define DECLARE_INSN(INSN_NAME, INSN_MATCH, INSN_MASK) \
68 static inline bool is_ ## INSN_NAME ## _insn (long insn) \
69 { \
70 return (insn & INSN_MASK) == INSN_MATCH; \
71 }
72 #include "opcode/riscv-opc.h"
73 #undef DECLARE_INSN
74
75 /* Cached information about a frame. */
76
77 struct riscv_unwind_cache
78 {
79 /* The register from which we can calculate the frame base. This is
80 usually $sp or $fp. */
81 int frame_base_reg;
82
83 /* The offset from the current value in register FRAME_BASE_REG to the
84 actual frame base address. */
85 int frame_base_offset;
86
87 /* Information about previous register values. */
88 struct trad_frame_saved_reg *regs;
89
90 /* The id for this frame. */
91 struct frame_id this_id;
92
93 /* The base (stack) address for this frame. This is the stack pointer
94 value on entry to this frame before any adjustments are made. */
95 CORE_ADDR frame_base;
96 };
97
98 /* The preferred register names for all the general purpose and floating
99 point registers. These are what GDB will use when referencing a
100 register. */
101
102 static const char * const riscv_gdb_reg_names[RISCV_LAST_FP_REGNUM + 1] =
103 {
104 "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", "fp", "s1",
105 "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "s2", "s3", "s4",
106 "s5", "s6", "s7", "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6",
107 "pc",
108 "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", "fs0", "fs1",
109 "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7", "fs2", "fs3",
110 "fs4", "fs5", "fs6", "fs7", "fs8", "fs9", "fs10", "fs11", "ft8", "ft9",
111 "ft10", "ft11",
112 };
113
114 /* Map alternative register names onto their GDB register number. */
115
116 struct riscv_register_alias
117 {
118 /* The register alias. Usually more descriptive than the
119 architectural name of the register. */
120 const char *name;
121
122 /* The GDB register number. */
123 int regnum;
124 };
125
126 /* Table of register aliases. */
127
128 static const struct riscv_register_alias riscv_register_aliases[] =
129 {
130 /* Aliases for general purpose registers. These are the architectural
131 names, as GDB uses the more user friendly names by default. */
132 { "x0", (RISCV_ZERO_REGNUM + 0) },
133 { "x1", (RISCV_ZERO_REGNUM + 1) },
134 { "x2", (RISCV_ZERO_REGNUM + 2) },
135 { "x3", (RISCV_ZERO_REGNUM + 3) },
136 { "x4", (RISCV_ZERO_REGNUM + 4) },
137 { "x5", (RISCV_ZERO_REGNUM + 5) },
138 { "x6", (RISCV_ZERO_REGNUM + 6) },
139 { "x7", (RISCV_ZERO_REGNUM + 7) },
140 { "x8", (RISCV_ZERO_REGNUM + 8) },
141 { "s0", (RISCV_ZERO_REGNUM + 8) }, /* fp, s0, and x8 are all aliases. */
142 { "x9", (RISCV_ZERO_REGNUM + 9) },
143 { "x10", (RISCV_ZERO_REGNUM + 10) },
144 { "x11", (RISCV_ZERO_REGNUM + 11) },
145 { "x12", (RISCV_ZERO_REGNUM + 12) },
146 { "x13", (RISCV_ZERO_REGNUM + 13) },
147 { "x14", (RISCV_ZERO_REGNUM + 14) },
148 { "x15", (RISCV_ZERO_REGNUM + 15) },
149 { "x16", (RISCV_ZERO_REGNUM + 16) },
150 { "x17", (RISCV_ZERO_REGNUM + 17) },
151 { "x18", (RISCV_ZERO_REGNUM + 18) },
152 { "x19", (RISCV_ZERO_REGNUM + 19) },
153 { "x20", (RISCV_ZERO_REGNUM + 20) },
154 { "x21", (RISCV_ZERO_REGNUM + 21) },
155 { "x22", (RISCV_ZERO_REGNUM + 22) },
156 { "x23", (RISCV_ZERO_REGNUM + 23) },
157 { "x24", (RISCV_ZERO_REGNUM + 24) },
158 { "x25", (RISCV_ZERO_REGNUM + 25) },
159 { "x26", (RISCV_ZERO_REGNUM + 26) },
160 { "x27", (RISCV_ZERO_REGNUM + 27) },
161 { "x28", (RISCV_ZERO_REGNUM + 28) },
162 { "x29", (RISCV_ZERO_REGNUM + 29) },
163 { "x30", (RISCV_ZERO_REGNUM + 30) },
164 { "x31", (RISCV_ZERO_REGNUM + 31) },
165
166 /* Aliases for the floating-point registers. These are the architectural
167 names as GDB uses the more user friendly names by default. */
168 { "f0", (RISCV_FIRST_FP_REGNUM + 0) },
169 { "f1", (RISCV_FIRST_FP_REGNUM + 1) },
170 { "f2", (RISCV_FIRST_FP_REGNUM + 2) },
171 { "f3", (RISCV_FIRST_FP_REGNUM + 3) },
172 { "f4", (RISCV_FIRST_FP_REGNUM + 4) },
173 { "f5", (RISCV_FIRST_FP_REGNUM + 5) },
174 { "f6", (RISCV_FIRST_FP_REGNUM + 6) },
175 { "f7", (RISCV_FIRST_FP_REGNUM + 7) },
176 { "f8", (RISCV_FIRST_FP_REGNUM + 8) },
177 { "f9", (RISCV_FIRST_FP_REGNUM + 9) },
178 { "f10", (RISCV_FIRST_FP_REGNUM + 10) },
179 { "f11", (RISCV_FIRST_FP_REGNUM + 11) },
180 { "f12", (RISCV_FIRST_FP_REGNUM + 12) },
181 { "f13", (RISCV_FIRST_FP_REGNUM + 13) },
182 { "f14", (RISCV_FIRST_FP_REGNUM + 14) },
183 { "f15", (RISCV_FIRST_FP_REGNUM + 15) },
184 { "f16", (RISCV_FIRST_FP_REGNUM + 16) },
185 { "f17", (RISCV_FIRST_FP_REGNUM + 17) },
186 { "f18", (RISCV_FIRST_FP_REGNUM + 18) },
187 { "f19", (RISCV_FIRST_FP_REGNUM + 19) },
188 { "f20", (RISCV_FIRST_FP_REGNUM + 20) },
189 { "f21", (RISCV_FIRST_FP_REGNUM + 21) },
190 { "f22", (RISCV_FIRST_FP_REGNUM + 22) },
191 { "f23", (RISCV_FIRST_FP_REGNUM + 23) },
192 { "f24", (RISCV_FIRST_FP_REGNUM + 24) },
193 { "f25", (RISCV_FIRST_FP_REGNUM + 25) },
194 { "f26", (RISCV_FIRST_FP_REGNUM + 26) },
195 { "f27", (RISCV_FIRST_FP_REGNUM + 27) },
196 { "f28", (RISCV_FIRST_FP_REGNUM + 28) },
197 { "f29", (RISCV_FIRST_FP_REGNUM + 29) },
198 { "f30", (RISCV_FIRST_FP_REGNUM + 30) },
199 { "f31", (RISCV_FIRST_FP_REGNUM + 31) },
200 };
201
202 /* Controls whether we place compressed breakpoints or not. When in auto
203 mode GDB tries to determine if the target supports compressed
204 breakpoints, and uses them if it does. */
205
206 static enum auto_boolean use_compressed_breakpoints;
207
208 /* The show callback for 'show riscv use-compressed-breakpoints'. */
209
210 static void
211 show_use_compressed_breakpoints (struct ui_file *file, int from_tty,
212 struct cmd_list_element *c,
213 const char *value)
214 {
215 fprintf_filtered (file,
216 _("Debugger's use of compressed breakpoints is set "
217 "to %s.\n"), value);
218 }
219
220 /* The set and show lists for 'set riscv' and 'show riscv' prefixes. */
221
222 static struct cmd_list_element *setriscvcmdlist = NULL;
223 static struct cmd_list_element *showriscvcmdlist = NULL;
224
225 /* The show callback for the 'show riscv' prefix command. */
226
227 static void
228 show_riscv_command (const char *args, int from_tty)
229 {
230 help_list (showriscvcmdlist, "show riscv ", all_commands, gdb_stdout);
231 }
232
233 /* The set callback for the 'set riscv' prefix command. */
234
235 static void
236 set_riscv_command (const char *args, int from_tty)
237 {
238 printf_unfiltered
239 (_("\"set riscv\" must be followed by an appropriate subcommand.\n"));
240 help_list (setriscvcmdlist, "set riscv ", all_commands, gdb_stdout);
241 }
242
243 /* The set and show lists for 'set riscv' and 'show riscv' prefixes. */
244
245 static struct cmd_list_element *setdebugriscvcmdlist = NULL;
246 static struct cmd_list_element *showdebugriscvcmdlist = NULL;
247
248 /* The show callback for the 'show debug riscv' prefix command. */
249
250 static void
251 show_debug_riscv_command (const char *args, int from_tty)
252 {
253 help_list (showdebugriscvcmdlist, "show debug riscv ", all_commands, gdb_stdout);
254 }
255
256 /* The set callback for the 'set debug riscv' prefix command. */
257
258 static void
259 set_debug_riscv_command (const char *args, int from_tty)
260 {
261 printf_unfiltered
262 (_("\"set debug riscv\" must be followed by an appropriate subcommand.\n"));
263 help_list (setdebugriscvcmdlist, "set debug riscv ", all_commands, gdb_stdout);
264 }
265
266 /* The show callback for all 'show debug riscv VARNAME' variables. */
267
268 static void
269 show_riscv_debug_variable (struct ui_file *file, int from_tty,
270 struct cmd_list_element *c,
271 const char *value)
272 {
273 fprintf_filtered (file,
274 _("RiscV debug variable `%s' is set to: %s\n"),
275 c->name, value);
276 }
277
278 /* When this is set to non-zero debugging information about breakpoint
279 kinds will be printed. */
280
281 static unsigned int riscv_debug_breakpoints = 0;
282
283 /* When this is set to non-zero debugging information about inferior calls
284 will be printed. */
285
286 static unsigned int riscv_debug_infcall = 0;
287
288 /* When this is set to non-zero debugging information about stack unwinding
289 will be printed. */
290
291 static unsigned int riscv_debug_unwinder = 0;
292
293 /* Read the MISA register from the target. There are a couple of locations
294 that the register might be found, these are all tried. If the MISA
295 register can't be found at all then the default value of 0 is returned,
296 this is inline with the RISC-V specification. */
297
298 static uint32_t
299 riscv_read_misa_reg ()
300 {
301 uint32_t value = 0;
302
303 if (target_has_registers)
304 {
305 /* Old cores might have MISA located at a different offset. */
306 static int misa_regs[] =
307 { RISCV_CSR_MISA_REGNUM, RISCV_CSR_LEGACY_MISA_REGNUM };
308
309 struct frame_info *frame = get_current_frame ();
310
311 for (int i = 0; i < ARRAY_SIZE (misa_regs); ++i)
312 {
313 bool success = false;
314
315 TRY
316 {
317 value = get_frame_register_unsigned (frame, misa_regs[i]);
318 success = true;
319 }
320 CATCH (ex, RETURN_MASK_ERROR)
321 {
322 /* Ignore errors, it is acceptable for a target to not
323 provide a MISA register, in which case the default value
324 of 0 should be used. */
325 }
326 END_CATCH
327
328 if (success)
329 break;
330 }
331 }
332
333 return value;
334 }
335
336 /* Return true if FEATURE is available for the architecture GDBARCH. The
337 FEATURE should be one of the single character feature codes described in
338 the RiscV ISA manual, these are between 'A' and 'Z'. */
339
340 static bool
341 riscv_has_feature (struct gdbarch *gdbarch, char feature)
342 {
343 gdb_assert (feature >= 'A' && feature <= 'Z');
344
345 uint32_t misa = riscv_read_misa_reg ();
346 if (misa == 0)
347 misa = gdbarch_tdep (gdbarch)->core_features;
348
349 return (misa & (1 << (feature - 'A'))) != 0;
350 }
351
352 /* See riscv-tdep.h. */
353
354 int
355 riscv_isa_xlen (struct gdbarch *gdbarch)
356 {
357 switch (gdbarch_tdep (gdbarch)->abi.fields.base_len)
358 {
359 default:
360 warning (_("unknown xlen size, assuming 4 bytes"));
361 /* Fall through. */
362 case 1:
363 return 4;
364 case 2:
365 return 8;
366 case 3:
367 return 16;
368 }
369 }
370
371 /* See riscv-tdep.h. */
372
373 int
374 riscv_isa_flen (struct gdbarch *gdbarch)
375 {
376 if (riscv_has_feature (gdbarch, 'Q'))
377 return 16;
378 else if (riscv_has_feature (gdbarch, 'D'))
379 return 8;
380 else if (riscv_has_feature (gdbarch, 'F'))
381 return 4;
382
383 return 0;
384 }
385
386 /* Return true if the target for GDBARCH has floating point hardware. */
387
388 static bool
389 riscv_has_fp_regs (struct gdbarch *gdbarch)
390 {
391 return (riscv_isa_flen (gdbarch) > 0);
392 }
393
394 /* Return true if GDBARCH is using any of the floating point hardware ABIs. */
395
396 static bool
397 riscv_has_fp_abi (struct gdbarch *gdbarch)
398 {
399 return (gdbarch_tdep (gdbarch)->abi.fields.float_abi != 0);
400 }
401
402 /* Return true if REGNO is a floating pointer register. */
403
404 static bool
405 riscv_is_fp_regno_p (int regno)
406 {
407 return (regno >= RISCV_FIRST_FP_REGNUM
408 && regno <= RISCV_LAST_FP_REGNUM);
409 }
410
411 /* Implement the breakpoint_kind_from_pc gdbarch method. */
412
413 static int
414 riscv_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
415 {
416 if (use_compressed_breakpoints == AUTO_BOOLEAN_AUTO)
417 {
418 gdb_byte buf[1];
419
420 /* Read the opcode byte to determine the instruction length. */
421 read_code (*pcptr, buf, 1);
422
423 if (riscv_debug_breakpoints)
424 fprintf_unfiltered
425 (gdb_stdlog,
426 "Using %s for breakpoint at %s (instruction length %d)\n",
427 riscv_insn_length (buf[0]) == 2 ? "C.EBREAK" : "EBREAK",
428 paddress (gdbarch, *pcptr), riscv_insn_length (buf[0]));
429 if (riscv_insn_length (buf[0]) == 2)
430 return 2;
431 else
432 return 4;
433 }
434 else if (use_compressed_breakpoints == AUTO_BOOLEAN_TRUE)
435 return 2;
436 else
437 return 4;
438 }
439
440 /* Implement the sw_breakpoint_from_kind gdbarch method. */
441
442 static const gdb_byte *
443 riscv_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
444 {
445 static const gdb_byte ebreak[] = { 0x73, 0x00, 0x10, 0x00, };
446 static const gdb_byte c_ebreak[] = { 0x02, 0x90 };
447
448 *size = kind;
449 switch (kind)
450 {
451 case 2:
452 return c_ebreak;
453 case 4:
454 return ebreak;
455 default:
456 gdb_assert_not_reached (_("unhandled breakpoint kind"));
457 }
458 }
459
460 /* Callback function for user_reg_add. */
461
462 static struct value *
463 value_of_riscv_user_reg (struct frame_info *frame, const void *baton)
464 {
465 const int *reg_p = (const int *) baton;
466 return value_of_register (*reg_p, frame);
467 }
468
469 /* Implement the register_name gdbarch method. */
470
471 static const char *
472 riscv_register_name (struct gdbarch *gdbarch, int regnum)
473 {
474 /* Prefer to use the alias. */
475 if (regnum >= RISCV_ZERO_REGNUM && regnum <= RISCV_LAST_FP_REGNUM)
476 {
477 gdb_assert (regnum < ARRAY_SIZE (riscv_gdb_reg_names));
478 return riscv_gdb_reg_names[regnum];
479 }
480
481 /* Check that there's no gap between the set of registers handled above,
482 and the set of registers handled next. */
483 gdb_assert ((RISCV_LAST_FP_REGNUM + 1) == RISCV_FIRST_CSR_REGNUM);
484
485 if (regnum >= RISCV_FIRST_CSR_REGNUM && regnum <= RISCV_LAST_CSR_REGNUM)
486 {
487 #define DECLARE_CSR(NAME,VALUE) \
488 case RISCV_ ## VALUE ## _REGNUM: return # NAME;
489
490 switch (regnum)
491 {
492 #include "opcode/riscv-opc.h"
493 default:
494 {
495 static char buf[20];
496
497 xsnprintf (buf, sizeof (buf), "csr%d",
498 regnum - RISCV_FIRST_CSR_REGNUM);
499 return buf;
500 }
501 }
502 #undef DECLARE_CSR
503 }
504
505 if (regnum == RISCV_PRIV_REGNUM)
506 return "priv";
507
508 return NULL;
509 }
510
511 /* Construct a type for 64-bit FP registers. */
512
513 static struct type *
514 riscv_fpreg_d_type (struct gdbarch *gdbarch)
515 {
516 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
517
518 if (tdep->riscv_fpreg_d_type == nullptr)
519 {
520 const struct builtin_type *bt = builtin_type (gdbarch);
521
522 /* The type we're building is this: */
523 #if 0
524 union __gdb_builtin_type_fpreg_d
525 {
526 float f;
527 double d;
528 };
529 #endif
530
531 struct type *t;
532
533 t = arch_composite_type (gdbarch,
534 "__gdb_builtin_type_fpreg_d", TYPE_CODE_UNION);
535 append_composite_type_field (t, "float", bt->builtin_float);
536 append_composite_type_field (t, "double", bt->builtin_double);
537 TYPE_VECTOR (t) = 1;
538 TYPE_NAME (t) = "builtin_type_fpreg_d";
539 tdep->riscv_fpreg_d_type = t;
540 }
541
542 return tdep->riscv_fpreg_d_type;
543 }
544
545 /* Construct a type for 128-bit FP registers. */
546
547 static struct type *
548 riscv_fpreg_q_type (struct gdbarch *gdbarch)
549 {
550 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
551
552 if (tdep->riscv_fpreg_q_type == nullptr)
553 {
554 const struct builtin_type *bt = builtin_type (gdbarch);
555
556 /* The type we're building is this: */
557 #if 0
558 union __gdb_builtin_type_fpreg_d
559 {
560 float f;
561 double d;
562 long double ld;
563 };
564 #endif
565
566 struct type *t;
567
568 t = arch_composite_type (gdbarch,
569 "__gdb_builtin_type_fpreg_q", TYPE_CODE_UNION);
570 append_composite_type_field (t, "float", bt->builtin_float);
571 append_composite_type_field (t, "double", bt->builtin_double);
572 append_composite_type_field (t, "long double", bt->builtin_long_double);
573 TYPE_VECTOR (t) = 1;
574 TYPE_NAME (t) = "builtin_type_fpreg_q";
575 tdep->riscv_fpreg_q_type = t;
576 }
577
578 return tdep->riscv_fpreg_q_type;
579 }
580
581 /* Implement the register_type gdbarch method. */
582
583 static struct type *
584 riscv_register_type (struct gdbarch *gdbarch, int regnum)
585 {
586 int regsize;
587
588 if (regnum < RISCV_FIRST_FP_REGNUM)
589 {
590 if (regnum == gdbarch_pc_regnum (gdbarch)
591 || regnum == RISCV_RA_REGNUM)
592 return builtin_type (gdbarch)->builtin_func_ptr;
593
594 if (regnum == RISCV_FP_REGNUM
595 || regnum == RISCV_SP_REGNUM
596 || regnum == RISCV_GP_REGNUM
597 || regnum == RISCV_TP_REGNUM)
598 return builtin_type (gdbarch)->builtin_data_ptr;
599
600 /* Remaining GPRs vary in size based on the current ISA. */
601 regsize = riscv_isa_xlen (gdbarch);
602 switch (regsize)
603 {
604 case 4:
605 return builtin_type (gdbarch)->builtin_uint32;
606 case 8:
607 return builtin_type (gdbarch)->builtin_uint64;
608 case 16:
609 return builtin_type (gdbarch)->builtin_uint128;
610 default:
611 internal_error (__FILE__, __LINE__,
612 _("unknown isa regsize %i"), regsize);
613 }
614 }
615 else if (regnum <= RISCV_LAST_FP_REGNUM)
616 {
617 regsize = riscv_isa_xlen (gdbarch);
618 switch (regsize)
619 {
620 case 4:
621 return builtin_type (gdbarch)->builtin_float;
622 case 8:
623 return riscv_fpreg_d_type (gdbarch);
624 case 16:
625 return riscv_fpreg_q_type (gdbarch);
626 default:
627 internal_error (__FILE__, __LINE__,
628 _("unknown isa regsize %i"), regsize);
629 }
630 }
631 else if (regnum == RISCV_PRIV_REGNUM)
632 return builtin_type (gdbarch)->builtin_int8;
633 else
634 {
635 if (regnum == RISCV_CSR_FFLAGS_REGNUM
636 || regnum == RISCV_CSR_FRM_REGNUM
637 || regnum == RISCV_CSR_FCSR_REGNUM)
638 return builtin_type (gdbarch)->builtin_int32;
639
640 regsize = riscv_isa_xlen (gdbarch);
641 switch (regsize)
642 {
643 case 4:
644 return builtin_type (gdbarch)->builtin_int32;
645 case 8:
646 return builtin_type (gdbarch)->builtin_int64;
647 case 16:
648 return builtin_type (gdbarch)->builtin_int128;
649 default:
650 internal_error (__FILE__, __LINE__,
651 _("unknown isa regsize %i"), regsize);
652 }
653 }
654 }
655
656 /* Helper for riscv_print_registers_info, prints info for a single register
657 REGNUM. */
658
659 static void
660 riscv_print_one_register_info (struct gdbarch *gdbarch,
661 struct ui_file *file,
662 struct frame_info *frame,
663 int regnum)
664 {
665 const char *name = gdbarch_register_name (gdbarch, regnum);
666 struct value *val = value_of_register (regnum, frame);
667 struct type *regtype = value_type (val);
668 int print_raw_format;
669 enum tab_stops { value_column_1 = 15 };
670
671 fputs_filtered (name, file);
672 print_spaces_filtered (value_column_1 - strlen (name), file);
673
674 print_raw_format = (value_entirely_available (val)
675 && !value_optimized_out (val));
676
677 if (TYPE_CODE (regtype) == TYPE_CODE_FLT
678 || (TYPE_CODE (regtype) == TYPE_CODE_UNION
679 && TYPE_NFIELDS (regtype) == 2
680 && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 0)) == TYPE_CODE_FLT
681 && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 1)) == TYPE_CODE_FLT)
682 || (TYPE_CODE (regtype) == TYPE_CODE_UNION
683 && TYPE_NFIELDS (regtype) == 3
684 && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 0)) == TYPE_CODE_FLT
685 && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 1)) == TYPE_CODE_FLT
686 && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 2)) == TYPE_CODE_FLT))
687 {
688 struct value_print_options opts;
689 const gdb_byte *valaddr = value_contents_for_printing (val);
690 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (regtype));
691
692 get_user_print_options (&opts);
693 opts.deref_ref = 1;
694
695 val_print (regtype,
696 value_embedded_offset (val), 0,
697 file, 0, val, &opts, current_language);
698
699 if (print_raw_format)
700 {
701 fprintf_filtered (file, "\t(raw ");
702 print_hex_chars (file, valaddr, TYPE_LENGTH (regtype), byte_order,
703 true);
704 fprintf_filtered (file, ")");
705 }
706 }
707 else
708 {
709 struct value_print_options opts;
710
711 /* Print the register in hex. */
712 get_formatted_print_options (&opts, 'x');
713 opts.deref_ref = 1;
714 val_print (regtype,
715 value_embedded_offset (val), 0,
716 file, 0, val, &opts, current_language);
717
718 if (print_raw_format)
719 {
720 if (regnum == RISCV_CSR_MSTATUS_REGNUM)
721 {
722 LONGEST d;
723 int size = register_size (gdbarch, regnum);
724 unsigned xlen;
725
726 d = value_as_long (val);
727 xlen = size * 4;
728 fprintf_filtered (file,
729 "\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
730 "FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
731 "SPIE:%X UPIE:%X MIE:%X HIE:%X SIE:%X UIE:%X",
732 (int) ((d >> (xlen - 1)) & 0x1),
733 (int) ((d >> 24) & 0x1f),
734 (int) ((d >> 19) & 0x1),
735 (int) ((d >> 18) & 0x1),
736 (int) ((d >> 17) & 0x1),
737 (int) ((d >> 15) & 0x3),
738 (int) ((d >> 13) & 0x3),
739 (int) ((d >> 11) & 0x3),
740 (int) ((d >> 9) & 0x3),
741 (int) ((d >> 8) & 0x1),
742 (int) ((d >> 7) & 0x1),
743 (int) ((d >> 6) & 0x1),
744 (int) ((d >> 5) & 0x1),
745 (int) ((d >> 4) & 0x1),
746 (int) ((d >> 3) & 0x1),
747 (int) ((d >> 2) & 0x1),
748 (int) ((d >> 1) & 0x1),
749 (int) ((d >> 0) & 0x1));
750 }
751 else if (regnum == RISCV_CSR_MISA_REGNUM)
752 {
753 int base;
754 unsigned xlen, i;
755 LONGEST d;
756
757 d = value_as_long (val);
758 base = d >> 30;
759 xlen = 16;
760
761 for (; base > 0; base--)
762 xlen *= 2;
763 fprintf_filtered (file, "\tRV%d", xlen);
764
765 for (i = 0; i < 26; i++)
766 {
767 if (d & (1 << i))
768 fprintf_filtered (file, "%c", 'A' + i);
769 }
770 }
771 else if (regnum == RISCV_CSR_FCSR_REGNUM
772 || regnum == RISCV_CSR_FFLAGS_REGNUM
773 || regnum == RISCV_CSR_FRM_REGNUM)
774 {
775 LONGEST d;
776
777 d = value_as_long (val);
778
779 fprintf_filtered (file, "\t");
780 if (regnum != RISCV_CSR_FRM_REGNUM)
781 fprintf_filtered (file,
782 "RD:%01X NV:%d DZ:%d OF:%d UF:%d NX:%d",
783 (int) ((d >> 5) & 0x7),
784 (int) ((d >> 4) & 0x1),
785 (int) ((d >> 3) & 0x1),
786 (int) ((d >> 2) & 0x1),
787 (int) ((d >> 1) & 0x1),
788 (int) ((d >> 0) & 0x1));
789
790 if (regnum != RISCV_CSR_FFLAGS_REGNUM)
791 {
792 static const char * const sfrm[] =
793 {
794 "RNE (round to nearest; ties to even)",
795 "RTZ (Round towards zero)",
796 "RDN (Round down towards -INF)",
797 "RUP (Round up towards +INF)",
798 "RMM (Round to nearest; ties to max magnitude)",
799 "INVALID[5]",
800 "INVALID[6]",
801 "dynamic rounding mode",
802 };
803 int frm = ((regnum == RISCV_CSR_FCSR_REGNUM)
804 ? (d >> 5) : d) & 0x3;
805
806 fprintf_filtered (file, "%sFRM:%i [%s]",
807 (regnum == RISCV_CSR_FCSR_REGNUM
808 ? " " : ""),
809 frm, sfrm[frm]);
810 }
811 }
812 else if (regnum == RISCV_PRIV_REGNUM)
813 {
814 LONGEST d;
815 uint8_t priv;
816
817 d = value_as_long (val);
818 priv = d & 0xff;
819
820 if (priv < 4)
821 {
822 static const char * const sprv[] =
823 {
824 "User/Application",
825 "Supervisor",
826 "Hypervisor",
827 "Machine"
828 };
829 fprintf_filtered (file, "\tprv:%d [%s]",
830 priv, sprv[priv]);
831 }
832 else
833 fprintf_filtered (file, "\tprv:%d [INVALID]", priv);
834 }
835 else
836 {
837 /* If not a vector register, print it also according to its
838 natural format. */
839 if (TYPE_VECTOR (regtype) == 0)
840 {
841 get_user_print_options (&opts);
842 opts.deref_ref = 1;
843 fprintf_filtered (file, "\t");
844 val_print (regtype,
845 value_embedded_offset (val), 0,
846 file, 0, val, &opts, current_language);
847 }
848 }
849 }
850 }
851 fprintf_filtered (file, "\n");
852 }
853
854 /* Return true if REGNUM is a valid CSR register. The CSR register space
855 is sparsely populated, so not every number is a named CSR. */
856
857 static bool
858 riscv_is_regnum_a_named_csr (int regnum)
859 {
860 gdb_assert (regnum >= RISCV_FIRST_CSR_REGNUM
861 && regnum <= RISCV_LAST_CSR_REGNUM);
862
863 switch (regnum)
864 {
865 #define DECLARE_CSR(name, num) case RISCV_ ## num ## _REGNUM:
866 #include "opcode/riscv-opc.h"
867 #undef DECLARE_CSR
868 return true;
869
870 default:
871 return false;
872 }
873 }
874
875 /* Implement the register_reggroup_p gdbarch method. Is REGNUM a member
876 of REGGROUP? */
877
878 static int
879 riscv_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
880 struct reggroup *reggroup)
881 {
882 /* Used by 'info registers' and 'info registers <groupname>'. */
883
884 if (gdbarch_register_name (gdbarch, regnum) == NULL
885 || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
886 return 0;
887
888 if (reggroup == all_reggroup)
889 {
890 if (regnum < RISCV_FIRST_CSR_REGNUM || regnum == RISCV_PRIV_REGNUM)
891 return 1;
892 if (riscv_is_regnum_a_named_csr (regnum))
893 return 1;
894 return 0;
895 }
896 else if (reggroup == float_reggroup)
897 return (riscv_is_fp_regno_p (regnum)
898 || regnum == RISCV_CSR_FCSR_REGNUM
899 || regnum == RISCV_CSR_FFLAGS_REGNUM
900 || regnum == RISCV_CSR_FRM_REGNUM);
901 else if (reggroup == general_reggroup)
902 return regnum < RISCV_FIRST_FP_REGNUM;
903 else if (reggroup == restore_reggroup || reggroup == save_reggroup)
904 {
905 if (riscv_has_fp_regs (gdbarch))
906 return regnum <= RISCV_LAST_FP_REGNUM;
907 else
908 return regnum < RISCV_FIRST_FP_REGNUM;
909 }
910 else if (reggroup == system_reggroup)
911 {
912 if (regnum == RISCV_PRIV_REGNUM)
913 return 1;
914 if (regnum < RISCV_FIRST_CSR_REGNUM || regnum > RISCV_LAST_CSR_REGNUM)
915 return 0;
916 if (riscv_is_regnum_a_named_csr (regnum))
917 return 1;
918 return 0;
919 }
920 else if (reggroup == vector_reggroup)
921 return 0;
922 else
923 return 0;
924 }
925
926 /* Implement the print_registers_info gdbarch method. This is used by
927 'info registers' and 'info all-registers'. */
928
929 static void
930 riscv_print_registers_info (struct gdbarch *gdbarch,
931 struct ui_file *file,
932 struct frame_info *frame,
933 int regnum, int print_all)
934 {
935 if (regnum != -1)
936 {
937 /* Print one specified register. */
938 gdb_assert (regnum <= RISCV_LAST_REGNUM);
939 if (gdbarch_register_name (gdbarch, regnum) == NULL
940 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
941 error (_("Not a valid register for the current processor type"));
942 riscv_print_one_register_info (gdbarch, file, frame, regnum);
943 }
944 else
945 {
946 struct reggroup *reggroup;
947
948 if (print_all)
949 reggroup = all_reggroup;
950 else
951 reggroup = general_reggroup;
952
953 for (regnum = 0; regnum <= RISCV_LAST_REGNUM; ++regnum)
954 {
955 /* Zero never changes, so might as well hide by default. */
956 if (regnum == RISCV_ZERO_REGNUM && !print_all)
957 continue;
958
959 /* Registers with no name are not valid on this ISA. */
960 if (gdbarch_register_name (gdbarch, regnum) == NULL
961 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
962 continue;
963
964 /* Is the register in the group we're interested in? */
965 if (!riscv_register_reggroup_p (gdbarch, regnum, reggroup))
966 continue;
967
968 riscv_print_one_register_info (gdbarch, file, frame, regnum);
969 }
970 }
971 }
972
973 /* Class that handles one decoded RiscV instruction. */
974
975 class riscv_insn
976 {
977 public:
978
979 /* Enum of all the opcodes that GDB cares about during the prologue scan. */
980 enum opcode
981 {
982 /* Unknown value is used at initialisation time. */
983 UNKNOWN = 0,
984
985 /* These instructions are all the ones we are interested in during the
986 prologue scan. */
987 ADD,
988 ADDI,
989 ADDIW,
990 ADDW,
991 AUIPC,
992 LUI,
993 SD,
994 SW,
995 /* These are needed for software breakopint support. */
996 JAL,
997 JALR,
998 BEQ,
999 BNE,
1000 BLT,
1001 BGE,
1002 BLTU,
1003 BGEU,
1004 /* These are needed for stepping over atomic sequences. */
1005 LR,
1006 SC,
1007
1008 /* Other instructions are not interesting during the prologue scan, and
1009 are ignored. */
1010 OTHER
1011 };
1012
1013 riscv_insn ()
1014 : m_length (0),
1015 m_opcode (OTHER),
1016 m_rd (0),
1017 m_rs1 (0),
1018 m_rs2 (0)
1019 {
1020 /* Nothing. */
1021 }
1022
1023 void decode (struct gdbarch *gdbarch, CORE_ADDR pc);
1024
1025 /* Get the length of the instruction in bytes. */
1026 int length () const
1027 { return m_length; }
1028
1029 /* Get the opcode for this instruction. */
1030 enum opcode opcode () const
1031 { return m_opcode; }
1032
1033 /* Get destination register field for this instruction. This is only
1034 valid if the OPCODE implies there is such a field for this
1035 instruction. */
1036 int rd () const
1037 { return m_rd; }
1038
1039 /* Get the RS1 register field for this instruction. This is only valid
1040 if the OPCODE implies there is such a field for this instruction. */
1041 int rs1 () const
1042 { return m_rs1; }
1043
1044 /* Get the RS2 register field for this instruction. This is only valid
1045 if the OPCODE implies there is such a field for this instruction. */
1046 int rs2 () const
1047 { return m_rs2; }
1048
1049 /* Get the immediate for this instruction in signed form. This is only
1050 valid if the OPCODE implies there is such a field for this
1051 instruction. */
1052 int imm_signed () const
1053 { return m_imm.s; }
1054
1055 private:
1056
1057 /* Extract 5 bit register field at OFFSET from instruction OPCODE. */
1058 int decode_register_index (unsigned long opcode, int offset)
1059 {
1060 return (opcode >> offset) & 0x1F;
1061 }
1062
1063 /* Extract 5 bit register field at OFFSET from instruction OPCODE. */
1064 int decode_register_index_short (unsigned long opcode, int offset)
1065 {
1066 return ((opcode >> offset) & 0x7) + 8;
1067 }
1068
1069 /* Helper for DECODE, decode 32-bit R-type instruction. */
1070 void decode_r_type_insn (enum opcode opcode, ULONGEST ival)
1071 {
1072 m_opcode = opcode;
1073 m_rd = decode_register_index (ival, OP_SH_RD);
1074 m_rs1 = decode_register_index (ival, OP_SH_RS1);
1075 m_rs2 = decode_register_index (ival, OP_SH_RS2);
1076 }
1077
1078 /* Helper for DECODE, decode 16-bit compressed R-type instruction. */
1079 void decode_cr_type_insn (enum opcode opcode, ULONGEST ival)
1080 {
1081 m_opcode = opcode;
1082 m_rd = m_rs1 = decode_register_index (ival, OP_SH_CRS1S);
1083 m_rs2 = decode_register_index (ival, OP_SH_CRS2);
1084 }
1085
1086 /* Helper for DECODE, decode 32-bit I-type instruction. */
1087 void decode_i_type_insn (enum opcode opcode, ULONGEST ival)
1088 {
1089 m_opcode = opcode;
1090 m_rd = decode_register_index (ival, OP_SH_RD);
1091 m_rs1 = decode_register_index (ival, OP_SH_RS1);
1092 m_imm.s = EXTRACT_ITYPE_IMM (ival);
1093 }
1094
1095 /* Helper for DECODE, decode 16-bit compressed I-type instruction. */
1096 void decode_ci_type_insn (enum opcode opcode, ULONGEST ival)
1097 {
1098 m_opcode = opcode;
1099 m_rd = m_rs1 = decode_register_index (ival, OP_SH_CRS1S);
1100 m_imm.s = EXTRACT_RVC_IMM (ival);
1101 }
1102
1103 /* Helper for DECODE, decode 32-bit S-type instruction. */
1104 void decode_s_type_insn (enum opcode opcode, ULONGEST ival)
1105 {
1106 m_opcode = opcode;
1107 m_rs1 = decode_register_index (ival, OP_SH_RS1);
1108 m_rs2 = decode_register_index (ival, OP_SH_RS2);
1109 m_imm.s = EXTRACT_STYPE_IMM (ival);
1110 }
1111
1112 /* Helper for DECODE, decode 16-bit CS-type instruction. The immediate
1113 encoding is different for each CS format instruction, so extracting
1114 the immediate is left up to the caller, who should pass the extracted
1115 immediate value through in IMM. */
1116 void decode_cs_type_insn (enum opcode opcode, ULONGEST ival, int imm)
1117 {
1118 m_opcode = opcode;
1119 m_imm.s = imm;
1120 m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
1121 m_rs2 = decode_register_index_short (ival, OP_SH_CRS2S);
1122 }
1123
1124 /* Helper for DECODE, decode 16-bit CSS-type instruction. The immediate
1125 encoding is different for each CSS format instruction, so extracting
1126 the immediate is left up to the caller, who should pass the extracted
1127 immediate value through in IMM. */
1128 void decode_css_type_insn (enum opcode opcode, ULONGEST ival, int imm)
1129 {
1130 m_opcode = opcode;
1131 m_imm.s = imm;
1132 m_rs1 = RISCV_SP_REGNUM;
1133 /* Not a compressed register number in this case. */
1134 m_rs2 = decode_register_index (ival, OP_SH_CRS2);
1135 }
1136
1137 /* Helper for DECODE, decode 32-bit U-type instruction. */
1138 void decode_u_type_insn (enum opcode opcode, ULONGEST ival)
1139 {
1140 m_opcode = opcode;
1141 m_rd = decode_register_index (ival, OP_SH_RD);
1142 m_imm.s = EXTRACT_UTYPE_IMM (ival);
1143 }
1144
1145 /* Helper for DECODE, decode 32-bit J-type instruction. */
1146 void decode_j_type_insn (enum opcode opcode, ULONGEST ival)
1147 {
1148 m_opcode = opcode;
1149 m_rd = decode_register_index (ival, OP_SH_RD);
1150 m_imm.s = EXTRACT_UJTYPE_IMM (ival);
1151 }
1152
1153 /* Helper for DECODE, decode 32-bit J-type instruction. */
1154 void decode_cj_type_insn (enum opcode opcode, ULONGEST ival)
1155 {
1156 m_opcode = opcode;
1157 m_imm.s = EXTRACT_RVC_J_IMM (ival);
1158 }
1159
1160 void decode_b_type_insn (enum opcode opcode, ULONGEST ival)
1161 {
1162 m_opcode = opcode;
1163 m_rs1 = decode_register_index (ival, OP_SH_RS1);
1164 m_rs2 = decode_register_index (ival, OP_SH_RS2);
1165 m_imm.s = EXTRACT_SBTYPE_IMM (ival);
1166 }
1167
1168 void decode_cb_type_insn (enum opcode opcode, ULONGEST ival)
1169 {
1170 m_opcode = opcode;
1171 m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
1172 m_imm.s = EXTRACT_RVC_B_IMM (ival);
1173 }
1174
1175 /* Fetch instruction from target memory at ADDR, return the content of
1176 the instruction, and update LEN with the instruction length. */
1177 static ULONGEST fetch_instruction (struct gdbarch *gdbarch,
1178 CORE_ADDR addr, int *len);
1179
1180 /* The length of the instruction in bytes. Should be 2 or 4. */
1181 int m_length;
1182
1183 /* The instruction opcode. */
1184 enum opcode m_opcode;
1185
1186 /* The three possible registers an instruction might reference. Not
1187 every instruction fills in all of these registers. Which fields are
1188 valid depends on the opcode. The naming of these fields matches the
1189 naming in the riscv isa manual. */
1190 int m_rd;
1191 int m_rs1;
1192 int m_rs2;
1193
1194 /* Possible instruction immediate. This is only valid if the instruction
1195 format contains an immediate, not all instruction, whether this is
1196 valid depends on the opcode. Despite only having one format for now
1197 the immediate is packed into a union, later instructions might require
1198 an unsigned formatted immediate, having the union in place now will
1199 reduce the need for code churn later. */
1200 union riscv_insn_immediate
1201 {
1202 riscv_insn_immediate ()
1203 : s (0)
1204 {
1205 /* Nothing. */
1206 }
1207
1208 int s;
1209 } m_imm;
1210 };
1211
1212 /* Fetch instruction from target memory at ADDR, return the content of the
1213 instruction, and update LEN with the instruction length. */
1214
1215 ULONGEST
1216 riscv_insn::fetch_instruction (struct gdbarch *gdbarch,
1217 CORE_ADDR addr, int *len)
1218 {
1219 enum bfd_endian byte_order = gdbarch_byte_order_for_code (gdbarch);
1220 gdb_byte buf[8];
1221 int instlen, status;
1222
1223 /* All insns are at least 16 bits. */
1224 status = target_read_memory (addr, buf, 2);
1225 if (status)
1226 memory_error (TARGET_XFER_E_IO, addr);
1227
1228 /* If we need more, grab it now. */
1229 instlen = riscv_insn_length (buf[0]);
1230 gdb_assert (instlen <= sizeof (buf));
1231 *len = instlen;
1232
1233 if (instlen > 2)
1234 {
1235 status = target_read_memory (addr + 2, buf + 2, instlen - 2);
1236 if (status)
1237 memory_error (TARGET_XFER_E_IO, addr + 2);
1238 }
1239
1240 return extract_unsigned_integer (buf, instlen, byte_order);
1241 }
1242
1243 /* Fetch from target memory an instruction at PC and decode it. */
1244
1245 void
1246 riscv_insn::decode (struct gdbarch *gdbarch, CORE_ADDR pc)
1247 {
1248 ULONGEST ival;
1249
1250 /* Fetch the instruction, and the instructions length. */
1251 ival = fetch_instruction (gdbarch, pc, &m_length);
1252
1253 if (m_length == 4)
1254 {
1255 if (is_add_insn (ival))
1256 decode_r_type_insn (ADD, ival);
1257 else if (is_addw_insn (ival))
1258 decode_r_type_insn (ADDW, ival);
1259 else if (is_addi_insn (ival))
1260 decode_i_type_insn (ADDI, ival);
1261 else if (is_addiw_insn (ival))
1262 decode_i_type_insn (ADDIW, ival);
1263 else if (is_auipc_insn (ival))
1264 decode_u_type_insn (AUIPC, ival);
1265 else if (is_lui_insn (ival))
1266 decode_u_type_insn (LUI, ival);
1267 else if (is_sd_insn (ival))
1268 decode_s_type_insn (SD, ival);
1269 else if (is_sw_insn (ival))
1270 decode_s_type_insn (SW, ival);
1271 else if (is_jal_insn (ival))
1272 decode_j_type_insn (JAL, ival);
1273 else if (is_jalr_insn (ival))
1274 decode_i_type_insn (JALR, ival);
1275 else if (is_beq_insn (ival))
1276 decode_b_type_insn (BEQ, ival);
1277 else if (is_bne_insn (ival))
1278 decode_b_type_insn (BNE, ival);
1279 else if (is_blt_insn (ival))
1280 decode_b_type_insn (BLT, ival);
1281 else if (is_bge_insn (ival))
1282 decode_b_type_insn (BGE, ival);
1283 else if (is_bltu_insn (ival))
1284 decode_b_type_insn (BLTU, ival);
1285 else if (is_bgeu_insn (ival))
1286 decode_b_type_insn (BGEU, ival);
1287 else if (is_lr_w_insn (ival))
1288 decode_r_type_insn (LR, ival);
1289 else if (is_lr_d_insn (ival))
1290 decode_r_type_insn (LR, ival);
1291 else if (is_sc_w_insn (ival))
1292 decode_r_type_insn (SC, ival);
1293 else if (is_sc_d_insn (ival))
1294 decode_r_type_insn (SC, ival);
1295 else
1296 /* None of the other fields are valid in this case. */
1297 m_opcode = OTHER;
1298 }
1299 else if (m_length == 2)
1300 {
1301 int xlen = riscv_isa_xlen (gdbarch);
1302
1303 /* C_ADD and C_JALR have the same opcode. If RS2 is 0, then this is a
1304 C_JALR. So must try to match C_JALR first as it has more bits in
1305 mask. */
1306 if (is_c_jalr_insn (ival))
1307 decode_cr_type_insn (JALR, ival);
1308 else if (is_c_add_insn (ival))
1309 decode_cr_type_insn (ADD, ival);
1310 /* C_ADDW is RV64 and RV128 only. */
1311 else if (xlen != 4 && is_c_addw_insn (ival))
1312 decode_cr_type_insn (ADDW, ival);
1313 else if (is_c_addi_insn (ival))
1314 decode_ci_type_insn (ADDI, ival);
1315 /* C_ADDIW and C_JAL have the same opcode. C_ADDIW is RV64 and RV128
1316 only and C_JAL is RV32 only. */
1317 else if (xlen != 4 && is_c_addiw_insn (ival))
1318 decode_ci_type_insn (ADDIW, ival);
1319 else if (xlen == 4 && is_c_jal_insn (ival))
1320 decode_cj_type_insn (JAL, ival);
1321 /* C_ADDI16SP and C_LUI have the same opcode. If RD is 2, then this is a
1322 C_ADDI16SP. So must try to match C_ADDI16SP first as it has more bits
1323 in mask. */
1324 else if (is_c_addi16sp_insn (ival))
1325 {
1326 m_opcode = ADDI;
1327 m_rd = m_rs1 = decode_register_index (ival, OP_SH_RD);
1328 m_imm.s = EXTRACT_RVC_ADDI16SP_IMM (ival);
1329 }
1330 else if (is_c_addi4spn_insn (ival))
1331 {
1332 m_opcode = ADDI;
1333 m_rd = decode_register_index_short (ival, OP_SH_CRS2S);
1334 m_rs1 = RISCV_SP_REGNUM;
1335 m_imm.s = EXTRACT_RVC_ADDI4SPN_IMM (ival);
1336 }
1337 else if (is_c_lui_insn (ival))
1338 {
1339 m_opcode = LUI;
1340 m_rd = decode_register_index (ival, OP_SH_CRS1S);
1341 m_imm.s = EXTRACT_RVC_LUI_IMM (ival);
1342 }
1343 /* C_SD and C_FSW have the same opcode. C_SD is RV64 and RV128 only,
1344 and C_FSW is RV32 only. */
1345 else if (xlen != 4 && is_c_sd_insn (ival))
1346 decode_cs_type_insn (SD, ival, EXTRACT_RVC_LD_IMM (ival));
1347 else if (is_c_sw_insn (ival))
1348 decode_cs_type_insn (SW, ival, EXTRACT_RVC_LW_IMM (ival));
1349 else if (is_c_swsp_insn (ival))
1350 decode_css_type_insn (SW, ival, EXTRACT_RVC_SWSP_IMM (ival));
1351 else if (xlen != 4 && is_c_sdsp_insn (ival))
1352 decode_css_type_insn (SW, ival, EXTRACT_RVC_SDSP_IMM (ival));
1353 /* C_JR and C_MV have the same opcode. If RS2 is 0, then this is a C_JR.
1354 So must try to match C_JR first as it ahs more bits in mask. */
1355 else if (is_c_jr_insn (ival))
1356 decode_cr_type_insn (JALR, ival);
1357 else if (is_c_j_insn (ival))
1358 decode_cj_type_insn (JAL, ival);
1359 else if (is_c_beqz_insn (ival))
1360 decode_cb_type_insn (BEQ, ival);
1361 else if (is_c_bnez_insn (ival))
1362 decode_cb_type_insn (BNE, ival);
1363 else
1364 /* None of the other fields of INSN are valid in this case. */
1365 m_opcode = OTHER;
1366 }
1367 else
1368 internal_error (__FILE__, __LINE__,
1369 _("unable to decode %d byte instructions in "
1370 "prologue at %s"), m_length,
1371 core_addr_to_string (pc));
1372 }
1373
1374 /* The prologue scanner. This is currently only used for skipping the
1375 prologue of a function when the DWARF information is not sufficient.
1376 However, it is written with filling of the frame cache in mind, which
1377 is why different groups of stack setup instructions are split apart
1378 during the core of the inner loop. In the future, the intention is to
1379 extend this function to fully support building up a frame cache that
1380 can unwind register values when there is no DWARF information. */
1381
1382 static CORE_ADDR
1383 riscv_scan_prologue (struct gdbarch *gdbarch,
1384 CORE_ADDR start_pc, CORE_ADDR end_pc,
1385 struct riscv_unwind_cache *cache)
1386 {
1387 CORE_ADDR cur_pc, next_pc, after_prologue_pc;
1388 CORE_ADDR end_prologue_addr = 0;
1389
1390 /* Find an upper limit on the function prologue using the debug
1391 information. If the debug information could not be used to provide
1392 that bound, then use an arbitrary large number as the upper bound. */
1393 after_prologue_pc = skip_prologue_using_sal (gdbarch, start_pc);
1394 if (after_prologue_pc == 0)
1395 after_prologue_pc = start_pc + 100; /* Arbitrary large number. */
1396 if (after_prologue_pc < end_pc)
1397 end_pc = after_prologue_pc;
1398
1399 pv_t regs[RISCV_NUM_INTEGER_REGS]; /* Number of GPR. */
1400 for (int regno = 0; regno < RISCV_NUM_INTEGER_REGS; regno++)
1401 regs[regno] = pv_register (regno, 0);
1402 pv_area stack (RISCV_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1403
1404 if (riscv_debug_unwinder)
1405 fprintf_unfiltered
1406 (gdb_stdlog,
1407 "Prologue scan for function starting at %s (limit %s)\n",
1408 core_addr_to_string (start_pc),
1409 core_addr_to_string (end_pc));
1410
1411 for (next_pc = cur_pc = start_pc; cur_pc < end_pc; cur_pc = next_pc)
1412 {
1413 struct riscv_insn insn;
1414
1415 /* Decode the current instruction, and decide where the next
1416 instruction lives based on the size of this instruction. */
1417 insn.decode (gdbarch, cur_pc);
1418 gdb_assert (insn.length () > 0);
1419 next_pc = cur_pc + insn.length ();
1420
1421 /* Look for common stack adjustment insns. */
1422 if ((insn.opcode () == riscv_insn::ADDI
1423 || insn.opcode () == riscv_insn::ADDIW)
1424 && insn.rd () == RISCV_SP_REGNUM
1425 && insn.rs1 () == RISCV_SP_REGNUM)
1426 {
1427 /* Handle: addi sp, sp, -i
1428 or: addiw sp, sp, -i */
1429 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1430 gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1431 regs[insn.rd ()]
1432 = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
1433 }
1434 else if ((insn.opcode () == riscv_insn::SW
1435 || insn.opcode () == riscv_insn::SD)
1436 && (insn.rs1 () == RISCV_SP_REGNUM
1437 || insn.rs1 () == RISCV_FP_REGNUM))
1438 {
1439 /* Handle: sw reg, offset(sp)
1440 or: sd reg, offset(sp)
1441 or: sw reg, offset(s0)
1442 or: sd reg, offset(s0) */
1443 /* Instruction storing a register onto the stack. */
1444 gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1445 gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
1446 stack.store (pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ()),
1447 (insn.opcode () == riscv_insn::SW ? 4 : 8),
1448 regs[insn.rs2 ()]);
1449 }
1450 else if (insn.opcode () == riscv_insn::ADDI
1451 && insn.rd () == RISCV_FP_REGNUM
1452 && insn.rs1 () == RISCV_SP_REGNUM)
1453 {
1454 /* Handle: addi s0, sp, size */
1455 /* Instructions setting up the frame pointer. */
1456 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1457 gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1458 regs[insn.rd ()]
1459 = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
1460 }
1461 else if ((insn.opcode () == riscv_insn::ADD
1462 || insn.opcode () == riscv_insn::ADDW)
1463 && insn.rd () == RISCV_FP_REGNUM
1464 && insn.rs1 () == RISCV_SP_REGNUM
1465 && insn.rs2 () == RISCV_ZERO_REGNUM)
1466 {
1467 /* Handle: add s0, sp, 0
1468 or: addw s0, sp, 0 */
1469 /* Instructions setting up the frame pointer. */
1470 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1471 gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1472 regs[insn.rd ()] = pv_add_constant (regs[insn.rs1 ()], 0);
1473 }
1474 else if ((insn.opcode () == riscv_insn::ADDI
1475 && insn.rd () == RISCV_ZERO_REGNUM
1476 && insn.rs1 () == RISCV_ZERO_REGNUM
1477 && insn.imm_signed () == 0))
1478 {
1479 /* Handle: add x0, x0, 0 (NOP) */
1480 }
1481 else if (insn.opcode () == riscv_insn::AUIPC)
1482 {
1483 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1484 regs[insn.rd ()] = pv_constant (cur_pc + insn.imm_signed ());
1485 }
1486 else if (insn.opcode () == riscv_insn::LUI)
1487 {
1488 /* Handle: lui REG, n
1489 Where REG is not gp register. */
1490 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1491 regs[insn.rd ()] = pv_constant (insn.imm_signed ());
1492 }
1493 else if (insn.opcode () == riscv_insn::ADDI)
1494 {
1495 /* Handle: addi REG1, REG2, IMM */
1496 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1497 gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1498 regs[insn.rd ()]
1499 = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
1500 }
1501 else if (insn.opcode () == riscv_insn::ADD)
1502 {
1503 /* Handle: addi REG1, REG2, IMM */
1504 gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1505 gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1506 gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
1507 regs[insn.rd ()] = pv_add (regs[insn.rs1 ()], regs[insn.rs2 ()]);
1508 }
1509 else
1510 {
1511 end_prologue_addr = cur_pc;
1512 break;
1513 }
1514 }
1515
1516 if (end_prologue_addr == 0)
1517 end_prologue_addr = cur_pc;
1518
1519 if (riscv_debug_unwinder)
1520 fprintf_unfiltered (gdb_stdlog, "End of prologue at %s\n",
1521 core_addr_to_string (end_prologue_addr));
1522
1523 if (cache != NULL)
1524 {
1525 /* Figure out if it is a frame pointer or just a stack pointer. Also
1526 the offset held in the pv_t is from the original register value to
1527 the current value, which for a grows down stack means a negative
1528 value. The FRAME_BASE_OFFSET is the negation of this, how to get
1529 from the current value to the original value. */
1530 if (pv_is_register (regs[RISCV_FP_REGNUM], RISCV_SP_REGNUM))
1531 {
1532 cache->frame_base_reg = RISCV_FP_REGNUM;
1533 cache->frame_base_offset = -regs[RISCV_FP_REGNUM].k;
1534 }
1535 else
1536 {
1537 cache->frame_base_reg = RISCV_SP_REGNUM;
1538 cache->frame_base_offset = -regs[RISCV_SP_REGNUM].k;
1539 }
1540
1541 /* Assign offset from old SP to all saved registers. As we don't
1542 have the previous value for the frame base register at this
1543 point, we store the offset as the address in the trad_frame, and
1544 then convert this to an actual address later. */
1545 for (int i = 0; i <= RISCV_NUM_INTEGER_REGS; i++)
1546 {
1547 CORE_ADDR offset;
1548 if (stack.find_reg (gdbarch, i, &offset))
1549 {
1550 if (riscv_debug_unwinder)
1551 fprintf_unfiltered (gdb_stdlog,
1552 "Register $%s at stack offset %ld\n",
1553 gdbarch_register_name (gdbarch, i),
1554 offset);
1555 trad_frame_set_addr (cache->regs, i, offset);
1556 }
1557 }
1558 }
1559
1560 return end_prologue_addr;
1561 }
1562
1563 /* Implement the riscv_skip_prologue gdbarch method. */
1564
1565 static CORE_ADDR
1566 riscv_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1567 {
1568 CORE_ADDR func_addr;
1569
1570 /* See if we can determine the end of the prologue via the symbol
1571 table. If so, then return either PC, or the PC after the
1572 prologue, whichever is greater. */
1573 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1574 {
1575 CORE_ADDR post_prologue_pc
1576 = skip_prologue_using_sal (gdbarch, func_addr);
1577
1578 if (post_prologue_pc != 0)
1579 return std::max (pc, post_prologue_pc);
1580 }
1581
1582 /* Can't determine prologue from the symbol table, need to examine
1583 instructions. Pass -1 for the end address to indicate the prologue
1584 scanner can scan as far as it needs to find the end of the prologue. */
1585 return riscv_scan_prologue (gdbarch, pc, ((CORE_ADDR) -1), NULL);
1586 }
1587
1588 /* Implement the gdbarch push dummy code callback. */
1589
1590 static CORE_ADDR
1591 riscv_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
1592 CORE_ADDR funaddr, struct value **args, int nargs,
1593 struct type *value_type, CORE_ADDR *real_pc,
1594 CORE_ADDR *bp_addr, struct regcache *regcache)
1595 {
1596 /* Allocate space for a breakpoint, and keep the stack correctly
1597 aligned. */
1598 sp -= 16;
1599 *bp_addr = sp;
1600 *real_pc = funaddr;
1601 return sp;
1602 }
1603
1604 /* Compute the alignment of the type T. Used while setting up the
1605 arguments for a dummy call. */
1606
1607 static int
1608 riscv_type_alignment (struct type *t)
1609 {
1610 t = check_typedef (t);
1611 switch (TYPE_CODE (t))
1612 {
1613 default:
1614 error (_("Could not compute alignment of type"));
1615
1616 case TYPE_CODE_RVALUE_REF:
1617 case TYPE_CODE_PTR:
1618 case TYPE_CODE_ENUM:
1619 case TYPE_CODE_INT:
1620 case TYPE_CODE_FLT:
1621 case TYPE_CODE_REF:
1622 case TYPE_CODE_CHAR:
1623 case TYPE_CODE_BOOL:
1624 return TYPE_LENGTH (t);
1625
1626 case TYPE_CODE_ARRAY:
1627 case TYPE_CODE_COMPLEX:
1628 return riscv_type_alignment (TYPE_TARGET_TYPE (t));
1629
1630 case TYPE_CODE_STRUCT:
1631 case TYPE_CODE_UNION:
1632 {
1633 int i;
1634 int align = 1;
1635
1636 for (i = 0; i < TYPE_NFIELDS (t); ++i)
1637 {
1638 if (TYPE_FIELD_LOC_KIND (t, i) == FIELD_LOC_KIND_BITPOS)
1639 {
1640 int a = riscv_type_alignment (TYPE_FIELD_TYPE (t, i));
1641 if (a > align)
1642 align = a;
1643 }
1644 }
1645 return align;
1646 }
1647 }
1648 }
1649
1650 /* Holds information about a single argument either being passed to an
1651 inferior function, or returned from an inferior function. This includes
1652 information about the size, type, etc of the argument, and also
1653 information about how the argument will be passed (or returned). */
1654
1655 struct riscv_arg_info
1656 {
1657 /* Contents of the argument. */
1658 const gdb_byte *contents;
1659
1660 /* Length of argument. */
1661 int length;
1662
1663 /* Alignment required for an argument of this type. */
1664 int align;
1665
1666 /* The type for this argument. */
1667 struct type *type;
1668
1669 /* Each argument can have either 1 or 2 locations assigned to it. Each
1670 location describes where part of the argument will be placed. The
1671 second location is valid based on the LOC_TYPE and C_LENGTH fields
1672 of the first location (which is always valid). */
1673 struct location
1674 {
1675 /* What type of location this is. */
1676 enum location_type
1677 {
1678 /* Argument passed in a register. */
1679 in_reg,
1680
1681 /* Argument passed as an on stack argument. */
1682 on_stack,
1683
1684 /* Argument passed by reference. The second location is always
1685 valid for a BY_REF argument, and describes where the address
1686 of the BY_REF argument should be placed. */
1687 by_ref
1688 } loc_type;
1689
1690 /* Information that depends on the location type. */
1691 union
1692 {
1693 /* Which register number to use. */
1694 int regno;
1695
1696 /* The offset into the stack region. */
1697 int offset;
1698 } loc_data;
1699
1700 /* The length of contents covered by this location. If this is less
1701 than the total length of the argument, then the second location
1702 will be valid, and will describe where the rest of the argument
1703 will go. */
1704 int c_length;
1705
1706 /* The offset within CONTENTS for this part of the argument. Will
1707 always be 0 for the first part. For the second part of the
1708 argument, this might be the C_LENGTH value of the first part,
1709 however, if we are passing a structure in two registers, and there's
1710 is padding between the first and second field, then this offset
1711 might be greater than the length of the first argument part. When
1712 the second argument location is not holding part of the argument
1713 value, but is instead holding the address of a reference argument,
1714 then this offset will be set to 0. */
1715 int c_offset;
1716 } argloc[2];
1717 };
1718
1719 /* Information about a set of registers being used for passing arguments as
1720 part of a function call. The register set must be numerically
1721 sequential from NEXT_REGNUM to LAST_REGNUM. The register set can be
1722 disabled from use by setting NEXT_REGNUM greater than LAST_REGNUM. */
1723
1724 struct riscv_arg_reg
1725 {
1726 riscv_arg_reg (int first, int last)
1727 : next_regnum (first),
1728 last_regnum (last)
1729 {
1730 /* Nothing. */
1731 }
1732
1733 /* The GDB register number to use in this set. */
1734 int next_regnum;
1735
1736 /* The last GDB register number to use in this set. */
1737 int last_regnum;
1738 };
1739
1740 /* Arguments can be passed as on stack arguments, or by reference. The
1741 on stack arguments must be in a continuous region starting from $sp,
1742 while the by reference arguments can be anywhere, but we'll put them
1743 on the stack after (at higher address) the on stack arguments.
1744
1745 This might not be the right approach to take. The ABI is clear that
1746 an argument passed by reference can be modified by the callee, which
1747 us placing the argument (temporarily) onto the stack will not achieve
1748 (changes will be lost). There's also the possibility that very large
1749 arguments could overflow the stack.
1750
1751 This struct is used to track offset into these two areas for where
1752 arguments are to be placed. */
1753 struct riscv_memory_offsets
1754 {
1755 riscv_memory_offsets ()
1756 : arg_offset (0),
1757 ref_offset (0)
1758 {
1759 /* Nothing. */
1760 }
1761
1762 /* Offset into on stack argument area. */
1763 int arg_offset;
1764
1765 /* Offset into the pass by reference area. */
1766 int ref_offset;
1767 };
1768
1769 /* Holds information about where arguments to a call will be placed. This
1770 is updated as arguments are added onto the call, and can be used to
1771 figure out where the next argument should be placed. */
1772
1773 struct riscv_call_info
1774 {
1775 riscv_call_info (struct gdbarch *gdbarch)
1776 : int_regs (RISCV_A0_REGNUM, RISCV_A0_REGNUM + 7),
1777 float_regs (RISCV_FA0_REGNUM, RISCV_FA0_REGNUM + 7)
1778 {
1779 xlen = riscv_isa_xlen (gdbarch);
1780 flen = riscv_isa_flen (gdbarch);
1781
1782 /* Disable use of floating point registers if needed. */
1783 if (!riscv_has_fp_abi (gdbarch))
1784 float_regs.next_regnum = float_regs.last_regnum + 1;
1785 }
1786
1787 /* Track the memory areas used for holding in-memory arguments to a
1788 call. */
1789 struct riscv_memory_offsets memory;
1790
1791 /* Holds information about the next integer register to use for passing
1792 an argument. */
1793 struct riscv_arg_reg int_regs;
1794
1795 /* Holds information about the next floating point register to use for
1796 passing an argument. */
1797 struct riscv_arg_reg float_regs;
1798
1799 /* The XLEN and FLEN are copied in to this structure for convenience, and
1800 are just the results of calling RISCV_ISA_XLEN and RISCV_ISA_FLEN. */
1801 int xlen;
1802 int flen;
1803 };
1804
1805 /* Return the number of registers available for use as parameters in the
1806 register set REG. Returned value can be 0 or more. */
1807
1808 static int
1809 riscv_arg_regs_available (struct riscv_arg_reg *reg)
1810 {
1811 if (reg->next_regnum > reg->last_regnum)
1812 return 0;
1813
1814 return (reg->last_regnum - reg->next_regnum + 1);
1815 }
1816
1817 /* If there is at least one register available in the register set REG then
1818 the next register from REG is assigned to LOC and the length field of
1819 LOC is updated to LENGTH. The register set REG is updated to indicate
1820 that the assigned register is no longer available and the function
1821 returns true.
1822
1823 If there are no registers available in REG then the function returns
1824 false, and LOC and REG are unchanged. */
1825
1826 static bool
1827 riscv_assign_reg_location (struct riscv_arg_info::location *loc,
1828 struct riscv_arg_reg *reg,
1829 int length, int offset)
1830 {
1831 if (reg->next_regnum <= reg->last_regnum)
1832 {
1833 loc->loc_type = riscv_arg_info::location::in_reg;
1834 loc->loc_data.regno = reg->next_regnum;
1835 reg->next_regnum++;
1836 loc->c_length = length;
1837 loc->c_offset = offset;
1838 return true;
1839 }
1840
1841 return false;
1842 }
1843
1844 /* Assign LOC a location as the next stack parameter, and update MEMORY to
1845 record that an area of stack has been used to hold the parameter
1846 described by LOC.
1847
1848 The length field of LOC is updated to LENGTH, the length of the
1849 parameter being stored, and ALIGN is the alignment required by the
1850 parameter, which will affect how memory is allocated out of MEMORY. */
1851
1852 static void
1853 riscv_assign_stack_location (struct riscv_arg_info::location *loc,
1854 struct riscv_memory_offsets *memory,
1855 int length, int align)
1856 {
1857 loc->loc_type = riscv_arg_info::location::on_stack;
1858 memory->arg_offset
1859 = align_up (memory->arg_offset, align);
1860 loc->loc_data.offset = memory->arg_offset;
1861 memory->arg_offset += length;
1862 loc->c_length = length;
1863
1864 /* Offset is always 0, either we're the first location part, in which
1865 case we're reading content from the start of the argument, or we're
1866 passing the address of a reference argument, so 0. */
1867 loc->c_offset = 0;
1868 }
1869
1870 /* Update AINFO, which describes an argument that should be passed or
1871 returned using the integer ABI. The argloc fields within AINFO are
1872 updated to describe the location in which the argument will be passed to
1873 a function, or returned from a function.
1874
1875 The CINFO structure contains the ongoing call information, the holds
1876 information such as which argument registers are remaining to be
1877 assigned to parameter, and how much memory has been used by parameters
1878 so far.
1879
1880 By examining the state of CINFO a suitable location can be selected,
1881 and assigned to AINFO. */
1882
1883 static void
1884 riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo,
1885 struct riscv_call_info *cinfo)
1886 {
1887 if (ainfo->length > (2 * cinfo->xlen))
1888 {
1889 /* Argument is going to be passed by reference. */
1890 ainfo->argloc[0].loc_type
1891 = riscv_arg_info::location::by_ref;
1892 cinfo->memory.ref_offset
1893 = align_up (cinfo->memory.ref_offset, ainfo->align);
1894 ainfo->argloc[0].loc_data.offset = cinfo->memory.ref_offset;
1895 cinfo->memory.ref_offset += ainfo->length;
1896 ainfo->argloc[0].c_length = ainfo->length;
1897
1898 /* The second location for this argument is given over to holding the
1899 address of the by-reference data. Pass 0 for the offset as this
1900 is not part of the actual argument value. */
1901 if (!riscv_assign_reg_location (&ainfo->argloc[1],
1902 &cinfo->int_regs,
1903 cinfo->xlen, 0))
1904 riscv_assign_stack_location (&ainfo->argloc[1],
1905 &cinfo->memory, cinfo->xlen,
1906 cinfo->xlen);
1907 }
1908 else
1909 {
1910 int len = (ainfo->length > cinfo->xlen) ? cinfo->xlen : ainfo->length;
1911
1912 if (!riscv_assign_reg_location (&ainfo->argloc[0],
1913 &cinfo->int_regs, len, 0))
1914 riscv_assign_stack_location (&ainfo->argloc[0],
1915 &cinfo->memory, len, ainfo->align);
1916
1917 if (len < ainfo->length)
1918 {
1919 len = ainfo->length - len;
1920 if (!riscv_assign_reg_location (&ainfo->argloc[1],
1921 &cinfo->int_regs, len,
1922 cinfo->xlen))
1923 riscv_assign_stack_location (&ainfo->argloc[1],
1924 &cinfo->memory, len, cinfo->xlen);
1925 }
1926 }
1927 }
1928
1929 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
1930 is being passed with the floating point ABI. */
1931
1932 static void
1933 riscv_call_arg_scalar_float (struct riscv_arg_info *ainfo,
1934 struct riscv_call_info *cinfo)
1935 {
1936 if (ainfo->length > cinfo->flen)
1937 return riscv_call_arg_scalar_int (ainfo, cinfo);
1938 else
1939 {
1940 if (!riscv_assign_reg_location (&ainfo->argloc[0],
1941 &cinfo->float_regs,
1942 ainfo->length, 0))
1943 return riscv_call_arg_scalar_int (ainfo, cinfo);
1944 }
1945 }
1946
1947 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
1948 is a complex floating point argument, and is therefore handled
1949 differently to other argument types. */
1950
1951 static void
1952 riscv_call_arg_complex_float (struct riscv_arg_info *ainfo,
1953 struct riscv_call_info *cinfo)
1954 {
1955 if (ainfo->length <= (2 * cinfo->flen)
1956 && riscv_arg_regs_available (&cinfo->float_regs) >= 2)
1957 {
1958 bool result;
1959 int len = ainfo->length / 2;
1960
1961 result = riscv_assign_reg_location (&ainfo->argloc[0],
1962 &cinfo->float_regs, len, len);
1963 gdb_assert (result);
1964
1965 result = riscv_assign_reg_location (&ainfo->argloc[1],
1966 &cinfo->float_regs, len, len);
1967 gdb_assert (result);
1968 }
1969 else
1970 return riscv_call_arg_scalar_int (ainfo, cinfo);
1971 }
1972
1973 /* A structure used for holding information about a structure type within
1974 the inferior program. The RiscV ABI has special rules for handling some
1975 structures with a single field or with two fields. The counting of
1976 fields here is done after flattening out all nested structures. */
1977
1978 class riscv_struct_info
1979 {
1980 public:
1981 riscv_struct_info ()
1982 : m_number_of_fields (0),
1983 m_types { nullptr, nullptr }
1984 {
1985 /* Nothing. */
1986 }
1987
1988 /* Analyse TYPE descending into nested structures, count the number of
1989 scalar fields and record the types of the first two fields found. */
1990 void analyse (struct type *type);
1991
1992 /* The number of scalar fields found in the analysed type. This is
1993 currently only accurate if the value returned is 0, 1, or 2 as the
1994 analysis stops counting when the number of fields is 3. This is
1995 because the RiscV ABI only has special cases for 1 or 2 fields,
1996 anything else we just don't care about. */
1997 int number_of_fields () const
1998 { return m_number_of_fields; }
1999
2000 /* Return the type for scalar field INDEX within the analysed type. Will
2001 return nullptr if there is no field at that index. Only INDEX values
2002 0 and 1 can be requested as the RiscV ABI only has special cases for
2003 structures with 1 or 2 fields. */
2004 struct type *field_type (int index) const
2005 {
2006 gdb_assert (index < (sizeof (m_types) / sizeof (m_types[0])));
2007 return m_types[index];
2008 }
2009
2010 private:
2011 /* The number of scalar fields found within the structure after recursing
2012 into nested structures. */
2013 int m_number_of_fields;
2014
2015 /* The types of the first two scalar fields found within the structure
2016 after recursing into nested structures. */
2017 struct type *m_types[2];
2018 };
2019
2020 /* Analyse TYPE descending into nested structures, count the number of
2021 scalar fields and record the types of the first two fields found. */
2022
2023 void
2024 riscv_struct_info::analyse (struct type *type)
2025 {
2026 unsigned int count = TYPE_NFIELDS (type);
2027 unsigned int i;
2028
2029 for (i = 0; i < count; ++i)
2030 {
2031 if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_BITPOS)
2032 continue;
2033
2034 struct type *field_type = TYPE_FIELD_TYPE (type, i);
2035 field_type = check_typedef (field_type);
2036
2037 switch (TYPE_CODE (field_type))
2038 {
2039 case TYPE_CODE_STRUCT:
2040 analyse (field_type);
2041 break;
2042
2043 default:
2044 /* RiscV only flattens out structures. Anything else does not
2045 need to be flattened, we just record the type, and when we
2046 look at the analysis results we'll realise this is not a
2047 structure we can special case, and pass the structure in
2048 memory. */
2049 if (m_number_of_fields < 2)
2050 m_types[m_number_of_fields] = field_type;
2051 m_number_of_fields++;
2052 break;
2053 }
2054
2055 /* RiscV only has special handling for structures with 1 or 2 scalar
2056 fields, any more than that and the structure is just passed in
2057 memory. We can safely drop out early when we find 3 or more
2058 fields then. */
2059
2060 if (m_number_of_fields > 2)
2061 return;
2062 }
2063 }
2064
2065 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
2066 is a structure. Small structures on RiscV have some special case
2067 handling in order that the structure might be passed in register.
2068 Larger structures are passed in memory. After assigning location
2069 information to AINFO, CINFO will have been updated. */
2070
2071 static void
2072 riscv_call_arg_struct (struct riscv_arg_info *ainfo,
2073 struct riscv_call_info *cinfo)
2074 {
2075 if (riscv_arg_regs_available (&cinfo->float_regs) >= 1)
2076 {
2077 struct riscv_struct_info sinfo;
2078
2079 sinfo.analyse (ainfo->type);
2080 if (sinfo.number_of_fields () == 1
2081 && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_COMPLEX)
2082 {
2083 gdb_assert (TYPE_LENGTH (ainfo->type)
2084 == TYPE_LENGTH (sinfo.field_type (0)));
2085 return riscv_call_arg_complex_float (ainfo, cinfo);
2086 }
2087
2088 if (sinfo.number_of_fields () == 1
2089 && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT)
2090 {
2091 gdb_assert (TYPE_LENGTH (ainfo->type)
2092 == TYPE_LENGTH (sinfo.field_type (0)));
2093 return riscv_call_arg_scalar_float (ainfo, cinfo);
2094 }
2095
2096 if (sinfo.number_of_fields () == 2
2097 && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT
2098 && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->flen
2099 && TYPE_CODE (sinfo.field_type (1)) == TYPE_CODE_FLT
2100 && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->flen
2101 && riscv_arg_regs_available (&cinfo->float_regs) >= 2)
2102 {
2103 int len0, len1, offset;
2104
2105 gdb_assert (TYPE_LENGTH (ainfo->type) <= (2 * cinfo->flen));
2106
2107 len0 = TYPE_LENGTH (sinfo.field_type (0));
2108 if (!riscv_assign_reg_location (&ainfo->argloc[0],
2109 &cinfo->float_regs, len0, 0))
2110 error (_("failed during argument setup"));
2111
2112 len1 = TYPE_LENGTH (sinfo.field_type (1));
2113 offset = align_up (len0, riscv_type_alignment (sinfo.field_type (1)));
2114 gdb_assert (len1 <= (TYPE_LENGTH (ainfo->type)
2115 - TYPE_LENGTH (sinfo.field_type (0))));
2116
2117 if (!riscv_assign_reg_location (&ainfo->argloc[1],
2118 &cinfo->float_regs,
2119 len1, offset))
2120 error (_("failed during argument setup"));
2121 return;
2122 }
2123
2124 if (sinfo.number_of_fields () == 2
2125 && riscv_arg_regs_available (&cinfo->int_regs) >= 1
2126 && (TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT
2127 && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->flen
2128 && is_integral_type (sinfo.field_type (1))
2129 && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->xlen))
2130 {
2131 int len0, len1, offset;
2132
2133 gdb_assert (TYPE_LENGTH (ainfo->type)
2134 <= (cinfo->flen + cinfo->xlen));
2135
2136 len0 = TYPE_LENGTH (sinfo.field_type (0));
2137 if (!riscv_assign_reg_location (&ainfo->argloc[0],
2138 &cinfo->float_regs, len0, 0))
2139 error (_("failed during argument setup"));
2140
2141 len1 = TYPE_LENGTH (sinfo.field_type (1));
2142 offset = align_up (len0, riscv_type_alignment (sinfo.field_type (1)));
2143 gdb_assert (len1 <= cinfo->xlen);
2144 if (!riscv_assign_reg_location (&ainfo->argloc[1],
2145 &cinfo->int_regs, len1, offset))
2146 error (_("failed during argument setup"));
2147 return;
2148 }
2149
2150 if (sinfo.number_of_fields () == 2
2151 && riscv_arg_regs_available (&cinfo->int_regs) >= 1
2152 && (is_integral_type (sinfo.field_type (0))
2153 && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->xlen
2154 && TYPE_CODE (sinfo.field_type (1)) == TYPE_CODE_FLT
2155 && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->flen))
2156 {
2157 int len0, len1, offset;
2158
2159 gdb_assert (TYPE_LENGTH (ainfo->type)
2160 <= (cinfo->flen + cinfo->xlen));
2161
2162 len0 = TYPE_LENGTH (sinfo.field_type (0));
2163 len1 = TYPE_LENGTH (sinfo.field_type (1));
2164 offset = align_up (len0, riscv_type_alignment (sinfo.field_type (1)));
2165
2166 gdb_assert (len0 <= cinfo->xlen);
2167 gdb_assert (len1 <= cinfo->flen);
2168
2169 if (!riscv_assign_reg_location (&ainfo->argloc[0],
2170 &cinfo->int_regs, len0, 0))
2171 error (_("failed during argument setup"));
2172
2173 if (!riscv_assign_reg_location (&ainfo->argloc[1],
2174 &cinfo->float_regs,
2175 len1, offset))
2176 error (_("failed during argument setup"));
2177
2178 return;
2179 }
2180 }
2181
2182 /* Non of the structure flattening cases apply, so we just pass using
2183 the integer ABI. */
2184 ainfo->length = align_up (ainfo->length, cinfo->xlen);
2185 riscv_call_arg_scalar_int (ainfo, cinfo);
2186 }
2187
2188 /* Assign a location to call (or return) argument AINFO, the location is
2189 selected from CINFO which holds information about what call argument
2190 locations are available for use next. The TYPE is the type of the
2191 argument being passed, this information is recorded into AINFO (along
2192 with some additional information derived from the type).
2193
2194 After assigning a location to AINFO, CINFO will have been updated. */
2195
2196 static void
2197 riscv_arg_location (struct gdbarch *gdbarch,
2198 struct riscv_arg_info *ainfo,
2199 struct riscv_call_info *cinfo,
2200 struct type *type)
2201 {
2202 ainfo->type = type;
2203 ainfo->length = TYPE_LENGTH (ainfo->type);
2204 ainfo->align = riscv_type_alignment (ainfo->type);
2205 ainfo->contents = nullptr;
2206
2207 switch (TYPE_CODE (ainfo->type))
2208 {
2209 case TYPE_CODE_INT:
2210 case TYPE_CODE_BOOL:
2211 case TYPE_CODE_CHAR:
2212 case TYPE_CODE_RANGE:
2213 case TYPE_CODE_ENUM:
2214 case TYPE_CODE_PTR:
2215 if (ainfo->length <= cinfo->xlen)
2216 {
2217 ainfo->type = builtin_type (gdbarch)->builtin_long;
2218 ainfo->length = cinfo->xlen;
2219 }
2220 else if (ainfo->length <= (2 * cinfo->xlen))
2221 {
2222 ainfo->type = builtin_type (gdbarch)->builtin_long_long;
2223 ainfo->length = 2 * cinfo->xlen;
2224 }
2225
2226 /* Recalculate the alignment requirement. */
2227 ainfo->align = riscv_type_alignment (ainfo->type);
2228 riscv_call_arg_scalar_int (ainfo, cinfo);
2229 break;
2230
2231 case TYPE_CODE_FLT:
2232 riscv_call_arg_scalar_float (ainfo, cinfo);
2233 break;
2234
2235 case TYPE_CODE_COMPLEX:
2236 riscv_call_arg_complex_float (ainfo, cinfo);
2237 break;
2238
2239 case TYPE_CODE_STRUCT:
2240 riscv_call_arg_struct (ainfo, cinfo);
2241 break;
2242
2243 default:
2244 riscv_call_arg_scalar_int (ainfo, cinfo);
2245 break;
2246 }
2247 }
2248
2249 /* Used for printing debug information about the call argument location in
2250 INFO to STREAM. The addresses in SP_REFS and SP_ARGS are the base
2251 addresses for the location of pass-by-reference and
2252 arguments-on-the-stack memory areas. */
2253
2254 static void
2255 riscv_print_arg_location (ui_file *stream, struct gdbarch *gdbarch,
2256 struct riscv_arg_info *info,
2257 CORE_ADDR sp_refs, CORE_ADDR sp_args)
2258 {
2259 fprintf_unfiltered (stream, "type: '%s', length: 0x%x, alignment: 0x%x",
2260 TYPE_SAFE_NAME (info->type), info->length, info->align);
2261 switch (info->argloc[0].loc_type)
2262 {
2263 case riscv_arg_info::location::in_reg:
2264 fprintf_unfiltered
2265 (stream, ", register %s",
2266 gdbarch_register_name (gdbarch, info->argloc[0].loc_data.regno));
2267 if (info->argloc[0].c_length < info->length)
2268 {
2269 switch (info->argloc[1].loc_type)
2270 {
2271 case riscv_arg_info::location::in_reg:
2272 fprintf_unfiltered
2273 (stream, ", register %s",
2274 gdbarch_register_name (gdbarch,
2275 info->argloc[1].loc_data.regno));
2276 break;
2277
2278 case riscv_arg_info::location::on_stack:
2279 fprintf_unfiltered (stream, ", on stack at offset 0x%x",
2280 info->argloc[1].loc_data.offset);
2281 break;
2282
2283 case riscv_arg_info::location::by_ref:
2284 default:
2285 /* The second location should never be a reference, any
2286 argument being passed by reference just places its address
2287 in the first location and is done. */
2288 error (_("invalid argument location"));
2289 break;
2290 }
2291
2292 if (info->argloc[1].c_offset > info->argloc[0].c_length)
2293 fprintf_unfiltered (stream, " (offset 0x%x)",
2294 info->argloc[1].c_offset);
2295 }
2296 break;
2297
2298 case riscv_arg_info::location::on_stack:
2299 fprintf_unfiltered (stream, ", on stack at offset 0x%x",
2300 info->argloc[0].loc_data.offset);
2301 break;
2302
2303 case riscv_arg_info::location::by_ref:
2304 fprintf_unfiltered
2305 (stream, ", by reference, data at offset 0x%x (%s)",
2306 info->argloc[0].loc_data.offset,
2307 core_addr_to_string (sp_refs + info->argloc[0].loc_data.offset));
2308 if (info->argloc[1].loc_type
2309 == riscv_arg_info::location::in_reg)
2310 fprintf_unfiltered
2311 (stream, ", address in register %s",
2312 gdbarch_register_name (gdbarch, info->argloc[1].loc_data.regno));
2313 else
2314 {
2315 gdb_assert (info->argloc[1].loc_type
2316 == riscv_arg_info::location::on_stack);
2317 fprintf_unfiltered
2318 (stream, ", address on stack at offset 0x%x (%s)",
2319 info->argloc[1].loc_data.offset,
2320 core_addr_to_string (sp_args + info->argloc[1].loc_data.offset));
2321 }
2322 break;
2323
2324 default:
2325 gdb_assert_not_reached (_("unknown argument location type"));
2326 }
2327 }
2328
2329 /* Implement the push dummy call gdbarch callback. */
2330
2331 static CORE_ADDR
2332 riscv_push_dummy_call (struct gdbarch *gdbarch,
2333 struct value *function,
2334 struct regcache *regcache,
2335 CORE_ADDR bp_addr,
2336 int nargs,
2337 struct value **args,
2338 CORE_ADDR sp,
2339 int struct_return,
2340 CORE_ADDR struct_addr)
2341 {
2342 int i;
2343 CORE_ADDR sp_args, sp_refs;
2344 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2345
2346 struct riscv_arg_info *arg_info =
2347 (struct riscv_arg_info *) alloca (nargs * sizeof (struct riscv_arg_info));
2348
2349 struct riscv_call_info call_info (gdbarch);
2350
2351 CORE_ADDR osp = sp;
2352
2353 /* We'll use register $a0 if we're returning a struct. */
2354 if (struct_return)
2355 ++call_info.int_regs.next_regnum;
2356
2357 for (i = 0; i < nargs; ++i)
2358 {
2359 struct value *arg_value;
2360 struct type *arg_type;
2361 struct riscv_arg_info *info = &arg_info[i];
2362
2363 arg_value = args[i];
2364 arg_type = check_typedef (value_type (arg_value));
2365
2366 riscv_arg_location (gdbarch, info, &call_info, arg_type);
2367
2368 if (info->type != arg_type)
2369 arg_value = value_cast (info->type, arg_value);
2370 info->contents = value_contents (arg_value);
2371 }
2372
2373 /* Adjust the stack pointer and align it. */
2374 sp = sp_refs = align_down (sp - call_info.memory.ref_offset, SP_ALIGNMENT);
2375 sp = sp_args = align_down (sp - call_info.memory.arg_offset, SP_ALIGNMENT);
2376
2377 if (riscv_debug_infcall > 0)
2378 {
2379 fprintf_unfiltered (gdb_stdlog, "dummy call args:\n");
2380 fprintf_unfiltered (gdb_stdlog, ": floating point ABI %s in use\n",
2381 (riscv_has_fp_abi (gdbarch) ? "is" : "is not"));
2382 fprintf_unfiltered (gdb_stdlog, ": xlen: %d\n: flen: %d\n",
2383 call_info.xlen, call_info.flen);
2384 if (struct_return)
2385 fprintf_unfiltered (gdb_stdlog,
2386 "[*] struct return pointer in register $A0\n");
2387 for (i = 0; i < nargs; ++i)
2388 {
2389 struct riscv_arg_info *info = &arg_info [i];
2390
2391 fprintf_unfiltered (gdb_stdlog, "[%2d] ", i);
2392 riscv_print_arg_location (gdb_stdlog, gdbarch, info, sp_refs, sp_args);
2393 fprintf_unfiltered (gdb_stdlog, "\n");
2394 }
2395 if (call_info.memory.arg_offset > 0
2396 || call_info.memory.ref_offset > 0)
2397 {
2398 fprintf_unfiltered (gdb_stdlog, " Original sp: %s\n",
2399 core_addr_to_string (osp));
2400 fprintf_unfiltered (gdb_stdlog, "Stack required (for args): 0x%x\n",
2401 call_info.memory.arg_offset);
2402 fprintf_unfiltered (gdb_stdlog, "Stack required (for refs): 0x%x\n",
2403 call_info.memory.ref_offset);
2404 fprintf_unfiltered (gdb_stdlog, " Stack allocated: %s\n",
2405 core_addr_to_string_nz (osp - sp));
2406 }
2407 }
2408
2409 /* Now load the argument into registers, or onto the stack. */
2410
2411 if (struct_return)
2412 {
2413 gdb_byte buf[sizeof (LONGEST)];
2414
2415 store_unsigned_integer (buf, call_info.xlen, byte_order, struct_addr);
2416 regcache->cooked_write (RISCV_A0_REGNUM, buf);
2417 }
2418
2419 for (i = 0; i < nargs; ++i)
2420 {
2421 CORE_ADDR dst;
2422 int second_arg_length = 0;
2423 const gdb_byte *second_arg_data;
2424 struct riscv_arg_info *info = &arg_info [i];
2425
2426 gdb_assert (info->length > 0);
2427
2428 switch (info->argloc[0].loc_type)
2429 {
2430 case riscv_arg_info::location::in_reg:
2431 {
2432 gdb_byte tmp [sizeof (ULONGEST)];
2433
2434 gdb_assert (info->argloc[0].c_length <= info->length);
2435 /* FP values in FP registers must be NaN-boxed. */
2436 if (riscv_is_fp_regno_p (info->argloc[0].loc_data.regno)
2437 && info->argloc[0].c_length < call_info.flen)
2438 memset (tmp, -1, sizeof (tmp));
2439 else
2440 memset (tmp, 0, sizeof (tmp));
2441 memcpy (tmp, info->contents, info->argloc[0].c_length);
2442 regcache->cooked_write (info->argloc[0].loc_data.regno, tmp);
2443 second_arg_length =
2444 ((info->argloc[0].c_length < info->length)
2445 ? info->argloc[1].c_length : 0);
2446 second_arg_data = info->contents + info->argloc[1].c_offset;
2447 }
2448 break;
2449
2450 case riscv_arg_info::location::on_stack:
2451 dst = sp_args + info->argloc[0].loc_data.offset;
2452 write_memory (dst, info->contents, info->length);
2453 second_arg_length = 0;
2454 break;
2455
2456 case riscv_arg_info::location::by_ref:
2457 dst = sp_refs + info->argloc[0].loc_data.offset;
2458 write_memory (dst, info->contents, info->length);
2459
2460 second_arg_length = call_info.xlen;
2461 second_arg_data = (gdb_byte *) &dst;
2462 break;
2463
2464 default:
2465 gdb_assert_not_reached (_("unknown argument location type"));
2466 }
2467
2468 if (second_arg_length > 0)
2469 {
2470 switch (info->argloc[1].loc_type)
2471 {
2472 case riscv_arg_info::location::in_reg:
2473 {
2474 gdb_byte tmp [sizeof (ULONGEST)];
2475
2476 gdb_assert ((riscv_is_fp_regno_p (info->argloc[1].loc_data.regno)
2477 && second_arg_length <= call_info.flen)
2478 || second_arg_length <= call_info.xlen);
2479 /* FP values in FP registers must be NaN-boxed. */
2480 if (riscv_is_fp_regno_p (info->argloc[1].loc_data.regno)
2481 && second_arg_length < call_info.flen)
2482 memset (tmp, -1, sizeof (tmp));
2483 else
2484 memset (tmp, 0, sizeof (tmp));
2485 memcpy (tmp, second_arg_data, second_arg_length);
2486 regcache->cooked_write (info->argloc[1].loc_data.regno, tmp);
2487 }
2488 break;
2489
2490 case riscv_arg_info::location::on_stack:
2491 {
2492 CORE_ADDR arg_addr;
2493
2494 arg_addr = sp_args + info->argloc[1].loc_data.offset;
2495 write_memory (arg_addr, second_arg_data, second_arg_length);
2496 break;
2497 }
2498
2499 case riscv_arg_info::location::by_ref:
2500 default:
2501 /* The second location should never be a reference, any
2502 argument being passed by reference just places its address
2503 in the first location and is done. */
2504 error (_("invalid argument location"));
2505 break;
2506 }
2507 }
2508 }
2509
2510 /* Set the dummy return value to bp_addr.
2511 A dummy breakpoint will be setup to execute the call. */
2512
2513 if (riscv_debug_infcall > 0)
2514 fprintf_unfiltered (gdb_stdlog, ": writing $ra = %s\n",
2515 core_addr_to_string (bp_addr));
2516 regcache_cooked_write_unsigned (regcache, RISCV_RA_REGNUM, bp_addr);
2517
2518 /* Finally, update the stack pointer. */
2519
2520 if (riscv_debug_infcall > 0)
2521 fprintf_unfiltered (gdb_stdlog, ": writing $sp = %s\n",
2522 core_addr_to_string (sp));
2523 regcache_cooked_write_unsigned (regcache, RISCV_SP_REGNUM, sp);
2524
2525 return sp;
2526 }
2527
2528 /* Implement the return_value gdbarch method. */
2529
2530 static enum return_value_convention
2531 riscv_return_value (struct gdbarch *gdbarch,
2532 struct value *function,
2533 struct type *type,
2534 struct regcache *regcache,
2535 gdb_byte *readbuf,
2536 const gdb_byte *writebuf)
2537 {
2538 struct riscv_call_info call_info (gdbarch);
2539 struct riscv_arg_info info;
2540 struct type *arg_type;
2541
2542 arg_type = check_typedef (type);
2543 riscv_arg_location (gdbarch, &info, &call_info, arg_type);
2544
2545 if (riscv_debug_infcall > 0)
2546 {
2547 fprintf_unfiltered (gdb_stdlog, "riscv return value:\n");
2548 fprintf_unfiltered (gdb_stdlog, "[R] ");
2549 riscv_print_arg_location (gdb_stdlog, gdbarch, &info, 0, 0);
2550 fprintf_unfiltered (gdb_stdlog, "\n");
2551 }
2552
2553 if (readbuf != nullptr || writebuf != nullptr)
2554 {
2555 int regnum;
2556
2557 switch (info.argloc[0].loc_type)
2558 {
2559 /* Return value in register(s). */
2560 case riscv_arg_info::location::in_reg:
2561 {
2562 regnum = info.argloc[0].loc_data.regno;
2563
2564 if (readbuf)
2565 regcache->cooked_read (regnum, readbuf);
2566
2567 if (writebuf)
2568 regcache->cooked_write (regnum, writebuf);
2569
2570 /* A return value in register can have a second part in a
2571 second register. */
2572 if (info.argloc[0].c_length < info.length)
2573 {
2574 switch (info.argloc[1].loc_type)
2575 {
2576 case riscv_arg_info::location::in_reg:
2577 regnum = info.argloc[1].loc_data.regno;
2578
2579 if (readbuf)
2580 {
2581 readbuf += info.argloc[1].c_offset;
2582 regcache->cooked_read (regnum, readbuf);
2583 }
2584
2585 if (writebuf)
2586 {
2587 writebuf += info.argloc[1].c_offset;
2588 regcache->cooked_write (regnum, writebuf);
2589 }
2590 break;
2591
2592 case riscv_arg_info::location::by_ref:
2593 case riscv_arg_info::location::on_stack:
2594 default:
2595 error (_("invalid argument location"));
2596 break;
2597 }
2598 }
2599 }
2600 break;
2601
2602 /* Return value by reference will have its address in A0. */
2603 case riscv_arg_info::location::by_ref:
2604 {
2605 ULONGEST addr;
2606
2607 regcache_cooked_read_unsigned (regcache, RISCV_A0_REGNUM,
2608 &addr);
2609 if (readbuf != nullptr)
2610 read_memory (addr, readbuf, info.length);
2611 if (writebuf != nullptr)
2612 write_memory (addr, writebuf, info.length);
2613 }
2614 break;
2615
2616 case riscv_arg_info::location::on_stack:
2617 default:
2618 error (_("invalid argument location"));
2619 break;
2620 }
2621 }
2622
2623 switch (info.argloc[0].loc_type)
2624 {
2625 case riscv_arg_info::location::in_reg:
2626 return RETURN_VALUE_REGISTER_CONVENTION;
2627 case riscv_arg_info::location::by_ref:
2628 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
2629 case riscv_arg_info::location::on_stack:
2630 default:
2631 error (_("invalid argument location"));
2632 }
2633 }
2634
2635 /* Implement the frame_align gdbarch method. */
2636
2637 static CORE_ADDR
2638 riscv_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2639 {
2640 return align_down (addr, 16);
2641 }
2642
2643 /* Implement the unwind_pc gdbarch method. */
2644
2645 static CORE_ADDR
2646 riscv_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2647 {
2648 return frame_unwind_register_unsigned (next_frame, RISCV_PC_REGNUM);
2649 }
2650
2651 /* Implement the unwind_sp gdbarch method. */
2652
2653 static CORE_ADDR
2654 riscv_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
2655 {
2656 return frame_unwind_register_unsigned (next_frame, RISCV_SP_REGNUM);
2657 }
2658
2659 /* Implement the dummy_id gdbarch method. */
2660
2661 static struct frame_id
2662 riscv_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
2663 {
2664 return frame_id_build (get_frame_register_signed (this_frame, RISCV_SP_REGNUM),
2665 get_frame_pc (this_frame));
2666 }
2667
2668 /* Generate, or return the cached frame cache for the RiscV frame
2669 unwinder. */
2670
2671 static struct riscv_unwind_cache *
2672 riscv_frame_cache (struct frame_info *this_frame, void **this_cache)
2673 {
2674 CORE_ADDR pc, start_addr;
2675 struct riscv_unwind_cache *cache;
2676 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2677 int numregs, regno;
2678
2679 if ((*this_cache) != NULL)
2680 return (struct riscv_unwind_cache *) *this_cache;
2681
2682 cache = FRAME_OBSTACK_ZALLOC (struct riscv_unwind_cache);
2683 cache->regs = trad_frame_alloc_saved_regs (this_frame);
2684 (*this_cache) = cache;
2685
2686 /* Scan the prologue, filling in the cache. */
2687 start_addr = get_frame_func (this_frame);
2688 pc = get_frame_pc (this_frame);
2689 riscv_scan_prologue (gdbarch, start_addr, pc, cache);
2690
2691 /* We can now calculate the frame base address. */
2692 cache->frame_base
2693 = (get_frame_register_signed (this_frame, cache->frame_base_reg)
2694 + cache->frame_base_offset);
2695 if (riscv_debug_unwinder)
2696 fprintf_unfiltered (gdb_stdlog, "Frame base is %s ($%s + 0x%x)\n",
2697 core_addr_to_string (cache->frame_base),
2698 gdbarch_register_name (gdbarch,
2699 cache->frame_base_reg),
2700 cache->frame_base_offset);
2701
2702 /* The prologue scanner sets the address of registers stored to the stack
2703 as the offset of that register from the frame base. The prologue
2704 scanner doesn't know the actual frame base value, and so is unable to
2705 compute the exact address. We do now know the frame base value, so
2706 update the address of registers stored to the stack. */
2707 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
2708 for (regno = 0; regno < numregs; ++regno)
2709 {
2710 if (trad_frame_addr_p (cache->regs, regno))
2711 cache->regs[regno].addr += cache->frame_base;
2712 }
2713
2714 /* The previous $pc can be found wherever the $ra value can be found.
2715 The previous $ra value is gone, this would have been stored be the
2716 previous frame if required. */
2717 cache->regs[gdbarch_pc_regnum (gdbarch)] = cache->regs[RISCV_RA_REGNUM];
2718 trad_frame_set_unknown (cache->regs, RISCV_RA_REGNUM);
2719
2720 /* Build the frame id. */
2721 cache->this_id = frame_id_build (cache->frame_base, start_addr);
2722
2723 /* The previous $sp value is the frame base value. */
2724 trad_frame_set_value (cache->regs, gdbarch_sp_regnum (gdbarch),
2725 cache->frame_base);
2726
2727 return cache;
2728 }
2729
2730 /* Implement the this_id callback for RiscV frame unwinder. */
2731
2732 static void
2733 riscv_frame_this_id (struct frame_info *this_frame,
2734 void **prologue_cache,
2735 struct frame_id *this_id)
2736 {
2737 struct riscv_unwind_cache *cache;
2738
2739 cache = riscv_frame_cache (this_frame, prologue_cache);
2740 *this_id = cache->this_id;
2741 }
2742
2743 /* Implement the prev_register callback for RiscV frame unwinder. */
2744
2745 static struct value *
2746 riscv_frame_prev_register (struct frame_info *this_frame,
2747 void **prologue_cache,
2748 int regnum)
2749 {
2750 struct riscv_unwind_cache *cache;
2751
2752 cache = riscv_frame_cache (this_frame, prologue_cache);
2753 return trad_frame_get_prev_register (this_frame, cache->regs, regnum);
2754 }
2755
2756 /* Structure defining the RiscV normal frame unwind functions. Since we
2757 are the fallback unwinder (DWARF unwinder is used first), we use the
2758 default frame sniffer, which always accepts the frame. */
2759
2760 static const struct frame_unwind riscv_frame_unwind =
2761 {
2762 /*.type =*/ NORMAL_FRAME,
2763 /*.stop_reason =*/ default_frame_unwind_stop_reason,
2764 /*.this_id =*/ riscv_frame_this_id,
2765 /*.prev_register =*/ riscv_frame_prev_register,
2766 /*.unwind_data =*/ NULL,
2767 /*.sniffer =*/ default_frame_sniffer,
2768 /*.dealloc_cache =*/ NULL,
2769 /*.prev_arch =*/ NULL,
2770 };
2771
2772 /* Initialize the current architecture based on INFO. If possible,
2773 re-use an architecture from ARCHES, which is a list of
2774 architectures already created during this debugging session.
2775
2776 Called e.g. at program startup, when reading a core file, and when
2777 reading a binary file. */
2778
2779 static struct gdbarch *
2780 riscv_gdbarch_init (struct gdbarch_info info,
2781 struct gdbarch_list *arches)
2782 {
2783 struct gdbarch *gdbarch;
2784 struct gdbarch_tdep *tdep;
2785 struct gdbarch_tdep tmp_tdep;
2786 int i;
2787
2788 /* Ideally, we'd like to get as much information from the target for
2789 things like register size, and whether the target has floating point
2790 hardware. However, there are some things that the target can't tell
2791 us, like, what ABI is being used.
2792
2793 So, for now, we take as much information as possible from the ELF,
2794 including things like register size, and FP hardware support, along
2795 with information about the ABI.
2796
2797 Information about this target is built up in TMP_TDEP, and then we
2798 look for an existing gdbarch in ARCHES that matches TMP_TDEP. If no
2799 match is found we'll create a new gdbarch and copy TMP_TDEP over. */
2800 memset (&tmp_tdep, 0, sizeof (tmp_tdep));
2801
2802 if (info.abfd != NULL
2803 && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
2804 {
2805 unsigned char eclass = elf_elfheader (info.abfd)->e_ident[EI_CLASS];
2806 int e_flags = elf_elfheader (info.abfd)->e_flags;
2807
2808 if (eclass == ELFCLASS32)
2809 tmp_tdep.abi.fields.base_len = 1;
2810 else if (eclass == ELFCLASS64)
2811 tmp_tdep.abi.fields.base_len = 2;
2812 else
2813 internal_error (__FILE__, __LINE__,
2814 _("unknown ELF header class %d"), eclass);
2815
2816 if (e_flags & EF_RISCV_RVC)
2817 tmp_tdep.core_features |= (1 << ('C' - 'A'));
2818
2819 if (e_flags & EF_RISCV_FLOAT_ABI_DOUBLE)
2820 {
2821 tmp_tdep.abi.fields.float_abi = 2;
2822 tmp_tdep.core_features |= (1 << ('D' - 'A'));
2823 tmp_tdep.core_features |= (1 << ('F' - 'A'));
2824 }
2825 else if (e_flags & EF_RISCV_FLOAT_ABI_SINGLE)
2826 {
2827 tmp_tdep.abi.fields.float_abi = 1;
2828 tmp_tdep.core_features |= (1 << ('F' - 'A'));
2829 }
2830 }
2831 else
2832 {
2833 const struct bfd_arch_info *binfo = info.bfd_arch_info;
2834
2835 if (binfo->bits_per_word == 32)
2836 tmp_tdep.abi.fields.base_len = 1;
2837 else if (binfo->bits_per_word == 64)
2838 tmp_tdep.abi.fields.base_len = 2;
2839 else
2840 internal_error (__FILE__, __LINE__, _("unknown bits_per_word %d"),
2841 binfo->bits_per_word);
2842 }
2843
2844 /* Find a candidate among the list of pre-declared architectures. */
2845 for (arches = gdbarch_list_lookup_by_info (arches, &info);
2846 arches != NULL;
2847 arches = gdbarch_list_lookup_by_info (arches->next, &info))
2848 if (gdbarch_tdep (arches->gdbarch)->abi.value == tmp_tdep.abi.value)
2849 return arches->gdbarch;
2850
2851 /* None found, so create a new architecture from the information provided. */
2852 tdep = (struct gdbarch_tdep *) xmalloc (sizeof *tdep);
2853 gdbarch = gdbarch_alloc (&info, tdep);
2854 memcpy (tdep, &tmp_tdep, sizeof (tmp_tdep));
2855
2856 /* Target data types. */
2857 set_gdbarch_short_bit (gdbarch, 16);
2858 set_gdbarch_int_bit (gdbarch, 32);
2859 set_gdbarch_long_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
2860 set_gdbarch_long_long_bit (gdbarch, 64);
2861 set_gdbarch_float_bit (gdbarch, 32);
2862 set_gdbarch_double_bit (gdbarch, 64);
2863 set_gdbarch_long_double_bit (gdbarch, 128);
2864 set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
2865 set_gdbarch_ptr_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
2866 set_gdbarch_char_signed (gdbarch, 0);
2867
2868 /* Information about the target architecture. */
2869 set_gdbarch_return_value (gdbarch, riscv_return_value);
2870 set_gdbarch_breakpoint_kind_from_pc (gdbarch, riscv_breakpoint_kind_from_pc);
2871 set_gdbarch_sw_breakpoint_from_kind (gdbarch, riscv_sw_breakpoint_from_kind);
2872 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
2873
2874 /* Register architecture. */
2875 set_gdbarch_num_regs (gdbarch, RISCV_LAST_REGNUM + 1);
2876 set_gdbarch_sp_regnum (gdbarch, RISCV_SP_REGNUM);
2877 set_gdbarch_pc_regnum (gdbarch, RISCV_PC_REGNUM);
2878 set_gdbarch_ps_regnum (gdbarch, RISCV_FP_REGNUM);
2879 set_gdbarch_deprecated_fp_regnum (gdbarch, RISCV_FP_REGNUM);
2880
2881 /* Functions to supply register information. */
2882 set_gdbarch_register_name (gdbarch, riscv_register_name);
2883 set_gdbarch_register_type (gdbarch, riscv_register_type);
2884 set_gdbarch_print_registers_info (gdbarch, riscv_print_registers_info);
2885 set_gdbarch_register_reggroup_p (gdbarch, riscv_register_reggroup_p);
2886
2887 /* Functions to analyze frames. */
2888 set_gdbarch_skip_prologue (gdbarch, riscv_skip_prologue);
2889 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2890 set_gdbarch_frame_align (gdbarch, riscv_frame_align);
2891
2892 /* Functions to access frame data. */
2893 set_gdbarch_unwind_pc (gdbarch, riscv_unwind_pc);
2894 set_gdbarch_unwind_sp (gdbarch, riscv_unwind_sp);
2895
2896 /* Functions handling dummy frames. */
2897 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
2898 set_gdbarch_push_dummy_code (gdbarch, riscv_push_dummy_code);
2899 set_gdbarch_push_dummy_call (gdbarch, riscv_push_dummy_call);
2900 set_gdbarch_dummy_id (gdbarch, riscv_dummy_id);
2901
2902 /* Frame unwinders. Use DWARF debug info if available, otherwise use our own
2903 unwinder. */
2904 dwarf2_append_unwinders (gdbarch);
2905 frame_unwind_append_unwinder (gdbarch, &riscv_frame_unwind);
2906
2907 for (i = 0; i < ARRAY_SIZE (riscv_register_aliases); ++i)
2908 user_reg_add (gdbarch, riscv_register_aliases[i].name,
2909 value_of_riscv_user_reg, &riscv_register_aliases[i].regnum);
2910
2911 /* Hook in OS ABI-specific overrides, if they have been registered. */
2912 gdbarch_init_osabi (info, gdbarch);
2913
2914 return gdbarch;
2915 }
2916
2917 /* This decodes the current instruction and determines the address of the
2918 next instruction. */
2919
2920 static CORE_ADDR
2921 riscv_next_pc (struct regcache *regcache, CORE_ADDR pc)
2922 {
2923 struct gdbarch *gdbarch = regcache->arch ();
2924 struct riscv_insn insn;
2925 CORE_ADDR next_pc;
2926
2927 insn.decode (gdbarch, pc);
2928 next_pc = pc + insn.length ();
2929
2930 if (insn.opcode () == riscv_insn::JAL)
2931 next_pc = pc + insn.imm_signed ();
2932 else if (insn.opcode () == riscv_insn::JALR)
2933 {
2934 LONGEST source;
2935 regcache->cooked_read (insn.rs1 (), &source);
2936 next_pc = (source + insn.imm_signed ()) & ~(CORE_ADDR) 0x1;
2937 }
2938 else if (insn.opcode () == riscv_insn::BEQ)
2939 {
2940 LONGEST src1, src2;
2941 regcache->cooked_read (insn.rs1 (), &src1);
2942 regcache->cooked_read (insn.rs2 (), &src2);
2943 if (src1 == src2)
2944 next_pc = pc + insn.imm_signed ();
2945 }
2946 else if (insn.opcode () == riscv_insn::BNE)
2947 {
2948 LONGEST src1, src2;
2949 regcache->cooked_read (insn.rs1 (), &src1);
2950 regcache->cooked_read (insn.rs2 (), &src2);
2951 if (src1 != src2)
2952 next_pc = pc + insn.imm_signed ();
2953 }
2954 else if (insn.opcode () == riscv_insn::BLT)
2955 {
2956 LONGEST src1, src2;
2957 regcache->cooked_read (insn.rs1 (), &src1);
2958 regcache->cooked_read (insn.rs2 (), &src2);
2959 if (src1 < src2)
2960 next_pc = pc + insn.imm_signed ();
2961 }
2962 else if (insn.opcode () == riscv_insn::BGE)
2963 {
2964 LONGEST src1, src2;
2965 regcache->cooked_read (insn.rs1 (), &src1);
2966 regcache->cooked_read (insn.rs2 (), &src2);
2967 if (src1 >= src2)
2968 next_pc = pc + insn.imm_signed ();
2969 }
2970 else if (insn.opcode () == riscv_insn::BLTU)
2971 {
2972 ULONGEST src1, src2;
2973 regcache->cooked_read (insn.rs1 (), &src1);
2974 regcache->cooked_read (insn.rs2 (), &src2);
2975 if (src1 < src2)
2976 next_pc = pc + insn.imm_signed ();
2977 }
2978 else if (insn.opcode () == riscv_insn::BGEU)
2979 {
2980 ULONGEST src1, src2;
2981 regcache->cooked_read (insn.rs1 (), &src1);
2982 regcache->cooked_read (insn.rs2 (), &src2);
2983 if (src1 >= src2)
2984 next_pc = pc + insn.imm_signed ();
2985 }
2986
2987 return next_pc;
2988 }
2989
2990 /* We can't put a breakpoint in the middle of a lr/sc atomic sequence, so look
2991 for the end of the sequence and put the breakpoint there. */
2992
2993 static bool
2994 riscv_next_pc_atomic_sequence (struct regcache *regcache, CORE_ADDR pc,
2995 CORE_ADDR *next_pc)
2996 {
2997 struct gdbarch *gdbarch = regcache->arch ();
2998 struct riscv_insn insn;
2999 CORE_ADDR cur_step_pc = pc;
3000 CORE_ADDR last_addr = 0;
3001
3002 /* First instruction has to be a load reserved. */
3003 insn.decode (gdbarch, cur_step_pc);
3004 if (insn.opcode () != riscv_insn::LR)
3005 return false;
3006 cur_step_pc = cur_step_pc + insn.length ();
3007
3008 /* Next instruction should be branch to exit. */
3009 insn.decode (gdbarch, cur_step_pc);
3010 if (insn.opcode () != riscv_insn::BNE)
3011 return false;
3012 last_addr = cur_step_pc + insn.imm_signed ();
3013 cur_step_pc = cur_step_pc + insn.length ();
3014
3015 /* Next instruction should be store conditional. */
3016 insn.decode (gdbarch, cur_step_pc);
3017 if (insn.opcode () != riscv_insn::SC)
3018 return false;
3019 cur_step_pc = cur_step_pc + insn.length ();
3020
3021 /* Next instruction should be branch to start. */
3022 insn.decode (gdbarch, cur_step_pc);
3023 if (insn.opcode () != riscv_insn::BNE)
3024 return false;
3025 if (pc != (cur_step_pc + insn.imm_signed ()))
3026 return false;
3027 cur_step_pc = cur_step_pc + insn.length ();
3028
3029 /* We should now be at the end of the sequence. */
3030 if (cur_step_pc != last_addr)
3031 return false;
3032
3033 *next_pc = cur_step_pc;
3034 return true;
3035 }
3036
3037 /* This is called just before we want to resume the inferior, if we want to
3038 single-step it but there is no hardware or kernel single-step support. We
3039 find the target of the coming instruction and breakpoint it. */
3040
3041 std::vector<CORE_ADDR>
3042 riscv_software_single_step (struct regcache *regcache)
3043 {
3044 CORE_ADDR pc, next_pc;
3045
3046 pc = regcache_read_pc (regcache);
3047
3048 if (riscv_next_pc_atomic_sequence (regcache, pc, &next_pc))
3049 return {next_pc};
3050
3051 next_pc = riscv_next_pc (regcache, pc);
3052
3053 return {next_pc};
3054 }
3055
3056 void
3057 _initialize_riscv_tdep (void)
3058 {
3059 gdbarch_register (bfd_arch_riscv, riscv_gdbarch_init, NULL);
3060
3061 /* Add root prefix command for all "set debug riscv" and "show debug
3062 riscv" commands. */
3063 add_prefix_cmd ("riscv", no_class, set_debug_riscv_command,
3064 _("RISC-V specific debug commands."),
3065 &setdebugriscvcmdlist, "set debug riscv ", 0,
3066 &setdebuglist);
3067
3068 add_prefix_cmd ("riscv", no_class, show_debug_riscv_command,
3069 _("RISC-V specific debug commands."),
3070 &showdebugriscvcmdlist, "show debug riscv ", 0,
3071 &showdebuglist);
3072
3073 add_setshow_zuinteger_cmd ("breakpoints", class_maintenance,
3074 &riscv_debug_breakpoints, _("\
3075 Set riscv breakpoint debugging."), _("\
3076 Show riscv breakpoint debugging."), _("\
3077 When non-zero, print debugging information for the riscv specific parts\n\
3078 of the breakpoint mechanism."),
3079 NULL,
3080 show_riscv_debug_variable,
3081 &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3082
3083 add_setshow_zuinteger_cmd ("infcall", class_maintenance,
3084 &riscv_debug_infcall, _("\
3085 Set riscv inferior call debugging."), _("\
3086 Show riscv inferior call debugging."), _("\
3087 When non-zero, print debugging information for the riscv specific parts\n\
3088 of the inferior call mechanism."),
3089 NULL,
3090 show_riscv_debug_variable,
3091 &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3092
3093 add_setshow_zuinteger_cmd ("unwinder", class_maintenance,
3094 &riscv_debug_unwinder, _("\
3095 Set riscv stack unwinding debugging."), _("\
3096 Show riscv stack unwinding debugging."), _("\
3097 When non-zero, print debugging information for the riscv specific parts\n\
3098 of the stack unwinding mechanism."),
3099 NULL,
3100 show_riscv_debug_variable,
3101 &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3102
3103 /* Add root prefix command for all "set riscv" and "show riscv" commands. */
3104 add_prefix_cmd ("riscv", no_class, set_riscv_command,
3105 _("RISC-V specific commands."),
3106 &setriscvcmdlist, "set riscv ", 0, &setlist);
3107
3108 add_prefix_cmd ("riscv", no_class, show_riscv_command,
3109 _("RISC-V specific commands."),
3110 &showriscvcmdlist, "show riscv ", 0, &showlist);
3111
3112
3113 use_compressed_breakpoints = AUTO_BOOLEAN_AUTO;
3114 add_setshow_auto_boolean_cmd ("use-compressed-breakpoints", no_class,
3115 &use_compressed_breakpoints,
3116 _("\
3117 Set debugger's use of compressed breakpoints."), _(" \
3118 Show debugger's use of compressed breakpoints."), _("\
3119 Debugging compressed code requires compressed breakpoints to be used. If\n\
3120 left to 'auto' then gdb will use them if the existing instruction is a\n\
3121 compressed instruction. If that doesn't give the correct behavior, then\n\
3122 this option can be used."),
3123 NULL,
3124 show_use_compressed_breakpoints,
3125 &setriscvcmdlist,
3126 &showriscvcmdlist);
3127 }
This page took 0.090906 seconds and 5 git commands to generate.