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