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