Home | History | Annotate | Line # | Download | only in gdb
riscv-tdep.c revision 1.1.1.5
      1      1.1  christos /* Target-dependent code for the RISC-V architecture, for GDB.
      2      1.1  christos 
      3  1.1.1.4  christos    Copyright (C) 2018-2024 Free Software Foundation, Inc.
      4      1.1  christos 
      5      1.1  christos    This file is part of GDB.
      6      1.1  christos 
      7      1.1  christos    This program is free software; you can redistribute it and/or modify
      8      1.1  christos    it under the terms of the GNU General Public License as published by
      9      1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10      1.1  christos    (at your option) any later version.
     11      1.1  christos 
     12      1.1  christos    This program is distributed in the hope that it will be useful,
     13      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15      1.1  christos    GNU General Public License for more details.
     16      1.1  christos 
     17      1.1  christos    You should have received a copy of the GNU General Public License
     18      1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19      1.1  christos 
     20  1.1.1.4  christos #include "extract-store-integer.h"
     21      1.1  christos #include "frame.h"
     22      1.1  christos #include "inferior.h"
     23      1.1  christos #include "symtab.h"
     24      1.1  christos #include "value.h"
     25  1.1.1.4  christos #include "cli/cli-cmds.h"
     26      1.1  christos #include "language.h"
     27      1.1  christos #include "gdbcore.h"
     28      1.1  christos #include "symfile.h"
     29      1.1  christos #include "objfiles.h"
     30      1.1  christos #include "gdbtypes.h"
     31      1.1  christos #include "target.h"
     32      1.1  christos #include "arch-utils.h"
     33      1.1  christos #include "regcache.h"
     34      1.1  christos #include "osabi.h"
     35      1.1  christos #include "riscv-tdep.h"
     36      1.1  christos #include "reggroups.h"
     37      1.1  christos #include "opcode/riscv.h"
     38      1.1  christos #include "elf/riscv.h"
     39      1.1  christos #include "elf-bfd.h"
     40      1.1  christos #include "symcat.h"
     41      1.1  christos #include "dis-asm.h"
     42      1.1  christos #include "frame-unwind.h"
     43      1.1  christos #include "frame-base.h"
     44      1.1  christos #include "trad-frame.h"
     45      1.1  christos #include "infcall.h"
     46      1.1  christos #include "floatformat.h"
     47      1.1  christos #include "remote.h"
     48      1.1  christos #include "target-descriptions.h"
     49  1.1.1.2  christos #include "dwarf2/frame.h"
     50      1.1  christos #include "user-regs.h"
     51      1.1  christos #include "valprint.h"
     52      1.1  christos #include "opcode/riscv-opc.h"
     53      1.1  christos #include "cli/cli-decode.h"
     54      1.1  christos #include "observable.h"
     55      1.1  christos #include "prologue-value.h"
     56      1.1  christos #include "arch/riscv.h"
     57  1.1.1.2  christos #include "riscv-ravenscar-thread.h"
     58  1.1.1.4  christos #include "gdbsupport/gdb-safe-ctype.h"
     59      1.1  christos 
     60      1.1  christos /* The stack must be 16-byte aligned.  */
     61      1.1  christos #define SP_ALIGNMENT 16
     62      1.1  christos 
     63      1.1  christos /* The biggest alignment that the target supports.  */
     64      1.1  christos #define BIGGEST_ALIGNMENT 16
     65      1.1  christos 
     66      1.1  christos /* Define a series of is_XXX_insn functions to check if the value INSN
     67      1.1  christos    is an instance of instruction XXX.  */
     68      1.1  christos #define DECLARE_INSN(INSN_NAME, INSN_MATCH, INSN_MASK) \
     69      1.1  christos static inline bool is_ ## INSN_NAME ## _insn (long insn) \
     70      1.1  christos { \
     71      1.1  christos   return (insn & INSN_MASK) == INSN_MATCH; \
     72      1.1  christos }
     73      1.1  christos #include "opcode/riscv-opc.h"
     74      1.1  christos #undef DECLARE_INSN
     75      1.1  christos 
     76  1.1.1.4  christos /* When this is true debugging information about breakpoint kinds will be
     77  1.1.1.4  christos    printed.  */
     78  1.1.1.3  christos 
     79  1.1.1.4  christos static bool riscv_debug_breakpoints = false;
     80  1.1.1.3  christos 
     81  1.1.1.4  christos /* Print a "riscv-breakpoints" debug statement.  */
     82  1.1.1.4  christos 
     83  1.1.1.4  christos #define riscv_breakpoints_debug_printf(fmt, ...)	\
     84  1.1.1.4  christos   debug_prefixed_printf_cond (riscv_debug_breakpoints,	\
     85  1.1.1.4  christos 			      "riscv-breakpoints",	\
     86  1.1.1.4  christos 			      fmt, ##__VA_ARGS__)
     87  1.1.1.4  christos 
     88  1.1.1.4  christos /* When this is true debugging information about inferior calls will be
     89  1.1.1.4  christos    printed.  */
     90  1.1.1.4  christos 
     91  1.1.1.4  christos static bool riscv_debug_infcall = false;
     92  1.1.1.4  christos 
     93  1.1.1.4  christos /* Print a "riscv-infcall" debug statement.  */
     94  1.1.1.4  christos 
     95  1.1.1.4  christos #define riscv_infcall_debug_printf(fmt, ...)				\
     96  1.1.1.4  christos   debug_prefixed_printf_cond (riscv_debug_infcall, "riscv-infcall",	\
     97  1.1.1.4  christos 			      fmt, ##__VA_ARGS__)
     98  1.1.1.4  christos 
     99  1.1.1.4  christos /* Print "riscv-infcall" start/end debug statements.  */
    100  1.1.1.4  christos 
    101  1.1.1.4  christos #define RISCV_INFCALL_SCOPED_DEBUG_START_END(fmt, ...)		\
    102  1.1.1.4  christos   scoped_debug_start_end (riscv_debug_infcall, "riscv-infcall", \
    103  1.1.1.4  christos 			  fmt, ##__VA_ARGS__)
    104  1.1.1.4  christos 
    105  1.1.1.4  christos /* When this is true debugging information about stack unwinding will be
    106  1.1.1.4  christos    printed.  */
    107  1.1.1.4  christos 
    108  1.1.1.4  christos static bool riscv_debug_unwinder = false;
    109  1.1.1.4  christos 
    110  1.1.1.4  christos /* Print a "riscv-unwinder" debug statement.  */
    111  1.1.1.3  christos 
    112  1.1.1.4  christos #define riscv_unwinder_debug_printf(fmt, ...)				\
    113  1.1.1.4  christos   debug_prefixed_printf_cond (riscv_debug_unwinder, "riscv-unwinder",	\
    114  1.1.1.4  christos 			      fmt, ##__VA_ARGS__)
    115  1.1.1.3  christos 
    116  1.1.1.4  christos /* When this is true debugging information about gdbarch initialisation
    117  1.1.1.3  christos    will be printed.  */
    118  1.1.1.3  christos 
    119  1.1.1.4  christos static bool riscv_debug_gdbarch = false;
    120  1.1.1.3  christos 
    121  1.1.1.4  christos /* Print a "riscv-gdbarch" debug statement.  */
    122  1.1.1.3  christos 
    123  1.1.1.4  christos #define riscv_gdbarch_debug_printf(fmt, ...)				\
    124  1.1.1.4  christos   debug_prefixed_printf_cond (riscv_debug_gdbarch, "riscv-gdbarch",	\
    125  1.1.1.4  christos 			      fmt, ##__VA_ARGS__)
    126  1.1.1.3  christos 
    127  1.1.1.3  christos /* The names of the RISC-V target description features.  */
    128  1.1.1.3  christos const char *riscv_feature_name_csr = "org.gnu.gdb.riscv.csr";
    129  1.1.1.3  christos static const char *riscv_feature_name_cpu = "org.gnu.gdb.riscv.cpu";
    130  1.1.1.3  christos static const char *riscv_feature_name_fpu = "org.gnu.gdb.riscv.fpu";
    131  1.1.1.3  christos static const char *riscv_feature_name_virtual = "org.gnu.gdb.riscv.virtual";
    132  1.1.1.3  christos static const char *riscv_feature_name_vector = "org.gnu.gdb.riscv.vector";
    133  1.1.1.3  christos 
    134  1.1.1.3  christos /* The current set of options to be passed to the disassembler.  */
    135  1.1.1.4  christos static std::string riscv_disassembler_options;
    136  1.1.1.3  christos 
    137      1.1  christos /* Cached information about a frame.  */
    138      1.1  christos 
    139      1.1  christos struct riscv_unwind_cache
    140      1.1  christos {
    141      1.1  christos   /* The register from which we can calculate the frame base.  This is
    142      1.1  christos      usually $sp or $fp.  */
    143      1.1  christos   int frame_base_reg;
    144      1.1  christos 
    145      1.1  christos   /* The offset from the current value in register FRAME_BASE_REG to the
    146      1.1  christos      actual frame base address.  */
    147      1.1  christos   int frame_base_offset;
    148      1.1  christos 
    149      1.1  christos   /* Information about previous register values.  */
    150  1.1.1.3  christos   trad_frame_saved_reg *regs;
    151      1.1  christos 
    152      1.1  christos   /* The id for this frame.  */
    153      1.1  christos   struct frame_id this_id;
    154      1.1  christos 
    155      1.1  christos   /* The base (stack) address for this frame.  This is the stack pointer
    156      1.1  christos      value on entry to this frame before any adjustments are made.  */
    157      1.1  christos   CORE_ADDR frame_base;
    158      1.1  christos };
    159      1.1  christos 
    160      1.1  christos /* RISC-V specific register group for CSRs.  */
    161      1.1  christos 
    162  1.1.1.3  christos static const reggroup *csr_reggroup = nullptr;
    163      1.1  christos 
    164  1.1.1.2  christos /* Callback function for user_reg_add.  */
    165  1.1.1.2  christos 
    166  1.1.1.2  christos static struct value *
    167  1.1.1.4  christos value_of_riscv_user_reg (const frame_info_ptr &frame, const void *baton)
    168  1.1.1.2  christos {
    169  1.1.1.2  christos   const int *reg_p = (const int *) baton;
    170  1.1.1.4  christos   return value_of_register (*reg_p, get_next_frame_sentinel_okay (frame));
    171  1.1.1.2  christos }
    172  1.1.1.2  christos 
    173  1.1.1.2  christos /* Information about a register alias that needs to be set up for this
    174  1.1.1.2  christos    target.  These are collected when the target's XML description is
    175  1.1.1.2  christos    analysed, and then processed later, once the gdbarch has been created.  */
    176  1.1.1.2  christos 
    177  1.1.1.2  christos class riscv_pending_register_alias
    178  1.1.1.2  christos {
    179  1.1.1.2  christos public:
    180  1.1.1.2  christos   /* Constructor.  */
    181  1.1.1.2  christos 
    182  1.1.1.2  christos   riscv_pending_register_alias (const char *name, const void *baton)
    183  1.1.1.2  christos     : m_name (name),
    184  1.1.1.2  christos       m_baton (baton)
    185  1.1.1.2  christos   { /* Nothing.  */ }
    186  1.1.1.2  christos 
    187  1.1.1.2  christos   /* Convert this into a user register for GDBARCH.  */
    188  1.1.1.2  christos 
    189  1.1.1.2  christos   void create (struct gdbarch *gdbarch) const
    190  1.1.1.2  christos   {
    191  1.1.1.2  christos     user_reg_add (gdbarch, m_name, value_of_riscv_user_reg, m_baton);
    192  1.1.1.2  christos   }
    193  1.1.1.2  christos 
    194  1.1.1.2  christos private:
    195  1.1.1.2  christos   /* The name for this alias.  */
    196  1.1.1.2  christos   const char *m_name;
    197  1.1.1.2  christos 
    198  1.1.1.2  christos   /* The baton value for passing to user_reg_add.  This must point to some
    199  1.1.1.2  christos      data that will live for at least as long as the gdbarch object to
    200  1.1.1.2  christos      which the user register is attached.  */
    201  1.1.1.2  christos   const void *m_baton;
    202  1.1.1.2  christos };
    203  1.1.1.2  christos 
    204      1.1  christos /* A set of registers that we expect to find in a tdesc_feature.  These
    205      1.1  christos    are use in RISCV_GDBARCH_INIT when processing the target description.  */
    206      1.1  christos 
    207      1.1  christos struct riscv_register_feature
    208      1.1  christos {
    209  1.1.1.3  christos   explicit riscv_register_feature (const char *feature_name)
    210  1.1.1.3  christos     : m_feature_name (feature_name)
    211  1.1.1.3  christos   { /* Delete.  */ }
    212  1.1.1.3  christos 
    213  1.1.1.3  christos   riscv_register_feature () = delete;
    214  1.1.1.3  christos   DISABLE_COPY_AND_ASSIGN (riscv_register_feature);
    215  1.1.1.3  christos 
    216      1.1  christos   /* Information for a single register.  */
    217      1.1  christos   struct register_info
    218      1.1  christos   {
    219      1.1  christos     /* The GDB register number for this register.  */
    220      1.1  christos     int regnum;
    221      1.1  christos 
    222      1.1  christos     /* List of names for this register.  The first name in this list is the
    223      1.1  christos        preferred name, the name GDB should use when describing this
    224      1.1  christos        register.  */
    225  1.1.1.2  christos     std::vector<const char *> names;
    226      1.1  christos 
    227  1.1.1.2  christos     /* Look in FEATURE for a register with a name from this classes names
    228  1.1.1.2  christos        list.  If the register is found then register its number with
    229  1.1.1.3  christos        TDESC_DATA and add all its aliases to the ALIASES list.
    230  1.1.1.3  christos        PREFER_FIRST_NAME_P is used when deciding which aliases to create.  */
    231  1.1.1.2  christos     bool check (struct tdesc_arch_data *tdesc_data,
    232  1.1.1.2  christos 		const struct tdesc_feature *feature,
    233  1.1.1.3  christos 		bool prefer_first_name_p,
    234  1.1.1.2  christos 		std::vector<riscv_pending_register_alias> *aliases) const;
    235      1.1  christos   };
    236      1.1  christos 
    237  1.1.1.3  christos   /* Return the name of this feature.  */
    238  1.1.1.3  christos   const char *name () const
    239  1.1.1.3  christos   { return m_feature_name; }
    240  1.1.1.3  christos 
    241  1.1.1.3  christos protected:
    242  1.1.1.3  christos 
    243  1.1.1.3  christos   /* Return a target description feature extracted from TDESC for this
    244  1.1.1.3  christos      register feature.  Will return nullptr if there is no feature in TDESC
    245  1.1.1.3  christos      with the name M_FEATURE_NAME.  */
    246  1.1.1.3  christos   const struct tdesc_feature *tdesc_feature (const struct target_desc *tdesc) const
    247  1.1.1.3  christos   {
    248  1.1.1.3  christos     return tdesc_find_feature (tdesc, name ());
    249  1.1.1.3  christos   }
    250  1.1.1.2  christos 
    251      1.1  christos   /* List of all the registers that we expect that we might find in this
    252      1.1  christos      register set.  */
    253  1.1.1.3  christos   std::vector<struct register_info> m_registers;
    254  1.1.1.3  christos 
    255  1.1.1.3  christos private:
    256  1.1.1.3  christos 
    257  1.1.1.3  christos   /* The name for this feature.  This is the name used to find this feature
    258  1.1.1.3  christos      within the target description.  */
    259  1.1.1.3  christos   const char *m_feature_name;
    260      1.1  christos };
    261      1.1  christos 
    262  1.1.1.2  christos /* See description in the class declaration above.  */
    263  1.1.1.2  christos 
    264  1.1.1.2  christos bool
    265  1.1.1.2  christos riscv_register_feature::register_info::check
    266  1.1.1.2  christos 	(struct tdesc_arch_data *tdesc_data,
    267  1.1.1.2  christos 	 const struct tdesc_feature *feature,
    268  1.1.1.3  christos 	 bool prefer_first_name_p,
    269  1.1.1.2  christos 	 std::vector<riscv_pending_register_alias> *aliases) const
    270  1.1.1.2  christos {
    271  1.1.1.2  christos   for (const char *name : this->names)
    272  1.1.1.2  christos     {
    273  1.1.1.2  christos       bool found = tdesc_numbered_register (feature, tdesc_data,
    274  1.1.1.2  christos 					    this->regnum, name);
    275  1.1.1.2  christos       if (found)
    276  1.1.1.2  christos 	{
    277  1.1.1.2  christos 	  /* We know that the target description mentions this
    278  1.1.1.2  christos 	     register.  In RISCV_REGISTER_NAME we ensure that GDB
    279  1.1.1.2  christos 	     always uses the first name for each register, so here we
    280  1.1.1.2  christos 	     add aliases for all of the remaining names.  */
    281  1.1.1.3  christos 	  int start_index = prefer_first_name_p ? 1 : 0;
    282  1.1.1.2  christos 	  for (int i = start_index; i < this->names.size (); ++i)
    283  1.1.1.2  christos 	    {
    284  1.1.1.2  christos 	      const char *alias = this->names[i];
    285  1.1.1.3  christos 	      if (alias == name && !prefer_first_name_p)
    286  1.1.1.2  christos 		continue;
    287  1.1.1.2  christos 	      aliases->emplace_back (alias, (void *) &this->regnum);
    288  1.1.1.2  christos 	    }
    289  1.1.1.2  christos 	  return true;
    290  1.1.1.2  christos 	}
    291  1.1.1.2  christos     }
    292  1.1.1.2  christos   return false;
    293  1.1.1.2  christos }
    294  1.1.1.2  christos 
    295  1.1.1.3  christos /* Class representing the x-registers feature set.  */
    296      1.1  christos 
    297  1.1.1.3  christos struct riscv_xreg_feature : public riscv_register_feature
    298      1.1  christos {
    299  1.1.1.3  christos   riscv_xreg_feature ()
    300  1.1.1.3  christos     : riscv_register_feature (riscv_feature_name_cpu)
    301  1.1.1.3  christos   {
    302  1.1.1.3  christos     m_registers =  {
    303  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 0, { "zero", "x0" } },
    304  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 1, { "ra", "x1" } },
    305  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 2, { "sp", "x2" } },
    306  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 3, { "gp", "x3" } },
    307  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 4, { "tp", "x4" } },
    308  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 5, { "t0", "x5" } },
    309  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 6, { "t1", "x6" } },
    310  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 7, { "t2", "x7" } },
    311  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 8, { "fp", "x8", "s0" } },
    312  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 9, { "s1", "x9" } },
    313  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 10, { "a0", "x10" } },
    314  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 11, { "a1", "x11" } },
    315  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 12, { "a2", "x12" } },
    316  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 13, { "a3", "x13" } },
    317  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 14, { "a4", "x14" } },
    318  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 15, { "a5", "x15" } },
    319  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 16, { "a6", "x16" } },
    320  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 17, { "a7", "x17" } },
    321  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 18, { "s2", "x18" } },
    322  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 19, { "s3", "x19" } },
    323  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 20, { "s4", "x20" } },
    324  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 21, { "s5", "x21" } },
    325  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 22, { "s6", "x22" } },
    326  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 23, { "s7", "x23" } },
    327  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 24, { "s8", "x24" } },
    328  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 25, { "s9", "x25" } },
    329  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 26, { "s10", "x26" } },
    330  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 27, { "s11", "x27" } },
    331  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 28, { "t3", "x28" } },
    332  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 29, { "t4", "x29" } },
    333  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 30, { "t5", "x30" } },
    334  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 31, { "t6", "x31" } },
    335  1.1.1.3  christos       { RISCV_ZERO_REGNUM + 32, { "pc" } }
    336  1.1.1.3  christos     };
    337  1.1.1.3  christos   }
    338  1.1.1.3  christos 
    339  1.1.1.3  christos   /* Return the preferred name for the register with gdb register number
    340  1.1.1.3  christos      REGNUM, which must be in the inclusive range RISCV_ZERO_REGNUM to
    341  1.1.1.3  christos      RISCV_PC_REGNUM.  */
    342  1.1.1.3  christos   const char *register_name (int regnum) const
    343  1.1.1.3  christos   {
    344  1.1.1.3  christos     gdb_assert (regnum >= RISCV_ZERO_REGNUM && regnum <= m_registers.size ());
    345  1.1.1.3  christos     return m_registers[regnum].names[0];
    346  1.1.1.3  christos   }
    347  1.1.1.3  christos 
    348  1.1.1.3  christos   /* Check this feature within TDESC, record the registers from this
    349  1.1.1.3  christos      feature into TDESC_DATA and update ALIASES and FEATURES.  */
    350  1.1.1.3  christos   bool check (const struct target_desc *tdesc,
    351  1.1.1.3  christos 	      struct tdesc_arch_data *tdesc_data,
    352  1.1.1.3  christos 	      std::vector<riscv_pending_register_alias> *aliases,
    353  1.1.1.3  christos 	      struct riscv_gdbarch_features *features) const
    354  1.1.1.3  christos   {
    355  1.1.1.3  christos     const struct tdesc_feature *feature_cpu = tdesc_feature (tdesc);
    356  1.1.1.3  christos 
    357  1.1.1.3  christos     if (feature_cpu == nullptr)
    358  1.1.1.3  christos       return false;
    359  1.1.1.3  christos 
    360  1.1.1.3  christos     bool seen_an_optional_reg_p = false;
    361  1.1.1.3  christos     for (const auto &reg : m_registers)
    362  1.1.1.3  christos       {
    363  1.1.1.3  christos 	bool found = reg.check (tdesc_data, feature_cpu, true, aliases);
    364  1.1.1.3  christos 
    365  1.1.1.3  christos 	bool is_optional_reg_p = (reg.regnum >= RISCV_ZERO_REGNUM + 16
    366  1.1.1.3  christos 				  && reg.regnum < RISCV_ZERO_REGNUM + 32);
    367  1.1.1.3  christos 
    368  1.1.1.3  christos 	if (!found && (!is_optional_reg_p || seen_an_optional_reg_p))
    369  1.1.1.3  christos 	  return false;
    370  1.1.1.3  christos 	else if (found && is_optional_reg_p)
    371  1.1.1.3  christos 	  seen_an_optional_reg_p = true;
    372  1.1.1.3  christos       }
    373  1.1.1.3  christos 
    374  1.1.1.3  christos     /* Check that all of the core cpu registers have the same bitsize.  */
    375  1.1.1.3  christos     int xlen_bitsize = tdesc_register_bitsize (feature_cpu, "pc");
    376  1.1.1.3  christos 
    377  1.1.1.3  christos     bool valid_p = true;
    378  1.1.1.3  christos     for (auto &tdesc_reg : feature_cpu->registers)
    379  1.1.1.3  christos       valid_p &= (tdesc_reg->bitsize == xlen_bitsize);
    380  1.1.1.3  christos 
    381  1.1.1.3  christos     features->xlen = (xlen_bitsize / 8);
    382  1.1.1.3  christos     features->embedded = !seen_an_optional_reg_p;
    383  1.1.1.3  christos 
    384  1.1.1.3  christos     return valid_p;
    385  1.1.1.3  christos   }
    386      1.1  christos };
    387      1.1  christos 
    388  1.1.1.3  christos /* An instance of the x-register feature set.  */
    389  1.1.1.3  christos 
    390  1.1.1.3  christos static const struct riscv_xreg_feature riscv_xreg_feature;
    391      1.1  christos 
    392  1.1.1.3  christos /* Class representing the f-registers feature set.  */
    393  1.1.1.3  christos 
    394  1.1.1.3  christos struct riscv_freg_feature : public riscv_register_feature
    395      1.1  christos {
    396  1.1.1.3  christos   riscv_freg_feature ()
    397  1.1.1.3  christos     : riscv_register_feature (riscv_feature_name_fpu)
    398  1.1.1.3  christos   {
    399  1.1.1.3  christos     m_registers =  {
    400  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 0, { "ft0", "f0" } },
    401  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 1, { "ft1", "f1" } },
    402  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 2, { "ft2", "f2" } },
    403  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 3, { "ft3", "f3" } },
    404  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 4, { "ft4", "f4" } },
    405  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 5, { "ft5", "f5" } },
    406  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 6, { "ft6", "f6" } },
    407  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 7, { "ft7", "f7" } },
    408  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 8, { "fs0", "f8" } },
    409  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 9, { "fs1", "f9" } },
    410  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 10, { "fa0", "f10" } },
    411  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 11, { "fa1", "f11" } },
    412  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 12, { "fa2", "f12" } },
    413  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 13, { "fa3", "f13" } },
    414  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 14, { "fa4", "f14" } },
    415  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 15, { "fa5", "f15" } },
    416  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 16, { "fa6", "f16" } },
    417  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 17, { "fa7", "f17" } },
    418  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 18, { "fs2", "f18" } },
    419  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 19, { "fs3", "f19" } },
    420  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 20, { "fs4", "f20" } },
    421  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 21, { "fs5", "f21" } },
    422  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 22, { "fs6", "f22" } },
    423  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 23, { "fs7", "f23" } },
    424  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 24, { "fs8", "f24" } },
    425  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 25, { "fs9", "f25" } },
    426  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 26, { "fs10", "f26" } },
    427  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 27, { "fs11", "f27" } },
    428  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 28, { "ft8", "f28" } },
    429  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 29, { "ft9", "f29" } },
    430  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 30, { "ft10", "f30" } },
    431  1.1.1.3  christos       { RISCV_FIRST_FP_REGNUM + 31, { "ft11", "f31" } },
    432  1.1.1.3  christos       { RISCV_CSR_FFLAGS_REGNUM, { "fflags", "csr1" } },
    433  1.1.1.3  christos       { RISCV_CSR_FRM_REGNUM, { "frm", "csr2" } },
    434  1.1.1.3  christos       { RISCV_CSR_FCSR_REGNUM, { "fcsr", "csr3" } },
    435  1.1.1.3  christos     };
    436  1.1.1.3  christos   }
    437  1.1.1.3  christos 
    438  1.1.1.3  christos   /* Return the preferred name for the register with gdb register number
    439  1.1.1.3  christos      REGNUM, which must be in the inclusive range RISCV_FIRST_FP_REGNUM to
    440  1.1.1.3  christos      RISCV_LAST_FP_REGNUM.  */
    441  1.1.1.3  christos   const char *register_name (int regnum) const
    442  1.1.1.3  christos   {
    443  1.1.1.4  christos     static_assert (RISCV_LAST_FP_REGNUM == RISCV_FIRST_FP_REGNUM + 31);
    444  1.1.1.3  christos     gdb_assert (regnum >= RISCV_FIRST_FP_REGNUM
    445  1.1.1.3  christos 		&& regnum <= RISCV_LAST_FP_REGNUM);
    446  1.1.1.3  christos     regnum -= RISCV_FIRST_FP_REGNUM;
    447  1.1.1.3  christos     return m_registers[regnum].names[0];
    448  1.1.1.3  christos   }
    449  1.1.1.3  christos 
    450  1.1.1.3  christos   /* Check this feature within TDESC, record the registers from this
    451  1.1.1.3  christos      feature into TDESC_DATA and update ALIASES and FEATURES.  */
    452  1.1.1.3  christos   bool check (const struct target_desc *tdesc,
    453  1.1.1.3  christos 	      struct tdesc_arch_data *tdesc_data,
    454  1.1.1.3  christos 	      std::vector<riscv_pending_register_alias> *aliases,
    455  1.1.1.3  christos 	      struct riscv_gdbarch_features *features) const
    456  1.1.1.3  christos   {
    457  1.1.1.3  christos     const struct tdesc_feature *feature_fpu = tdesc_feature (tdesc);
    458  1.1.1.3  christos 
    459  1.1.1.3  christos     /* It's fine if this feature is missing.  Update the architecture
    460  1.1.1.3  christos        feature set and return.  */
    461  1.1.1.3  christos     if (feature_fpu == nullptr)
    462  1.1.1.3  christos       {
    463  1.1.1.3  christos 	features->flen = 0;
    464  1.1.1.3  christos 	return true;
    465  1.1.1.3  christos       }
    466  1.1.1.3  christos 
    467  1.1.1.3  christos     /* Check all of the floating pointer registers are present.  We also
    468  1.1.1.3  christos        check that the floating point CSRs are present too, though if these
    469  1.1.1.3  christos        are missing this is not fatal.  */
    470  1.1.1.3  christos     for (const auto &reg : m_registers)
    471  1.1.1.3  christos       {
    472  1.1.1.3  christos 	bool found = reg.check (tdesc_data, feature_fpu, true, aliases);
    473  1.1.1.3  christos 
    474  1.1.1.3  christos 	bool is_ctrl_reg_p = reg.regnum > RISCV_LAST_FP_REGNUM;
    475  1.1.1.3  christos 
    476  1.1.1.3  christos 	if (!found && !is_ctrl_reg_p)
    477  1.1.1.3  christos 	  return false;
    478  1.1.1.3  christos       }
    479  1.1.1.3  christos 
    480  1.1.1.3  christos     /* Look through all of the floating point registers (not the FP CSRs
    481  1.1.1.3  christos        though), and check they all have the same bitsize.  Use this bitsize
    482  1.1.1.3  christos        to update the feature set for this gdbarch.  */
    483  1.1.1.3  christos     int fp_bitsize = -1;
    484  1.1.1.3  christos     for (const auto &reg : m_registers)
    485  1.1.1.3  christos       {
    486  1.1.1.3  christos 	/* Stop once we get to the CSRs which are at the end of the
    487  1.1.1.3  christos 	   M_REGISTERS list.  */
    488  1.1.1.3  christos 	if (reg.regnum > RISCV_LAST_FP_REGNUM)
    489  1.1.1.3  christos 	  break;
    490  1.1.1.3  christos 
    491  1.1.1.3  christos 	int reg_bitsize = -1;
    492  1.1.1.3  christos 	for (const char *name : reg.names)
    493  1.1.1.3  christos 	  {
    494  1.1.1.3  christos 	    if (tdesc_unnumbered_register (feature_fpu, name))
    495  1.1.1.3  christos 	      {
    496  1.1.1.3  christos 		reg_bitsize = tdesc_register_bitsize (feature_fpu, name);
    497  1.1.1.3  christos 		break;
    498  1.1.1.3  christos 	      }
    499  1.1.1.3  christos 	  }
    500  1.1.1.3  christos 	gdb_assert (reg_bitsize != -1);
    501  1.1.1.3  christos 	if (fp_bitsize == -1)
    502  1.1.1.3  christos 	  fp_bitsize = reg_bitsize;
    503  1.1.1.3  christos 	else if (fp_bitsize != reg_bitsize)
    504  1.1.1.3  christos 	  return false;
    505  1.1.1.3  christos       }
    506      1.1  christos 
    507  1.1.1.3  christos     features->flen = (fp_bitsize / 8);
    508  1.1.1.3  christos     return true;
    509  1.1.1.3  christos   }
    510      1.1  christos };
    511      1.1  christos 
    512  1.1.1.3  christos /* An instance of the f-register feature set.  */
    513  1.1.1.3  christos 
    514  1.1.1.3  christos static const struct riscv_freg_feature riscv_freg_feature;
    515  1.1.1.3  christos 
    516  1.1.1.3  christos /* Class representing the virtual registers.  These are not physical
    517  1.1.1.3  christos    registers on the hardware, but might be available from the target.
    518  1.1.1.3  christos    These are not pseudo registers, reading these really does result in a
    519  1.1.1.3  christos    register read from the target, it is just that there might not be a
    520  1.1.1.3  christos    physical register backing the result.  */
    521  1.1.1.3  christos 
    522  1.1.1.3  christos struct riscv_virtual_feature : public riscv_register_feature
    523  1.1.1.3  christos {
    524  1.1.1.3  christos   riscv_virtual_feature ()
    525  1.1.1.3  christos     : riscv_register_feature (riscv_feature_name_virtual)
    526  1.1.1.3  christos   {
    527  1.1.1.3  christos     m_registers =  {
    528  1.1.1.3  christos       { RISCV_PRIV_REGNUM, { "priv" } }
    529  1.1.1.3  christos     };
    530  1.1.1.3  christos   }
    531  1.1.1.3  christos 
    532  1.1.1.3  christos   bool check (const struct target_desc *tdesc,
    533  1.1.1.3  christos 	      struct tdesc_arch_data *tdesc_data,
    534  1.1.1.3  christos 	      std::vector<riscv_pending_register_alias> *aliases,
    535  1.1.1.3  christos 	      struct riscv_gdbarch_features *features) const
    536  1.1.1.3  christos   {
    537  1.1.1.3  christos     const struct tdesc_feature *feature_virtual = tdesc_feature (tdesc);
    538  1.1.1.3  christos 
    539  1.1.1.3  christos     /* It's fine if this feature is missing.  */
    540  1.1.1.3  christos     if (feature_virtual == nullptr)
    541  1.1.1.3  christos       return true;
    542  1.1.1.3  christos 
    543  1.1.1.3  christos     /* We don't check the return value from the call to check here, all the
    544  1.1.1.3  christos        registers in this feature are optional.  */
    545  1.1.1.3  christos     for (const auto &reg : m_registers)
    546  1.1.1.3  christos       reg.check (tdesc_data, feature_virtual, true, aliases);
    547  1.1.1.3  christos 
    548  1.1.1.3  christos     return true;
    549  1.1.1.3  christos   }
    550      1.1  christos };
    551      1.1  christos 
    552  1.1.1.3  christos /* An instance of the virtual register feature.  */
    553  1.1.1.3  christos 
    554  1.1.1.3  christos static const struct riscv_virtual_feature riscv_virtual_feature;
    555  1.1.1.3  christos 
    556  1.1.1.3  christos /* Class representing the CSR feature.  */
    557  1.1.1.3  christos 
    558  1.1.1.3  christos struct riscv_csr_feature : public riscv_register_feature
    559  1.1.1.3  christos {
    560  1.1.1.3  christos   riscv_csr_feature ()
    561  1.1.1.3  christos     : riscv_register_feature (riscv_feature_name_csr)
    562  1.1.1.3  christos   {
    563  1.1.1.3  christos     m_registers = {
    564  1.1.1.3  christos #define DECLARE_CSR(NAME,VALUE,CLASS,DEFINE_VER,ABORT_VER)		\
    565  1.1.1.3  christos       { RISCV_ ## VALUE ## _REGNUM, { # NAME } },
    566      1.1  christos #include "opcode/riscv-opc.h"
    567      1.1  christos #undef DECLARE_CSR
    568  1.1.1.3  christos     };
    569  1.1.1.3  christos     riscv_create_csr_aliases ();
    570  1.1.1.3  christos   }
    571  1.1.1.3  christos 
    572  1.1.1.3  christos   bool check (const struct target_desc *tdesc,
    573  1.1.1.3  christos 	      struct tdesc_arch_data *tdesc_data,
    574  1.1.1.3  christos 	      std::vector<riscv_pending_register_alias> *aliases,
    575  1.1.1.3  christos 	      struct riscv_gdbarch_features *features) const
    576  1.1.1.3  christos   {
    577  1.1.1.3  christos     const struct tdesc_feature *feature_csr = tdesc_feature (tdesc);
    578  1.1.1.3  christos 
    579  1.1.1.3  christos     /* It's fine if this feature is missing.  */
    580  1.1.1.3  christos     if (feature_csr == nullptr)
    581  1.1.1.3  christos       return true;
    582  1.1.1.3  christos 
    583  1.1.1.3  christos     /* We don't check the return value from the call to check here, all the
    584  1.1.1.3  christos        registers in this feature are optional.  */
    585  1.1.1.3  christos     for (const auto &reg : m_registers)
    586  1.1.1.3  christos       reg.check (tdesc_data, feature_csr, true, aliases);
    587  1.1.1.3  christos 
    588  1.1.1.3  christos     return true;
    589  1.1.1.3  christos   }
    590  1.1.1.3  christos 
    591  1.1.1.3  christos private:
    592  1.1.1.3  christos 
    593  1.1.1.3  christos   /* Complete RISCV_CSR_FEATURE, building the CSR alias names and adding them
    594  1.1.1.3  christos      to the name list for each register.  */
    595  1.1.1.3  christos 
    596  1.1.1.3  christos   void
    597  1.1.1.3  christos   riscv_create_csr_aliases ()
    598  1.1.1.3  christos   {
    599  1.1.1.3  christos     for (auto &reg : m_registers)
    600  1.1.1.3  christos       {
    601  1.1.1.3  christos 	int csr_num = reg.regnum - RISCV_FIRST_CSR_REGNUM;
    602  1.1.1.3  christos 	gdb::unique_xmalloc_ptr<char> alias = xstrprintf ("csr%d", csr_num);
    603  1.1.1.3  christos 	reg.names.push_back (alias.release ());
    604  1.1.1.3  christos       }
    605  1.1.1.3  christos   }
    606      1.1  christos };
    607      1.1  christos 
    608  1.1.1.3  christos /* An instance of the csr register feature.  */
    609      1.1  christos 
    610  1.1.1.3  christos static const struct riscv_csr_feature riscv_csr_feature;
    611  1.1.1.3  christos 
    612  1.1.1.3  christos /* Class representing the v-registers feature set.  */
    613  1.1.1.3  christos 
    614  1.1.1.3  christos struct riscv_vector_feature : public riscv_register_feature
    615      1.1  christos {
    616  1.1.1.3  christos   riscv_vector_feature ()
    617  1.1.1.3  christos     : riscv_register_feature (riscv_feature_name_vector)
    618  1.1.1.3  christos   {
    619  1.1.1.3  christos     m_registers =  {
    620  1.1.1.3  christos       { RISCV_V0_REGNUM + 0, { "v0" } },
    621  1.1.1.3  christos       { RISCV_V0_REGNUM + 1, { "v1" } },
    622  1.1.1.3  christos       { RISCV_V0_REGNUM + 2, { "v2" } },
    623  1.1.1.3  christos       { RISCV_V0_REGNUM + 3, { "v3" } },
    624  1.1.1.3  christos       { RISCV_V0_REGNUM + 4, { "v4" } },
    625  1.1.1.3  christos       { RISCV_V0_REGNUM + 5, { "v5" } },
    626  1.1.1.3  christos       { RISCV_V0_REGNUM + 6, { "v6" } },
    627  1.1.1.3  christos       { RISCV_V0_REGNUM + 7, { "v7" } },
    628  1.1.1.3  christos       { RISCV_V0_REGNUM + 8, { "v8" } },
    629  1.1.1.3  christos       { RISCV_V0_REGNUM + 9, { "v9" } },
    630  1.1.1.3  christos       { RISCV_V0_REGNUM + 10, { "v10" } },
    631  1.1.1.3  christos       { RISCV_V0_REGNUM + 11, { "v11" } },
    632  1.1.1.3  christos       { RISCV_V0_REGNUM + 12, { "v12" } },
    633  1.1.1.3  christos       { RISCV_V0_REGNUM + 13, { "v13" } },
    634  1.1.1.3  christos       { RISCV_V0_REGNUM + 14, { "v14" } },
    635  1.1.1.3  christos       { RISCV_V0_REGNUM + 15, { "v15" } },
    636  1.1.1.3  christos       { RISCV_V0_REGNUM + 16, { "v16" } },
    637  1.1.1.3  christos       { RISCV_V0_REGNUM + 17, { "v17" } },
    638  1.1.1.3  christos       { RISCV_V0_REGNUM + 18, { "v18" } },
    639  1.1.1.3  christos       { RISCV_V0_REGNUM + 19, { "v19" } },
    640  1.1.1.3  christos       { RISCV_V0_REGNUM + 20, { "v20" } },
    641  1.1.1.3  christos       { RISCV_V0_REGNUM + 21, { "v21" } },
    642  1.1.1.3  christos       { RISCV_V0_REGNUM + 22, { "v22" } },
    643  1.1.1.3  christos       { RISCV_V0_REGNUM + 23, { "v23" } },
    644  1.1.1.3  christos       { RISCV_V0_REGNUM + 24, { "v24" } },
    645  1.1.1.3  christos       { RISCV_V0_REGNUM + 25, { "v25" } },
    646  1.1.1.3  christos       { RISCV_V0_REGNUM + 26, { "v26" } },
    647  1.1.1.3  christos       { RISCV_V0_REGNUM + 27, { "v27" } },
    648  1.1.1.3  christos       { RISCV_V0_REGNUM + 28, { "v28" } },
    649  1.1.1.3  christos       { RISCV_V0_REGNUM + 29, { "v29" } },
    650  1.1.1.3  christos       { RISCV_V0_REGNUM + 30, { "v30" } },
    651  1.1.1.3  christos       { RISCV_V0_REGNUM + 31, { "v31" } },
    652  1.1.1.3  christos     };
    653  1.1.1.3  christos   }
    654  1.1.1.3  christos 
    655  1.1.1.3  christos   /* Return the preferred name for the register with gdb register number
    656  1.1.1.3  christos      REGNUM, which must be in the inclusive range RISCV_V0_REGNUM to
    657  1.1.1.3  christos      RISCV_V0_REGNUM + 31.  */
    658  1.1.1.3  christos   const char *register_name (int regnum) const
    659  1.1.1.3  christos   {
    660  1.1.1.3  christos     gdb_assert (regnum >= RISCV_V0_REGNUM
    661  1.1.1.3  christos 		&& regnum <= RISCV_V0_REGNUM + 31);
    662  1.1.1.3  christos     regnum -= RISCV_V0_REGNUM;
    663  1.1.1.3  christos     return m_registers[regnum].names[0];
    664  1.1.1.3  christos   }
    665  1.1.1.3  christos 
    666  1.1.1.3  christos   /* Check this feature within TDESC, record the registers from this
    667  1.1.1.3  christos      feature into TDESC_DATA and update ALIASES and FEATURES.  */
    668  1.1.1.3  christos   bool check (const struct target_desc *tdesc,
    669  1.1.1.3  christos 	      struct tdesc_arch_data *tdesc_data,
    670  1.1.1.3  christos 	      std::vector<riscv_pending_register_alias> *aliases,
    671  1.1.1.3  christos 	      struct riscv_gdbarch_features *features) const
    672  1.1.1.3  christos   {
    673  1.1.1.3  christos     const struct tdesc_feature *feature_vector = tdesc_feature (tdesc);
    674  1.1.1.3  christos 
    675  1.1.1.3  christos     /* It's fine if this feature is missing.  Update the architecture
    676  1.1.1.3  christos        feature set and return.  */
    677  1.1.1.3  christos     if (feature_vector == nullptr)
    678  1.1.1.3  christos       {
    679  1.1.1.3  christos 	features->vlen = 0;
    680  1.1.1.3  christos 	return true;
    681  1.1.1.3  christos       }
    682  1.1.1.3  christos 
    683  1.1.1.3  christos     /* Check all of the vector registers are present.  */
    684  1.1.1.3  christos     for (const auto &reg : m_registers)
    685  1.1.1.3  christos       {
    686  1.1.1.3  christos 	if (!reg.check (tdesc_data, feature_vector, true, aliases))
    687  1.1.1.3  christos 	  return false;
    688  1.1.1.3  christos       }
    689  1.1.1.3  christos 
    690  1.1.1.3  christos     /* Look through all of the vector registers and check they all have the
    691  1.1.1.3  christos        same bitsize.  Use this bitsize to update the feature set for this
    692  1.1.1.3  christos        gdbarch.  */
    693  1.1.1.3  christos     int vector_bitsize = -1;
    694  1.1.1.3  christos     for (const auto &reg : m_registers)
    695  1.1.1.3  christos       {
    696  1.1.1.3  christos 	int reg_bitsize = -1;
    697  1.1.1.3  christos 	for (const char *name : reg.names)
    698  1.1.1.3  christos 	  {
    699  1.1.1.3  christos 	    if (tdesc_unnumbered_register (feature_vector, name))
    700  1.1.1.3  christos 	      {
    701  1.1.1.3  christos 		reg_bitsize = tdesc_register_bitsize (feature_vector, name);
    702  1.1.1.3  christos 		break;
    703  1.1.1.3  christos 	      }
    704  1.1.1.3  christos 	  }
    705  1.1.1.3  christos 	gdb_assert (reg_bitsize != -1);
    706  1.1.1.3  christos 	if (vector_bitsize == -1)
    707  1.1.1.3  christos 	  vector_bitsize = reg_bitsize;
    708  1.1.1.3  christos 	else if (vector_bitsize != reg_bitsize)
    709  1.1.1.3  christos 	  return false;
    710  1.1.1.3  christos       }
    711  1.1.1.3  christos 
    712  1.1.1.3  christos     features->vlen = (vector_bitsize / 8);
    713  1.1.1.3  christos     return true;
    714  1.1.1.3  christos   }
    715  1.1.1.3  christos };
    716  1.1.1.3  christos 
    717  1.1.1.3  christos /* An instance of the v-register feature set.  */
    718  1.1.1.3  christos 
    719  1.1.1.3  christos static const struct riscv_vector_feature riscv_vector_feature;
    720      1.1  christos 
    721      1.1  christos /* Controls whether we place compressed breakpoints or not.  When in auto
    722      1.1  christos    mode GDB tries to determine if the target supports compressed
    723      1.1  christos    breakpoints, and uses them if it does.  */
    724      1.1  christos 
    725      1.1  christos static enum auto_boolean use_compressed_breakpoints;
    726      1.1  christos 
    727      1.1  christos /* The show callback for 'show riscv use-compressed-breakpoints'.  */
    728      1.1  christos 
    729      1.1  christos static void
    730      1.1  christos show_use_compressed_breakpoints (struct ui_file *file, int from_tty,
    731      1.1  christos 				 struct cmd_list_element *c,
    732      1.1  christos 				 const char *value)
    733      1.1  christos {
    734  1.1.1.3  christos   gdb_printf (file,
    735  1.1.1.3  christos 	      _("Debugger's use of compressed breakpoints is set "
    736  1.1.1.3  christos 		"to %s.\n"), value);
    737      1.1  christos }
    738      1.1  christos 
    739      1.1  christos /* The set and show lists for 'set riscv' and 'show riscv' prefixes.  */
    740      1.1  christos 
    741      1.1  christos static struct cmd_list_element *setriscvcmdlist = NULL;
    742      1.1  christos static struct cmd_list_element *showriscvcmdlist = NULL;
    743      1.1  christos 
    744      1.1  christos /* The set and show lists for 'set riscv' and 'show riscv' prefixes.  */
    745      1.1  christos 
    746      1.1  christos static struct cmd_list_element *setdebugriscvcmdlist = NULL;
    747      1.1  christos static struct cmd_list_element *showdebugriscvcmdlist = NULL;
    748      1.1  christos 
    749      1.1  christos /* The show callback for all 'show debug riscv VARNAME' variables.  */
    750      1.1  christos 
    751      1.1  christos static void
    752      1.1  christos show_riscv_debug_variable (struct ui_file *file, int from_tty,
    753      1.1  christos 			   struct cmd_list_element *c,
    754      1.1  christos 			   const char *value)
    755      1.1  christos {
    756  1.1.1.3  christos   gdb_printf (file,
    757  1.1.1.3  christos 	      _("RiscV debug variable `%s' is set to: %s\n"),
    758  1.1.1.3  christos 	      c->name, value);
    759      1.1  christos }
    760      1.1  christos 
    761      1.1  christos /* See riscv-tdep.h.  */
    762      1.1  christos 
    763      1.1  christos int
    764      1.1  christos riscv_isa_xlen (struct gdbarch *gdbarch)
    765      1.1  christos {
    766  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    767  1.1.1.3  christos   return tdep->isa_features.xlen;
    768      1.1  christos }
    769      1.1  christos 
    770      1.1  christos /* See riscv-tdep.h.  */
    771      1.1  christos 
    772      1.1  christos int
    773      1.1  christos riscv_abi_xlen (struct gdbarch *gdbarch)
    774      1.1  christos {
    775  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    776  1.1.1.3  christos   return tdep->abi_features.xlen;
    777      1.1  christos }
    778      1.1  christos 
    779      1.1  christos /* See riscv-tdep.h.  */
    780      1.1  christos 
    781      1.1  christos int
    782      1.1  christos riscv_isa_flen (struct gdbarch *gdbarch)
    783      1.1  christos {
    784  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    785  1.1.1.3  christos   return tdep->isa_features.flen;
    786      1.1  christos }
    787      1.1  christos 
    788      1.1  christos /* See riscv-tdep.h.  */
    789      1.1  christos 
    790      1.1  christos int
    791      1.1  christos riscv_abi_flen (struct gdbarch *gdbarch)
    792      1.1  christos {
    793  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    794  1.1.1.3  christos   return tdep->abi_features.flen;
    795  1.1.1.3  christos }
    796  1.1.1.3  christos 
    797  1.1.1.3  christos /* See riscv-tdep.h.  */
    798  1.1.1.3  christos 
    799  1.1.1.3  christos bool
    800  1.1.1.3  christos riscv_abi_embedded (struct gdbarch *gdbarch)
    801  1.1.1.3  christos {
    802  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    803  1.1.1.3  christos   return tdep->abi_features.embedded;
    804      1.1  christos }
    805      1.1  christos 
    806      1.1  christos /* Return true if the target for GDBARCH has floating point hardware.  */
    807      1.1  christos 
    808      1.1  christos static bool
    809      1.1  christos riscv_has_fp_regs (struct gdbarch *gdbarch)
    810      1.1  christos {
    811      1.1  christos   return (riscv_isa_flen (gdbarch) > 0);
    812      1.1  christos }
    813      1.1  christos 
    814      1.1  christos /* Return true if GDBARCH is using any of the floating point hardware ABIs.  */
    815      1.1  christos 
    816      1.1  christos static bool
    817      1.1  christos riscv_has_fp_abi (struct gdbarch *gdbarch)
    818      1.1  christos {
    819  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    820  1.1.1.3  christos   return tdep->abi_features.flen > 0;
    821      1.1  christos }
    822      1.1  christos 
    823      1.1  christos /* Return true if REGNO is a floating pointer register.  */
    824      1.1  christos 
    825      1.1  christos static bool
    826      1.1  christos riscv_is_fp_regno_p (int regno)
    827      1.1  christos {
    828      1.1  christos   return (regno >= RISCV_FIRST_FP_REGNUM
    829      1.1  christos 	  && regno <= RISCV_LAST_FP_REGNUM);
    830      1.1  christos }
    831      1.1  christos 
    832      1.1  christos /* Implement the breakpoint_kind_from_pc gdbarch method.  */
    833      1.1  christos 
    834      1.1  christos static int
    835      1.1  christos riscv_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
    836      1.1  christos {
    837      1.1  christos   if (use_compressed_breakpoints == AUTO_BOOLEAN_AUTO)
    838      1.1  christos     {
    839      1.1  christos       bool unaligned_p = false;
    840      1.1  christos       gdb_byte buf[1];
    841      1.1  christos 
    842      1.1  christos       /* Some targets don't support unaligned reads.  The address can only
    843      1.1  christos 	 be unaligned if the C extension is supported.  So it is safe to
    844      1.1  christos 	 use a compressed breakpoint in this case.  */
    845      1.1  christos       if (*pcptr & 0x2)
    846      1.1  christos 	unaligned_p = true;
    847      1.1  christos       else
    848      1.1  christos 	{
    849  1.1.1.2  christos 	  /* Read the opcode byte to determine the instruction length.  If
    850  1.1.1.2  christos 	     the read fails this may be because we tried to set the
    851  1.1.1.2  christos 	     breakpoint at an invalid address, in this case we provide a
    852  1.1.1.2  christos 	     fake result which will give a breakpoint length of 4.
    853  1.1.1.2  christos 	     Hopefully when we try to actually insert the breakpoint we
    854  1.1.1.2  christos 	     will see a failure then too which will be reported to the
    855  1.1.1.2  christos 	     user.  */
    856  1.1.1.2  christos 	  if (target_read_code (*pcptr, buf, 1) == -1)
    857  1.1.1.2  christos 	    buf[0] = 0;
    858      1.1  christos 	}
    859      1.1  christos 
    860      1.1  christos       if (riscv_debug_breakpoints)
    861      1.1  christos 	{
    862      1.1  christos 	  const char *bp = (unaligned_p || riscv_insn_length (buf[0]) == 2
    863      1.1  christos 			    ? "C.EBREAK" : "EBREAK");
    864      1.1  christos 
    865  1.1.1.4  christos 	  std::string suffix;
    866      1.1  christos 	  if (unaligned_p)
    867  1.1.1.4  christos 	    suffix = "(unaligned address)";
    868      1.1  christos 	  else
    869  1.1.1.4  christos 	    suffix = string_printf ("(instruction length %d)",
    870  1.1.1.4  christos 				    riscv_insn_length (buf[0]));
    871  1.1.1.4  christos 	  riscv_breakpoints_debug_printf ("Using %s for breakpoint at %s %s",
    872  1.1.1.4  christos 					  bp, paddress (gdbarch, *pcptr),
    873  1.1.1.4  christos 					  suffix.c_str ());
    874      1.1  christos 	}
    875      1.1  christos       if (unaligned_p || riscv_insn_length (buf[0]) == 2)
    876      1.1  christos 	return 2;
    877      1.1  christos       else
    878      1.1  christos 	return 4;
    879      1.1  christos     }
    880      1.1  christos   else if (use_compressed_breakpoints == AUTO_BOOLEAN_TRUE)
    881      1.1  christos     return 2;
    882      1.1  christos   else
    883      1.1  christos     return 4;
    884      1.1  christos }
    885      1.1  christos 
    886      1.1  christos /* Implement the sw_breakpoint_from_kind gdbarch method.  */
    887      1.1  christos 
    888      1.1  christos static const gdb_byte *
    889      1.1  christos riscv_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
    890      1.1  christos {
    891      1.1  christos   static const gdb_byte ebreak[] = { 0x73, 0x00, 0x10, 0x00, };
    892      1.1  christos   static const gdb_byte c_ebreak[] = { 0x02, 0x90 };
    893      1.1  christos 
    894      1.1  christos   *size = kind;
    895      1.1  christos   switch (kind)
    896      1.1  christos     {
    897      1.1  christos     case 2:
    898      1.1  christos       return c_ebreak;
    899      1.1  christos     case 4:
    900      1.1  christos       return ebreak;
    901      1.1  christos     default:
    902  1.1.1.3  christos       gdb_assert_not_reached ("unhandled breakpoint kind");
    903      1.1  christos     }
    904      1.1  christos }
    905      1.1  christos 
    906      1.1  christos /* Implement the register_name gdbarch method.  This is used instead of
    907      1.1  christos    the function supplied by calling TDESC_USE_REGISTERS so that we can
    908  1.1.1.2  christos    ensure the preferred names are offered for x-regs and f-regs.  */
    909      1.1  christos 
    910      1.1  christos static const char *
    911      1.1  christos riscv_register_name (struct gdbarch *gdbarch, int regnum)
    912      1.1  christos {
    913      1.1  christos   /* Lookup the name through the target description.  If we get back NULL
    914      1.1  christos      then this is an unknown register.  If we do get a name back then we
    915      1.1  christos      look up the registers preferred name below.  */
    916      1.1  christos   const char *name = tdesc_register_name (gdbarch, regnum);
    917  1.1.1.3  christos   gdb_assert (name != nullptr);
    918  1.1.1.3  christos   if (name[0] == '\0')
    919  1.1.1.3  christos     return name;
    920      1.1  christos 
    921  1.1.1.2  christos   /* We want GDB to use the ABI names for registers even if the target
    922  1.1.1.2  christos      gives us a target description with the architectural name.  For
    923  1.1.1.2  christos      example we want to see 'ra' instead of 'x1' whatever the target
    924  1.1.1.2  christos      description called it.  */
    925      1.1  christos   if (regnum >= RISCV_ZERO_REGNUM && regnum < RISCV_FIRST_FP_REGNUM)
    926  1.1.1.3  christos     return riscv_xreg_feature.register_name (regnum);
    927      1.1  christos 
    928  1.1.1.2  christos   /* Like with the x-regs we prefer the abi names for the floating point
    929  1.1.1.3  christos      registers.  If the target doesn't have floating point registers then
    930  1.1.1.3  christos      the tdesc_register_name call above should have returned an empty
    931  1.1.1.3  christos      string.  */
    932      1.1  christos   if (regnum >= RISCV_FIRST_FP_REGNUM && regnum <= RISCV_LAST_FP_REGNUM)
    933      1.1  christos     {
    934  1.1.1.3  christos       gdb_assert (riscv_has_fp_regs (gdbarch));
    935  1.1.1.3  christos       return riscv_freg_feature.register_name (regnum);
    936      1.1  christos     }
    937      1.1  christos 
    938  1.1.1.2  christos   /* Some targets (QEMU) are reporting these three registers twice, once
    939  1.1.1.2  christos      in the FPU feature, and once in the CSR feature.  Both of these read
    940  1.1.1.2  christos      the same underlying state inside the target, but naming the register
    941  1.1.1.2  christos      twice in the target description results in GDB having two registers
    942  1.1.1.2  christos      with the same name, only one of which can ever be accessed, but both
    943  1.1.1.2  christos      will show up in 'info register all'.  Unless, we identify the
    944  1.1.1.2  christos      duplicate copies of these registers (in riscv_tdesc_unknown_reg) and
    945  1.1.1.2  christos      then hide the registers here by giving them no name.  */
    946  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    947  1.1.1.3  christos   if (tdep->duplicate_fflags_regnum == regnum
    948  1.1.1.3  christos       || tdep->duplicate_frm_regnum == regnum
    949  1.1.1.3  christos       || tdep->duplicate_fcsr_regnum == regnum)
    950  1.1.1.3  christos     return "";
    951      1.1  christos 
    952  1.1.1.2  christos   /* The remaining registers are different.  For all other registers on the
    953  1.1.1.2  christos      machine we prefer to see the names that the target description
    954  1.1.1.2  christos      provides.  This is particularly important for CSRs which might be
    955  1.1.1.2  christos      renamed over time.  If GDB keeps track of the "latest" name, but a
    956  1.1.1.2  christos      particular target provides an older name then we don't want to force
    957  1.1.1.2  christos      users to see the newer name in register output.
    958  1.1.1.2  christos 
    959  1.1.1.2  christos      The other case that reaches here are any registers that the target
    960  1.1.1.2  christos      provided that GDB is completely unaware of.  For these we have no
    961  1.1.1.2  christos      choice but to accept the target description name.
    962      1.1  christos 
    963  1.1.1.2  christos      Just accept whatever name TDESC_REGISTER_NAME returned.  */
    964      1.1  christos   return name;
    965      1.1  christos }
    966      1.1  christos 
    967  1.1.1.3  christos /* Implement gdbarch_pseudo_register_read.  Read pseudo-register REGNUM
    968  1.1.1.3  christos    from REGCACHE and place the register value into BUF.  BUF is sized
    969  1.1.1.3  christos    based on the type of register REGNUM, all of BUF should be written too,
    970  1.1.1.3  christos    the result should be sign or zero extended as appropriate.  */
    971  1.1.1.3  christos 
    972  1.1.1.3  christos static enum register_status
    973  1.1.1.3  christos riscv_pseudo_register_read (struct gdbarch *gdbarch,
    974  1.1.1.3  christos 			    readable_regcache *regcache,
    975  1.1.1.3  christos 			    int regnum, gdb_byte *buf)
    976  1.1.1.3  christos {
    977  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
    978  1.1.1.3  christos 
    979  1.1.1.3  christos   if (regnum == tdep->fflags_regnum || regnum == tdep->frm_regnum)
    980  1.1.1.3  christos     {
    981  1.1.1.3  christos       /* Clear BUF.  */
    982  1.1.1.3  christos       memset (buf, 0, register_size (gdbarch, regnum));
    983  1.1.1.3  christos 
    984  1.1.1.3  christos       /* Read the first byte of the fcsr register, this contains both frm
    985  1.1.1.3  christos 	 and fflags.  */
    986  1.1.1.3  christos       enum register_status status
    987  1.1.1.3  christos 	= regcache->raw_read_part (RISCV_CSR_FCSR_REGNUM, 0, 1, buf);
    988  1.1.1.3  christos 
    989  1.1.1.3  christos       if (status != REG_VALID)
    990  1.1.1.3  christos 	return status;
    991  1.1.1.3  christos 
    992  1.1.1.3  christos       /* Extract the appropriate parts.  */
    993  1.1.1.3  christos       if (regnum == tdep->fflags_regnum)
    994  1.1.1.3  christos 	buf[0] &= 0x1f;
    995  1.1.1.3  christos       else if (regnum == tdep->frm_regnum)
    996  1.1.1.3  christos 	buf[0] = (buf[0] >> 5) & 0x7;
    997  1.1.1.3  christos 
    998  1.1.1.3  christos       return REG_VALID;
    999  1.1.1.3  christos     }
   1000  1.1.1.3  christos 
   1001  1.1.1.3  christos   return REG_UNKNOWN;
   1002  1.1.1.3  christos }
   1003  1.1.1.3  christos 
   1004  1.1.1.4  christos /* Implement gdbarch_deprecated_pseudo_register_write.  Write the contents of
   1005  1.1.1.4  christos    BUF into pseudo-register REGNUM in REGCACHE.  BUF is sized based on the type
   1006  1.1.1.4  christos    of register REGNUM.  */
   1007  1.1.1.3  christos 
   1008  1.1.1.3  christos static void
   1009  1.1.1.3  christos riscv_pseudo_register_write (struct gdbarch *gdbarch,
   1010  1.1.1.3  christos 			     struct regcache *regcache, int regnum,
   1011  1.1.1.3  christos 			     const gdb_byte *buf)
   1012  1.1.1.3  christos {
   1013  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1014  1.1.1.3  christos 
   1015  1.1.1.3  christos   if (regnum == tdep->fflags_regnum || regnum == tdep->frm_regnum)
   1016  1.1.1.3  christos     {
   1017  1.1.1.3  christos       int fcsr_regnum = RISCV_CSR_FCSR_REGNUM;
   1018  1.1.1.5  christos       gdb::byte_vector raw_buf (register_size (gdbarch, fcsr_regnum));
   1019  1.1.1.3  christos 
   1020  1.1.1.3  christos       regcache->raw_read (fcsr_regnum, raw_buf);
   1021  1.1.1.3  christos 
   1022  1.1.1.3  christos       if (regnum == tdep->fflags_regnum)
   1023  1.1.1.3  christos 	raw_buf[0] = (raw_buf[0] & ~0x1f) | (buf[0] & 0x1f);
   1024  1.1.1.3  christos       else if (regnum == tdep->frm_regnum)
   1025  1.1.1.3  christos 	raw_buf[0] = (raw_buf[0] & ~(0x7 << 5)) | ((buf[0] & 0x7) << 5);
   1026  1.1.1.3  christos 
   1027  1.1.1.3  christos       regcache->raw_write (fcsr_regnum, raw_buf);
   1028  1.1.1.3  christos     }
   1029  1.1.1.3  christos   else
   1030  1.1.1.3  christos     gdb_assert_not_reached ("unknown pseudo register %d", regnum);
   1031  1.1.1.3  christos }
   1032  1.1.1.3  christos 
   1033  1.1.1.3  christos /* Implement the cannot_store_register gdbarch method.  The zero register
   1034  1.1.1.3  christos    (x0) is read-only on RISC-V.  */
   1035  1.1.1.3  christos 
   1036  1.1.1.3  christos static int
   1037  1.1.1.3  christos riscv_cannot_store_register (struct gdbarch *gdbarch, int regnum)
   1038  1.1.1.3  christos {
   1039  1.1.1.3  christos   return regnum == RISCV_ZERO_REGNUM;
   1040  1.1.1.3  christos }
   1041  1.1.1.3  christos 
   1042      1.1  christos /* Construct a type for 64-bit FP registers.  */
   1043      1.1  christos 
   1044      1.1  christos static struct type *
   1045      1.1  christos riscv_fpreg_d_type (struct gdbarch *gdbarch)
   1046      1.1  christos {
   1047  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1048      1.1  christos 
   1049      1.1  christos   if (tdep->riscv_fpreg_d_type == nullptr)
   1050      1.1  christos     {
   1051      1.1  christos       const struct builtin_type *bt = builtin_type (gdbarch);
   1052      1.1  christos 
   1053      1.1  christos       /* The type we're building is this: */
   1054      1.1  christos #if 0
   1055      1.1  christos       union __gdb_builtin_type_fpreg_d
   1056      1.1  christos       {
   1057      1.1  christos 	float f;
   1058      1.1  christos 	double d;
   1059      1.1  christos       };
   1060      1.1  christos #endif
   1061      1.1  christos 
   1062      1.1  christos       struct type *t;
   1063      1.1  christos 
   1064      1.1  christos       t = arch_composite_type (gdbarch,
   1065      1.1  christos 			       "__gdb_builtin_type_fpreg_d", TYPE_CODE_UNION);
   1066      1.1  christos       append_composite_type_field (t, "float", bt->builtin_float);
   1067      1.1  christos       append_composite_type_field (t, "double", bt->builtin_double);
   1068  1.1.1.3  christos       t->set_is_vector (true);
   1069  1.1.1.2  christos       t->set_name ("builtin_type_fpreg_d");
   1070      1.1  christos       tdep->riscv_fpreg_d_type = t;
   1071      1.1  christos     }
   1072      1.1  christos 
   1073      1.1  christos   return tdep->riscv_fpreg_d_type;
   1074      1.1  christos }
   1075      1.1  christos 
   1076      1.1  christos /* Implement the register_type gdbarch method.  This is installed as an
   1077      1.1  christos    for the override setup by TDESC_USE_REGISTERS, for most registers we
   1078      1.1  christos    delegate the type choice to the target description, but for a few
   1079      1.1  christos    registers we try to improve the types if the target description has
   1080      1.1  christos    taken a simplistic approach.  */
   1081      1.1  christos 
   1082      1.1  christos static struct type *
   1083      1.1  christos riscv_register_type (struct gdbarch *gdbarch, int regnum)
   1084      1.1  christos {
   1085      1.1  christos   struct type *type = tdesc_register_type (gdbarch, regnum);
   1086      1.1  christos   int xlen = riscv_isa_xlen (gdbarch);
   1087      1.1  christos 
   1088      1.1  christos   /* We want to perform some specific type "fixes" in cases where we feel
   1089      1.1  christos      that we really can do better than the target description.  For all
   1090      1.1  christos      other cases we just return what the target description says.  */
   1091      1.1  christos   if (riscv_is_fp_regno_p (regnum))
   1092      1.1  christos     {
   1093      1.1  christos       /* This spots the case for RV64 where the double is defined as
   1094  1.1.1.3  christos 	 either 'ieee_double' or 'float' (which is the generic name that
   1095  1.1.1.3  christos 	 converts to 'double' on 64-bit).  In these cases its better to
   1096  1.1.1.3  christos 	 present the registers using a union type.  */
   1097      1.1  christos       int flen = riscv_isa_flen (gdbarch);
   1098      1.1  christos       if (flen == 8
   1099  1.1.1.3  christos 	  && type->code () == TYPE_CODE_FLT
   1100  1.1.1.3  christos 	  && type->length () == flen
   1101  1.1.1.3  christos 	  && (strcmp (type->name (), "builtin_type_ieee_double") == 0
   1102  1.1.1.3  christos 	      || strcmp (type->name (), "double") == 0))
   1103  1.1.1.3  christos 	type = riscv_fpreg_d_type (gdbarch);
   1104      1.1  christos     }
   1105      1.1  christos 
   1106      1.1  christos   if ((regnum == gdbarch_pc_regnum (gdbarch)
   1107      1.1  christos        || regnum == RISCV_RA_REGNUM
   1108      1.1  christos        || regnum == RISCV_FP_REGNUM
   1109      1.1  christos        || regnum == RISCV_SP_REGNUM
   1110      1.1  christos        || regnum == RISCV_GP_REGNUM
   1111      1.1  christos        || regnum == RISCV_TP_REGNUM)
   1112  1.1.1.2  christos       && type->code () == TYPE_CODE_INT
   1113  1.1.1.3  christos       && type->length () == xlen)
   1114      1.1  christos     {
   1115      1.1  christos       /* This spots the case where some interesting registers are defined
   1116  1.1.1.3  christos 	 as simple integers of the expected size, we force these registers
   1117  1.1.1.3  christos 	 to be pointers as we believe that is more useful.  */
   1118      1.1  christos       if (regnum == gdbarch_pc_regnum (gdbarch)
   1119  1.1.1.3  christos 	  || regnum == RISCV_RA_REGNUM)
   1120  1.1.1.3  christos 	type = builtin_type (gdbarch)->builtin_func_ptr;
   1121      1.1  christos       else if (regnum == RISCV_FP_REGNUM
   1122  1.1.1.3  christos 	       || regnum == RISCV_SP_REGNUM
   1123  1.1.1.3  christos 	       || regnum == RISCV_GP_REGNUM
   1124  1.1.1.3  christos 	       || regnum == RISCV_TP_REGNUM)
   1125      1.1  christos 	type = builtin_type (gdbarch)->builtin_data_ptr;
   1126      1.1  christos     }
   1127      1.1  christos 
   1128      1.1  christos   return type;
   1129      1.1  christos }
   1130      1.1  christos 
   1131      1.1  christos /* Helper for riscv_print_registers_info, prints info for a single register
   1132      1.1  christos    REGNUM.  */
   1133      1.1  christos 
   1134      1.1  christos static void
   1135      1.1  christos riscv_print_one_register_info (struct gdbarch *gdbarch,
   1136      1.1  christos 			       struct ui_file *file,
   1137  1.1.1.4  christos 			       const frame_info_ptr &frame,
   1138      1.1  christos 			       int regnum)
   1139      1.1  christos {
   1140      1.1  christos   const char *name = gdbarch_register_name (gdbarch, regnum);
   1141      1.1  christos   struct value *val;
   1142      1.1  christos   struct type *regtype;
   1143      1.1  christos   int print_raw_format;
   1144      1.1  christos   enum tab_stops { value_column_1 = 15 };
   1145      1.1  christos 
   1146  1.1.1.3  christos   gdb_puts (name, file);
   1147  1.1.1.4  christos   print_spaces (std::max<int> (1, value_column_1 - strlen (name)), file);
   1148      1.1  christos 
   1149  1.1.1.2  christos   try
   1150      1.1  christos     {
   1151  1.1.1.4  christos       val = value_of_register (regnum, get_next_frame_sentinel_okay (frame));
   1152  1.1.1.4  christos       regtype = val->type ();
   1153      1.1  christos     }
   1154  1.1.1.2  christos   catch (const gdb_exception_error &ex)
   1155      1.1  christos     {
   1156      1.1  christos       /* Handle failure to read a register without interrupting the entire
   1157  1.1.1.3  christos 	 'info registers' flow.  */
   1158  1.1.1.3  christos       gdb_printf (file, "%s\n", ex.what ());
   1159      1.1  christos       return;
   1160      1.1  christos     }
   1161      1.1  christos 
   1162  1.1.1.4  christos   print_raw_format = (val->entirely_available ()
   1163  1.1.1.4  christos 		      && !val->optimized_out ());
   1164      1.1  christos 
   1165  1.1.1.2  christos   if (regtype->code () == TYPE_CODE_FLT
   1166  1.1.1.2  christos       || (regtype->code () == TYPE_CODE_UNION
   1167  1.1.1.2  christos 	  && regtype->num_fields () == 2
   1168  1.1.1.2  christos 	  && regtype->field (0).type ()->code () == TYPE_CODE_FLT
   1169  1.1.1.2  christos 	  && regtype->field (1).type ()->code () == TYPE_CODE_FLT)
   1170  1.1.1.2  christos       || (regtype->code () == TYPE_CODE_UNION
   1171  1.1.1.2  christos 	  && regtype->num_fields () == 3
   1172  1.1.1.2  christos 	  && regtype->field (0).type ()->code () == TYPE_CODE_FLT
   1173  1.1.1.2  christos 	  && regtype->field (1).type ()->code () == TYPE_CODE_FLT
   1174  1.1.1.2  christos 	  && regtype->field (2).type ()->code () == TYPE_CODE_FLT))
   1175      1.1  christos     {
   1176      1.1  christos       struct value_print_options opts;
   1177  1.1.1.4  christos       const gdb_byte *valaddr = val->contents_for_printing ().data ();
   1178  1.1.1.2  christos       enum bfd_endian byte_order = type_byte_order (regtype);
   1179      1.1  christos 
   1180      1.1  christos       get_user_print_options (&opts);
   1181  1.1.1.4  christos       opts.deref_ref = true;
   1182      1.1  christos 
   1183  1.1.1.2  christos       common_val_print (val, file, 0, &opts, current_language);
   1184      1.1  christos 
   1185      1.1  christos       if (print_raw_format)
   1186      1.1  christos 	{
   1187  1.1.1.3  christos 	  gdb_printf (file, "\t(raw ");
   1188  1.1.1.3  christos 	  print_hex_chars (file, valaddr, regtype->length (), byte_order,
   1189      1.1  christos 			   true);
   1190  1.1.1.3  christos 	  gdb_printf (file, ")");
   1191      1.1  christos 	}
   1192      1.1  christos     }
   1193      1.1  christos   else
   1194      1.1  christos     {
   1195      1.1  christos       struct value_print_options opts;
   1196  1.1.1.3  christos       riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1197      1.1  christos 
   1198      1.1  christos       /* Print the register in hex.  */
   1199      1.1  christos       get_formatted_print_options (&opts, 'x');
   1200  1.1.1.4  christos       opts.deref_ref = true;
   1201  1.1.1.2  christos       common_val_print (val, file, 0, &opts, current_language);
   1202      1.1  christos 
   1203      1.1  christos       if (print_raw_format)
   1204      1.1  christos 	{
   1205      1.1  christos 	  if (regnum == RISCV_CSR_MSTATUS_REGNUM)
   1206      1.1  christos 	    {
   1207      1.1  christos 	      LONGEST d;
   1208      1.1  christos 	      int size = register_size (gdbarch, regnum);
   1209      1.1  christos 	      unsigned xlen;
   1210      1.1  christos 
   1211      1.1  christos 	      /* The SD field is always in the upper bit of MSTATUS, regardless
   1212      1.1  christos 		 of the number of bits in MSTATUS.  */
   1213      1.1  christos 	      d = value_as_long (val);
   1214      1.1  christos 	      xlen = size * 8;
   1215  1.1.1.3  christos 	      gdb_printf (file,
   1216  1.1.1.3  christos 			  "\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
   1217  1.1.1.3  christos 			  "FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
   1218  1.1.1.3  christos 			  "SPIE:%X UPIE:%X MIE:%X HIE:%X SIE:%X UIE:%X",
   1219  1.1.1.3  christos 			  (int) ((d >> (xlen - 1)) & 0x1),
   1220  1.1.1.3  christos 			  (int) ((d >> 24) & 0x1f),
   1221  1.1.1.3  christos 			  (int) ((d >> 19) & 0x1),
   1222  1.1.1.3  christos 			  (int) ((d >> 18) & 0x1),
   1223  1.1.1.3  christos 			  (int) ((d >> 17) & 0x1),
   1224  1.1.1.3  christos 			  (int) ((d >> 15) & 0x3),
   1225  1.1.1.3  christos 			  (int) ((d >> 13) & 0x3),
   1226  1.1.1.3  christos 			  (int) ((d >> 11) & 0x3),
   1227  1.1.1.3  christos 			  (int) ((d >> 9) & 0x3),
   1228  1.1.1.3  christos 			  (int) ((d >> 8) & 0x1),
   1229  1.1.1.3  christos 			  (int) ((d >> 7) & 0x1),
   1230  1.1.1.3  christos 			  (int) ((d >> 6) & 0x1),
   1231  1.1.1.3  christos 			  (int) ((d >> 5) & 0x1),
   1232  1.1.1.3  christos 			  (int) ((d >> 4) & 0x1),
   1233  1.1.1.3  christos 			  (int) ((d >> 3) & 0x1),
   1234  1.1.1.3  christos 			  (int) ((d >> 2) & 0x1),
   1235  1.1.1.3  christos 			  (int) ((d >> 1) & 0x1),
   1236  1.1.1.3  christos 			  (int) ((d >> 0) & 0x1));
   1237      1.1  christos 	    }
   1238      1.1  christos 	  else if (regnum == RISCV_CSR_MISA_REGNUM)
   1239      1.1  christos 	    {
   1240      1.1  christos 	      int base;
   1241      1.1  christos 	      unsigned xlen, i;
   1242      1.1  christos 	      LONGEST d;
   1243      1.1  christos 	      int size = register_size (gdbarch, regnum);
   1244      1.1  christos 
   1245      1.1  christos 	      /* The MXL field is always in the upper two bits of MISA,
   1246      1.1  christos 		 regardless of the number of bits in MISA.  Mask out other
   1247      1.1  christos 		 bits to ensure we have a positive value.  */
   1248      1.1  christos 	      d = value_as_long (val);
   1249      1.1  christos 	      base = (d >> ((size * 8) - 2)) & 0x3;
   1250      1.1  christos 	      xlen = 16;
   1251      1.1  christos 
   1252      1.1  christos 	      for (; base > 0; base--)
   1253      1.1  christos 		xlen *= 2;
   1254  1.1.1.3  christos 	      gdb_printf (file, "\tRV%d", xlen);
   1255      1.1  christos 
   1256      1.1  christos 	      for (i = 0; i < 26; i++)
   1257      1.1  christos 		{
   1258      1.1  christos 		  if (d & (1 << i))
   1259  1.1.1.3  christos 		    gdb_printf (file, "%c", 'A' + i);
   1260      1.1  christos 		}
   1261      1.1  christos 	    }
   1262      1.1  christos 	  else if (regnum == RISCV_CSR_FCSR_REGNUM
   1263  1.1.1.3  christos 		   || regnum == tdep->fflags_regnum
   1264  1.1.1.3  christos 		   || regnum == tdep->frm_regnum)
   1265      1.1  christos 	    {
   1266  1.1.1.3  christos 	      LONGEST d = value_as_long (val);
   1267      1.1  christos 
   1268  1.1.1.3  christos 	      gdb_printf (file, "\t");
   1269  1.1.1.3  christos 	      if (regnum != tdep->frm_regnum)
   1270  1.1.1.3  christos 		gdb_printf (file,
   1271  1.1.1.3  christos 			    "NV:%d DZ:%d OF:%d UF:%d NX:%d",
   1272  1.1.1.3  christos 			    (int) ((d >> 4) & 0x1),
   1273  1.1.1.3  christos 			    (int) ((d >> 3) & 0x1),
   1274  1.1.1.3  christos 			    (int) ((d >> 2) & 0x1),
   1275  1.1.1.3  christos 			    (int) ((d >> 1) & 0x1),
   1276  1.1.1.3  christos 			    (int) ((d >> 0) & 0x1));
   1277      1.1  christos 
   1278  1.1.1.3  christos 	      if (regnum != tdep->fflags_regnum)
   1279      1.1  christos 		{
   1280      1.1  christos 		  static const char * const sfrm[] =
   1281      1.1  christos 		    {
   1282  1.1.1.3  christos 		      _("RNE (round to nearest; ties to even)"),
   1283  1.1.1.3  christos 		      _("RTZ (Round towards zero)"),
   1284  1.1.1.3  christos 		      _("RDN (Round down towards -INF)"),
   1285  1.1.1.3  christos 		      _("RUP (Round up towards +INF)"),
   1286  1.1.1.3  christos 		      _("RMM (Round to nearest; ties to max magnitude)"),
   1287  1.1.1.3  christos 		      _("INVALID[5]"),
   1288  1.1.1.3  christos 		      _("INVALID[6]"),
   1289  1.1.1.3  christos 		      /* A value of 0x7 indicates dynamic rounding mode when
   1290  1.1.1.3  christos 			 used within an instructions rounding-mode field, but
   1291  1.1.1.3  christos 			 is invalid within the FRM register.  */
   1292  1.1.1.3  christos 		      _("INVALID[7] (Dynamic rounding mode)"),
   1293      1.1  christos 		    };
   1294      1.1  christos 		  int frm = ((regnum == RISCV_CSR_FCSR_REGNUM)
   1295  1.1.1.3  christos 			     ? (d >> 5) : d) & 0x7;
   1296      1.1  christos 
   1297  1.1.1.3  christos 		  gdb_printf (file, "%sFRM:%i [%s]",
   1298  1.1.1.3  christos 			      (regnum == RISCV_CSR_FCSR_REGNUM
   1299  1.1.1.3  christos 			       ? " " : ""),
   1300  1.1.1.3  christos 			      frm, sfrm[frm]);
   1301      1.1  christos 		}
   1302      1.1  christos 	    }
   1303      1.1  christos 	  else if (regnum == RISCV_PRIV_REGNUM)
   1304      1.1  christos 	    {
   1305      1.1  christos 	      LONGEST d;
   1306      1.1  christos 	      uint8_t priv;
   1307      1.1  christos 
   1308      1.1  christos 	      d = value_as_long (val);
   1309      1.1  christos 	      priv = d & 0xff;
   1310      1.1  christos 
   1311      1.1  christos 	      if (priv < 4)
   1312      1.1  christos 		{
   1313      1.1  christos 		  static const char * const sprv[] =
   1314      1.1  christos 		    {
   1315      1.1  christos 		      "User/Application",
   1316      1.1  christos 		      "Supervisor",
   1317      1.1  christos 		      "Hypervisor",
   1318      1.1  christos 		      "Machine"
   1319      1.1  christos 		    };
   1320  1.1.1.3  christos 		  gdb_printf (file, "\tprv:%d [%s]",
   1321  1.1.1.3  christos 			      priv, sprv[priv]);
   1322      1.1  christos 		}
   1323      1.1  christos 	      else
   1324  1.1.1.3  christos 		gdb_printf (file, "\tprv:%d [INVALID]", priv);
   1325      1.1  christos 	    }
   1326      1.1  christos 	  else
   1327      1.1  christos 	    {
   1328      1.1  christos 	      /* If not a vector register, print it also according to its
   1329      1.1  christos 		 natural format.  */
   1330  1.1.1.3  christos 	      if (regtype->is_vector () == 0)
   1331      1.1  christos 		{
   1332      1.1  christos 		  get_user_print_options (&opts);
   1333  1.1.1.4  christos 		  opts.deref_ref = true;
   1334  1.1.1.3  christos 		  gdb_printf (file, "\t");
   1335  1.1.1.2  christos 		  common_val_print (val, file, 0, &opts, current_language);
   1336      1.1  christos 		}
   1337      1.1  christos 	    }
   1338      1.1  christos 	}
   1339      1.1  christos     }
   1340  1.1.1.3  christos   gdb_printf (file, "\n");
   1341      1.1  christos }
   1342      1.1  christos 
   1343      1.1  christos /* Return true if REGNUM is a valid CSR register.  The CSR register space
   1344      1.1  christos    is sparsely populated, so not every number is a named CSR.  */
   1345      1.1  christos 
   1346      1.1  christos static bool
   1347      1.1  christos riscv_is_regnum_a_named_csr (int regnum)
   1348      1.1  christos {
   1349      1.1  christos   gdb_assert (regnum >= RISCV_FIRST_CSR_REGNUM
   1350      1.1  christos 	      && regnum <= RISCV_LAST_CSR_REGNUM);
   1351      1.1  christos 
   1352      1.1  christos   switch (regnum)
   1353      1.1  christos     {
   1354  1.1.1.2  christos #define DECLARE_CSR(name, num, class, define_ver, abort_ver) case RISCV_ ## num ## _REGNUM:
   1355      1.1  christos #include "opcode/riscv-opc.h"
   1356      1.1  christos #undef DECLARE_CSR
   1357      1.1  christos       return true;
   1358      1.1  christos 
   1359      1.1  christos     default:
   1360      1.1  christos       return false;
   1361      1.1  christos     }
   1362      1.1  christos }
   1363      1.1  christos 
   1364  1.1.1.3  christos /* Return true if REGNUM is an unknown CSR identified in
   1365  1.1.1.3  christos    riscv_tdesc_unknown_reg for GDBARCH.  */
   1366  1.1.1.3  christos 
   1367  1.1.1.3  christos static bool
   1368  1.1.1.3  christos riscv_is_unknown_csr (struct gdbarch *gdbarch, int regnum)
   1369  1.1.1.3  christos {
   1370  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1371  1.1.1.3  christos   return (regnum >= tdep->unknown_csrs_first_regnum
   1372  1.1.1.3  christos 	  && regnum < (tdep->unknown_csrs_first_regnum
   1373  1.1.1.3  christos 		       + tdep->unknown_csrs_count));
   1374  1.1.1.3  christos }
   1375  1.1.1.3  christos 
   1376      1.1  christos /* Implement the register_reggroup_p gdbarch method.  Is REGNUM a member
   1377      1.1  christos    of REGGROUP?  */
   1378      1.1  christos 
   1379      1.1  christos static int
   1380      1.1  christos riscv_register_reggroup_p (struct gdbarch  *gdbarch, int regnum,
   1381  1.1.1.3  christos 			   const struct reggroup *reggroup)
   1382      1.1  christos {
   1383  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1384  1.1.1.3  christos 
   1385      1.1  christos   /* Used by 'info registers' and 'info registers <groupname>'.  */
   1386      1.1  christos 
   1387  1.1.1.3  christos   if (gdbarch_register_name (gdbarch, regnum)[0] == '\0')
   1388      1.1  christos     return 0;
   1389      1.1  christos 
   1390  1.1.1.3  christos   if (regnum > RISCV_LAST_REGNUM && regnum < gdbarch_num_regs (gdbarch))
   1391      1.1  christos     {
   1392  1.1.1.2  christos       /* Any extra registers from the CSR tdesc_feature (identified in
   1393  1.1.1.2  christos 	 riscv_tdesc_unknown_reg) are removed from the save/restore groups
   1394  1.1.1.3  christos 	 as some targets (QEMU) report CSRs which then can't be read and
   1395  1.1.1.3  christos 	 having unreadable registers in the save/restore group breaks
   1396  1.1.1.3  christos 	 things like inferior calls.
   1397  1.1.1.3  christos 
   1398  1.1.1.3  christos 	 The unknown CSRs are also removed from the general group, and
   1399  1.1.1.3  christos 	 added into both the csr and system group.  This is inline with the
   1400  1.1.1.3  christos 	 known CSRs (see below).  */
   1401  1.1.1.3  christos       if (riscv_is_unknown_csr (gdbarch, regnum))
   1402  1.1.1.3  christos 	{
   1403  1.1.1.3  christos 	  if (reggroup == restore_reggroup || reggroup == save_reggroup
   1404  1.1.1.3  christos 	       || reggroup == general_reggroup)
   1405  1.1.1.3  christos 	    return 0;
   1406  1.1.1.3  christos 	  else if (reggroup == system_reggroup || reggroup == csr_reggroup)
   1407  1.1.1.3  christos 	    return 1;
   1408  1.1.1.3  christos 	}
   1409  1.1.1.2  christos 
   1410  1.1.1.2  christos       /* This is some other unknown register from the target description.
   1411  1.1.1.2  christos 	 In this case we trust whatever the target description says about
   1412  1.1.1.2  christos 	 which groups this register should be in.  */
   1413      1.1  christos       int ret = tdesc_register_in_reggroup_p (gdbarch, regnum, reggroup);
   1414      1.1  christos       if (ret != -1)
   1415  1.1.1.3  christos 	return ret;
   1416      1.1  christos 
   1417      1.1  christos       return default_register_reggroup_p (gdbarch, regnum, reggroup);
   1418      1.1  christos     }
   1419      1.1  christos 
   1420      1.1  christos   if (reggroup == all_reggroup)
   1421      1.1  christos     {
   1422  1.1.1.3  christos       if (regnum < RISCV_FIRST_CSR_REGNUM || regnum >= RISCV_PRIV_REGNUM)
   1423      1.1  christos 	return 1;
   1424      1.1  christos       if (riscv_is_regnum_a_named_csr (regnum))
   1425  1.1.1.3  christos 	return 1;
   1426      1.1  christos       return 0;
   1427      1.1  christos     }
   1428      1.1  christos   else if (reggroup == float_reggroup)
   1429      1.1  christos     return (riscv_is_fp_regno_p (regnum)
   1430      1.1  christos 	    || regnum == RISCV_CSR_FCSR_REGNUM
   1431  1.1.1.3  christos 	    || regnum == tdep->fflags_regnum
   1432  1.1.1.3  christos 	    || regnum == tdep->frm_regnum);
   1433      1.1  christos   else if (reggroup == general_reggroup)
   1434      1.1  christos     return regnum < RISCV_FIRST_FP_REGNUM;
   1435      1.1  christos   else if (reggroup == restore_reggroup || reggroup == save_reggroup)
   1436      1.1  christos     {
   1437      1.1  christos       if (riscv_has_fp_regs (gdbarch))
   1438      1.1  christos 	return (regnum <= RISCV_LAST_FP_REGNUM
   1439      1.1  christos 		|| regnum == RISCV_CSR_FCSR_REGNUM
   1440  1.1.1.3  christos 		|| regnum == tdep->fflags_regnum
   1441  1.1.1.3  christos 		|| regnum == tdep->frm_regnum);
   1442      1.1  christos       else
   1443      1.1  christos 	return regnum < RISCV_FIRST_FP_REGNUM;
   1444      1.1  christos     }
   1445      1.1  christos   else if (reggroup == system_reggroup || reggroup == csr_reggroup)
   1446      1.1  christos     {
   1447      1.1  christos       if (regnum == RISCV_PRIV_REGNUM)
   1448      1.1  christos 	return 1;
   1449      1.1  christos       if (regnum < RISCV_FIRST_CSR_REGNUM || regnum > RISCV_LAST_CSR_REGNUM)
   1450      1.1  christos 	return 0;
   1451      1.1  christos       if (riscv_is_regnum_a_named_csr (regnum))
   1452  1.1.1.3  christos 	return 1;
   1453      1.1  christos       return 0;
   1454      1.1  christos     }
   1455      1.1  christos   else if (reggroup == vector_reggroup)
   1456  1.1.1.3  christos     return (regnum >= RISCV_V0_REGNUM && regnum <= RISCV_V31_REGNUM);
   1457      1.1  christos   else
   1458      1.1  christos     return 0;
   1459      1.1  christos }
   1460      1.1  christos 
   1461  1.1.1.3  christos /* Return the name for pseudo-register REGNUM for GDBARCH.  */
   1462  1.1.1.3  christos 
   1463  1.1.1.3  christos static const char *
   1464  1.1.1.3  christos riscv_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
   1465  1.1.1.3  christos {
   1466  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1467  1.1.1.3  christos 
   1468  1.1.1.3  christos   if (regnum == tdep->fflags_regnum)
   1469  1.1.1.3  christos     return "fflags";
   1470  1.1.1.3  christos   else if (regnum == tdep->frm_regnum)
   1471  1.1.1.3  christos     return "frm";
   1472  1.1.1.3  christos   else
   1473  1.1.1.3  christos     gdb_assert_not_reached ("unknown pseudo register number %d", regnum);
   1474  1.1.1.3  christos }
   1475  1.1.1.3  christos 
   1476  1.1.1.3  christos /* Return the type for pseudo-register REGNUM for GDBARCH.  */
   1477  1.1.1.3  christos 
   1478  1.1.1.3  christos static struct type *
   1479  1.1.1.3  christos riscv_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
   1480  1.1.1.3  christos {
   1481  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   1482  1.1.1.3  christos 
   1483  1.1.1.3  christos   if (regnum == tdep->fflags_regnum || regnum == tdep->frm_regnum)
   1484  1.1.1.3  christos    return builtin_type (gdbarch)->builtin_int32;
   1485  1.1.1.3  christos   else
   1486  1.1.1.3  christos     gdb_assert_not_reached ("unknown pseudo register number %d", regnum);
   1487  1.1.1.3  christos }
   1488  1.1.1.3  christos 
   1489  1.1.1.3  christos /* Return true (non-zero) if pseudo-register REGNUM from GDBARCH is a
   1490  1.1.1.3  christos    member of REGGROUP, otherwise return false (zero).  */
   1491  1.1.1.3  christos 
   1492  1.1.1.3  christos static int
   1493  1.1.1.3  christos riscv_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
   1494  1.1.1.3  christos 				  const struct reggroup *reggroup)
   1495  1.1.1.3  christos {
   1496  1.1.1.3  christos   /* The standard function will also work for pseudo-registers.  */
   1497  1.1.1.3  christos   return riscv_register_reggroup_p (gdbarch, regnum, reggroup);
   1498  1.1.1.3  christos }
   1499  1.1.1.3  christos 
   1500      1.1  christos /* Implement the print_registers_info gdbarch method.  This is used by
   1501      1.1  christos    'info registers' and 'info all-registers'.  */
   1502      1.1  christos 
   1503      1.1  christos static void
   1504      1.1  christos riscv_print_registers_info (struct gdbarch *gdbarch,
   1505      1.1  christos 			    struct ui_file *file,
   1506  1.1.1.4  christos 			    const frame_info_ptr &frame,
   1507      1.1  christos 			    int regnum, int print_all)
   1508      1.1  christos {
   1509      1.1  christos   if (regnum != -1)
   1510      1.1  christos     {
   1511      1.1  christos       /* Print one specified register.  */
   1512  1.1.1.3  christos       if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
   1513  1.1.1.3  christos 	error (_("Not a valid register for the current processor type"));
   1514      1.1  christos       riscv_print_one_register_info (gdbarch, file, frame, regnum);
   1515      1.1  christos     }
   1516      1.1  christos   else
   1517      1.1  christos     {
   1518  1.1.1.3  christos       const struct reggroup *reggroup;
   1519      1.1  christos 
   1520      1.1  christos       if (print_all)
   1521      1.1  christos 	reggroup = all_reggroup;
   1522      1.1  christos       else
   1523      1.1  christos 	reggroup = general_reggroup;
   1524      1.1  christos 
   1525  1.1.1.2  christos       for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); ++regnum)
   1526      1.1  christos 	{
   1527      1.1  christos 	  /* Zero never changes, so might as well hide by default.  */
   1528      1.1  christos 	  if (regnum == RISCV_ZERO_REGNUM && !print_all)
   1529      1.1  christos 	    continue;
   1530      1.1  christos 
   1531      1.1  christos 	  /* Registers with no name are not valid on this ISA.  */
   1532  1.1.1.3  christos 	  if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
   1533      1.1  christos 	    continue;
   1534      1.1  christos 
   1535      1.1  christos 	  /* Is the register in the group we're interested in?  */
   1536      1.1  christos 	  if (!gdbarch_register_reggroup_p (gdbarch, regnum, reggroup))
   1537      1.1  christos 	    continue;
   1538      1.1  christos 
   1539      1.1  christos 	  riscv_print_one_register_info (gdbarch, file, frame, regnum);
   1540      1.1  christos 	}
   1541      1.1  christos     }
   1542      1.1  christos }
   1543      1.1  christos 
   1544      1.1  christos /* Class that handles one decoded RiscV instruction.  */
   1545      1.1  christos 
   1546      1.1  christos class riscv_insn
   1547      1.1  christos {
   1548      1.1  christos public:
   1549      1.1  christos 
   1550      1.1  christos   /* Enum of all the opcodes that GDB cares about during the prologue scan.  */
   1551      1.1  christos   enum opcode
   1552      1.1  christos     {
   1553      1.1  christos       /* Unknown value is used at initialisation time.  */
   1554      1.1  christos       UNKNOWN = 0,
   1555      1.1  christos 
   1556      1.1  christos       /* These instructions are all the ones we are interested in during the
   1557      1.1  christos 	 prologue scan.  */
   1558      1.1  christos       ADD,
   1559      1.1  christos       ADDI,
   1560      1.1  christos       ADDIW,
   1561      1.1  christos       ADDW,
   1562      1.1  christos       AUIPC,
   1563      1.1  christos       LUI,
   1564  1.1.1.4  christos       LI,
   1565      1.1  christos       SD,
   1566      1.1  christos       SW,
   1567  1.1.1.3  christos       LD,
   1568  1.1.1.3  christos       LW,
   1569  1.1.1.3  christos       MV,
   1570  1.1.1.2  christos       /* These are needed for software breakpoint support.  */
   1571      1.1  christos       JAL,
   1572      1.1  christos       JALR,
   1573      1.1  christos       BEQ,
   1574      1.1  christos       BNE,
   1575      1.1  christos       BLT,
   1576      1.1  christos       BGE,
   1577      1.1  christos       BLTU,
   1578      1.1  christos       BGEU,
   1579      1.1  christos       /* These are needed for stepping over atomic sequences.  */
   1580  1.1.1.4  christos       SLTI,
   1581  1.1.1.4  christos       SLTIU,
   1582  1.1.1.4  christos       XORI,
   1583  1.1.1.4  christos       ORI,
   1584  1.1.1.4  christos       ANDI,
   1585  1.1.1.4  christos       SLLI,
   1586  1.1.1.4  christos       SLLIW,
   1587  1.1.1.4  christos       SRLI,
   1588  1.1.1.4  christos       SRLIW,
   1589  1.1.1.4  christos       SRAI,
   1590  1.1.1.4  christos       SRAIW,
   1591  1.1.1.4  christos       SUB,
   1592  1.1.1.4  christos       SUBW,
   1593  1.1.1.4  christos       SLL,
   1594  1.1.1.4  christos       SLLW,
   1595  1.1.1.4  christos       SLT,
   1596  1.1.1.4  christos       SLTU,
   1597  1.1.1.4  christos       XOR,
   1598  1.1.1.4  christos       SRL,
   1599  1.1.1.4  christos       SRLW,
   1600  1.1.1.4  christos       SRA,
   1601  1.1.1.4  christos       SRAW,
   1602  1.1.1.4  christos       OR,
   1603  1.1.1.4  christos       AND,
   1604  1.1.1.4  christos       LR_W,
   1605  1.1.1.4  christos       LR_D,
   1606  1.1.1.4  christos       SC_W,
   1607  1.1.1.4  christos       SC_D,
   1608  1.1.1.3  christos       /* This instruction is used to do a syscall.  */
   1609  1.1.1.3  christos       ECALL,
   1610      1.1  christos 
   1611      1.1  christos       /* Other instructions are not interesting during the prologue scan, and
   1612      1.1  christos 	 are ignored.  */
   1613      1.1  christos       OTHER
   1614      1.1  christos     };
   1615      1.1  christos 
   1616      1.1  christos   riscv_insn ()
   1617      1.1  christos     : m_length (0),
   1618      1.1  christos       m_opcode (OTHER),
   1619      1.1  christos       m_rd (0),
   1620      1.1  christos       m_rs1 (0),
   1621      1.1  christos       m_rs2 (0)
   1622      1.1  christos   {
   1623      1.1  christos     /* Nothing.  */
   1624      1.1  christos   }
   1625      1.1  christos 
   1626      1.1  christos   void decode (struct gdbarch *gdbarch, CORE_ADDR pc);
   1627      1.1  christos 
   1628      1.1  christos   /* Get the length of the instruction in bytes.  */
   1629      1.1  christos   int length () const
   1630      1.1  christos   { return m_length; }
   1631      1.1  christos 
   1632      1.1  christos   /* Get the opcode for this instruction.  */
   1633      1.1  christos   enum opcode opcode () const
   1634      1.1  christos   { return m_opcode; }
   1635      1.1  christos 
   1636      1.1  christos   /* Get destination register field for this instruction.  This is only
   1637      1.1  christos      valid if the OPCODE implies there is such a field for this
   1638      1.1  christos      instruction.  */
   1639      1.1  christos   int rd () const
   1640      1.1  christos   { return m_rd; }
   1641      1.1  christos 
   1642      1.1  christos   /* Get the RS1 register field for this instruction.  This is only valid
   1643      1.1  christos      if the OPCODE implies there is such a field for this instruction.  */
   1644      1.1  christos   int rs1 () const
   1645      1.1  christos   { return m_rs1; }
   1646      1.1  christos 
   1647      1.1  christos   /* Get the RS2 register field for this instruction.  This is only valid
   1648      1.1  christos      if the OPCODE implies there is such a field for this instruction.  */
   1649      1.1  christos   int rs2 () const
   1650      1.1  christos   { return m_rs2; }
   1651      1.1  christos 
   1652      1.1  christos   /* Get the immediate for this instruction in signed form.  This is only
   1653      1.1  christos      valid if the OPCODE implies there is such a field for this
   1654      1.1  christos      instruction.  */
   1655      1.1  christos   int imm_signed () const
   1656      1.1  christos   { return m_imm.s; }
   1657      1.1  christos 
   1658      1.1  christos private:
   1659      1.1  christos 
   1660      1.1  christos   /* Extract 5 bit register field at OFFSET from instruction OPCODE.  */
   1661      1.1  christos   int decode_register_index (unsigned long opcode, int offset)
   1662      1.1  christos   {
   1663      1.1  christos     return (opcode >> offset) & 0x1F;
   1664      1.1  christos   }
   1665      1.1  christos 
   1666      1.1  christos   /* Extract 5 bit register field at OFFSET from instruction OPCODE.  */
   1667      1.1  christos   int decode_register_index_short (unsigned long opcode, int offset)
   1668      1.1  christos   {
   1669      1.1  christos     return ((opcode >> offset) & 0x7) + 8;
   1670      1.1  christos   }
   1671      1.1  christos 
   1672      1.1  christos   /* Helper for DECODE, decode 32-bit R-type instruction.  */
   1673      1.1  christos   void decode_r_type_insn (enum opcode opcode, ULONGEST ival)
   1674      1.1  christos   {
   1675      1.1  christos     m_opcode = opcode;
   1676      1.1  christos     m_rd = decode_register_index (ival, OP_SH_RD);
   1677      1.1  christos     m_rs1 = decode_register_index (ival, OP_SH_RS1);
   1678      1.1  christos     m_rs2 = decode_register_index (ival, OP_SH_RS2);
   1679      1.1  christos   }
   1680      1.1  christos 
   1681      1.1  christos   /* Helper for DECODE, decode 16-bit compressed R-type instruction.  */
   1682      1.1  christos   void decode_cr_type_insn (enum opcode opcode, ULONGEST ival)
   1683      1.1  christos   {
   1684      1.1  christos     m_opcode = opcode;
   1685      1.1  christos     m_rd = m_rs1 = decode_register_index (ival, OP_SH_CRS1S);
   1686      1.1  christos     m_rs2 = decode_register_index (ival, OP_SH_CRS2);
   1687      1.1  christos   }
   1688      1.1  christos 
   1689      1.1  christos   /* Helper for DECODE, decode 32-bit I-type instruction.  */
   1690      1.1  christos   void decode_i_type_insn (enum opcode opcode, ULONGEST ival)
   1691      1.1  christos   {
   1692      1.1  christos     m_opcode = opcode;
   1693      1.1  christos     m_rd = decode_register_index (ival, OP_SH_RD);
   1694      1.1  christos     m_rs1 = decode_register_index (ival, OP_SH_RS1);
   1695      1.1  christos     m_imm.s = EXTRACT_ITYPE_IMM (ival);
   1696      1.1  christos   }
   1697      1.1  christos 
   1698  1.1.1.4  christos   /* Helper for DECODE, decode 16-bit compressed I-type instruction.  Some
   1699  1.1.1.4  christos      of the CI instruction have a hard-coded rs1 register, while others
   1700  1.1.1.4  christos      just use rd for both the source and destination.  RS1_REGNUM, if
   1701  1.1.1.4  christos      passed, is the value to place in rs1, otherwise rd is duplicated into
   1702  1.1.1.4  christos      rs1.  */
   1703  1.1.1.4  christos   void decode_ci_type_insn (enum opcode opcode, ULONGEST ival,
   1704  1.1.1.4  christos 			    std::optional<int> rs1_regnum = {})
   1705      1.1  christos   {
   1706      1.1  christos     m_opcode = opcode;
   1707  1.1.1.4  christos     m_rd = decode_register_index (ival, OP_SH_CRS1S);
   1708  1.1.1.4  christos     if (rs1_regnum.has_value ())
   1709  1.1.1.4  christos       m_rs1 = *rs1_regnum;
   1710  1.1.1.4  christos     else
   1711  1.1.1.4  christos       m_rs1 = m_rd;
   1712  1.1.1.3  christos     m_imm.s = EXTRACT_CITYPE_IMM (ival);
   1713  1.1.1.3  christos   }
   1714  1.1.1.3  christos 
   1715  1.1.1.3  christos   /* Helper for DECODE, decode 16-bit compressed CL-type instruction.  */
   1716  1.1.1.3  christos   void decode_cl_type_insn (enum opcode opcode, ULONGEST ival)
   1717  1.1.1.3  christos   {
   1718  1.1.1.3  christos     m_opcode = opcode;
   1719  1.1.1.3  christos     m_rd = decode_register_index_short (ival, OP_SH_CRS2S);
   1720  1.1.1.3  christos     m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
   1721  1.1.1.3  christos     m_imm.s = EXTRACT_CLTYPE_IMM (ival);
   1722      1.1  christos   }
   1723      1.1  christos 
   1724      1.1  christos   /* Helper for DECODE, decode 32-bit S-type instruction.  */
   1725      1.1  christos   void decode_s_type_insn (enum opcode opcode, ULONGEST ival)
   1726      1.1  christos   {
   1727      1.1  christos     m_opcode = opcode;
   1728      1.1  christos     m_rs1 = decode_register_index (ival, OP_SH_RS1);
   1729      1.1  christos     m_rs2 = decode_register_index (ival, OP_SH_RS2);
   1730      1.1  christos     m_imm.s = EXTRACT_STYPE_IMM (ival);
   1731      1.1  christos   }
   1732      1.1  christos 
   1733      1.1  christos   /* Helper for DECODE, decode 16-bit CS-type instruction.  The immediate
   1734      1.1  christos      encoding is different for each CS format instruction, so extracting
   1735      1.1  christos      the immediate is left up to the caller, who should pass the extracted
   1736      1.1  christos      immediate value through in IMM.  */
   1737      1.1  christos   void decode_cs_type_insn (enum opcode opcode, ULONGEST ival, int imm)
   1738      1.1  christos   {
   1739      1.1  christos     m_opcode = opcode;
   1740      1.1  christos     m_imm.s = imm;
   1741      1.1  christos     m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
   1742      1.1  christos     m_rs2 = decode_register_index_short (ival, OP_SH_CRS2S);
   1743      1.1  christos   }
   1744      1.1  christos 
   1745      1.1  christos   /* Helper for DECODE, decode 16-bit CSS-type instruction.  The immediate
   1746      1.1  christos      encoding is different for each CSS format instruction, so extracting
   1747      1.1  christos      the immediate is left up to the caller, who should pass the extracted
   1748      1.1  christos      immediate value through in IMM.  */
   1749      1.1  christos   void decode_css_type_insn (enum opcode opcode, ULONGEST ival, int imm)
   1750      1.1  christos   {
   1751      1.1  christos     m_opcode = opcode;
   1752      1.1  christos     m_imm.s = imm;
   1753      1.1  christos     m_rs1 = RISCV_SP_REGNUM;
   1754      1.1  christos     /* Not a compressed register number in this case.  */
   1755      1.1  christos     m_rs2 = decode_register_index (ival, OP_SH_CRS2);
   1756      1.1  christos   }
   1757      1.1  christos 
   1758      1.1  christos   /* Helper for DECODE, decode 32-bit U-type instruction.  */
   1759      1.1  christos   void decode_u_type_insn (enum opcode opcode, ULONGEST ival)
   1760      1.1  christos   {
   1761      1.1  christos     m_opcode = opcode;
   1762      1.1  christos     m_rd = decode_register_index (ival, OP_SH_RD);
   1763      1.1  christos     m_imm.s = EXTRACT_UTYPE_IMM (ival);
   1764      1.1  christos   }
   1765      1.1  christos 
   1766      1.1  christos   /* Helper for DECODE, decode 32-bit J-type instruction.  */
   1767      1.1  christos   void decode_j_type_insn (enum opcode opcode, ULONGEST ival)
   1768      1.1  christos   {
   1769      1.1  christos     m_opcode = opcode;
   1770      1.1  christos     m_rd = decode_register_index (ival, OP_SH_RD);
   1771  1.1.1.3  christos     m_imm.s = EXTRACT_JTYPE_IMM (ival);
   1772      1.1  christos   }
   1773      1.1  christos 
   1774      1.1  christos   /* Helper for DECODE, decode 32-bit J-type instruction.  */
   1775      1.1  christos   void decode_cj_type_insn (enum opcode opcode, ULONGEST ival)
   1776      1.1  christos   {
   1777      1.1  christos     m_opcode = opcode;
   1778  1.1.1.3  christos     m_imm.s = EXTRACT_CJTYPE_IMM (ival);
   1779      1.1  christos   }
   1780      1.1  christos 
   1781      1.1  christos   void decode_b_type_insn (enum opcode opcode, ULONGEST ival)
   1782      1.1  christos   {
   1783      1.1  christos     m_opcode = opcode;
   1784      1.1  christos     m_rs1 = decode_register_index (ival, OP_SH_RS1);
   1785      1.1  christos     m_rs2 = decode_register_index (ival, OP_SH_RS2);
   1786  1.1.1.3  christos     m_imm.s = EXTRACT_BTYPE_IMM (ival);
   1787      1.1  christos   }
   1788      1.1  christos 
   1789      1.1  christos   void decode_cb_type_insn (enum opcode opcode, ULONGEST ival)
   1790      1.1  christos   {
   1791      1.1  christos     m_opcode = opcode;
   1792      1.1  christos     m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
   1793  1.1.1.3  christos     m_imm.s = EXTRACT_CBTYPE_IMM (ival);
   1794      1.1  christos   }
   1795      1.1  christos 
   1796  1.1.1.4  christos   void decode_ca_type_insn (enum opcode opcode, ULONGEST ival)
   1797  1.1.1.4  christos   {
   1798  1.1.1.4  christos     m_opcode = opcode;
   1799  1.1.1.4  christos     m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
   1800  1.1.1.4  christos     m_rs2 = decode_register_index_short (ival, OP_SH_CRS2S);
   1801  1.1.1.4  christos   }
   1802  1.1.1.4  christos 
   1803      1.1  christos   /* Fetch instruction from target memory at ADDR, return the content of
   1804      1.1  christos      the instruction, and update LEN with the instruction length.  */
   1805      1.1  christos   static ULONGEST fetch_instruction (struct gdbarch *gdbarch,
   1806      1.1  christos 				     CORE_ADDR addr, int *len);
   1807      1.1  christos 
   1808      1.1  christos   /* The length of the instruction in bytes.  Should be 2 or 4.  */
   1809      1.1  christos   int m_length;
   1810      1.1  christos 
   1811      1.1  christos   /* The instruction opcode.  */
   1812      1.1  christos   enum opcode m_opcode;
   1813      1.1  christos 
   1814      1.1  christos   /* The three possible registers an instruction might reference.  Not
   1815      1.1  christos      every instruction fills in all of these registers.  Which fields are
   1816      1.1  christos      valid depends on the opcode.  The naming of these fields matches the
   1817      1.1  christos      naming in the riscv isa manual.  */
   1818      1.1  christos   int m_rd;
   1819      1.1  christos   int m_rs1;
   1820      1.1  christos   int m_rs2;
   1821      1.1  christos 
   1822      1.1  christos   /* Possible instruction immediate.  This is only valid if the instruction
   1823      1.1  christos      format contains an immediate, not all instruction, whether this is
   1824      1.1  christos      valid depends on the opcode.  Despite only having one format for now
   1825      1.1  christos      the immediate is packed into a union, later instructions might require
   1826      1.1  christos      an unsigned formatted immediate, having the union in place now will
   1827      1.1  christos      reduce the need for code churn later.  */
   1828      1.1  christos   union riscv_insn_immediate
   1829      1.1  christos   {
   1830      1.1  christos     riscv_insn_immediate ()
   1831      1.1  christos       : s (0)
   1832      1.1  christos     {
   1833      1.1  christos       /* Nothing.  */
   1834      1.1  christos     }
   1835      1.1  christos 
   1836      1.1  christos     int s;
   1837      1.1  christos   } m_imm;
   1838      1.1  christos };
   1839      1.1  christos 
   1840      1.1  christos /* Fetch instruction from target memory at ADDR, return the content of the
   1841      1.1  christos    instruction, and update LEN with the instruction length.  */
   1842      1.1  christos 
   1843      1.1  christos ULONGEST
   1844      1.1  christos riscv_insn::fetch_instruction (struct gdbarch *gdbarch,
   1845      1.1  christos 			       CORE_ADDR addr, int *len)
   1846      1.1  christos {
   1847  1.1.1.3  christos   gdb_byte buf[RISCV_MAX_INSN_LEN];
   1848      1.1  christos   int instlen, status;
   1849      1.1  christos 
   1850      1.1  christos   /* All insns are at least 16 bits.  */
   1851      1.1  christos   status = target_read_memory (addr, buf, 2);
   1852      1.1  christos   if (status)
   1853      1.1  christos     memory_error (TARGET_XFER_E_IO, addr);
   1854      1.1  christos 
   1855      1.1  christos   /* If we need more, grab it now.  */
   1856      1.1  christos   instlen = riscv_insn_length (buf[0]);
   1857      1.1  christos   gdb_assert (instlen <= sizeof (buf));
   1858      1.1  christos   *len = instlen;
   1859      1.1  christos 
   1860      1.1  christos   if (instlen > 2)
   1861      1.1  christos     {
   1862      1.1  christos       status = target_read_memory (addr + 2, buf + 2, instlen - 2);
   1863      1.1  christos       if (status)
   1864      1.1  christos 	memory_error (TARGET_XFER_E_IO, addr + 2);
   1865      1.1  christos     }
   1866      1.1  christos 
   1867  1.1.1.4  christos   /* RISC-V Specification states instructions are always little endian */
   1868  1.1.1.4  christos   return extract_unsigned_integer (buf, instlen, BFD_ENDIAN_LITTLE);
   1869      1.1  christos }
   1870      1.1  christos 
   1871      1.1  christos /* Fetch from target memory an instruction at PC and decode it.  This can
   1872      1.1  christos    throw an error if the memory access fails, callers are responsible for
   1873      1.1  christos    handling this error if that is appropriate.  */
   1874      1.1  christos 
   1875      1.1  christos void
   1876      1.1  christos riscv_insn::decode (struct gdbarch *gdbarch, CORE_ADDR pc)
   1877      1.1  christos {
   1878      1.1  christos   ULONGEST ival;
   1879      1.1  christos 
   1880      1.1  christos   /* Fetch the instruction, and the instructions length.  */
   1881      1.1  christos   ival = fetch_instruction (gdbarch, pc, &m_length);
   1882      1.1  christos 
   1883      1.1  christos   if (m_length == 4)
   1884      1.1  christos     {
   1885      1.1  christos       if (is_add_insn (ival))
   1886      1.1  christos 	decode_r_type_insn (ADD, ival);
   1887      1.1  christos       else if (is_addw_insn (ival))
   1888      1.1  christos 	decode_r_type_insn (ADDW, ival);
   1889      1.1  christos       else if (is_addi_insn (ival))
   1890      1.1  christos 	decode_i_type_insn (ADDI, ival);
   1891      1.1  christos       else if (is_addiw_insn (ival))
   1892      1.1  christos 	decode_i_type_insn (ADDIW, ival);
   1893      1.1  christos       else if (is_auipc_insn (ival))
   1894      1.1  christos 	decode_u_type_insn (AUIPC, ival);
   1895      1.1  christos       else if (is_lui_insn (ival))
   1896      1.1  christos 	decode_u_type_insn (LUI, ival);
   1897      1.1  christos       else if (is_sd_insn (ival))
   1898      1.1  christos 	decode_s_type_insn (SD, ival);
   1899      1.1  christos       else if (is_sw_insn (ival))
   1900      1.1  christos 	decode_s_type_insn (SW, ival);
   1901      1.1  christos       else if (is_jal_insn (ival))
   1902      1.1  christos 	decode_j_type_insn (JAL, ival);
   1903      1.1  christos       else if (is_jalr_insn (ival))
   1904      1.1  christos 	decode_i_type_insn (JALR, ival);
   1905      1.1  christos       else if (is_beq_insn (ival))
   1906      1.1  christos 	decode_b_type_insn (BEQ, ival);
   1907      1.1  christos       else if (is_bne_insn (ival))
   1908      1.1  christos 	decode_b_type_insn (BNE, ival);
   1909      1.1  christos       else if (is_blt_insn (ival))
   1910      1.1  christos 	decode_b_type_insn (BLT, ival);
   1911      1.1  christos       else if (is_bge_insn (ival))
   1912      1.1  christos 	decode_b_type_insn (BGE, ival);
   1913      1.1  christos       else if (is_bltu_insn (ival))
   1914      1.1  christos 	decode_b_type_insn (BLTU, ival);
   1915      1.1  christos       else if (is_bgeu_insn (ival))
   1916      1.1  christos 	decode_b_type_insn (BGEU, ival);
   1917  1.1.1.4  christos       else if (is_slti_insn(ival))
   1918  1.1.1.4  christos 	decode_i_type_insn (SLTI, ival);
   1919  1.1.1.4  christos       else if (is_sltiu_insn(ival))
   1920  1.1.1.4  christos 	decode_i_type_insn (SLTIU, ival);
   1921  1.1.1.4  christos       else if (is_xori_insn(ival))
   1922  1.1.1.4  christos 	decode_i_type_insn (XORI, ival);
   1923  1.1.1.4  christos       else if (is_ori_insn(ival))
   1924  1.1.1.4  christos 	decode_i_type_insn (ORI, ival);
   1925  1.1.1.4  christos       else if (is_andi_insn(ival))
   1926  1.1.1.4  christos 	decode_i_type_insn (ANDI, ival);
   1927  1.1.1.4  christos       else if (is_slli_insn(ival))
   1928  1.1.1.4  christos 	decode_i_type_insn (SLLI, ival);
   1929  1.1.1.4  christos       else if (is_slliw_insn(ival))
   1930  1.1.1.4  christos 	decode_i_type_insn (SLLIW, ival);
   1931  1.1.1.4  christos       else if (is_srli_insn(ival))
   1932  1.1.1.4  christos 	decode_i_type_insn (SRLI, ival);
   1933  1.1.1.4  christos       else if (is_srliw_insn(ival))
   1934  1.1.1.4  christos 	decode_i_type_insn (SRLIW, ival);
   1935  1.1.1.4  christos       else if (is_srai_insn(ival))
   1936  1.1.1.4  christos 	decode_i_type_insn (SRAI, ival);
   1937  1.1.1.4  christos       else if (is_sraiw_insn(ival))
   1938  1.1.1.4  christos 	decode_i_type_insn (SRAIW, ival);
   1939  1.1.1.4  christos       else if (is_sub_insn(ival))
   1940  1.1.1.4  christos 	decode_r_type_insn (SUB, ival);
   1941  1.1.1.4  christos       else if (is_subw_insn(ival))
   1942  1.1.1.4  christos 	decode_r_type_insn (SUBW, ival);
   1943  1.1.1.4  christos       else if (is_sll_insn(ival))
   1944  1.1.1.4  christos 	decode_r_type_insn (SLL, ival);
   1945  1.1.1.4  christos       else if (is_sllw_insn(ival))
   1946  1.1.1.4  christos 	decode_r_type_insn (SLLW, ival);
   1947  1.1.1.4  christos       else if (is_slt_insn(ival))
   1948  1.1.1.4  christos 	decode_r_type_insn (SLT, ival);
   1949  1.1.1.4  christos       else if (is_sltu_insn(ival))
   1950  1.1.1.4  christos 	decode_r_type_insn (SLTU, ival);
   1951  1.1.1.4  christos       else if (is_xor_insn(ival))
   1952  1.1.1.4  christos 	decode_r_type_insn (XOR, ival);
   1953  1.1.1.4  christos       else if (is_srl_insn(ival))
   1954  1.1.1.4  christos 	decode_r_type_insn (SRL, ival);
   1955  1.1.1.4  christos       else if (is_srlw_insn(ival))
   1956  1.1.1.4  christos 	decode_r_type_insn (SRLW, ival);
   1957  1.1.1.4  christos       else if (is_sra_insn(ival))
   1958  1.1.1.4  christos 	decode_r_type_insn (SRA, ival);
   1959  1.1.1.4  christos       else if (is_sraw_insn(ival))
   1960  1.1.1.4  christos 	decode_r_type_insn (SRAW, ival);
   1961  1.1.1.4  christos       else if (is_or_insn(ival))
   1962  1.1.1.4  christos 	decode_r_type_insn (OR, ival);
   1963  1.1.1.4  christos       else if (is_and_insn(ival))
   1964  1.1.1.4  christos 	decode_r_type_insn (AND, ival);
   1965      1.1  christos       else if (is_lr_w_insn (ival))
   1966  1.1.1.4  christos 	decode_r_type_insn (LR_W, ival);
   1967      1.1  christos       else if (is_lr_d_insn (ival))
   1968  1.1.1.4  christos 	decode_r_type_insn (LR_D, ival);
   1969      1.1  christos       else if (is_sc_w_insn (ival))
   1970  1.1.1.4  christos 	decode_r_type_insn (SC_W, ival);
   1971      1.1  christos       else if (is_sc_d_insn (ival))
   1972  1.1.1.4  christos 	decode_r_type_insn (SC_D, ival);
   1973  1.1.1.3  christos       else if (is_ecall_insn (ival))
   1974  1.1.1.3  christos 	decode_i_type_insn (ECALL, ival);
   1975  1.1.1.3  christos       else if (is_ld_insn (ival))
   1976  1.1.1.3  christos 	decode_i_type_insn (LD, ival);
   1977  1.1.1.3  christos       else if (is_lw_insn (ival))
   1978  1.1.1.3  christos 	decode_i_type_insn (LW, ival);
   1979      1.1  christos       else
   1980      1.1  christos 	/* None of the other fields are valid in this case.  */
   1981      1.1  christos 	m_opcode = OTHER;
   1982      1.1  christos     }
   1983      1.1  christos   else if (m_length == 2)
   1984      1.1  christos     {
   1985      1.1  christos       int xlen = riscv_isa_xlen (gdbarch);
   1986      1.1  christos 
   1987      1.1  christos       /* C_ADD and C_JALR have the same opcode.  If RS2 is 0, then this is a
   1988      1.1  christos 	 C_JALR.  So must try to match C_JALR first as it has more bits in
   1989      1.1  christos 	 mask.  */
   1990      1.1  christos       if (is_c_jalr_insn (ival))
   1991      1.1  christos 	decode_cr_type_insn (JALR, ival);
   1992      1.1  christos       else if (is_c_add_insn (ival))
   1993      1.1  christos 	decode_cr_type_insn (ADD, ival);
   1994      1.1  christos       /* C_ADDW is RV64 and RV128 only.  */
   1995      1.1  christos       else if (xlen != 4 && is_c_addw_insn (ival))
   1996      1.1  christos 	decode_cr_type_insn (ADDW, ival);
   1997      1.1  christos       else if (is_c_addi_insn (ival))
   1998      1.1  christos 	decode_ci_type_insn (ADDI, ival);
   1999      1.1  christos       /* C_ADDIW and C_JAL have the same opcode.  C_ADDIW is RV64 and RV128
   2000      1.1  christos 	 only and C_JAL is RV32 only.  */
   2001      1.1  christos       else if (xlen != 4 && is_c_addiw_insn (ival))
   2002      1.1  christos 	decode_ci_type_insn (ADDIW, ival);
   2003      1.1  christos       else if (xlen == 4 && is_c_jal_insn (ival))
   2004      1.1  christos 	decode_cj_type_insn (JAL, ival);
   2005      1.1  christos       /* C_ADDI16SP and C_LUI have the same opcode.  If RD is 2, then this is a
   2006      1.1  christos 	 C_ADDI16SP.  So must try to match C_ADDI16SP first as it has more bits
   2007      1.1  christos 	 in mask.  */
   2008      1.1  christos       else if (is_c_addi16sp_insn (ival))
   2009      1.1  christos 	{
   2010      1.1  christos 	  m_opcode = ADDI;
   2011      1.1  christos 	  m_rd = m_rs1 = decode_register_index (ival, OP_SH_RD);
   2012  1.1.1.3  christos 	  m_imm.s = EXTRACT_CITYPE_ADDI16SP_IMM (ival);
   2013      1.1  christos 	}
   2014      1.1  christos       else if (is_c_addi4spn_insn (ival))
   2015      1.1  christos 	{
   2016      1.1  christos 	  m_opcode = ADDI;
   2017      1.1  christos 	  m_rd = decode_register_index_short (ival, OP_SH_CRS2S);
   2018      1.1  christos 	  m_rs1 = RISCV_SP_REGNUM;
   2019  1.1.1.3  christos 	  m_imm.s = EXTRACT_CIWTYPE_ADDI4SPN_IMM (ival);
   2020      1.1  christos 	}
   2021      1.1  christos       else if (is_c_lui_insn (ival))
   2022  1.1.1.3  christos 	{
   2023  1.1.1.3  christos 	  m_opcode = LUI;
   2024  1.1.1.3  christos 	  m_rd = decode_register_index (ival, OP_SH_CRS1S);
   2025  1.1.1.3  christos 	  m_imm.s = EXTRACT_CITYPE_LUI_IMM (ival);
   2026  1.1.1.3  christos 	}
   2027  1.1.1.4  christos       else if (is_c_srli_insn (ival))
   2028  1.1.1.4  christos 	decode_cb_type_insn (SRLI, ival);
   2029  1.1.1.4  christos       else if (is_c_srai_insn (ival))
   2030  1.1.1.4  christos 	decode_cb_type_insn (SRAI, ival);
   2031  1.1.1.4  christos       else if (is_c_andi_insn (ival))
   2032  1.1.1.4  christos 	decode_cb_type_insn (ANDI, ival);
   2033  1.1.1.4  christos       else if (is_c_sub_insn (ival))
   2034  1.1.1.4  christos 	decode_ca_type_insn (SUB, ival);
   2035  1.1.1.4  christos       else if (is_c_xor_insn (ival))
   2036  1.1.1.4  christos 	decode_ca_type_insn (XOR, ival);
   2037  1.1.1.4  christos       else if (is_c_or_insn (ival))
   2038  1.1.1.4  christos 	decode_ca_type_insn (OR, ival);
   2039  1.1.1.4  christos       else if (is_c_and_insn (ival))
   2040  1.1.1.4  christos 	decode_ca_type_insn (AND, ival);
   2041  1.1.1.4  christos       else if (is_c_subw_insn (ival))
   2042  1.1.1.4  christos 	decode_ca_type_insn (SUBW, ival);
   2043  1.1.1.4  christos       else if (is_c_addw_insn (ival))
   2044  1.1.1.4  christos 	decode_ca_type_insn (ADDW, ival);
   2045  1.1.1.4  christos       else if (is_c_li_insn (ival))
   2046  1.1.1.4  christos 	decode_ci_type_insn (LI, ival);
   2047      1.1  christos       /* C_SD and C_FSW have the same opcode.  C_SD is RV64 and RV128 only,
   2048      1.1  christos 	 and C_FSW is RV32 only.  */
   2049      1.1  christos       else if (xlen != 4 && is_c_sd_insn (ival))
   2050  1.1.1.3  christos 	decode_cs_type_insn (SD, ival, EXTRACT_CLTYPE_LD_IMM (ival));
   2051      1.1  christos       else if (is_c_sw_insn (ival))
   2052  1.1.1.3  christos 	decode_cs_type_insn (SW, ival, EXTRACT_CLTYPE_LW_IMM (ival));
   2053      1.1  christos       else if (is_c_swsp_insn (ival))
   2054  1.1.1.3  christos 	decode_css_type_insn (SW, ival, EXTRACT_CSSTYPE_SWSP_IMM (ival));
   2055      1.1  christos       else if (xlen != 4 && is_c_sdsp_insn (ival))
   2056  1.1.1.3  christos 	decode_css_type_insn (SD, ival, EXTRACT_CSSTYPE_SDSP_IMM (ival));
   2057      1.1  christos       /* C_JR and C_MV have the same opcode.  If RS2 is 0, then this is a C_JR.
   2058  1.1.1.3  christos 	 So must try to match C_JR first as it has more bits in mask.  */
   2059      1.1  christos       else if (is_c_jr_insn (ival))
   2060      1.1  christos 	decode_cr_type_insn (JALR, ival);
   2061  1.1.1.3  christos       else if (is_c_mv_insn (ival))
   2062  1.1.1.3  christos 	decode_cr_type_insn (MV, ival);
   2063      1.1  christos       else if (is_c_j_insn (ival))
   2064      1.1  christos 	decode_cj_type_insn (JAL, ival);
   2065      1.1  christos       else if (is_c_beqz_insn (ival))
   2066      1.1  christos 	decode_cb_type_insn (BEQ, ival);
   2067      1.1  christos       else if (is_c_bnez_insn (ival))
   2068      1.1  christos 	decode_cb_type_insn (BNE, ival);
   2069  1.1.1.3  christos       else if (is_c_ld_insn (ival))
   2070  1.1.1.3  christos 	decode_cl_type_insn (LD, ival);
   2071  1.1.1.3  christos       else if (is_c_lw_insn (ival))
   2072  1.1.1.3  christos 	decode_cl_type_insn (LW, ival);
   2073  1.1.1.4  christos       else if (is_c_ldsp_insn (ival))
   2074  1.1.1.4  christos 	decode_ci_type_insn (LD, ival, RISCV_SP_REGNUM);
   2075  1.1.1.4  christos       else if (is_c_lwsp_insn (ival))
   2076  1.1.1.4  christos 	decode_ci_type_insn (LW, ival, RISCV_SP_REGNUM);
   2077      1.1  christos       else
   2078      1.1  christos 	/* None of the other fields of INSN are valid in this case.  */
   2079      1.1  christos 	m_opcode = OTHER;
   2080      1.1  christos     }
   2081      1.1  christos   else
   2082  1.1.1.2  christos     {
   2083  1.1.1.3  christos       /* 6 bytes or more.  If the instruction is longer than 8 bytes, we don't
   2084  1.1.1.3  christos 	 have full instruction bits in ival.  At least, such long instructions
   2085  1.1.1.3  christos 	 are not defined yet, so just ignore it.  */
   2086  1.1.1.3  christos       gdb_assert (m_length > 0 && m_length % 2 == 0);
   2087  1.1.1.2  christos       m_opcode = OTHER;
   2088  1.1.1.2  christos     }
   2089      1.1  christos }
   2090      1.1  christos 
   2091  1.1.1.4  christos /* Return true if INSN represents an instruction something like:
   2092  1.1.1.4  christos 
   2093  1.1.1.4  christos    ld fp,IMMEDIATE(sp)
   2094  1.1.1.4  christos 
   2095  1.1.1.4  christos    That is, a load from stack-pointer plus some immediate offset, with the
   2096  1.1.1.4  christos    result stored into the frame pointer.  We also accept 'lw' as well as
   2097  1.1.1.4  christos    'ld'.  */
   2098  1.1.1.4  christos 
   2099  1.1.1.4  christos static bool
   2100  1.1.1.4  christos is_insn_load_of_fp_from_sp (const struct riscv_insn &insn)
   2101  1.1.1.4  christos {
   2102  1.1.1.4  christos   return ((insn.opcode () == riscv_insn::LD
   2103  1.1.1.4  christos 	   || insn.opcode () == riscv_insn::LW)
   2104  1.1.1.4  christos 	  && insn.rd () == RISCV_FP_REGNUM
   2105  1.1.1.4  christos 	  && insn.rs1 () == RISCV_SP_REGNUM);
   2106  1.1.1.4  christos }
   2107  1.1.1.4  christos 
   2108  1.1.1.4  christos /* Return true if INSN represents an instruction something like:
   2109  1.1.1.4  christos 
   2110  1.1.1.4  christos    add sp,sp,IMMEDIATE
   2111  1.1.1.4  christos 
   2112  1.1.1.4  christos    That is, an add of an immediate to the value in the stack pointer
   2113  1.1.1.4  christos    register, with the result stored back to the stack pointer register.  */
   2114  1.1.1.4  christos 
   2115  1.1.1.4  christos static bool
   2116  1.1.1.4  christos is_insn_addi_of_sp_to_sp (const struct riscv_insn &insn)
   2117  1.1.1.4  christos {
   2118  1.1.1.4  christos   return ((insn.opcode () == riscv_insn::ADDI
   2119  1.1.1.4  christos 	   || insn.opcode () == riscv_insn::ADDIW)
   2120  1.1.1.4  christos 	  && insn.rd () == RISCV_SP_REGNUM
   2121  1.1.1.4  christos 	  && insn.rs1 () == RISCV_SP_REGNUM);
   2122  1.1.1.4  christos }
   2123  1.1.1.4  christos 
   2124  1.1.1.4  christos /* Is the instruction in code memory prior to address PC a load from stack
   2125  1.1.1.4  christos    instruction?  Return true if it is, otherwise, return false.
   2126  1.1.1.4  christos 
   2127  1.1.1.4  christos    This is a best effort that is used as part of the function prologue
   2128  1.1.1.4  christos    scanning logic.  With compressed instructions and arbitrary control
   2129  1.1.1.4  christos    flow in the inferior, we can never be certain what the instruction
   2130  1.1.1.4  christos    prior to PC is.
   2131  1.1.1.4  christos 
   2132  1.1.1.4  christos    This function first looks for a compressed instruction, then looks for
   2133  1.1.1.4  christos    a 32-bit non-compressed instruction.  */
   2134  1.1.1.4  christos 
   2135  1.1.1.4  christos static bool
   2136  1.1.1.4  christos previous_insn_is_load_fp_from_stack (struct gdbarch *gdbarch, CORE_ADDR pc)
   2137  1.1.1.4  christos {
   2138  1.1.1.4  christos   struct riscv_insn insn;
   2139  1.1.1.4  christos   insn.decode (gdbarch, pc - 2);
   2140  1.1.1.4  christos   gdb_assert (insn.length () > 0);
   2141  1.1.1.4  christos 
   2142  1.1.1.4  christos   if (insn.length () != 2 || !is_insn_load_of_fp_from_sp (insn))
   2143  1.1.1.4  christos     {
   2144  1.1.1.4  christos       insn.decode (gdbarch, pc - 4);
   2145  1.1.1.4  christos       gdb_assert (insn.length () > 0);
   2146  1.1.1.4  christos 
   2147  1.1.1.4  christos       if (insn.length () != 4 || !is_insn_load_of_fp_from_sp (insn))
   2148  1.1.1.4  christos 	return false;
   2149  1.1.1.4  christos     }
   2150  1.1.1.4  christos 
   2151  1.1.1.4  christos   riscv_unwinder_debug_printf
   2152  1.1.1.4  christos     ("previous instruction at %s (length %d) was 'ld'",
   2153  1.1.1.4  christos      core_addr_to_string (pc - insn.length ()), insn.length ());
   2154  1.1.1.4  christos   return true;
   2155  1.1.1.4  christos }
   2156  1.1.1.4  christos 
   2157  1.1.1.4  christos /* Is the instruction in code memory prior to address PC an add of an
   2158  1.1.1.4  christos    immediate to the stack pointer, with the result being written back into
   2159  1.1.1.4  christos    the stack pointer?  Return true and set *PREV_PC to the address of the
   2160  1.1.1.4  christos    previous instruction if we believe the previous instruction is such an
   2161  1.1.1.4  christos    add, otherwise return false and *PREV_PC is undefined.
   2162  1.1.1.4  christos 
   2163  1.1.1.4  christos    This is a best effort that is used as part of the function prologue
   2164  1.1.1.4  christos    scanning logic.  With compressed instructions and arbitrary control
   2165  1.1.1.4  christos    flow in the inferior, we can never be certain what the instruction
   2166  1.1.1.4  christos    prior to PC is.
   2167  1.1.1.4  christos 
   2168  1.1.1.4  christos    This function first looks for a compressed instruction, then looks for
   2169  1.1.1.4  christos    a 32-bit non-compressed instruction.  */
   2170  1.1.1.4  christos 
   2171  1.1.1.4  christos static bool
   2172  1.1.1.4  christos previous_insn_is_add_imm_to_sp (struct gdbarch *gdbarch, CORE_ADDR pc,
   2173  1.1.1.4  christos 				CORE_ADDR *prev_pc)
   2174  1.1.1.4  christos {
   2175  1.1.1.4  christos   struct riscv_insn insn;
   2176  1.1.1.4  christos   insn.decode (gdbarch, pc - 2);
   2177  1.1.1.4  christos   gdb_assert (insn.length () > 0);
   2178  1.1.1.4  christos 
   2179  1.1.1.4  christos   if (insn.length () != 2 || !is_insn_addi_of_sp_to_sp (insn))
   2180  1.1.1.4  christos     {
   2181  1.1.1.4  christos       insn.decode (gdbarch, pc - 4);
   2182  1.1.1.4  christos       gdb_assert (insn.length () > 0);
   2183  1.1.1.4  christos 
   2184  1.1.1.4  christos       if (insn.length () != 4 || !is_insn_addi_of_sp_to_sp (insn))
   2185  1.1.1.4  christos 	return false;
   2186  1.1.1.4  christos     }
   2187  1.1.1.4  christos 
   2188  1.1.1.4  christos   riscv_unwinder_debug_printf
   2189  1.1.1.4  christos     ("previous instruction at %s (length %d) was 'add'",
   2190  1.1.1.4  christos      core_addr_to_string (pc - insn.length ()), insn.length ());
   2191  1.1.1.4  christos   *prev_pc = pc - insn.length ();
   2192  1.1.1.4  christos   return true;
   2193  1.1.1.4  christos }
   2194  1.1.1.4  christos 
   2195  1.1.1.4  christos /* Try to spot when PC is located in an exit sequence for a particular
   2196  1.1.1.4  christos    function.  Detecting an exit sequence involves a limited amount of
   2197  1.1.1.4  christos    scanning backwards through the disassembly, and so, when considering
   2198  1.1.1.4  christos    compressed instructions, we can never be certain that we have
   2199  1.1.1.4  christos    disassembled the preceding instructions correctly.  On top of that, we
   2200  1.1.1.4  christos    can't be certain that the inferior arrived at PC by passing through the
   2201  1.1.1.4  christos    preceding instructions.
   2202  1.1.1.4  christos 
   2203  1.1.1.4  christos    With all that said, we know that using prologue scanning to figure a
   2204  1.1.1.4  christos    functions unwind information starts to fail when we consider returns
   2205  1.1.1.4  christos    from an instruction -- we must pass through some instructions that
   2206  1.1.1.4  christos    restore the previous state prior to the final return instruction, and
   2207  1.1.1.4  christos    with state partially restored, our prologue derived unwind information
   2208  1.1.1.4  christos    is no longer valid.
   2209  1.1.1.4  christos 
   2210  1.1.1.4  christos    This function then, aims to spot instruction sequences like this:
   2211  1.1.1.4  christos 
   2212  1.1.1.4  christos      ld     fp, IMM_1(sp)
   2213  1.1.1.4  christos      add    sp, sp, IMM_2
   2214  1.1.1.4  christos      ret
   2215  1.1.1.4  christos 
   2216  1.1.1.4  christos    The first instruction restores the previous frame-pointer value, the
   2217  1.1.1.4  christos    second restores the previous stack pointer value, and the final
   2218  1.1.1.4  christos    instruction is the actual return.
   2219  1.1.1.4  christos 
   2220  1.1.1.4  christos    We need to consider that some or all of these instructions might be
   2221  1.1.1.4  christos    compressed.
   2222  1.1.1.4  christos 
   2223  1.1.1.4  christos    This function makes the assumption that, when the inferior reaches the
   2224  1.1.1.4  christos    'ret' instruction the stack pointer will have been restored to its value
   2225  1.1.1.4  christos    on entry to this function.  This assumption will be true in most well
   2226  1.1.1.4  christos    formed programs.
   2227  1.1.1.4  christos 
   2228  1.1.1.4  christos    Return true if we detect that we are in such an instruction sequence,
   2229  1.1.1.4  christos    that is PC points at one of the three instructions given above.  In this
   2230  1.1.1.4  christos    case, set *OFFSET to IMM_2 if PC points to either of the first
   2231  1.1.1.4  christos    two instructions (the 'ld' or 'add'), otherwise set *OFFSET to 0.
   2232  1.1.1.4  christos 
   2233  1.1.1.4  christos    Otherwise, this function returns false, and the contents of *OFFSET are
   2234  1.1.1.4  christos    undefined.  */
   2235  1.1.1.4  christos 
   2236  1.1.1.4  christos static bool
   2237  1.1.1.4  christos riscv_detect_end_of_function (struct gdbarch *gdbarch, CORE_ADDR pc,
   2238  1.1.1.4  christos 			      int *offset)
   2239  1.1.1.4  christos {
   2240  1.1.1.4  christos   *offset = 0;
   2241  1.1.1.4  christos 
   2242  1.1.1.4  christos   /* We only want to scan a maximum of 3 instructions.  */
   2243  1.1.1.4  christos   for (int i = 0; i < 3; ++i)
   2244  1.1.1.4  christos     {
   2245  1.1.1.4  christos       struct riscv_insn insn;
   2246  1.1.1.4  christos       insn.decode (gdbarch, pc);
   2247  1.1.1.4  christos       gdb_assert (insn.length () > 0);
   2248  1.1.1.4  christos 
   2249  1.1.1.4  christos       if (is_insn_load_of_fp_from_sp (insn))
   2250  1.1.1.4  christos 	{
   2251  1.1.1.4  christos 	  riscv_unwinder_debug_printf ("found 'ld' instruction at %s",
   2252  1.1.1.4  christos 				       core_addr_to_string (pc));
   2253  1.1.1.4  christos 	  if (i > 0)
   2254  1.1.1.4  christos 	    return false;
   2255  1.1.1.4  christos 	  pc += insn.length ();
   2256  1.1.1.4  christos 	}
   2257  1.1.1.4  christos       else if (is_insn_addi_of_sp_to_sp (insn))
   2258  1.1.1.4  christos 	{
   2259  1.1.1.4  christos 	  riscv_unwinder_debug_printf ("found 'add' instruction at %s",
   2260  1.1.1.4  christos 				       core_addr_to_string (pc));
   2261  1.1.1.4  christos 	  if (i > 1)
   2262  1.1.1.4  christos 	    return false;
   2263  1.1.1.4  christos 	  if (i == 0)
   2264  1.1.1.4  christos 	    {
   2265  1.1.1.4  christos 	      if (!previous_insn_is_load_fp_from_stack (gdbarch, pc))
   2266  1.1.1.4  christos 		return false;
   2267  1.1.1.4  christos 
   2268  1.1.1.4  christos 	      i = 1;
   2269  1.1.1.4  christos 	    }
   2270  1.1.1.4  christos 	  *offset = insn.imm_signed ();
   2271  1.1.1.4  christos 	  pc += insn.length ();
   2272  1.1.1.4  christos 	}
   2273  1.1.1.4  christos       else if (insn.opcode () == riscv_insn::JALR
   2274  1.1.1.4  christos 	       && insn.rs1 () == RISCV_RA_REGNUM
   2275  1.1.1.4  christos 	       && insn.rs2 () == RISCV_ZERO_REGNUM)
   2276  1.1.1.4  christos 	{
   2277  1.1.1.4  christos 	  riscv_unwinder_debug_printf ("found 'ret' instruction at %s",
   2278  1.1.1.4  christos 				       core_addr_to_string (pc));
   2279  1.1.1.4  christos 	  gdb_assert (i != 1);
   2280  1.1.1.4  christos 	  if (i == 0)
   2281  1.1.1.4  christos 	    {
   2282  1.1.1.4  christos 	      CORE_ADDR prev_pc;
   2283  1.1.1.4  christos 	      if (!previous_insn_is_add_imm_to_sp (gdbarch, pc, &prev_pc))
   2284  1.1.1.4  christos 		return false;
   2285  1.1.1.4  christos 	      if (!previous_insn_is_load_fp_from_stack (gdbarch, prev_pc))
   2286  1.1.1.4  christos 		return false;
   2287  1.1.1.4  christos 	      i = 2;
   2288  1.1.1.4  christos 	    }
   2289  1.1.1.4  christos 
   2290  1.1.1.4  christos 	  pc += insn.length ();
   2291  1.1.1.4  christos 	}
   2292  1.1.1.4  christos       else
   2293  1.1.1.4  christos 	return false;
   2294  1.1.1.4  christos     }
   2295  1.1.1.4  christos 
   2296  1.1.1.4  christos   return true;
   2297  1.1.1.4  christos }
   2298  1.1.1.4  christos 
   2299      1.1  christos /* The prologue scanner.  This is currently only used for skipping the
   2300      1.1  christos    prologue of a function when the DWARF information is not sufficient.
   2301      1.1  christos    However, it is written with filling of the frame cache in mind, which
   2302      1.1  christos    is why different groups of stack setup instructions are split apart
   2303      1.1  christos    during the core of the inner loop.  In the future, the intention is to
   2304      1.1  christos    extend this function to fully support building up a frame cache that
   2305      1.1  christos    can unwind register values when there is no DWARF information.  */
   2306      1.1  christos 
   2307      1.1  christos static CORE_ADDR
   2308      1.1  christos riscv_scan_prologue (struct gdbarch *gdbarch,
   2309      1.1  christos 		     CORE_ADDR start_pc, CORE_ADDR end_pc,
   2310      1.1  christos 		     struct riscv_unwind_cache *cache)
   2311      1.1  christos {
   2312      1.1  christos   CORE_ADDR cur_pc, next_pc, after_prologue_pc;
   2313  1.1.1.4  christos   CORE_ADDR original_end_pc = end_pc;
   2314      1.1  christos   CORE_ADDR end_prologue_addr = 0;
   2315      1.1  christos 
   2316      1.1  christos   /* Find an upper limit on the function prologue using the debug
   2317      1.1  christos      information.  If the debug information could not be used to provide
   2318      1.1  christos      that bound, then use an arbitrary large number as the upper bound.  */
   2319      1.1  christos   after_prologue_pc = skip_prologue_using_sal (gdbarch, start_pc);
   2320      1.1  christos   if (after_prologue_pc == 0)
   2321      1.1  christos     after_prologue_pc = start_pc + 100;   /* Arbitrary large number.  */
   2322      1.1  christos   if (after_prologue_pc < end_pc)
   2323      1.1  christos     end_pc = after_prologue_pc;
   2324      1.1  christos 
   2325      1.1  christos   pv_t regs[RISCV_NUM_INTEGER_REGS]; /* Number of GPR.  */
   2326      1.1  christos   for (int regno = 0; regno < RISCV_NUM_INTEGER_REGS; regno++)
   2327      1.1  christos     regs[regno] = pv_register (regno, 0);
   2328      1.1  christos   pv_area stack (RISCV_SP_REGNUM, gdbarch_addr_bit (gdbarch));
   2329      1.1  christos 
   2330  1.1.1.4  christos   riscv_unwinder_debug_printf ("function starting at %s (limit %s)",
   2331  1.1.1.4  christos 			       core_addr_to_string (start_pc),
   2332  1.1.1.4  christos 			       core_addr_to_string (end_pc));
   2333      1.1  christos 
   2334      1.1  christos   for (next_pc = cur_pc = start_pc; cur_pc < end_pc; cur_pc = next_pc)
   2335      1.1  christos     {
   2336      1.1  christos       struct riscv_insn insn;
   2337      1.1  christos 
   2338      1.1  christos       /* Decode the current instruction, and decide where the next
   2339      1.1  christos 	 instruction lives based on the size of this instruction.  */
   2340      1.1  christos       insn.decode (gdbarch, cur_pc);
   2341      1.1  christos       gdb_assert (insn.length () > 0);
   2342      1.1  christos       next_pc = cur_pc + insn.length ();
   2343      1.1  christos 
   2344      1.1  christos       /* Look for common stack adjustment insns.  */
   2345  1.1.1.4  christos       if (is_insn_addi_of_sp_to_sp (insn))
   2346      1.1  christos 	{
   2347      1.1  christos 	  /* Handle: addi sp, sp, -i
   2348      1.1  christos 	     or:     addiw sp, sp, -i  */
   2349  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2350  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2351  1.1.1.3  christos 	  regs[insn.rd ()]
   2352  1.1.1.3  christos 	    = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
   2353      1.1  christos 	}
   2354      1.1  christos       else if ((insn.opcode () == riscv_insn::SW
   2355      1.1  christos 		|| insn.opcode () == riscv_insn::SD)
   2356      1.1  christos 	       && (insn.rs1 () == RISCV_SP_REGNUM
   2357      1.1  christos 		   || insn.rs1 () == RISCV_FP_REGNUM))
   2358      1.1  christos 	{
   2359      1.1  christos 	  /* Handle: sw reg, offset(sp)
   2360      1.1  christos 	     or:     sd reg, offset(sp)
   2361      1.1  christos 	     or:     sw reg, offset(s0)
   2362      1.1  christos 	     or:     sd reg, offset(s0)  */
   2363      1.1  christos 	  /* Instruction storing a register onto the stack.  */
   2364  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2365  1.1.1.3  christos 	  gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
   2366  1.1.1.3  christos 	  stack.store (pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ()),
   2367  1.1.1.3  christos 			(insn.opcode () == riscv_insn::SW ? 4 : 8),
   2368  1.1.1.3  christos 			regs[insn.rs2 ()]);
   2369      1.1  christos 	}
   2370      1.1  christos       else if (insn.opcode () == riscv_insn::ADDI
   2371      1.1  christos 	       && insn.rd () == RISCV_FP_REGNUM
   2372      1.1  christos 	       && insn.rs1 () == RISCV_SP_REGNUM)
   2373      1.1  christos 	{
   2374      1.1  christos 	  /* Handle: addi s0, sp, size  */
   2375      1.1  christos 	  /* Instructions setting up the frame pointer.  */
   2376  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2377  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2378  1.1.1.3  christos 	  regs[insn.rd ()]
   2379  1.1.1.3  christos 	    = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
   2380      1.1  christos 	}
   2381      1.1  christos       else if ((insn.opcode () == riscv_insn::ADD
   2382      1.1  christos 		|| insn.opcode () == riscv_insn::ADDW)
   2383      1.1  christos 	       && insn.rd () == RISCV_FP_REGNUM
   2384      1.1  christos 	       && insn.rs1 () == RISCV_SP_REGNUM
   2385      1.1  christos 	       && insn.rs2 () == RISCV_ZERO_REGNUM)
   2386      1.1  christos 	{
   2387      1.1  christos 	  /* Handle: add s0, sp, 0
   2388      1.1  christos 	     or:     addw s0, sp, 0  */
   2389      1.1  christos 	  /* Instructions setting up the frame pointer.  */
   2390  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2391  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2392  1.1.1.3  christos 	  regs[insn.rd ()] = pv_add_constant (regs[insn.rs1 ()], 0);
   2393      1.1  christos 	}
   2394      1.1  christos       else if ((insn.opcode () == riscv_insn::ADDI
   2395  1.1.1.3  christos 		&& insn.rd () == RISCV_ZERO_REGNUM
   2396  1.1.1.3  christos 		&& insn.rs1 () == RISCV_ZERO_REGNUM
   2397  1.1.1.3  christos 		&& insn.imm_signed () == 0))
   2398      1.1  christos 	{
   2399      1.1  christos 	  /* Handle: add x0, x0, 0   (NOP)  */
   2400      1.1  christos 	}
   2401      1.1  christos       else if (insn.opcode () == riscv_insn::AUIPC)
   2402  1.1.1.3  christos 	{
   2403  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2404  1.1.1.3  christos 	  regs[insn.rd ()] = pv_constant (cur_pc + insn.imm_signed ());
   2405  1.1.1.3  christos 	}
   2406  1.1.1.4  christos       else if (insn.opcode () == riscv_insn::LUI
   2407  1.1.1.4  christos 	       || insn.opcode () == riscv_insn::LI)
   2408  1.1.1.3  christos 	{
   2409      1.1  christos 	  /* Handle: lui REG, n
   2410  1.1.1.4  christos 	     or:     li  REG, n  */
   2411  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2412  1.1.1.3  christos 	  regs[insn.rd ()] = pv_constant (insn.imm_signed ());
   2413  1.1.1.3  christos 	}
   2414      1.1  christos       else if (insn.opcode () == riscv_insn::ADDI)
   2415  1.1.1.3  christos 	{
   2416  1.1.1.3  christos 	  /* Handle: addi REG1, REG2, IMM  */
   2417  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2418  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2419  1.1.1.3  christos 	  regs[insn.rd ()]
   2420  1.1.1.3  christos 	    = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
   2421  1.1.1.3  christos 	}
   2422      1.1  christos       else if (insn.opcode () == riscv_insn::ADD)
   2423  1.1.1.3  christos 	{
   2424  1.1.1.3  christos 	  /* Handle: add REG1, REG2, REG3  */
   2425  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2426  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2427  1.1.1.3  christos 	  gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
   2428  1.1.1.3  christos 	  regs[insn.rd ()] = pv_add (regs[insn.rs1 ()], regs[insn.rs2 ()]);
   2429  1.1.1.3  christos 	}
   2430  1.1.1.3  christos       else if (insn.opcode () == riscv_insn::LD
   2431  1.1.1.3  christos 	       || insn.opcode () == riscv_insn::LW)
   2432  1.1.1.3  christos 	{
   2433  1.1.1.3  christos 	  /* Handle: ld reg, offset(rs1)
   2434  1.1.1.3  christos 	     or:     c.ld reg, offset(rs1)
   2435  1.1.1.3  christos 	     or:     lw reg, offset(rs1)
   2436  1.1.1.3  christos 	     or:     c.lw reg, offset(rs1)  */
   2437  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2438  1.1.1.3  christos 	  gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
   2439  1.1.1.3  christos 	  regs[insn.rd ()]
   2440  1.1.1.3  christos 	    = stack.fetch (pv_add_constant (regs[insn.rs1 ()],
   2441  1.1.1.3  christos 					    insn.imm_signed ()),
   2442  1.1.1.3  christos 			   (insn.opcode () == riscv_insn::LW ? 4 : 8));
   2443  1.1.1.3  christos 	}
   2444  1.1.1.3  christos       else if (insn.opcode () == riscv_insn::MV)
   2445  1.1.1.3  christos 	{
   2446  1.1.1.3  christos 	  /* Handle: c.mv RD, RS2  */
   2447  1.1.1.3  christos 	  gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
   2448  1.1.1.3  christos 	  gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
   2449  1.1.1.3  christos 	  gdb_assert (insn.rs2 () > 0);
   2450  1.1.1.3  christos 	  regs[insn.rd ()] = regs[insn.rs2 ()];
   2451  1.1.1.3  christos 	}
   2452      1.1  christos       else
   2453      1.1  christos 	{
   2454      1.1  christos 	  end_prologue_addr = cur_pc;
   2455      1.1  christos 	  break;
   2456      1.1  christos 	}
   2457      1.1  christos     }
   2458      1.1  christos 
   2459      1.1  christos   if (end_prologue_addr == 0)
   2460      1.1  christos     end_prologue_addr = cur_pc;
   2461      1.1  christos 
   2462  1.1.1.4  christos   riscv_unwinder_debug_printf ("end of prologue at %s",
   2463  1.1.1.4  christos 			       core_addr_to_string (end_prologue_addr));
   2464      1.1  christos 
   2465      1.1  christos   if (cache != NULL)
   2466      1.1  christos     {
   2467      1.1  christos       /* Figure out if it is a frame pointer or just a stack pointer.  Also
   2468  1.1.1.3  christos 	 the offset held in the pv_t is from the original register value to
   2469  1.1.1.3  christos 	 the current value, which for a grows down stack means a negative
   2470  1.1.1.3  christos 	 value.  The FRAME_BASE_OFFSET is the negation of this, how to get
   2471  1.1.1.3  christos 	 from the current value to the original value.  */
   2472      1.1  christos       if (pv_is_register (regs[RISCV_FP_REGNUM], RISCV_SP_REGNUM))
   2473      1.1  christos 	{
   2474  1.1.1.3  christos 	  cache->frame_base_reg = RISCV_FP_REGNUM;
   2475  1.1.1.3  christos 	  cache->frame_base_offset = -regs[RISCV_FP_REGNUM].k;
   2476      1.1  christos 	}
   2477      1.1  christos       else
   2478      1.1  christos 	{
   2479  1.1.1.3  christos 	  cache->frame_base_reg = RISCV_SP_REGNUM;
   2480  1.1.1.3  christos 	  cache->frame_base_offset = -regs[RISCV_SP_REGNUM].k;
   2481      1.1  christos 	}
   2482      1.1  christos 
   2483  1.1.1.4  christos       /* Check to see if we are located near to a return instruction in
   2484  1.1.1.4  christos 	 this function.  If we are then the one or both of the stack
   2485  1.1.1.4  christos 	 pointer and frame pointer may have been restored to their previous
   2486  1.1.1.4  christos 	 value.  If we can spot this situation then we can adjust which
   2487  1.1.1.4  christos 	 register and offset we use for the frame base.  */
   2488  1.1.1.4  christos       if (cache->frame_base_reg != RISCV_SP_REGNUM
   2489  1.1.1.4  christos 	  || cache->frame_base_offset != 0)
   2490  1.1.1.4  christos 	{
   2491  1.1.1.4  christos 	  int sp_offset;
   2492  1.1.1.4  christos 
   2493  1.1.1.4  christos 	  if (riscv_detect_end_of_function (gdbarch, original_end_pc,
   2494  1.1.1.4  christos 					    &sp_offset))
   2495  1.1.1.4  christos 	    {
   2496  1.1.1.4  christos 	      riscv_unwinder_debug_printf
   2497  1.1.1.4  christos 		("in function epilogue at %s, stack offset is %d",
   2498  1.1.1.4  christos 		 core_addr_to_string (original_end_pc), sp_offset);
   2499  1.1.1.4  christos 	      cache->frame_base_reg= RISCV_SP_REGNUM;
   2500  1.1.1.4  christos 	      cache->frame_base_offset = sp_offset;
   2501  1.1.1.4  christos 	    }
   2502  1.1.1.4  christos 	}
   2503  1.1.1.4  christos 
   2504      1.1  christos       /* Assign offset from old SP to all saved registers.  As we don't
   2505  1.1.1.3  christos 	 have the previous value for the frame base register at this
   2506  1.1.1.3  christos 	 point, we store the offset as the address in the trad_frame, and
   2507  1.1.1.3  christos 	 then convert this to an actual address later.  */
   2508      1.1  christos       for (int i = 0; i <= RISCV_NUM_INTEGER_REGS; i++)
   2509      1.1  christos 	{
   2510      1.1  christos 	  CORE_ADDR offset;
   2511      1.1  christos 	  if (stack.find_reg (gdbarch, i, &offset))
   2512  1.1.1.3  christos 	    {
   2513  1.1.1.4  christos 	      /* Display OFFSET as a signed value, the offsets are from the
   2514  1.1.1.4  christos 		 frame base address to the registers location on the stack,
   2515  1.1.1.4  christos 		 with a descending stack this means the offsets are always
   2516  1.1.1.4  christos 		 negative.  */
   2517  1.1.1.4  christos 	      riscv_unwinder_debug_printf ("register $%s at stack offset %s",
   2518  1.1.1.4  christos 					   gdbarch_register_name (gdbarch, i),
   2519  1.1.1.4  christos 					   plongest ((LONGEST) offset));
   2520  1.1.1.3  christos 	      cache->regs[i].set_addr (offset);
   2521  1.1.1.3  christos 	    }
   2522      1.1  christos 	}
   2523      1.1  christos     }
   2524      1.1  christos 
   2525      1.1  christos   return end_prologue_addr;
   2526      1.1  christos }
   2527      1.1  christos 
   2528      1.1  christos /* Implement the riscv_skip_prologue gdbarch method.  */
   2529      1.1  christos 
   2530      1.1  christos static CORE_ADDR
   2531      1.1  christos riscv_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
   2532      1.1  christos {
   2533      1.1  christos   CORE_ADDR func_addr;
   2534      1.1  christos 
   2535      1.1  christos   /* See if we can determine the end of the prologue via the symbol
   2536      1.1  christos      table.  If so, then return either PC, or the PC after the
   2537      1.1  christos      prologue, whichever is greater.  */
   2538      1.1  christos   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
   2539      1.1  christos     {
   2540      1.1  christos       CORE_ADDR post_prologue_pc
   2541      1.1  christos 	= skip_prologue_using_sal (gdbarch, func_addr);
   2542      1.1  christos 
   2543      1.1  christos       if (post_prologue_pc != 0)
   2544      1.1  christos 	return std::max (pc, post_prologue_pc);
   2545      1.1  christos     }
   2546      1.1  christos 
   2547      1.1  christos   /* Can't determine prologue from the symbol table, need to examine
   2548      1.1  christos      instructions.  Pass -1 for the end address to indicate the prologue
   2549      1.1  christos      scanner can scan as far as it needs to find the end of the prologue.  */
   2550      1.1  christos   return riscv_scan_prologue (gdbarch, pc, ((CORE_ADDR) -1), NULL);
   2551      1.1  christos }
   2552      1.1  christos 
   2553      1.1  christos /* Implement the gdbarch push dummy code callback.  */
   2554      1.1  christos 
   2555      1.1  christos static CORE_ADDR
   2556      1.1  christos riscv_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
   2557      1.1  christos 		       CORE_ADDR funaddr, struct value **args, int nargs,
   2558      1.1  christos 		       struct type *value_type, CORE_ADDR *real_pc,
   2559      1.1  christos 		       CORE_ADDR *bp_addr, struct regcache *regcache)
   2560      1.1  christos {
   2561  1.1.1.2  christos   /* A nop instruction is 'add x0, x0, 0'.  */
   2562  1.1.1.2  christos   static const gdb_byte nop_insn[] = { 0x13, 0x00, 0x00, 0x00 };
   2563  1.1.1.2  christos 
   2564      1.1  christos   /* Allocate space for a breakpoint, and keep the stack correctly
   2565  1.1.1.2  christos      aligned.  The space allocated here must be at least big enough to
   2566  1.1.1.2  christos      accommodate the NOP_INSN defined above.  */
   2567      1.1  christos   sp -= 16;
   2568      1.1  christos   *bp_addr = sp;
   2569      1.1  christos   *real_pc = funaddr;
   2570      1.1  christos 
   2571  1.1.1.2  christos   /* When we insert a breakpoint we select whether to use a compressed
   2572  1.1.1.2  christos      breakpoint or not based on the existing contents of the memory.
   2573      1.1  christos 
   2574  1.1.1.2  christos      If the breakpoint is being placed onto the stack as part of setting up
   2575  1.1.1.2  christos      for an inferior call from GDB, then the existing stack contents may
   2576  1.1.1.2  christos      randomly appear to be a compressed instruction, causing GDB to insert
   2577  1.1.1.2  christos      a compressed breakpoint.  If this happens on a target that does not
   2578  1.1.1.2  christos      support compressed instructions then this could cause problems.
   2579  1.1.1.2  christos 
   2580  1.1.1.2  christos      To prevent this issue we write an uncompressed nop onto the stack at
   2581  1.1.1.2  christos      the location where the breakpoint will be inserted.  In this way we
   2582  1.1.1.2  christos      ensure that we always use an uncompressed breakpoint, which should
   2583  1.1.1.2  christos      work on all targets.
   2584  1.1.1.2  christos 
   2585  1.1.1.2  christos      We call TARGET_WRITE_MEMORY here so that if the write fails we don't
   2586  1.1.1.2  christos      throw an exception.  Instead we ignore the error and move on.  The
   2587  1.1.1.2  christos      assumption is that either GDB will error later when actually trying to
   2588  1.1.1.2  christos      insert a software breakpoint, or GDB will use hardware breakpoints and
   2589  1.1.1.2  christos      there will be no need to write to memory later.  */
   2590  1.1.1.2  christos   int status = target_write_memory (*bp_addr, nop_insn, sizeof (nop_insn));
   2591  1.1.1.2  christos 
   2592  1.1.1.4  christos   riscv_infcall_debug_printf ("writing %s-byte nop instruction to %s: %s",
   2593  1.1.1.4  christos 			      plongest (sizeof (nop_insn)),
   2594  1.1.1.4  christos 			      paddress (gdbarch, *bp_addr),
   2595  1.1.1.4  christos 			      (status == 0 ? "success" : "failed"));
   2596      1.1  christos 
   2597  1.1.1.2  christos   return sp;
   2598  1.1.1.2  christos }
   2599      1.1  christos 
   2600  1.1.1.2  christos /* Implement the gdbarch type alignment method, overrides the generic
   2601  1.1.1.2  christos    alignment algorithm for anything that is RISC-V specific.  */
   2602      1.1  christos 
   2603  1.1.1.2  christos static ULONGEST
   2604  1.1.1.2  christos riscv_type_align (gdbarch *gdbarch, type *type)
   2605  1.1.1.2  christos {
   2606  1.1.1.2  christos   type = check_typedef (type);
   2607  1.1.1.3  christos   if (type->code () == TYPE_CODE_ARRAY && type->is_vector ())
   2608  1.1.1.3  christos     return std::min (type->length (), (ULONGEST) BIGGEST_ALIGNMENT);
   2609      1.1  christos 
   2610  1.1.1.2  christos   /* Anything else will be aligned by the generic code.  */
   2611  1.1.1.2  christos   return 0;
   2612      1.1  christos }
   2613      1.1  christos 
   2614      1.1  christos /* Holds information about a single argument either being passed to an
   2615      1.1  christos    inferior function, or returned from an inferior function.  This includes
   2616      1.1  christos    information about the size, type, etc of the argument, and also
   2617      1.1  christos    information about how the argument will be passed (or returned).  */
   2618      1.1  christos 
   2619      1.1  christos struct riscv_arg_info
   2620      1.1  christos {
   2621      1.1  christos   /* Contents of the argument.  */
   2622      1.1  christos   const gdb_byte *contents;
   2623      1.1  christos 
   2624      1.1  christos   /* Length of argument.  */
   2625      1.1  christos   int length;
   2626      1.1  christos 
   2627      1.1  christos   /* Alignment required for an argument of this type.  */
   2628      1.1  christos   int align;
   2629      1.1  christos 
   2630      1.1  christos   /* The type for this argument.  */
   2631      1.1  christos   struct type *type;
   2632      1.1  christos 
   2633      1.1  christos   /* Each argument can have either 1 or 2 locations assigned to it.  Each
   2634      1.1  christos      location describes where part of the argument will be placed.  The
   2635      1.1  christos      second location is valid based on the LOC_TYPE and C_LENGTH fields
   2636      1.1  christos      of the first location (which is always valid).  */
   2637      1.1  christos   struct location
   2638      1.1  christos   {
   2639      1.1  christos     /* What type of location this is.  */
   2640      1.1  christos     enum location_type
   2641      1.1  christos       {
   2642      1.1  christos        /* Argument passed in a register.  */
   2643      1.1  christos        in_reg,
   2644      1.1  christos 
   2645      1.1  christos        /* Argument passed as an on stack argument.  */
   2646      1.1  christos        on_stack,
   2647      1.1  christos 
   2648      1.1  christos        /* Argument passed by reference.  The second location is always
   2649      1.1  christos 	  valid for a BY_REF argument, and describes where the address
   2650      1.1  christos 	  of the BY_REF argument should be placed.  */
   2651      1.1  christos        by_ref
   2652      1.1  christos       } loc_type;
   2653      1.1  christos 
   2654      1.1  christos     /* Information that depends on the location type.  */
   2655      1.1  christos     union
   2656      1.1  christos     {
   2657      1.1  christos       /* Which register number to use.  */
   2658      1.1  christos       int regno;
   2659      1.1  christos 
   2660      1.1  christos       /* The offset into the stack region.  */
   2661      1.1  christos       int offset;
   2662      1.1  christos     } loc_data;
   2663      1.1  christos 
   2664      1.1  christos     /* The length of contents covered by this location.  If this is less
   2665      1.1  christos        than the total length of the argument, then the second location
   2666      1.1  christos        will be valid, and will describe where the rest of the argument
   2667      1.1  christos        will go.  */
   2668      1.1  christos     int c_length;
   2669      1.1  christos 
   2670  1.1.1.2  christos     /* The offset within CONTENTS for this part of the argument.  This can
   2671  1.1.1.2  christos        be non-zero even for the first part (the first field of a struct can
   2672  1.1.1.2  christos        have a non-zero offset due to padding).  For the second part of the
   2673      1.1  christos        argument, this might be the C_LENGTH value of the first part,
   2674      1.1  christos        however, if we are passing a structure in two registers, and there's
   2675      1.1  christos        is padding between the first and second field, then this offset
   2676      1.1  christos        might be greater than the length of the first argument part.  When
   2677      1.1  christos        the second argument location is not holding part of the argument
   2678      1.1  christos        value, but is instead holding the address of a reference argument,
   2679      1.1  christos        then this offset will be set to 0.  */
   2680      1.1  christos     int c_offset;
   2681      1.1  christos   } argloc[2];
   2682      1.1  christos 
   2683      1.1  christos   /* TRUE if this is an unnamed argument.  */
   2684      1.1  christos   bool is_unnamed;
   2685      1.1  christos };
   2686      1.1  christos 
   2687      1.1  christos /* Information about a set of registers being used for passing arguments as
   2688      1.1  christos    part of a function call.  The register set must be numerically
   2689      1.1  christos    sequential from NEXT_REGNUM to LAST_REGNUM.  The register set can be
   2690      1.1  christos    disabled from use by setting NEXT_REGNUM greater than LAST_REGNUM.  */
   2691      1.1  christos 
   2692      1.1  christos struct riscv_arg_reg
   2693      1.1  christos {
   2694      1.1  christos   riscv_arg_reg (int first, int last)
   2695      1.1  christos     : next_regnum (first),
   2696      1.1  christos       last_regnum (last)
   2697      1.1  christos   {
   2698      1.1  christos     /* Nothing.  */
   2699      1.1  christos   }
   2700      1.1  christos 
   2701      1.1  christos   /* The GDB register number to use in this set.  */
   2702      1.1  christos   int next_regnum;
   2703      1.1  christos 
   2704      1.1  christos   /* The last GDB register number to use in this set.  */
   2705      1.1  christos   int last_regnum;
   2706      1.1  christos };
   2707      1.1  christos 
   2708      1.1  christos /* Arguments can be passed as on stack arguments, or by reference.  The
   2709      1.1  christos    on stack arguments must be in a continuous region starting from $sp,
   2710      1.1  christos    while the by reference arguments can be anywhere, but we'll put them
   2711      1.1  christos    on the stack after (at higher address) the on stack arguments.
   2712      1.1  christos 
   2713      1.1  christos    This might not be the right approach to take.  The ABI is clear that
   2714      1.1  christos    an argument passed by reference can be modified by the callee, which
   2715      1.1  christos    us placing the argument (temporarily) onto the stack will not achieve
   2716      1.1  christos    (changes will be lost).  There's also the possibility that very large
   2717      1.1  christos    arguments could overflow the stack.
   2718      1.1  christos 
   2719      1.1  christos    This struct is used to track offset into these two areas for where
   2720      1.1  christos    arguments are to be placed.  */
   2721      1.1  christos struct riscv_memory_offsets
   2722      1.1  christos {
   2723      1.1  christos   riscv_memory_offsets ()
   2724      1.1  christos     : arg_offset (0),
   2725      1.1  christos       ref_offset (0)
   2726      1.1  christos   {
   2727      1.1  christos     /* Nothing.  */
   2728      1.1  christos   }
   2729      1.1  christos 
   2730      1.1  christos   /* Offset into on stack argument area.  */
   2731      1.1  christos   int arg_offset;
   2732      1.1  christos 
   2733      1.1  christos   /* Offset into the pass by reference area.  */
   2734      1.1  christos   int ref_offset;
   2735      1.1  christos };
   2736      1.1  christos 
   2737      1.1  christos /* Holds information about where arguments to a call will be placed.  This
   2738      1.1  christos    is updated as arguments are added onto the call, and can be used to
   2739      1.1  christos    figure out where the next argument should be placed.  */
   2740      1.1  christos 
   2741      1.1  christos struct riscv_call_info
   2742      1.1  christos {
   2743      1.1  christos   riscv_call_info (struct gdbarch *gdbarch)
   2744      1.1  christos     : int_regs (RISCV_A0_REGNUM, RISCV_A0_REGNUM + 7),
   2745      1.1  christos       float_regs (RISCV_FA0_REGNUM, RISCV_FA0_REGNUM + 7)
   2746      1.1  christos   {
   2747      1.1  christos     xlen = riscv_abi_xlen (gdbarch);
   2748      1.1  christos     flen = riscv_abi_flen (gdbarch);
   2749      1.1  christos 
   2750  1.1.1.3  christos     /* Reduce the number of integer argument registers when using the
   2751  1.1.1.3  christos        embedded abi (i.e. rv32e).  */
   2752  1.1.1.3  christos     if (riscv_abi_embedded (gdbarch))
   2753  1.1.1.3  christos       int_regs.last_regnum = RISCV_A0_REGNUM + 5;
   2754  1.1.1.3  christos 
   2755      1.1  christos     /* Disable use of floating point registers if needed.  */
   2756      1.1  christos     if (!riscv_has_fp_abi (gdbarch))
   2757      1.1  christos       float_regs.next_regnum = float_regs.last_regnum + 1;
   2758      1.1  christos   }
   2759      1.1  christos 
   2760      1.1  christos   /* Track the memory areas used for holding in-memory arguments to a
   2761      1.1  christos      call.  */
   2762      1.1  christos   struct riscv_memory_offsets memory;
   2763      1.1  christos 
   2764      1.1  christos   /* Holds information about the next integer register to use for passing
   2765      1.1  christos      an argument.  */
   2766      1.1  christos   struct riscv_arg_reg int_regs;
   2767      1.1  christos 
   2768      1.1  christos   /* Holds information about the next floating point register to use for
   2769      1.1  christos      passing an argument.  */
   2770      1.1  christos   struct riscv_arg_reg float_regs;
   2771      1.1  christos 
   2772      1.1  christos   /* The XLEN and FLEN are copied in to this structure for convenience, and
   2773      1.1  christos      are just the results of calling RISCV_ABI_XLEN and RISCV_ABI_FLEN.  */
   2774      1.1  christos   int xlen;
   2775      1.1  christos   int flen;
   2776      1.1  christos };
   2777      1.1  christos 
   2778      1.1  christos /* Return the number of registers available for use as parameters in the
   2779      1.1  christos    register set REG.  Returned value can be 0 or more.  */
   2780      1.1  christos 
   2781      1.1  christos static int
   2782      1.1  christos riscv_arg_regs_available (struct riscv_arg_reg *reg)
   2783      1.1  christos {
   2784      1.1  christos   if (reg->next_regnum > reg->last_regnum)
   2785      1.1  christos     return 0;
   2786      1.1  christos 
   2787      1.1  christos   return (reg->last_regnum - reg->next_regnum + 1);
   2788      1.1  christos }
   2789      1.1  christos 
   2790      1.1  christos /* If there is at least one register available in the register set REG then
   2791      1.1  christos    the next register from REG is assigned to LOC and the length field of
   2792      1.1  christos    LOC is updated to LENGTH.  The register set REG is updated to indicate
   2793      1.1  christos    that the assigned register is no longer available and the function
   2794      1.1  christos    returns true.
   2795      1.1  christos 
   2796      1.1  christos    If there are no registers available in REG then the function returns
   2797      1.1  christos    false, and LOC and REG are unchanged.  */
   2798      1.1  christos 
   2799      1.1  christos static bool
   2800      1.1  christos riscv_assign_reg_location (struct riscv_arg_info::location *loc,
   2801      1.1  christos 			   struct riscv_arg_reg *reg,
   2802      1.1  christos 			   int length, int offset)
   2803      1.1  christos {
   2804      1.1  christos   if (reg->next_regnum <= reg->last_regnum)
   2805      1.1  christos     {
   2806      1.1  christos       loc->loc_type = riscv_arg_info::location::in_reg;
   2807      1.1  christos       loc->loc_data.regno = reg->next_regnum;
   2808      1.1  christos       reg->next_regnum++;
   2809      1.1  christos       loc->c_length = length;
   2810      1.1  christos       loc->c_offset = offset;
   2811      1.1  christos       return true;
   2812      1.1  christos     }
   2813      1.1  christos 
   2814      1.1  christos   return false;
   2815      1.1  christos }
   2816      1.1  christos 
   2817      1.1  christos /* Assign LOC a location as the next stack parameter, and update MEMORY to
   2818      1.1  christos    record that an area of stack has been used to hold the parameter
   2819      1.1  christos    described by LOC.
   2820      1.1  christos 
   2821      1.1  christos    The length field of LOC is updated to LENGTH, the length of the
   2822      1.1  christos    parameter being stored, and ALIGN is the alignment required by the
   2823      1.1  christos    parameter, which will affect how memory is allocated out of MEMORY.  */
   2824      1.1  christos 
   2825      1.1  christos static void
   2826      1.1  christos riscv_assign_stack_location (struct riscv_arg_info::location *loc,
   2827      1.1  christos 			     struct riscv_memory_offsets *memory,
   2828      1.1  christos 			     int length, int align)
   2829      1.1  christos {
   2830      1.1  christos   loc->loc_type = riscv_arg_info::location::on_stack;
   2831      1.1  christos   memory->arg_offset
   2832      1.1  christos     = align_up (memory->arg_offset, align);
   2833      1.1  christos   loc->loc_data.offset = memory->arg_offset;
   2834      1.1  christos   memory->arg_offset += length;
   2835      1.1  christos   loc->c_length = length;
   2836      1.1  christos 
   2837      1.1  christos   /* Offset is always 0, either we're the first location part, in which
   2838      1.1  christos      case we're reading content from the start of the argument, or we're
   2839      1.1  christos      passing the address of a reference argument, so 0.  */
   2840      1.1  christos   loc->c_offset = 0;
   2841      1.1  christos }
   2842      1.1  christos 
   2843      1.1  christos /* Update AINFO, which describes an argument that should be passed or
   2844      1.1  christos    returned using the integer ABI.  The argloc fields within AINFO are
   2845      1.1  christos    updated to describe the location in which the argument will be passed to
   2846      1.1  christos    a function, or returned from a function.
   2847      1.1  christos 
   2848      1.1  christos    The CINFO structure contains the ongoing call information, the holds
   2849      1.1  christos    information such as which argument registers are remaining to be
   2850      1.1  christos    assigned to parameter, and how much memory has been used by parameters
   2851      1.1  christos    so far.
   2852      1.1  christos 
   2853      1.1  christos    By examining the state of CINFO a suitable location can be selected,
   2854      1.1  christos    and assigned to AINFO.  */
   2855      1.1  christos 
   2856      1.1  christos static void
   2857      1.1  christos riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo,
   2858      1.1  christos 			   struct riscv_call_info *cinfo)
   2859      1.1  christos {
   2860  1.1.1.4  christos   if (TYPE_HAS_DYNAMIC_LENGTH (ainfo->type)
   2861  1.1.1.4  christos       || ainfo->length > (2 * cinfo->xlen))
   2862      1.1  christos     {
   2863      1.1  christos       /* Argument is going to be passed by reference.  */
   2864      1.1  christos       ainfo->argloc[0].loc_type
   2865      1.1  christos 	= riscv_arg_info::location::by_ref;
   2866      1.1  christos       cinfo->memory.ref_offset
   2867      1.1  christos 	= align_up (cinfo->memory.ref_offset, ainfo->align);
   2868      1.1  christos       ainfo->argloc[0].loc_data.offset = cinfo->memory.ref_offset;
   2869      1.1  christos       cinfo->memory.ref_offset += ainfo->length;
   2870      1.1  christos       ainfo->argloc[0].c_length = ainfo->length;
   2871      1.1  christos 
   2872      1.1  christos       /* The second location for this argument is given over to holding the
   2873      1.1  christos 	 address of the by-reference data.  Pass 0 for the offset as this
   2874      1.1  christos 	 is not part of the actual argument value.  */
   2875      1.1  christos       if (!riscv_assign_reg_location (&ainfo->argloc[1],
   2876      1.1  christos 				      &cinfo->int_regs,
   2877      1.1  christos 				      cinfo->xlen, 0))
   2878      1.1  christos 	riscv_assign_stack_location (&ainfo->argloc[1],
   2879      1.1  christos 				     &cinfo->memory, cinfo->xlen,
   2880      1.1  christos 				     cinfo->xlen);
   2881      1.1  christos     }
   2882      1.1  christos   else
   2883      1.1  christos     {
   2884      1.1  christos       int len = std::min (ainfo->length, cinfo->xlen);
   2885      1.1  christos       int align = std::max (ainfo->align, cinfo->xlen);
   2886      1.1  christos 
   2887      1.1  christos       /* Unnamed arguments in registers that require 2*XLEN alignment are
   2888      1.1  christos 	 passed in an aligned register pair.  */
   2889      1.1  christos       if (ainfo->is_unnamed && (align == cinfo->xlen * 2)
   2890      1.1  christos 	  && cinfo->int_regs.next_regnum & 1)
   2891      1.1  christos 	cinfo->int_regs.next_regnum++;
   2892      1.1  christos 
   2893      1.1  christos       if (!riscv_assign_reg_location (&ainfo->argloc[0],
   2894      1.1  christos 				      &cinfo->int_regs, len, 0))
   2895      1.1  christos 	riscv_assign_stack_location (&ainfo->argloc[0],
   2896      1.1  christos 				     &cinfo->memory, len, align);
   2897      1.1  christos 
   2898      1.1  christos       if (len < ainfo->length)
   2899      1.1  christos 	{
   2900      1.1  christos 	  len = ainfo->length - len;
   2901      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[1],
   2902      1.1  christos 					  &cinfo->int_regs, len,
   2903      1.1  christos 					  cinfo->xlen))
   2904      1.1  christos 	    riscv_assign_stack_location (&ainfo->argloc[1],
   2905      1.1  christos 					 &cinfo->memory, len, cinfo->xlen);
   2906      1.1  christos 	}
   2907      1.1  christos     }
   2908      1.1  christos }
   2909      1.1  christos 
   2910      1.1  christos /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
   2911      1.1  christos    is being passed with the floating point ABI.  */
   2912      1.1  christos 
   2913      1.1  christos static void
   2914      1.1  christos riscv_call_arg_scalar_float (struct riscv_arg_info *ainfo,
   2915      1.1  christos 			     struct riscv_call_info *cinfo)
   2916      1.1  christos {
   2917      1.1  christos   if (ainfo->length > cinfo->flen || ainfo->is_unnamed)
   2918      1.1  christos     return riscv_call_arg_scalar_int (ainfo, cinfo);
   2919      1.1  christos   else
   2920      1.1  christos     {
   2921      1.1  christos       if (!riscv_assign_reg_location (&ainfo->argloc[0],
   2922      1.1  christos 				      &cinfo->float_regs,
   2923      1.1  christos 				      ainfo->length, 0))
   2924      1.1  christos 	return riscv_call_arg_scalar_int (ainfo, cinfo);
   2925      1.1  christos     }
   2926      1.1  christos }
   2927      1.1  christos 
   2928      1.1  christos /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
   2929      1.1  christos    is a complex floating point argument, and is therefore handled
   2930      1.1  christos    differently to other argument types.  */
   2931      1.1  christos 
   2932      1.1  christos static void
   2933      1.1  christos riscv_call_arg_complex_float (struct riscv_arg_info *ainfo,
   2934      1.1  christos 			      struct riscv_call_info *cinfo)
   2935      1.1  christos {
   2936      1.1  christos   if (ainfo->length <= (2 * cinfo->flen)
   2937      1.1  christos       && riscv_arg_regs_available (&cinfo->float_regs) >= 2
   2938      1.1  christos       && !ainfo->is_unnamed)
   2939      1.1  christos     {
   2940      1.1  christos       bool result;
   2941      1.1  christos       int len = ainfo->length / 2;
   2942      1.1  christos 
   2943      1.1  christos       result = riscv_assign_reg_location (&ainfo->argloc[0],
   2944  1.1.1.2  christos 					  &cinfo->float_regs, len, 0);
   2945      1.1  christos       gdb_assert (result);
   2946      1.1  christos 
   2947      1.1  christos       result = riscv_assign_reg_location (&ainfo->argloc[1],
   2948      1.1  christos 					  &cinfo->float_regs, len, len);
   2949      1.1  christos       gdb_assert (result);
   2950      1.1  christos     }
   2951      1.1  christos   else
   2952      1.1  christos     return riscv_call_arg_scalar_int (ainfo, cinfo);
   2953      1.1  christos }
   2954      1.1  christos 
   2955      1.1  christos /* A structure used for holding information about a structure type within
   2956      1.1  christos    the inferior program.  The RiscV ABI has special rules for handling some
   2957      1.1  christos    structures with a single field or with two fields.  The counting of
   2958      1.1  christos    fields here is done after flattening out all nested structures.  */
   2959      1.1  christos 
   2960      1.1  christos class riscv_struct_info
   2961      1.1  christos {
   2962      1.1  christos public:
   2963      1.1  christos   riscv_struct_info ()
   2964      1.1  christos     : m_number_of_fields (0),
   2965  1.1.1.2  christos       m_types { nullptr, nullptr },
   2966  1.1.1.2  christos       m_offsets { 0, 0 }
   2967      1.1  christos   {
   2968      1.1  christos     /* Nothing.  */
   2969      1.1  christos   }
   2970      1.1  christos 
   2971      1.1  christos   /* Analyse TYPE descending into nested structures, count the number of
   2972      1.1  christos      scalar fields and record the types of the first two fields found.  */
   2973  1.1.1.2  christos   void analyse (struct type *type)
   2974  1.1.1.2  christos   {
   2975  1.1.1.2  christos     analyse_inner (type, 0);
   2976  1.1.1.2  christos   }
   2977      1.1  christos 
   2978      1.1  christos   /* The number of scalar fields found in the analysed type.  This is
   2979      1.1  christos      currently only accurate if the value returned is 0, 1, or 2 as the
   2980      1.1  christos      analysis stops counting when the number of fields is 3.  This is
   2981      1.1  christos      because the RiscV ABI only has special cases for 1 or 2 fields,
   2982      1.1  christos      anything else we just don't care about.  */
   2983      1.1  christos   int number_of_fields () const
   2984      1.1  christos   { return m_number_of_fields; }
   2985      1.1  christos 
   2986      1.1  christos   /* Return the type for scalar field INDEX within the analysed type.  Will
   2987      1.1  christos      return nullptr if there is no field at that index.  Only INDEX values
   2988      1.1  christos      0 and 1 can be requested as the RiscV ABI only has special cases for
   2989      1.1  christos      structures with 1 or 2 fields.  */
   2990      1.1  christos   struct type *field_type (int index) const
   2991      1.1  christos   {
   2992      1.1  christos     gdb_assert (index < (sizeof (m_types) / sizeof (m_types[0])));
   2993      1.1  christos     return m_types[index];
   2994      1.1  christos   }
   2995      1.1  christos 
   2996  1.1.1.2  christos   /* Return the offset of scalar field INDEX within the analysed type. Will
   2997  1.1.1.2  christos      return 0 if there is no field at that index.  Only INDEX values 0 and
   2998  1.1.1.2  christos      1 can be requested as the RiscV ABI only has special cases for
   2999  1.1.1.2  christos      structures with 1 or 2 fields.  */
   3000  1.1.1.2  christos   int field_offset (int index) const
   3001  1.1.1.2  christos   {
   3002  1.1.1.2  christos     gdb_assert (index < (sizeof (m_offsets) / sizeof (m_offsets[0])));
   3003  1.1.1.2  christos     return m_offsets[index];
   3004  1.1.1.2  christos   }
   3005  1.1.1.2  christos 
   3006      1.1  christos private:
   3007      1.1  christos   /* The number of scalar fields found within the structure after recursing
   3008      1.1  christos      into nested structures.  */
   3009      1.1  christos   int m_number_of_fields;
   3010      1.1  christos 
   3011      1.1  christos   /* The types of the first two scalar fields found within the structure
   3012      1.1  christos      after recursing into nested structures.  */
   3013      1.1  christos   struct type *m_types[2];
   3014  1.1.1.2  christos 
   3015  1.1.1.2  christos   /* The offsets of the first two scalar fields found within the structure
   3016  1.1.1.2  christos      after recursing into nested structures.  */
   3017  1.1.1.2  christos   int m_offsets[2];
   3018  1.1.1.2  christos 
   3019  1.1.1.2  christos   /* Recursive core for ANALYSE, the OFFSET parameter tracks the byte
   3020  1.1.1.2  christos      offset from the start of the top level structure being analysed.  */
   3021  1.1.1.2  christos   void analyse_inner (struct type *type, int offset);
   3022      1.1  christos };
   3023      1.1  christos 
   3024  1.1.1.2  christos /* See description in class declaration.  */
   3025      1.1  christos 
   3026      1.1  christos void
   3027  1.1.1.2  christos riscv_struct_info::analyse_inner (struct type *type, int offset)
   3028      1.1  christos {
   3029  1.1.1.2  christos   unsigned int count = type->num_fields ();
   3030      1.1  christos   unsigned int i;
   3031      1.1  christos 
   3032      1.1  christos   for (i = 0; i < count; ++i)
   3033      1.1  christos     {
   3034  1.1.1.3  christos       if (type->field (i).loc_kind () != FIELD_LOC_KIND_BITPOS)
   3035      1.1  christos 	continue;
   3036      1.1  christos 
   3037  1.1.1.2  christos       struct type *field_type = type->field (i).type ();
   3038      1.1  christos       field_type = check_typedef (field_type);
   3039  1.1.1.2  christos       int field_offset
   3040  1.1.1.3  christos 	= offset + type->field (i).loc_bitpos () / TARGET_CHAR_BIT;
   3041      1.1  christos 
   3042  1.1.1.2  christos       switch (field_type->code ())
   3043      1.1  christos 	{
   3044      1.1  christos 	case TYPE_CODE_STRUCT:
   3045  1.1.1.2  christos 	  analyse_inner (field_type, field_offset);
   3046      1.1  christos 	  break;
   3047      1.1  christos 
   3048      1.1  christos 	default:
   3049      1.1  christos 	  /* RiscV only flattens out structures.  Anything else does not
   3050      1.1  christos 	     need to be flattened, we just record the type, and when we
   3051      1.1  christos 	     look at the analysis results we'll realise this is not a
   3052      1.1  christos 	     structure we can special case, and pass the structure in
   3053      1.1  christos 	     memory.  */
   3054      1.1  christos 	  if (m_number_of_fields < 2)
   3055  1.1.1.2  christos 	    {
   3056  1.1.1.2  christos 	      m_types[m_number_of_fields] = field_type;
   3057  1.1.1.2  christos 	      m_offsets[m_number_of_fields] = field_offset;
   3058  1.1.1.2  christos 	    }
   3059      1.1  christos 	  m_number_of_fields++;
   3060      1.1  christos 	  break;
   3061      1.1  christos 	}
   3062      1.1  christos 
   3063      1.1  christos       /* RiscV only has special handling for structures with 1 or 2 scalar
   3064      1.1  christos 	 fields, any more than that and the structure is just passed in
   3065      1.1  christos 	 memory.  We can safely drop out early when we find 3 or more
   3066      1.1  christos 	 fields then.  */
   3067      1.1  christos 
   3068      1.1  christos       if (m_number_of_fields > 2)
   3069      1.1  christos 	return;
   3070      1.1  christos     }
   3071      1.1  christos }
   3072      1.1  christos 
   3073      1.1  christos /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
   3074      1.1  christos    is a structure.  Small structures on RiscV have some special case
   3075      1.1  christos    handling in order that the structure might be passed in register.
   3076      1.1  christos    Larger structures are passed in memory.  After assigning location
   3077      1.1  christos    information to AINFO, CINFO will have been updated.  */
   3078      1.1  christos 
   3079      1.1  christos static void
   3080      1.1  christos riscv_call_arg_struct (struct riscv_arg_info *ainfo,
   3081      1.1  christos 		       struct riscv_call_info *cinfo)
   3082      1.1  christos {
   3083      1.1  christos   if (riscv_arg_regs_available (&cinfo->float_regs) >= 1)
   3084      1.1  christos     {
   3085      1.1  christos       struct riscv_struct_info sinfo;
   3086      1.1  christos 
   3087      1.1  christos       sinfo.analyse (ainfo->type);
   3088      1.1  christos       if (sinfo.number_of_fields () == 1
   3089  1.1.1.2  christos 	  && sinfo.field_type(0)->code () == TYPE_CODE_COMPLEX)
   3090      1.1  christos 	{
   3091  1.1.1.2  christos 	  /* The following is similar to RISCV_CALL_ARG_COMPLEX_FLOAT,
   3092  1.1.1.2  christos 	     except we use the type of the complex field instead of the
   3093  1.1.1.2  christos 	     type from AINFO, and the first location might be at a non-zero
   3094  1.1.1.2  christos 	     offset.  */
   3095  1.1.1.3  christos 	  if (sinfo.field_type (0)->length () <= (2 * cinfo->flen)
   3096  1.1.1.2  christos 	      && riscv_arg_regs_available (&cinfo->float_regs) >= 2
   3097  1.1.1.2  christos 	      && !ainfo->is_unnamed)
   3098  1.1.1.2  christos 	    {
   3099  1.1.1.2  christos 	      bool result;
   3100  1.1.1.3  christos 	      int len = sinfo.field_type (0)->length () / 2;
   3101  1.1.1.2  christos 	      int offset = sinfo.field_offset (0);
   3102  1.1.1.2  christos 
   3103  1.1.1.2  christos 	      result = riscv_assign_reg_location (&ainfo->argloc[0],
   3104  1.1.1.2  christos 						  &cinfo->float_regs, len,
   3105  1.1.1.2  christos 						  offset);
   3106  1.1.1.2  christos 	      gdb_assert (result);
   3107  1.1.1.2  christos 
   3108  1.1.1.2  christos 	      result = riscv_assign_reg_location (&ainfo->argloc[1],
   3109  1.1.1.2  christos 						  &cinfo->float_regs, len,
   3110  1.1.1.2  christos 						  (offset + len));
   3111  1.1.1.2  christos 	      gdb_assert (result);
   3112  1.1.1.2  christos 	    }
   3113  1.1.1.2  christos 	  else
   3114  1.1.1.2  christos 	    riscv_call_arg_scalar_int (ainfo, cinfo);
   3115  1.1.1.2  christos 	  return;
   3116      1.1  christos 	}
   3117      1.1  christos 
   3118      1.1  christos       if (sinfo.number_of_fields () == 1
   3119  1.1.1.2  christos 	  && sinfo.field_type(0)->code () == TYPE_CODE_FLT)
   3120      1.1  christos 	{
   3121  1.1.1.2  christos 	  /* The following is similar to RISCV_CALL_ARG_SCALAR_FLOAT,
   3122  1.1.1.2  christos 	     except we use the type of the first scalar field instead of
   3123  1.1.1.2  christos 	     the type from AINFO.  Also the location might be at a non-zero
   3124  1.1.1.2  christos 	     offset.  */
   3125  1.1.1.3  christos 	  if (sinfo.field_type (0)->length () > cinfo->flen
   3126  1.1.1.2  christos 	      || ainfo->is_unnamed)
   3127  1.1.1.2  christos 	    riscv_call_arg_scalar_int (ainfo, cinfo);
   3128  1.1.1.2  christos 	  else
   3129  1.1.1.2  christos 	    {
   3130  1.1.1.2  christos 	      int offset = sinfo.field_offset (0);
   3131  1.1.1.3  christos 	      int len = sinfo.field_type (0)->length ();
   3132  1.1.1.2  christos 
   3133  1.1.1.2  christos 	      if (!riscv_assign_reg_location (&ainfo->argloc[0],
   3134  1.1.1.2  christos 					      &cinfo->float_regs,
   3135  1.1.1.2  christos 					      len, offset))
   3136  1.1.1.2  christos 		riscv_call_arg_scalar_int (ainfo, cinfo);
   3137  1.1.1.2  christos 	    }
   3138  1.1.1.2  christos 	  return;
   3139      1.1  christos 	}
   3140      1.1  christos 
   3141      1.1  christos       if (sinfo.number_of_fields () == 2
   3142  1.1.1.2  christos 	  && sinfo.field_type(0)->code () == TYPE_CODE_FLT
   3143  1.1.1.3  christos 	  && sinfo.field_type (0)->length () <= cinfo->flen
   3144  1.1.1.2  christos 	  && sinfo.field_type(1)->code () == TYPE_CODE_FLT
   3145  1.1.1.3  christos 	  && sinfo.field_type (1)->length () <= cinfo->flen
   3146      1.1  christos 	  && riscv_arg_regs_available (&cinfo->float_regs) >= 2)
   3147      1.1  christos 	{
   3148  1.1.1.3  christos 	  int len0 = sinfo.field_type (0)->length ();
   3149  1.1.1.2  christos 	  int offset = sinfo.field_offset (0);
   3150      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[0],
   3151  1.1.1.2  christos 					  &cinfo->float_regs, len0, offset))
   3152      1.1  christos 	    error (_("failed during argument setup"));
   3153      1.1  christos 
   3154  1.1.1.3  christos 	  int len1 = sinfo.field_type (1)->length ();
   3155  1.1.1.2  christos 	  offset = sinfo.field_offset (1);
   3156  1.1.1.3  christos 	  gdb_assert (len1 <= (ainfo->type->length ()
   3157  1.1.1.3  christos 			       - sinfo.field_type (0)->length ()));
   3158      1.1  christos 
   3159      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[1],
   3160      1.1  christos 					  &cinfo->float_regs,
   3161      1.1  christos 					  len1, offset))
   3162      1.1  christos 	    error (_("failed during argument setup"));
   3163      1.1  christos 	  return;
   3164      1.1  christos 	}
   3165      1.1  christos 
   3166      1.1  christos       if (sinfo.number_of_fields () == 2
   3167      1.1  christos 	  && riscv_arg_regs_available (&cinfo->int_regs) >= 1
   3168  1.1.1.2  christos 	  && (sinfo.field_type(0)->code () == TYPE_CODE_FLT
   3169  1.1.1.3  christos 	      && sinfo.field_type (0)->length () <= cinfo->flen
   3170      1.1  christos 	      && is_integral_type (sinfo.field_type (1))
   3171  1.1.1.3  christos 	      && sinfo.field_type (1)->length () <= cinfo->xlen))
   3172      1.1  christos 	{
   3173  1.1.1.3  christos 	  int  len0 = sinfo.field_type (0)->length ();
   3174  1.1.1.2  christos 	  int offset = sinfo.field_offset (0);
   3175      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[0],
   3176  1.1.1.2  christos 					  &cinfo->float_regs, len0, offset))
   3177      1.1  christos 	    error (_("failed during argument setup"));
   3178      1.1  christos 
   3179  1.1.1.3  christos 	  int len1 = sinfo.field_type (1)->length ();
   3180  1.1.1.2  christos 	  offset = sinfo.field_offset (1);
   3181      1.1  christos 	  gdb_assert (len1 <= cinfo->xlen);
   3182      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[1],
   3183      1.1  christos 					  &cinfo->int_regs, len1, offset))
   3184      1.1  christos 	    error (_("failed during argument setup"));
   3185      1.1  christos 	  return;
   3186      1.1  christos 	}
   3187      1.1  christos 
   3188      1.1  christos       if (sinfo.number_of_fields () == 2
   3189      1.1  christos 	  && riscv_arg_regs_available (&cinfo->int_regs) >= 1
   3190      1.1  christos 	  && (is_integral_type (sinfo.field_type (0))
   3191  1.1.1.3  christos 	      && sinfo.field_type (0)->length () <= cinfo->xlen
   3192  1.1.1.2  christos 	      && sinfo.field_type(1)->code () == TYPE_CODE_FLT
   3193  1.1.1.3  christos 	      && sinfo.field_type (1)->length () <= cinfo->flen))
   3194      1.1  christos 	{
   3195  1.1.1.3  christos 	  int len0 = sinfo.field_type (0)->length ();
   3196  1.1.1.3  christos 	  int len1 = sinfo.field_type (1)->length ();
   3197      1.1  christos 
   3198      1.1  christos 	  gdb_assert (len0 <= cinfo->xlen);
   3199      1.1  christos 	  gdb_assert (len1 <= cinfo->flen);
   3200      1.1  christos 
   3201  1.1.1.2  christos 	  int offset = sinfo.field_offset (0);
   3202      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[0],
   3203  1.1.1.2  christos 					  &cinfo->int_regs, len0, offset))
   3204      1.1  christos 	    error (_("failed during argument setup"));
   3205      1.1  christos 
   3206  1.1.1.2  christos 	  offset = sinfo.field_offset (1);
   3207      1.1  christos 	  if (!riscv_assign_reg_location (&ainfo->argloc[1],
   3208      1.1  christos 					  &cinfo->float_regs,
   3209      1.1  christos 					  len1, offset))
   3210      1.1  christos 	    error (_("failed during argument setup"));
   3211      1.1  christos 
   3212      1.1  christos 	  return;
   3213      1.1  christos 	}
   3214      1.1  christos     }
   3215      1.1  christos 
   3216      1.1  christos   /* Non of the structure flattening cases apply, so we just pass using
   3217      1.1  christos      the integer ABI.  */
   3218      1.1  christos   riscv_call_arg_scalar_int (ainfo, cinfo);
   3219      1.1  christos }
   3220      1.1  christos 
   3221      1.1  christos /* Assign a location to call (or return) argument AINFO, the location is
   3222      1.1  christos    selected from CINFO which holds information about what call argument
   3223      1.1  christos    locations are available for use next.  The TYPE is the type of the
   3224      1.1  christos    argument being passed, this information is recorded into AINFO (along
   3225      1.1  christos    with some additional information derived from the type).  IS_UNNAMED
   3226      1.1  christos    is true if this is an unnamed (stdarg) argument, this info is also
   3227      1.1  christos    recorded into AINFO.
   3228      1.1  christos 
   3229      1.1  christos    After assigning a location to AINFO, CINFO will have been updated.  */
   3230      1.1  christos 
   3231      1.1  christos static void
   3232      1.1  christos riscv_arg_location (struct gdbarch *gdbarch,
   3233      1.1  christos 		    struct riscv_arg_info *ainfo,
   3234      1.1  christos 		    struct riscv_call_info *cinfo,
   3235      1.1  christos 		    struct type *type, bool is_unnamed)
   3236      1.1  christos {
   3237      1.1  christos   ainfo->type = type;
   3238  1.1.1.3  christos   ainfo->length = ainfo->type->length ();
   3239  1.1.1.2  christos   ainfo->align = type_align (ainfo->type);
   3240      1.1  christos   ainfo->is_unnamed = is_unnamed;
   3241      1.1  christos   ainfo->contents = nullptr;
   3242  1.1.1.2  christos   ainfo->argloc[0].c_length = 0;
   3243  1.1.1.2  christos   ainfo->argloc[1].c_length = 0;
   3244      1.1  christos 
   3245  1.1.1.2  christos   switch (ainfo->type->code ())
   3246      1.1  christos     {
   3247      1.1  christos     case TYPE_CODE_INT:
   3248      1.1  christos     case TYPE_CODE_BOOL:
   3249      1.1  christos     case TYPE_CODE_CHAR:
   3250      1.1  christos     case TYPE_CODE_RANGE:
   3251      1.1  christos     case TYPE_CODE_ENUM:
   3252      1.1  christos     case TYPE_CODE_PTR:
   3253  1.1.1.3  christos     case TYPE_CODE_FIXED_POINT:
   3254      1.1  christos       if (ainfo->length <= cinfo->xlen)
   3255      1.1  christos 	{
   3256      1.1  christos 	  ainfo->type = builtin_type (gdbarch)->builtin_long;
   3257      1.1  christos 	  ainfo->length = cinfo->xlen;
   3258      1.1  christos 	}
   3259      1.1  christos       else if (ainfo->length <= (2 * cinfo->xlen))
   3260      1.1  christos 	{
   3261      1.1  christos 	  ainfo->type = builtin_type (gdbarch)->builtin_long_long;
   3262      1.1  christos 	  ainfo->length = 2 * cinfo->xlen;
   3263      1.1  christos 	}
   3264      1.1  christos 
   3265      1.1  christos       /* Recalculate the alignment requirement.  */
   3266  1.1.1.2  christos       ainfo->align = type_align (ainfo->type);
   3267      1.1  christos       riscv_call_arg_scalar_int (ainfo, cinfo);
   3268      1.1  christos       break;
   3269      1.1  christos 
   3270      1.1  christos     case TYPE_CODE_FLT:
   3271      1.1  christos       riscv_call_arg_scalar_float (ainfo, cinfo);
   3272      1.1  christos       break;
   3273      1.1  christos 
   3274      1.1  christos     case TYPE_CODE_COMPLEX:
   3275      1.1  christos       riscv_call_arg_complex_float (ainfo, cinfo);
   3276      1.1  christos       break;
   3277      1.1  christos 
   3278      1.1  christos     case TYPE_CODE_STRUCT:
   3279  1.1.1.4  christos       if (!TYPE_HAS_DYNAMIC_LENGTH (ainfo->type))
   3280  1.1.1.4  christos 	{
   3281  1.1.1.4  christos 	  riscv_call_arg_struct (ainfo, cinfo);
   3282  1.1.1.4  christos 	  break;
   3283  1.1.1.4  christos 	}
   3284  1.1.1.4  christos       [[fallthrough]];
   3285      1.1  christos 
   3286      1.1  christos     default:
   3287      1.1  christos       riscv_call_arg_scalar_int (ainfo, cinfo);
   3288      1.1  christos       break;
   3289      1.1  christos     }
   3290      1.1  christos }
   3291      1.1  christos 
   3292      1.1  christos /* Used for printing debug information about the call argument location in
   3293      1.1  christos    INFO to STREAM.  The addresses in SP_REFS and SP_ARGS are the base
   3294      1.1  christos    addresses for the location of pass-by-reference and
   3295      1.1  christos    arguments-on-the-stack memory areas.  */
   3296      1.1  christos 
   3297      1.1  christos static void
   3298      1.1  christos riscv_print_arg_location (ui_file *stream, struct gdbarch *gdbarch,
   3299      1.1  christos 			  struct riscv_arg_info *info,
   3300      1.1  christos 			  CORE_ADDR sp_refs, CORE_ADDR sp_args)
   3301      1.1  christos {
   3302  1.1.1.3  christos   gdb_printf (stream, "type: '%s', length: 0x%x, alignment: 0x%x",
   3303  1.1.1.3  christos 	      TYPE_SAFE_NAME (info->type), info->length, info->align);
   3304      1.1  christos   switch (info->argloc[0].loc_type)
   3305      1.1  christos     {
   3306      1.1  christos     case riscv_arg_info::location::in_reg:
   3307  1.1.1.3  christos       gdb_printf
   3308      1.1  christos 	(stream, ", register %s",
   3309      1.1  christos 	 gdbarch_register_name (gdbarch, info->argloc[0].loc_data.regno));
   3310      1.1  christos       if (info->argloc[0].c_length < info->length)
   3311      1.1  christos 	{
   3312      1.1  christos 	  switch (info->argloc[1].loc_type)
   3313      1.1  christos 	    {
   3314      1.1  christos 	    case riscv_arg_info::location::in_reg:
   3315  1.1.1.3  christos 	      gdb_printf
   3316      1.1  christos 		(stream, ", register %s",
   3317      1.1  christos 		 gdbarch_register_name (gdbarch,
   3318      1.1  christos 					info->argloc[1].loc_data.regno));
   3319      1.1  christos 	      break;
   3320      1.1  christos 
   3321      1.1  christos 	    case riscv_arg_info::location::on_stack:
   3322  1.1.1.3  christos 	      gdb_printf (stream, ", on stack at offset 0x%x",
   3323  1.1.1.3  christos 			  info->argloc[1].loc_data.offset);
   3324      1.1  christos 	      break;
   3325      1.1  christos 
   3326      1.1  christos 	    case riscv_arg_info::location::by_ref:
   3327      1.1  christos 	    default:
   3328      1.1  christos 	      /* The second location should never be a reference, any
   3329      1.1  christos 		 argument being passed by reference just places its address
   3330      1.1  christos 		 in the first location and is done.  */
   3331      1.1  christos 	      error (_("invalid argument location"));
   3332      1.1  christos 	      break;
   3333      1.1  christos 	    }
   3334      1.1  christos 
   3335      1.1  christos 	  if (info->argloc[1].c_offset > info->argloc[0].c_length)
   3336  1.1.1.3  christos 	    gdb_printf (stream, " (offset 0x%x)",
   3337  1.1.1.3  christos 			info->argloc[1].c_offset);
   3338      1.1  christos 	}
   3339      1.1  christos       break;
   3340      1.1  christos 
   3341      1.1  christos     case riscv_arg_info::location::on_stack:
   3342  1.1.1.3  christos       gdb_printf (stream, ", on stack at offset 0x%x",
   3343  1.1.1.3  christos 		  info->argloc[0].loc_data.offset);
   3344      1.1  christos       break;
   3345      1.1  christos 
   3346      1.1  christos     case riscv_arg_info::location::by_ref:
   3347  1.1.1.3  christos       gdb_printf
   3348      1.1  christos 	(stream, ", by reference, data at offset 0x%x (%s)",
   3349      1.1  christos 	 info->argloc[0].loc_data.offset,
   3350      1.1  christos 	 core_addr_to_string (sp_refs + info->argloc[0].loc_data.offset));
   3351      1.1  christos       if (info->argloc[1].loc_type
   3352      1.1  christos 	  == riscv_arg_info::location::in_reg)
   3353  1.1.1.3  christos 	gdb_printf
   3354      1.1  christos 	  (stream, ", address in register %s",
   3355      1.1  christos 	   gdbarch_register_name (gdbarch, info->argloc[1].loc_data.regno));
   3356      1.1  christos       else
   3357      1.1  christos 	{
   3358      1.1  christos 	  gdb_assert (info->argloc[1].loc_type
   3359      1.1  christos 		      == riscv_arg_info::location::on_stack);
   3360  1.1.1.3  christos 	  gdb_printf
   3361      1.1  christos 	    (stream, ", address on stack at offset 0x%x (%s)",
   3362      1.1  christos 	     info->argloc[1].loc_data.offset,
   3363      1.1  christos 	     core_addr_to_string (sp_args + info->argloc[1].loc_data.offset));
   3364      1.1  christos 	}
   3365      1.1  christos       break;
   3366      1.1  christos 
   3367      1.1  christos     default:
   3368  1.1.1.3  christos       gdb_assert_not_reached ("unknown argument location type");
   3369      1.1  christos     }
   3370      1.1  christos }
   3371      1.1  christos 
   3372  1.1.1.2  christos /* Wrapper around REGCACHE->cooked_write.  Places the LEN bytes of DATA
   3373  1.1.1.2  christos    into a buffer that is at least as big as the register REGNUM, padding
   3374  1.1.1.2  christos    out the DATA with either 0x00, or 0xff.  For floating point registers
   3375  1.1.1.2  christos    0xff is used, for everyone else 0x00 is used.  */
   3376  1.1.1.2  christos 
   3377  1.1.1.2  christos static void
   3378  1.1.1.2  christos riscv_regcache_cooked_write (int regnum, const gdb_byte *data, int len,
   3379  1.1.1.2  christos 			     struct regcache *regcache, int flen)
   3380  1.1.1.2  christos {
   3381  1.1.1.2  christos   gdb_byte tmp [sizeof (ULONGEST)];
   3382  1.1.1.2  christos 
   3383  1.1.1.2  christos   /* FP values in FP registers must be NaN-boxed.  */
   3384  1.1.1.2  christos   if (riscv_is_fp_regno_p (regnum) && len < flen)
   3385  1.1.1.2  christos     memset (tmp, -1, sizeof (tmp));
   3386  1.1.1.2  christos   else
   3387  1.1.1.2  christos     memset (tmp, 0, sizeof (tmp));
   3388  1.1.1.2  christos   memcpy (tmp, data, len);
   3389  1.1.1.2  christos   regcache->cooked_write (regnum, tmp);
   3390  1.1.1.2  christos }
   3391  1.1.1.2  christos 
   3392      1.1  christos /* Implement the push dummy call gdbarch callback.  */
   3393      1.1  christos 
   3394      1.1  christos static CORE_ADDR
   3395      1.1  christos riscv_push_dummy_call (struct gdbarch *gdbarch,
   3396      1.1  christos 		       struct value *function,
   3397      1.1  christos 		       struct regcache *regcache,
   3398      1.1  christos 		       CORE_ADDR bp_addr,
   3399      1.1  christos 		       int nargs,
   3400      1.1  christos 		       struct value **args,
   3401      1.1  christos 		       CORE_ADDR sp,
   3402      1.1  christos 		       function_call_return_method return_method,
   3403      1.1  christos 		       CORE_ADDR struct_addr)
   3404      1.1  christos {
   3405      1.1  christos   int i;
   3406      1.1  christos   CORE_ADDR sp_args, sp_refs;
   3407      1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   3408      1.1  christos 
   3409      1.1  christos   struct riscv_arg_info *arg_info =
   3410      1.1  christos     (struct riscv_arg_info *) alloca (nargs * sizeof (struct riscv_arg_info));
   3411      1.1  christos 
   3412      1.1  christos   struct riscv_call_info call_info (gdbarch);
   3413      1.1  christos 
   3414      1.1  christos   CORE_ADDR osp = sp;
   3415      1.1  christos 
   3416  1.1.1.4  christos   struct type *ftype = check_typedef (function->type ());
   3417      1.1  christos 
   3418  1.1.1.2  christos   if (ftype->code () == TYPE_CODE_PTR)
   3419  1.1.1.3  christos     ftype = check_typedef (ftype->target_type ());
   3420      1.1  christos 
   3421      1.1  christos   /* We'll use register $a0 if we're returning a struct.  */
   3422      1.1  christos   if (return_method == return_method_struct)
   3423      1.1  christos     ++call_info.int_regs.next_regnum;
   3424      1.1  christos 
   3425      1.1  christos   for (i = 0; i < nargs; ++i)
   3426      1.1  christos     {
   3427      1.1  christos       struct value *arg_value;
   3428      1.1  christos       struct type *arg_type;
   3429      1.1  christos       struct riscv_arg_info *info = &arg_info[i];
   3430      1.1  christos 
   3431      1.1  christos       arg_value = args[i];
   3432  1.1.1.4  christos       arg_type = check_typedef (arg_value->type ());
   3433      1.1  christos 
   3434      1.1  christos       riscv_arg_location (gdbarch, info, &call_info, arg_type,
   3435  1.1.1.3  christos 			  ftype->has_varargs () && i >= ftype->num_fields ());
   3436      1.1  christos 
   3437      1.1  christos       if (info->type != arg_type)
   3438      1.1  christos 	arg_value = value_cast (info->type, arg_value);
   3439  1.1.1.4  christos       info->contents = arg_value->contents ().data ();
   3440      1.1  christos     }
   3441      1.1  christos 
   3442      1.1  christos   /* Adjust the stack pointer and align it.  */
   3443      1.1  christos   sp = sp_refs = align_down (sp - call_info.memory.ref_offset, SP_ALIGNMENT);
   3444      1.1  christos   sp = sp_args = align_down (sp - call_info.memory.arg_offset, SP_ALIGNMENT);
   3445      1.1  christos 
   3446  1.1.1.4  christos   if (riscv_debug_infcall)
   3447      1.1  christos     {
   3448  1.1.1.4  christos       RISCV_INFCALL_SCOPED_DEBUG_START_END ("dummy call args");
   3449  1.1.1.4  christos       riscv_infcall_debug_printf ("floating point ABI %s in use",
   3450  1.1.1.4  christos 				  (riscv_has_fp_abi (gdbarch)
   3451  1.1.1.4  christos 				   ? "is" : "is not"));
   3452  1.1.1.4  christos       riscv_infcall_debug_printf ("xlen: %d", call_info.xlen);
   3453  1.1.1.4  christos       riscv_infcall_debug_printf ("flen: %d", call_info.flen);
   3454      1.1  christos       if (return_method == return_method_struct)
   3455  1.1.1.4  christos 	riscv_infcall_debug_printf
   3456  1.1.1.4  christos 	  ("[**] struct return pointer in register $A0");
   3457      1.1  christos       for (i = 0; i < nargs; ++i)
   3458      1.1  christos 	{
   3459      1.1  christos 	  struct riscv_arg_info *info = &arg_info [i];
   3460  1.1.1.4  christos 	  string_file tmp;
   3461      1.1  christos 
   3462  1.1.1.4  christos 	  riscv_print_arg_location (&tmp, gdbarch, info, sp_refs, sp_args);
   3463  1.1.1.4  christos 	  riscv_infcall_debug_printf ("[%2d] %s", i, tmp.string ().c_str ());
   3464      1.1  christos 	}
   3465      1.1  christos       if (call_info.memory.arg_offset > 0
   3466      1.1  christos 	  || call_info.memory.ref_offset > 0)
   3467      1.1  christos 	{
   3468  1.1.1.4  christos 	  riscv_infcall_debug_printf ("              Original sp: %s",
   3469  1.1.1.4  christos 				      core_addr_to_string (osp));
   3470  1.1.1.4  christos 	  riscv_infcall_debug_printf ("Stack required (for args): 0x%x",
   3471  1.1.1.4  christos 				      call_info.memory.arg_offset);
   3472  1.1.1.4  christos 	  riscv_infcall_debug_printf ("Stack required (for refs): 0x%x",
   3473  1.1.1.4  christos 				      call_info.memory.ref_offset);
   3474  1.1.1.4  christos 	  riscv_infcall_debug_printf ("          Stack allocated: %s",
   3475  1.1.1.4  christos 				      core_addr_to_string_nz (osp - sp));
   3476      1.1  christos 	}
   3477      1.1  christos     }
   3478      1.1  christos 
   3479      1.1  christos   /* Now load the argument into registers, or onto the stack.  */
   3480      1.1  christos 
   3481      1.1  christos   if (return_method == return_method_struct)
   3482      1.1  christos     {
   3483      1.1  christos       gdb_byte buf[sizeof (LONGEST)];
   3484      1.1  christos 
   3485      1.1  christos       store_unsigned_integer (buf, call_info.xlen, byte_order, struct_addr);
   3486      1.1  christos       regcache->cooked_write (RISCV_A0_REGNUM, buf);
   3487      1.1  christos     }
   3488      1.1  christos 
   3489      1.1  christos   for (i = 0; i < nargs; ++i)
   3490      1.1  christos     {
   3491      1.1  christos       CORE_ADDR dst;
   3492      1.1  christos       int second_arg_length = 0;
   3493      1.1  christos       const gdb_byte *second_arg_data;
   3494      1.1  christos       struct riscv_arg_info *info = &arg_info [i];
   3495      1.1  christos 
   3496      1.1  christos       gdb_assert (info->length > 0);
   3497      1.1  christos 
   3498      1.1  christos       switch (info->argloc[0].loc_type)
   3499      1.1  christos 	{
   3500      1.1  christos 	case riscv_arg_info::location::in_reg:
   3501      1.1  christos 	  {
   3502      1.1  christos 	    gdb_assert (info->argloc[0].c_length <= info->length);
   3503  1.1.1.2  christos 
   3504  1.1.1.2  christos 	    riscv_regcache_cooked_write (info->argloc[0].loc_data.regno,
   3505  1.1.1.2  christos 					 (info->contents
   3506  1.1.1.2  christos 					  + info->argloc[0].c_offset),
   3507  1.1.1.2  christos 					 info->argloc[0].c_length,
   3508  1.1.1.2  christos 					 regcache, call_info.flen);
   3509      1.1  christos 	    second_arg_length =
   3510  1.1.1.2  christos 	      (((info->argloc[0].c_length + info->argloc[0].c_offset) < info->length)
   3511      1.1  christos 	       ? info->argloc[1].c_length : 0);
   3512      1.1  christos 	    second_arg_data = info->contents + info->argloc[1].c_offset;
   3513      1.1  christos 	  }
   3514      1.1  christos 	  break;
   3515      1.1  christos 
   3516      1.1  christos 	case riscv_arg_info::location::on_stack:
   3517      1.1  christos 	  dst = sp_args + info->argloc[0].loc_data.offset;
   3518      1.1  christos 	  write_memory (dst, info->contents, info->length);
   3519      1.1  christos 	  second_arg_length = 0;
   3520      1.1  christos 	  break;
   3521      1.1  christos 
   3522      1.1  christos 	case riscv_arg_info::location::by_ref:
   3523      1.1  christos 	  dst = sp_refs + info->argloc[0].loc_data.offset;
   3524      1.1  christos 	  write_memory (dst, info->contents, info->length);
   3525      1.1  christos 
   3526      1.1  christos 	  second_arg_length = call_info.xlen;
   3527      1.1  christos 	  second_arg_data = (gdb_byte *) &dst;
   3528      1.1  christos 	  break;
   3529      1.1  christos 
   3530      1.1  christos 	default:
   3531  1.1.1.3  christos 	  gdb_assert_not_reached ("unknown argument location type");
   3532      1.1  christos 	}
   3533      1.1  christos 
   3534      1.1  christos       if (second_arg_length > 0)
   3535      1.1  christos 	{
   3536      1.1  christos 	  switch (info->argloc[1].loc_type)
   3537      1.1  christos 	    {
   3538      1.1  christos 	    case riscv_arg_info::location::in_reg:
   3539      1.1  christos 	      {
   3540      1.1  christos 		gdb_assert ((riscv_is_fp_regno_p (info->argloc[1].loc_data.regno)
   3541      1.1  christos 			     && second_arg_length <= call_info.flen)
   3542      1.1  christos 			    || second_arg_length <= call_info.xlen);
   3543  1.1.1.2  christos 		riscv_regcache_cooked_write (info->argloc[1].loc_data.regno,
   3544  1.1.1.2  christos 					     second_arg_data,
   3545  1.1.1.2  christos 					     second_arg_length,
   3546  1.1.1.2  christos 					     regcache, call_info.flen);
   3547      1.1  christos 	      }
   3548      1.1  christos 	      break;
   3549      1.1  christos 
   3550      1.1  christos 	    case riscv_arg_info::location::on_stack:
   3551      1.1  christos 	      {
   3552      1.1  christos 		CORE_ADDR arg_addr;
   3553      1.1  christos 
   3554      1.1  christos 		arg_addr = sp_args + info->argloc[1].loc_data.offset;
   3555      1.1  christos 		write_memory (arg_addr, second_arg_data, second_arg_length);
   3556      1.1  christos 		break;
   3557      1.1  christos 	      }
   3558      1.1  christos 
   3559      1.1  christos 	    case riscv_arg_info::location::by_ref:
   3560      1.1  christos 	    default:
   3561      1.1  christos 	      /* The second location should never be a reference, any
   3562      1.1  christos 		 argument being passed by reference just places its address
   3563      1.1  christos 		 in the first location and is done.  */
   3564      1.1  christos 	      error (_("invalid argument location"));
   3565      1.1  christos 	      break;
   3566      1.1  christos 	    }
   3567      1.1  christos 	}
   3568      1.1  christos     }
   3569      1.1  christos 
   3570      1.1  christos   /* Set the dummy return value to bp_addr.
   3571      1.1  christos      A dummy breakpoint will be setup to execute the call.  */
   3572      1.1  christos 
   3573  1.1.1.4  christos   riscv_infcall_debug_printf ("writing $ra = %s",
   3574  1.1.1.4  christos 			      core_addr_to_string (bp_addr));
   3575      1.1  christos   regcache_cooked_write_unsigned (regcache, RISCV_RA_REGNUM, bp_addr);
   3576      1.1  christos 
   3577      1.1  christos   /* Finally, update the stack pointer.  */
   3578      1.1  christos 
   3579  1.1.1.4  christos   riscv_infcall_debug_printf ("writing $sp = %s", core_addr_to_string (sp));
   3580      1.1  christos   regcache_cooked_write_unsigned (regcache, RISCV_SP_REGNUM, sp);
   3581      1.1  christos 
   3582      1.1  christos   return sp;
   3583      1.1  christos }
   3584      1.1  christos 
   3585      1.1  christos /* Implement the return_value gdbarch method.  */
   3586      1.1  christos 
   3587      1.1  christos static enum return_value_convention
   3588      1.1  christos riscv_return_value (struct gdbarch  *gdbarch,
   3589      1.1  christos 		    struct value *function,
   3590      1.1  christos 		    struct type *type,
   3591      1.1  christos 		    struct regcache *regcache,
   3592  1.1.1.4  christos 		    struct value **read_value,
   3593      1.1  christos 		    const gdb_byte *writebuf)
   3594      1.1  christos {
   3595      1.1  christos   struct riscv_call_info call_info (gdbarch);
   3596      1.1  christos   struct riscv_arg_info info;
   3597      1.1  christos   struct type *arg_type;
   3598      1.1  christos 
   3599      1.1  christos   arg_type = check_typedef (type);
   3600      1.1  christos   riscv_arg_location (gdbarch, &info, &call_info, arg_type, false);
   3601      1.1  christos 
   3602  1.1.1.4  christos   if (riscv_debug_infcall)
   3603      1.1  christos     {
   3604  1.1.1.4  christos       string_file tmp;
   3605  1.1.1.4  christos       riscv_print_arg_location (&tmp, gdbarch, &info, 0, 0);
   3606  1.1.1.4  christos       riscv_infcall_debug_printf ("[R] %s", tmp.string ().c_str ());
   3607      1.1  christos     }
   3608      1.1  christos 
   3609  1.1.1.4  christos   if (read_value != nullptr || writebuf != nullptr)
   3610      1.1  christos     {
   3611  1.1.1.3  christos       unsigned int arg_len;
   3612  1.1.1.3  christos       struct value *abi_val;
   3613  1.1.1.4  christos       gdb_byte *readbuf = nullptr;
   3614  1.1.1.3  christos       int regnum;
   3615  1.1.1.3  christos 
   3616  1.1.1.3  christos       /* We only do one thing at a time.  */
   3617  1.1.1.4  christos       gdb_assert (read_value == nullptr || writebuf == nullptr);
   3618  1.1.1.3  christos 
   3619  1.1.1.3  christos       /* In some cases the argument is not returned as the declared type,
   3620  1.1.1.3  christos 	 and we need to cast to or from the ABI type in order to
   3621  1.1.1.3  christos 	 correctly access the argument.  When writing to the machine we
   3622  1.1.1.3  christos 	 do the cast here, when reading from the machine the cast occurs
   3623  1.1.1.3  christos 	 later, after extracting the value.  As the ABI type can be
   3624  1.1.1.3  christos 	 larger than the declared type, then the read or write buffers
   3625  1.1.1.3  christos 	 passed in might be too small.  Here we ensure that we are using
   3626  1.1.1.3  christos 	 buffers of sufficient size.  */
   3627  1.1.1.3  christos       if (writebuf != nullptr)
   3628  1.1.1.3  christos 	{
   3629  1.1.1.3  christos 	  struct value *arg_val;
   3630      1.1  christos 
   3631  1.1.1.3  christos 	  if (is_fixed_point_type (arg_type))
   3632      1.1  christos 	    {
   3633  1.1.1.3  christos 	      /* Convert the argument to the type used to pass
   3634  1.1.1.3  christos 		 the return value, but being careful to preserve
   3635  1.1.1.3  christos 		 the fact that the value needs to be returned
   3636  1.1.1.3  christos 		 unscaled.  */
   3637  1.1.1.3  christos 	      gdb_mpz unscaled;
   3638  1.1.1.3  christos 
   3639  1.1.1.3  christos 	      unscaled.read (gdb::make_array_view (writebuf,
   3640  1.1.1.3  christos 						   arg_type->length ()),
   3641  1.1.1.3  christos 			     type_byte_order (arg_type),
   3642  1.1.1.3  christos 			     arg_type->is_unsigned ());
   3643  1.1.1.4  christos 	      abi_val = value::allocate (info.type);
   3644  1.1.1.4  christos 	      unscaled.write (abi_val->contents_raw (),
   3645  1.1.1.3  christos 			      type_byte_order (info.type),
   3646  1.1.1.3  christos 			      info.type->is_unsigned ());
   3647      1.1  christos 	    }
   3648  1.1.1.3  christos 	  else
   3649      1.1  christos 	    {
   3650  1.1.1.3  christos 	      arg_val = value_from_contents (arg_type, writebuf);
   3651  1.1.1.3  christos 	      abi_val = value_cast (info.type, arg_val);
   3652      1.1  christos 	    }
   3653  1.1.1.4  christos 	  writebuf = abi_val->contents_raw ().data ();
   3654  1.1.1.3  christos 	}
   3655  1.1.1.3  christos       else
   3656  1.1.1.3  christos 	{
   3657  1.1.1.4  christos 	  abi_val = value::allocate (info.type);
   3658  1.1.1.4  christos 	  readbuf = abi_val->contents_raw ().data ();
   3659  1.1.1.3  christos 	}
   3660  1.1.1.3  christos       arg_len = info.type->length ();
   3661      1.1  christos 
   3662  1.1.1.3  christos       switch (info.argloc[0].loc_type)
   3663  1.1.1.3  christos 	{
   3664  1.1.1.3  christos 	  /* Return value in register(s).  */
   3665  1.1.1.3  christos 	case riscv_arg_info::location::in_reg:
   3666  1.1.1.3  christos 	  {
   3667  1.1.1.3  christos 	    regnum = info.argloc[0].loc_data.regno;
   3668  1.1.1.3  christos 	    gdb_assert (info.argloc[0].c_length <= arg_len);
   3669  1.1.1.3  christos 	    gdb_assert (info.argloc[0].c_length
   3670  1.1.1.3  christos 			<= register_size (gdbarch, regnum));
   3671  1.1.1.3  christos 
   3672  1.1.1.3  christos 	    if (readbuf)
   3673  1.1.1.3  christos 	      {
   3674  1.1.1.3  christos 		gdb_byte *ptr = readbuf + info.argloc[0].c_offset;
   3675  1.1.1.3  christos 		regcache->cooked_read_part (regnum, 0,
   3676  1.1.1.3  christos 					    info.argloc[0].c_length,
   3677  1.1.1.3  christos 					    ptr);
   3678  1.1.1.3  christos 	      }
   3679  1.1.1.3  christos 
   3680  1.1.1.3  christos 	    if (writebuf)
   3681  1.1.1.3  christos 	      {
   3682  1.1.1.3  christos 		const gdb_byte *ptr = writebuf + info.argloc[0].c_offset;
   3683  1.1.1.3  christos 		riscv_regcache_cooked_write (regnum, ptr,
   3684  1.1.1.3  christos 					     info.argloc[0].c_length,
   3685  1.1.1.3  christos 					     regcache, call_info.flen);
   3686  1.1.1.3  christos 	      }
   3687  1.1.1.3  christos 
   3688  1.1.1.3  christos 	    /* A return value in register can have a second part in a
   3689  1.1.1.3  christos 	       second register.  */
   3690  1.1.1.3  christos 	    if (info.argloc[1].c_length > 0)
   3691  1.1.1.3  christos 	      {
   3692  1.1.1.3  christos 		switch (info.argloc[1].loc_type)
   3693  1.1.1.3  christos 		  {
   3694  1.1.1.3  christos 		  case riscv_arg_info::location::in_reg:
   3695  1.1.1.3  christos 		    regnum = info.argloc[1].loc_data.regno;
   3696  1.1.1.3  christos 
   3697  1.1.1.3  christos 		    gdb_assert ((info.argloc[0].c_length
   3698  1.1.1.3  christos 				 + info.argloc[1].c_length) <= arg_len);
   3699  1.1.1.3  christos 		    gdb_assert (info.argloc[1].c_length
   3700  1.1.1.3  christos 				<= register_size (gdbarch, regnum));
   3701  1.1.1.3  christos 
   3702  1.1.1.3  christos 		    if (readbuf)
   3703  1.1.1.3  christos 		      {
   3704  1.1.1.3  christos 			readbuf += info.argloc[1].c_offset;
   3705  1.1.1.3  christos 			regcache->cooked_read_part (regnum, 0,
   3706  1.1.1.3  christos 						    info.argloc[1].c_length,
   3707  1.1.1.3  christos 						    readbuf);
   3708  1.1.1.3  christos 		      }
   3709  1.1.1.3  christos 
   3710  1.1.1.3  christos 		    if (writebuf)
   3711  1.1.1.3  christos 		      {
   3712  1.1.1.3  christos 			const gdb_byte *ptr
   3713  1.1.1.3  christos 			  = writebuf + info.argloc[1].c_offset;
   3714  1.1.1.3  christos 			riscv_regcache_cooked_write
   3715  1.1.1.3  christos 			  (regnum, ptr, info.argloc[1].c_length,
   3716  1.1.1.3  christos 			   regcache, call_info.flen);
   3717  1.1.1.3  christos 		      }
   3718  1.1.1.3  christos 		    break;
   3719  1.1.1.3  christos 
   3720  1.1.1.3  christos 		  case riscv_arg_info::location::by_ref:
   3721  1.1.1.3  christos 		  case riscv_arg_info::location::on_stack:
   3722  1.1.1.3  christos 		  default:
   3723  1.1.1.3  christos 		    error (_("invalid argument location"));
   3724  1.1.1.3  christos 		    break;
   3725  1.1.1.3  christos 		  }
   3726  1.1.1.3  christos 	      }
   3727      1.1  christos 	  }
   3728  1.1.1.3  christos 	  break;
   3729      1.1  christos 
   3730  1.1.1.3  christos 	  /* Return value by reference will have its address in A0.  */
   3731  1.1.1.3  christos 	case riscv_arg_info::location::by_ref:
   3732      1.1  christos 	  {
   3733  1.1.1.3  christos 	    ULONGEST addr;
   3734  1.1.1.3  christos 
   3735  1.1.1.3  christos 	    regcache_cooked_read_unsigned (regcache, RISCV_A0_REGNUM,
   3736  1.1.1.3  christos 					   &addr);
   3737  1.1.1.4  christos 	    if (read_value != nullptr)
   3738  1.1.1.4  christos 	      {
   3739  1.1.1.4  christos 		abi_val = value_at_non_lval (type, addr);
   3740  1.1.1.4  christos 		/* Also reset the expected type, so that the cast
   3741  1.1.1.4  christos 		   later on is a no-op.  If the cast is not a no-op,
   3742  1.1.1.4  christos 		   and if the return type is variably-sized, then the
   3743  1.1.1.4  christos 		   type of ABI_VAL will differ from ARG_TYPE due to
   3744  1.1.1.4  christos 		   dynamic type resolution, and so will most likely
   3745  1.1.1.4  christos 		   fail.  */
   3746  1.1.1.4  christos 		arg_type = abi_val->type ();
   3747  1.1.1.4  christos 	      }
   3748  1.1.1.3  christos 	    if (writebuf != nullptr)
   3749  1.1.1.3  christos 	      write_memory (addr, writebuf, info.length);
   3750      1.1  christos 	  }
   3751  1.1.1.3  christos 	  break;
   3752  1.1.1.3  christos 
   3753  1.1.1.3  christos 	case riscv_arg_info::location::on_stack:
   3754  1.1.1.3  christos 	default:
   3755  1.1.1.3  christos 	  error (_("invalid argument location"));
   3756  1.1.1.3  christos 	  break;
   3757  1.1.1.3  christos 	}
   3758  1.1.1.3  christos 
   3759  1.1.1.3  christos       /* This completes the cast from abi type back to the declared type
   3760  1.1.1.3  christos 	 in the case that we are reading from the machine.  See the
   3761  1.1.1.3  christos 	 comment at the head of this block for more details.  */
   3762  1.1.1.4  christos       if (read_value != nullptr)
   3763  1.1.1.3  christos 	{
   3764  1.1.1.3  christos 	  if (is_fixed_point_type (arg_type))
   3765  1.1.1.3  christos 	    {
   3766  1.1.1.3  christos 	      /* Convert abi_val to the actual return type, but
   3767  1.1.1.3  christos 		 being careful to preserve the fact that abi_val
   3768  1.1.1.3  christos 		 is unscaled.  */
   3769  1.1.1.3  christos 	      gdb_mpz unscaled;
   3770  1.1.1.3  christos 
   3771  1.1.1.4  christos 	      unscaled.read (abi_val->contents (),
   3772  1.1.1.3  christos 			     type_byte_order (info.type),
   3773  1.1.1.3  christos 			     info.type->is_unsigned ());
   3774  1.1.1.4  christos 	      *read_value = value::allocate (arg_type);
   3775  1.1.1.4  christos 	      unscaled.write ((*read_value)->contents_raw (),
   3776  1.1.1.3  christos 			      type_byte_order (arg_type),
   3777  1.1.1.3  christos 			      arg_type->is_unsigned ());
   3778  1.1.1.3  christos 	    }
   3779  1.1.1.3  christos 	  else
   3780  1.1.1.4  christos 	    *read_value = value_cast (arg_type, abi_val);
   3781  1.1.1.3  christos 	}
   3782      1.1  christos     }
   3783      1.1  christos 
   3784      1.1  christos   switch (info.argloc[0].loc_type)
   3785      1.1  christos     {
   3786      1.1  christos     case riscv_arg_info::location::in_reg:
   3787      1.1  christos       return RETURN_VALUE_REGISTER_CONVENTION;
   3788      1.1  christos     case riscv_arg_info::location::by_ref:
   3789  1.1.1.3  christos       return RETURN_VALUE_ABI_PRESERVES_ADDRESS;
   3790      1.1  christos     case riscv_arg_info::location::on_stack:
   3791      1.1  christos     default:
   3792      1.1  christos       error (_("invalid argument location"));
   3793      1.1  christos     }
   3794      1.1  christos }
   3795      1.1  christos 
   3796      1.1  christos /* Implement the frame_align gdbarch method.  */
   3797      1.1  christos 
   3798      1.1  christos static CORE_ADDR
   3799      1.1  christos riscv_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
   3800      1.1  christos {
   3801      1.1  christos   return align_down (addr, 16);
   3802      1.1  christos }
   3803      1.1  christos 
   3804      1.1  christos /* Generate, or return the cached frame cache for the RiscV frame
   3805      1.1  christos    unwinder.  */
   3806      1.1  christos 
   3807      1.1  christos static struct riscv_unwind_cache *
   3808  1.1.1.4  christos riscv_frame_cache (const frame_info_ptr &this_frame, void **this_cache)
   3809      1.1  christos {
   3810      1.1  christos   CORE_ADDR pc, start_addr;
   3811      1.1  christos   struct riscv_unwind_cache *cache;
   3812      1.1  christos   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   3813      1.1  christos   int numregs, regno;
   3814      1.1  christos 
   3815      1.1  christos   if ((*this_cache) != NULL)
   3816      1.1  christos     return (struct riscv_unwind_cache *) *this_cache;
   3817      1.1  christos 
   3818      1.1  christos   cache = FRAME_OBSTACK_ZALLOC (struct riscv_unwind_cache);
   3819      1.1  christos   cache->regs = trad_frame_alloc_saved_regs (this_frame);
   3820      1.1  christos   (*this_cache) = cache;
   3821      1.1  christos 
   3822      1.1  christos   /* Scan the prologue, filling in the cache.  */
   3823      1.1  christos   start_addr = get_frame_func (this_frame);
   3824      1.1  christos   pc = get_frame_pc (this_frame);
   3825      1.1  christos   riscv_scan_prologue (gdbarch, start_addr, pc, cache);
   3826      1.1  christos 
   3827      1.1  christos   /* We can now calculate the frame base address.  */
   3828      1.1  christos   cache->frame_base
   3829  1.1.1.3  christos     = (get_frame_register_unsigned (this_frame, cache->frame_base_reg)
   3830      1.1  christos        + cache->frame_base_offset);
   3831  1.1.1.4  christos   riscv_unwinder_debug_printf ("frame base is %s ($%s + 0x%x)",
   3832  1.1.1.4  christos 			       core_addr_to_string (cache->frame_base),
   3833  1.1.1.4  christos 			       gdbarch_register_name (gdbarch,
   3834  1.1.1.4  christos 						      cache->frame_base_reg),
   3835  1.1.1.4  christos 			       cache->frame_base_offset);
   3836      1.1  christos 
   3837      1.1  christos   /* The prologue scanner sets the address of registers stored to the stack
   3838      1.1  christos      as the offset of that register from the frame base.  The prologue
   3839      1.1  christos      scanner doesn't know the actual frame base value, and so is unable to
   3840      1.1  christos      compute the exact address.  We do now know the frame base value, so
   3841      1.1  christos      update the address of registers stored to the stack.  */
   3842      1.1  christos   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
   3843      1.1  christos   for (regno = 0; regno < numregs; ++regno)
   3844      1.1  christos     {
   3845  1.1.1.3  christos       if (cache->regs[regno].is_addr ())
   3846  1.1.1.3  christos 	cache->regs[regno].set_addr (cache->regs[regno].addr ()
   3847  1.1.1.3  christos 				     + cache->frame_base);
   3848      1.1  christos     }
   3849      1.1  christos 
   3850      1.1  christos   /* The previous $pc can be found wherever the $ra value can be found.
   3851      1.1  christos      The previous $ra value is gone, this would have been stored be the
   3852      1.1  christos      previous frame if required.  */
   3853      1.1  christos   cache->regs[gdbarch_pc_regnum (gdbarch)] = cache->regs[RISCV_RA_REGNUM];
   3854  1.1.1.3  christos   cache->regs[RISCV_RA_REGNUM].set_unknown ();
   3855      1.1  christos 
   3856      1.1  christos   /* Build the frame id.  */
   3857      1.1  christos   cache->this_id = frame_id_build (cache->frame_base, start_addr);
   3858      1.1  christos 
   3859      1.1  christos   /* The previous $sp value is the frame base value.  */
   3860  1.1.1.3  christos   cache->regs[gdbarch_sp_regnum (gdbarch)].set_value (cache->frame_base);
   3861      1.1  christos 
   3862      1.1  christos   return cache;
   3863      1.1  christos }
   3864      1.1  christos 
   3865      1.1  christos /* Implement the this_id callback for RiscV frame unwinder.  */
   3866      1.1  christos 
   3867      1.1  christos static void
   3868  1.1.1.4  christos riscv_frame_this_id (const frame_info_ptr &this_frame,
   3869      1.1  christos 		     void **prologue_cache,
   3870      1.1  christos 		     struct frame_id *this_id)
   3871      1.1  christos {
   3872      1.1  christos   struct riscv_unwind_cache *cache;
   3873      1.1  christos 
   3874  1.1.1.2  christos   try
   3875      1.1  christos     {
   3876      1.1  christos       cache = riscv_frame_cache (this_frame, prologue_cache);
   3877      1.1  christos       *this_id = cache->this_id;
   3878      1.1  christos     }
   3879  1.1.1.2  christos   catch (const gdb_exception_error &ex)
   3880      1.1  christos     {
   3881      1.1  christos       /* Ignore errors, this leaves the frame id as the predefined outer
   3882  1.1.1.3  christos 	 frame id which terminates the backtrace at this point.  */
   3883      1.1  christos     }
   3884      1.1  christos }
   3885      1.1  christos 
   3886      1.1  christos /* Implement the prev_register callback for RiscV frame unwinder.  */
   3887      1.1  christos 
   3888      1.1  christos static struct value *
   3889  1.1.1.4  christos riscv_frame_prev_register (const frame_info_ptr &this_frame,
   3890      1.1  christos 			   void **prologue_cache,
   3891      1.1  christos 			   int regnum)
   3892      1.1  christos {
   3893      1.1  christos   struct riscv_unwind_cache *cache;
   3894      1.1  christos 
   3895      1.1  christos   cache = riscv_frame_cache (this_frame, prologue_cache);
   3896      1.1  christos   return trad_frame_get_prev_register (this_frame, cache->regs, regnum);
   3897      1.1  christos }
   3898      1.1  christos 
   3899      1.1  christos /* Structure defining the RiscV normal frame unwind functions.  Since we
   3900      1.1  christos    are the fallback unwinder (DWARF unwinder is used first), we use the
   3901      1.1  christos    default frame sniffer, which always accepts the frame.  */
   3902      1.1  christos 
   3903      1.1  christos static const struct frame_unwind riscv_frame_unwind =
   3904      1.1  christos {
   3905  1.1.1.3  christos   /*.name          =*/ "riscv prologue",
   3906      1.1  christos   /*.type          =*/ NORMAL_FRAME,
   3907      1.1  christos   /*.stop_reason   =*/ default_frame_unwind_stop_reason,
   3908      1.1  christos   /*.this_id       =*/ riscv_frame_this_id,
   3909      1.1  christos   /*.prev_register =*/ riscv_frame_prev_register,
   3910      1.1  christos   /*.unwind_data   =*/ NULL,
   3911      1.1  christos   /*.sniffer       =*/ default_frame_sniffer,
   3912      1.1  christos   /*.dealloc_cache =*/ NULL,
   3913      1.1  christos   /*.prev_arch     =*/ NULL,
   3914      1.1  christos };
   3915      1.1  christos 
   3916  1.1.1.3  christos /* Extract a set of required target features out of ABFD.  If ABFD is
   3917  1.1.1.3  christos    nullptr then a RISCV_GDBARCH_FEATURES is returned in its default state.  */
   3918      1.1  christos 
   3919      1.1  christos static struct riscv_gdbarch_features
   3920  1.1.1.3  christos riscv_features_from_bfd (const bfd *abfd)
   3921      1.1  christos {
   3922      1.1  christos   struct riscv_gdbarch_features features;
   3923      1.1  christos 
   3924      1.1  christos   /* Now try to improve on the defaults by looking at the binary we are
   3925      1.1  christos      going to execute.  We assume the user knows what they are doing and
   3926      1.1  christos      that the target will match the binary.  Remember, this code path is
   3927      1.1  christos      only used at all if the target hasn't given us a description, so this
   3928      1.1  christos      is really a last ditched effort to do something sane before giving
   3929      1.1  christos      up.  */
   3930  1.1.1.3  christos   if (abfd != nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
   3931      1.1  christos     {
   3932  1.1.1.3  christos       unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
   3933  1.1.1.3  christos       int e_flags = elf_elfheader (abfd)->e_flags;
   3934      1.1  christos 
   3935      1.1  christos       if (eclass == ELFCLASS32)
   3936      1.1  christos 	features.xlen = 4;
   3937      1.1  christos       else if (eclass == ELFCLASS64)
   3938      1.1  christos 	features.xlen = 8;
   3939      1.1  christos       else
   3940  1.1.1.3  christos 	internal_error (_("unknown ELF header class %d"), eclass);
   3941      1.1  christos 
   3942      1.1  christos       if (e_flags & EF_RISCV_FLOAT_ABI_DOUBLE)
   3943      1.1  christos 	features.flen = 8;
   3944      1.1  christos       else if (e_flags & EF_RISCV_FLOAT_ABI_SINGLE)
   3945      1.1  christos 	features.flen = 4;
   3946  1.1.1.3  christos 
   3947  1.1.1.3  christos       if (e_flags & EF_RISCV_RVE)
   3948  1.1.1.3  christos 	{
   3949  1.1.1.3  christos 	  if (features.xlen == 8)
   3950  1.1.1.3  christos 	    {
   3951  1.1.1.3  christos 	      warning (_("64-bit ELF with RV32E flag set!  Assuming 32-bit"));
   3952  1.1.1.3  christos 	      features.xlen = 4;
   3953  1.1.1.3  christos 	    }
   3954  1.1.1.3  christos 	  features.embedded = true;
   3955  1.1.1.3  christos 	}
   3956      1.1  christos     }
   3957      1.1  christos 
   3958      1.1  christos   return features;
   3959      1.1  christos }
   3960      1.1  christos 
   3961      1.1  christos /* Find a suitable default target description.  Use the contents of INFO,
   3962      1.1  christos    specifically the bfd object being executed, to guide the selection of a
   3963      1.1  christos    suitable default target description.  */
   3964      1.1  christos 
   3965      1.1  christos static const struct target_desc *
   3966      1.1  christos riscv_find_default_target_description (const struct gdbarch_info info)
   3967      1.1  christos {
   3968      1.1  christos   /* Extract desired feature set from INFO.  */
   3969      1.1  christos   struct riscv_gdbarch_features features
   3970  1.1.1.3  christos     = riscv_features_from_bfd (info.abfd);
   3971      1.1  christos 
   3972  1.1.1.3  christos   /* If the XLEN field is still 0 then we got nothing useful from INFO.BFD,
   3973  1.1.1.3  christos      maybe there was no bfd object.  In this case we fall back to a minimal
   3974  1.1.1.3  christos      useful target with no floating point, the x-register size is selected
   3975  1.1.1.3  christos      based on the architecture from INFO.  */
   3976      1.1  christos   if (features.xlen == 0)
   3977  1.1.1.3  christos     features.xlen = info.bfd_arch_info->bits_per_word == 32 ? 4 : 8;
   3978      1.1  christos 
   3979      1.1  christos   /* Now build a target description based on the feature set.  */
   3980  1.1.1.2  christos   return riscv_lookup_target_description (features);
   3981      1.1  christos }
   3982      1.1  christos 
   3983  1.1.1.3  christos /* Add all the RISC-V specific register groups into GDBARCH.  */
   3984      1.1  christos 
   3985      1.1  christos static void
   3986      1.1  christos riscv_add_reggroups (struct gdbarch *gdbarch)
   3987      1.1  christos {
   3988      1.1  christos   reggroup_add (gdbarch, csr_reggroup);
   3989      1.1  christos }
   3990      1.1  christos 
   3991      1.1  christos /* Implement the "dwarf2_reg_to_regnum" gdbarch method.  */
   3992      1.1  christos 
   3993      1.1  christos static int
   3994      1.1  christos riscv_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   3995      1.1  christos {
   3996  1.1.1.3  christos   if (reg <= RISCV_DWARF_REGNUM_X31)
   3997      1.1  christos     return RISCV_ZERO_REGNUM + (reg - RISCV_DWARF_REGNUM_X0);
   3998      1.1  christos 
   3999  1.1.1.3  christos   else if (reg <= RISCV_DWARF_REGNUM_F31)
   4000      1.1  christos     return RISCV_FIRST_FP_REGNUM + (reg - RISCV_DWARF_REGNUM_F0);
   4001      1.1  christos 
   4002  1.1.1.3  christos   else if (reg >= RISCV_DWARF_FIRST_CSR && reg <= RISCV_DWARF_LAST_CSR)
   4003  1.1.1.3  christos     return RISCV_FIRST_CSR_REGNUM + (reg - RISCV_DWARF_FIRST_CSR);
   4004  1.1.1.3  christos 
   4005  1.1.1.3  christos   else if (reg >= RISCV_DWARF_REGNUM_V0 && reg <= RISCV_DWARF_REGNUM_V31)
   4006  1.1.1.3  christos     return RISCV_V0_REGNUM + (reg - RISCV_DWARF_REGNUM_V0);
   4007  1.1.1.3  christos 
   4008      1.1  christos   return -1;
   4009      1.1  christos }
   4010      1.1  christos 
   4011  1.1.1.2  christos /* Implement the gcc_target_options method.  We have to select the arch and abi
   4012  1.1.1.2  christos    from the feature info.  We have enough feature info to select the abi, but
   4013  1.1.1.2  christos    not enough info for the arch given all of the possible architecture
   4014  1.1.1.2  christos    extensions.  So choose reasonable defaults for now.  */
   4015  1.1.1.2  christos 
   4016  1.1.1.2  christos static std::string
   4017  1.1.1.2  christos riscv_gcc_target_options (struct gdbarch *gdbarch)
   4018  1.1.1.2  christos {
   4019  1.1.1.2  christos   int isa_xlen = riscv_isa_xlen (gdbarch);
   4020  1.1.1.2  christos   int isa_flen = riscv_isa_flen (gdbarch);
   4021  1.1.1.2  christos   int abi_xlen = riscv_abi_xlen (gdbarch);
   4022  1.1.1.2  christos   int abi_flen = riscv_abi_flen (gdbarch);
   4023  1.1.1.2  christos   std::string target_options;
   4024  1.1.1.2  christos 
   4025  1.1.1.2  christos   target_options = "-march=rv";
   4026  1.1.1.2  christos   if (isa_xlen == 8)
   4027  1.1.1.2  christos     target_options += "64";
   4028  1.1.1.2  christos   else
   4029  1.1.1.2  christos     target_options += "32";
   4030  1.1.1.2  christos   if (isa_flen == 8)
   4031  1.1.1.2  christos     target_options += "gc";
   4032  1.1.1.2  christos   else if (isa_flen == 4)
   4033  1.1.1.2  christos     target_options += "imafc";
   4034  1.1.1.2  christos   else
   4035  1.1.1.2  christos     target_options += "imac";
   4036  1.1.1.2  christos 
   4037  1.1.1.2  christos   target_options += " -mabi=";
   4038  1.1.1.2  christos   if (abi_xlen == 8)
   4039  1.1.1.2  christos     target_options += "lp64";
   4040  1.1.1.2  christos   else
   4041  1.1.1.2  christos     target_options += "ilp32";
   4042  1.1.1.2  christos   if (abi_flen == 8)
   4043  1.1.1.2  christos     target_options += "d";
   4044  1.1.1.2  christos   else if (abi_flen == 4)
   4045  1.1.1.2  christos     target_options += "f";
   4046  1.1.1.2  christos 
   4047  1.1.1.2  christos   /* The gdb loader doesn't handle link-time relaxation relocations.  */
   4048  1.1.1.2  christos   target_options += " -mno-relax";
   4049  1.1.1.2  christos 
   4050  1.1.1.2  christos   return target_options;
   4051  1.1.1.2  christos }
   4052  1.1.1.2  christos 
   4053  1.1.1.2  christos /* Call back from tdesc_use_registers, called for each unknown register
   4054  1.1.1.2  christos    found in the target description.
   4055  1.1.1.2  christos 
   4056  1.1.1.2  christos    See target-description.h (typedef tdesc_unknown_register_ftype) for a
   4057  1.1.1.2  christos    discussion of the arguments and return values.  */
   4058  1.1.1.2  christos 
   4059  1.1.1.2  christos static int
   4060  1.1.1.2  christos riscv_tdesc_unknown_reg (struct gdbarch *gdbarch, tdesc_feature *feature,
   4061  1.1.1.2  christos 			 const char *reg_name, int possible_regnum)
   4062  1.1.1.2  christos {
   4063  1.1.1.2  christos   /* At one point in time GDB had an incorrect default target description
   4064  1.1.1.2  christos      that duplicated the fflags, frm, and fcsr registers in both the FPU
   4065  1.1.1.2  christos      and CSR register sets.
   4066  1.1.1.2  christos 
   4067  1.1.1.2  christos      Some targets (QEMU) copied these target descriptions into their source
   4068  1.1.1.3  christos      tree, and so we're now stuck working with some versions of QEMU that
   4069  1.1.1.2  christos      declare the same registers twice.
   4070  1.1.1.2  christos 
   4071  1.1.1.3  christos      To make matters worse, if GDB tries to read or write to these
   4072  1.1.1.3  christos      registers using the register number assigned in the FPU feature set,
   4073  1.1.1.3  christos      then QEMU will fail to read the register, so we must use the register
   4074  1.1.1.3  christos      number declared in the CSR feature set.
   4075  1.1.1.3  christos 
   4076  1.1.1.3  christos      Luckily, GDB scans the FPU feature first, and then the CSR feature,
   4077  1.1.1.3  christos      which means that the CSR feature will be the one we end up using, the
   4078  1.1.1.3  christos      versions of these registers in the FPU feature will appear as unknown
   4079  1.1.1.3  christos      registers and will be passed through to this code.
   4080  1.1.1.3  christos 
   4081  1.1.1.3  christos      To prevent these duplicate registers showing up in any of the register
   4082  1.1.1.3  christos      lists, and to prevent GDB every trying to access the FPU feature copies,
   4083  1.1.1.3  christos      we spot the three problematic registers here, and record the register
   4084  1.1.1.3  christos      number that GDB has assigned them.  Then in riscv_register_name we will
   4085  1.1.1.3  christos      return no name for the three duplicates, this hides the duplicates from
   4086  1.1.1.3  christos      the user.  */
   4087  1.1.1.3  christos   if (strcmp (tdesc_feature_name (feature), riscv_freg_feature.name ()) == 0)
   4088  1.1.1.2  christos     {
   4089  1.1.1.3  christos       riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   4090  1.1.1.2  christos       int *regnum_ptr = nullptr;
   4091  1.1.1.2  christos 
   4092  1.1.1.2  christos       if (strcmp (reg_name, "fflags") == 0)
   4093  1.1.1.2  christos 	regnum_ptr = &tdep->duplicate_fflags_regnum;
   4094  1.1.1.2  christos       else if (strcmp (reg_name, "frm") == 0)
   4095  1.1.1.2  christos 	regnum_ptr = &tdep->duplicate_frm_regnum;
   4096  1.1.1.2  christos       else if (strcmp (reg_name, "fcsr") == 0)
   4097  1.1.1.2  christos 	regnum_ptr = &tdep->duplicate_fcsr_regnum;
   4098  1.1.1.2  christos 
   4099  1.1.1.2  christos       if (regnum_ptr != nullptr)
   4100  1.1.1.2  christos 	{
   4101  1.1.1.2  christos 	  /* This means the register appears more than twice in the target
   4102  1.1.1.2  christos 	     description.  Just let GDB add this as another register.
   4103  1.1.1.2  christos 	     We'll have duplicates in the register name list, but there's
   4104  1.1.1.2  christos 	     not much more we can do.  */
   4105  1.1.1.2  christos 	  if (*regnum_ptr != -1)
   4106  1.1.1.2  christos 	    return -1;
   4107  1.1.1.2  christos 
   4108  1.1.1.2  christos 	  /* Record the number assigned to this register, then return the
   4109  1.1.1.2  christos 	     number (so it actually gets assigned to this register).  */
   4110  1.1.1.2  christos 	  *regnum_ptr = possible_regnum;
   4111  1.1.1.2  christos 	  return possible_regnum;
   4112  1.1.1.2  christos 	}
   4113  1.1.1.2  christos     }
   4114  1.1.1.2  christos 
   4115  1.1.1.2  christos   /* Any unknown registers in the CSR feature are recorded within a single
   4116  1.1.1.2  christos      block so we can easily identify these registers when making choices
   4117  1.1.1.2  christos      about register groups in riscv_register_reggroup_p.  */
   4118  1.1.1.3  christos   if (strcmp (tdesc_feature_name (feature), riscv_csr_feature.name ()) == 0)
   4119  1.1.1.2  christos     {
   4120  1.1.1.3  christos       riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   4121  1.1.1.2  christos       if (tdep->unknown_csrs_first_regnum == -1)
   4122  1.1.1.2  christos 	tdep->unknown_csrs_first_regnum = possible_regnum;
   4123  1.1.1.2  christos       gdb_assert (tdep->unknown_csrs_first_regnum
   4124  1.1.1.2  christos 		  + tdep->unknown_csrs_count == possible_regnum);
   4125  1.1.1.2  christos       tdep->unknown_csrs_count++;
   4126  1.1.1.2  christos       return possible_regnum;
   4127  1.1.1.2  christos     }
   4128  1.1.1.2  christos 
   4129  1.1.1.2  christos   /* Some other unknown register.  Don't assign this a number now, it will
   4130  1.1.1.2  christos      be assigned a number automatically later by the target description
   4131  1.1.1.2  christos      handling code.  */
   4132  1.1.1.2  christos   return -1;
   4133  1.1.1.2  christos }
   4134  1.1.1.2  christos 
   4135  1.1.1.2  christos /* Implement the gnu_triplet_regexp method.  A single compiler supports both
   4136  1.1.1.2  christos    32-bit and 64-bit code, and may be named riscv32 or riscv64 or (not
   4137  1.1.1.2  christos    recommended) riscv.  */
   4138  1.1.1.2  christos 
   4139  1.1.1.2  christos static const char *
   4140  1.1.1.2  christos riscv_gnu_triplet_regexp (struct gdbarch *gdbarch)
   4141  1.1.1.2  christos {
   4142  1.1.1.2  christos   return "riscv(32|64)?";
   4143  1.1.1.2  christos }
   4144  1.1.1.2  christos 
   4145  1.1.1.4  christos /* Implementation of `gdbarch_stap_is_single_operand', as defined in
   4146  1.1.1.4  christos    gdbarch.h.  */
   4147  1.1.1.4  christos 
   4148  1.1.1.4  christos static int
   4149  1.1.1.4  christos riscv_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
   4150  1.1.1.4  christos {
   4151  1.1.1.4  christos   return (ISDIGIT (*s) /* Literal number.  */
   4152  1.1.1.4  christos 	  || *s == '(' /* Register indirection.  */
   4153  1.1.1.4  christos 	  || ISALPHA (*s)); /* Register value.  */
   4154  1.1.1.4  christos }
   4155  1.1.1.4  christos 
   4156  1.1.1.4  christos /* String that appears before a register name in a SystemTap register
   4157  1.1.1.4  christos    indirect expression.  */
   4158  1.1.1.4  christos 
   4159  1.1.1.4  christos static const char *const stap_register_indirection_prefixes[] =
   4160  1.1.1.4  christos {
   4161  1.1.1.4  christos   "(", nullptr
   4162  1.1.1.4  christos };
   4163  1.1.1.4  christos 
   4164  1.1.1.4  christos /* String that appears after a register name in a SystemTap register
   4165  1.1.1.4  christos    indirect expression.  */
   4166  1.1.1.4  christos 
   4167  1.1.1.4  christos static const char *const stap_register_indirection_suffixes[] =
   4168  1.1.1.4  christos {
   4169  1.1.1.4  christos   ")", nullptr
   4170  1.1.1.4  christos };
   4171  1.1.1.4  christos 
   4172      1.1  christos /* Initialize the current architecture based on INFO.  If possible,
   4173      1.1  christos    re-use an architecture from ARCHES, which is a list of
   4174      1.1  christos    architectures already created during this debugging session.
   4175      1.1  christos 
   4176      1.1  christos    Called e.g. at program startup, when reading a core file, and when
   4177      1.1  christos    reading a binary file.  */
   4178      1.1  christos 
   4179      1.1  christos static struct gdbarch *
   4180      1.1  christos riscv_gdbarch_init (struct gdbarch_info info,
   4181      1.1  christos 		    struct gdbarch_list *arches)
   4182      1.1  christos {
   4183      1.1  christos   struct riscv_gdbarch_features features;
   4184      1.1  christos   const struct target_desc *tdesc = info.target_desc;
   4185      1.1  christos 
   4186      1.1  christos   /* Ensure we always have a target description.  */
   4187      1.1  christos   if (!tdesc_has_registers (tdesc))
   4188      1.1  christos     tdesc = riscv_find_default_target_description (info);
   4189  1.1.1.3  christos   gdb_assert (tdesc != nullptr);
   4190      1.1  christos 
   4191  1.1.1.4  christos   riscv_gdbarch_debug_printf ("have got a target description");
   4192      1.1  christos 
   4193  1.1.1.3  christos   tdesc_arch_data_up tdesc_data = tdesc_data_alloc ();
   4194  1.1.1.2  christos   std::vector<riscv_pending_register_alias> pending_aliases;
   4195      1.1  christos 
   4196  1.1.1.3  christos   bool valid_p = (riscv_xreg_feature.check (tdesc, tdesc_data.get (),
   4197  1.1.1.3  christos 					    &pending_aliases, &features)
   4198  1.1.1.3  christos 		  && riscv_freg_feature.check (tdesc, tdesc_data.get (),
   4199  1.1.1.3  christos 					       &pending_aliases, &features)
   4200  1.1.1.3  christos 		  && riscv_virtual_feature.check (tdesc, tdesc_data.get (),
   4201  1.1.1.3  christos 						  &pending_aliases, &features)
   4202  1.1.1.3  christos 		  && riscv_csr_feature.check (tdesc, tdesc_data.get (),
   4203  1.1.1.3  christos 					      &pending_aliases, &features)
   4204  1.1.1.3  christos 		  && riscv_vector_feature.check (tdesc, tdesc_data.get (),
   4205  1.1.1.3  christos 						 &pending_aliases, &features));
   4206      1.1  christos   if (!valid_p)
   4207      1.1  christos     {
   4208  1.1.1.4  christos       riscv_gdbarch_debug_printf ("target description is not valid");
   4209      1.1  christos       return NULL;
   4210      1.1  christos     }
   4211      1.1  christos 
   4212  1.1.1.3  christos   if (tdesc_found_register (tdesc_data.get (), RISCV_CSR_FFLAGS_REGNUM))
   4213  1.1.1.3  christos     features.has_fflags_reg = true;
   4214  1.1.1.3  christos   if (tdesc_found_register (tdesc_data.get (), RISCV_CSR_FRM_REGNUM))
   4215  1.1.1.3  christos     features.has_frm_reg = true;
   4216  1.1.1.3  christos   if (tdesc_found_register (tdesc_data.get (), RISCV_CSR_FCSR_REGNUM))
   4217  1.1.1.3  christos     features.has_fcsr_reg = true;
   4218  1.1.1.3  christos 
   4219      1.1  christos   /* Have a look at what the supplied (if any) bfd object requires of the
   4220      1.1  christos      target, then check that this matches with what the target is
   4221      1.1  christos      providing.  */
   4222      1.1  christos   struct riscv_gdbarch_features abi_features
   4223  1.1.1.3  christos     = riscv_features_from_bfd (info.abfd);
   4224  1.1.1.3  christos 
   4225  1.1.1.3  christos   /* If the ABI_FEATURES xlen is 0 then this indicates we got no useful abi
   4226  1.1.1.3  christos      features from the INFO object.  In this case we just treat the
   4227  1.1.1.3  christos      hardware features as defining the abi.  */
   4228  1.1.1.3  christos   if (abi_features.xlen == 0)
   4229  1.1.1.3  christos     abi_features = features;
   4230  1.1.1.3  christos 
   4231      1.1  christos   /* In theory a binary compiled for RV32 could run on an RV64 target,
   4232      1.1  christos      however, this has not been tested in GDB yet, so for now we require
   4233      1.1  christos      that the requested xlen match the targets xlen.  */
   4234  1.1.1.3  christos   if (abi_features.xlen != features.xlen)
   4235      1.1  christos     error (_("bfd requires xlen %d, but target has xlen %d"),
   4236  1.1.1.3  christos 	    abi_features.xlen, features.xlen);
   4237      1.1  christos   /* We do support running binaries compiled for 32-bit float on targets
   4238      1.1  christos      with 64-bit float, so we only complain if the binary requires more
   4239      1.1  christos      than the target has available.  */
   4240      1.1  christos   if (abi_features.flen > features.flen)
   4241      1.1  christos     error (_("bfd requires flen %d, but target has flen %d"),
   4242  1.1.1.3  christos 	    abi_features.flen, features.flen);
   4243      1.1  christos 
   4244      1.1  christos   /* Find a candidate among the list of pre-declared architectures.  */
   4245      1.1  christos   for (arches = gdbarch_list_lookup_by_info (arches, &info);
   4246      1.1  christos        arches != NULL;
   4247      1.1  christos        arches = gdbarch_list_lookup_by_info (arches->next, &info))
   4248      1.1  christos     {
   4249      1.1  christos       /* Check that the feature set of the ARCHES matches the feature set
   4250  1.1.1.3  christos 	 we are looking for.  If it doesn't then we can't reuse this
   4251  1.1.1.3  christos 	 gdbarch.  */
   4252  1.1.1.3  christos       riscv_gdbarch_tdep *other_tdep
   4253  1.1.1.3  christos 	= gdbarch_tdep<riscv_gdbarch_tdep> (arches->gdbarch);
   4254      1.1  christos 
   4255      1.1  christos       if (other_tdep->isa_features != features
   4256      1.1  christos 	  || other_tdep->abi_features != abi_features)
   4257  1.1.1.3  christos 	continue;
   4258      1.1  christos 
   4259      1.1  christos       break;
   4260      1.1  christos     }
   4261      1.1  christos 
   4262      1.1  christos   if (arches != NULL)
   4263  1.1.1.3  christos     return arches->gdbarch;
   4264      1.1  christos 
   4265      1.1  christos   /* None found, so create a new architecture from the information provided.  */
   4266  1.1.1.4  christos   gdbarch *gdbarch
   4267  1.1.1.4  christos     = gdbarch_alloc (&info, gdbarch_tdep_up (new riscv_gdbarch_tdep));
   4268  1.1.1.4  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   4269  1.1.1.4  christos 
   4270      1.1  christos   tdep->isa_features = features;
   4271      1.1  christos   tdep->abi_features = abi_features;
   4272      1.1  christos 
   4273      1.1  christos   /* Target data types.  */
   4274      1.1  christos   set_gdbarch_short_bit (gdbarch, 16);
   4275      1.1  christos   set_gdbarch_int_bit (gdbarch, 32);
   4276      1.1  christos   set_gdbarch_long_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
   4277      1.1  christos   set_gdbarch_long_long_bit (gdbarch, 64);
   4278      1.1  christos   set_gdbarch_float_bit (gdbarch, 32);
   4279      1.1  christos   set_gdbarch_double_bit (gdbarch, 64);
   4280      1.1  christos   set_gdbarch_long_double_bit (gdbarch, 128);
   4281  1.1.1.3  christos   set_gdbarch_long_double_format (gdbarch, floatformats_ieee_quad);
   4282      1.1  christos   set_gdbarch_ptr_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
   4283      1.1  christos   set_gdbarch_char_signed (gdbarch, 0);
   4284  1.1.1.2  christos   set_gdbarch_type_align (gdbarch, riscv_type_align);
   4285      1.1  christos 
   4286      1.1  christos   /* Information about the target architecture.  */
   4287  1.1.1.4  christos   set_gdbarch_return_value_as_value (gdbarch, riscv_return_value);
   4288      1.1  christos   set_gdbarch_breakpoint_kind_from_pc (gdbarch, riscv_breakpoint_kind_from_pc);
   4289      1.1  christos   set_gdbarch_sw_breakpoint_from_kind (gdbarch, riscv_sw_breakpoint_from_kind);
   4290      1.1  christos   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
   4291      1.1  christos 
   4292      1.1  christos   /* Functions to analyze frames.  */
   4293      1.1  christos   set_gdbarch_skip_prologue (gdbarch, riscv_skip_prologue);
   4294      1.1  christos   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   4295      1.1  christos   set_gdbarch_frame_align (gdbarch, riscv_frame_align);
   4296      1.1  christos 
   4297      1.1  christos   /* Functions handling dummy frames.  */
   4298      1.1  christos   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
   4299      1.1  christos   set_gdbarch_push_dummy_code (gdbarch, riscv_push_dummy_code);
   4300      1.1  christos   set_gdbarch_push_dummy_call (gdbarch, riscv_push_dummy_call);
   4301      1.1  christos 
   4302      1.1  christos   /* Frame unwinders.  Use DWARF debug info if available, otherwise use our own
   4303      1.1  christos      unwinder.  */
   4304      1.1  christos   dwarf2_append_unwinders (gdbarch);
   4305      1.1  christos   frame_unwind_append_unwinder (gdbarch, &riscv_frame_unwind);
   4306      1.1  christos 
   4307      1.1  christos   /* Register architecture.  */
   4308      1.1  christos   riscv_add_reggroups (gdbarch);
   4309      1.1  christos 
   4310      1.1  christos   /* Internal <-> external register number maps.  */
   4311      1.1  christos   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, riscv_dwarf_reg_to_regnum);
   4312      1.1  christos 
   4313      1.1  christos   /* We reserve all possible register numbers for the known registers.
   4314      1.1  christos      This means the target description mechanism will add any target
   4315      1.1  christos      specific registers after this number.  This helps make debugging GDB
   4316      1.1  christos      just a little easier.  */
   4317      1.1  christos   set_gdbarch_num_regs (gdbarch, RISCV_LAST_REGNUM + 1);
   4318      1.1  christos 
   4319      1.1  christos   /* Some specific register numbers GDB likes to know about.  */
   4320      1.1  christos   set_gdbarch_sp_regnum (gdbarch, RISCV_SP_REGNUM);
   4321      1.1  christos   set_gdbarch_pc_regnum (gdbarch, RISCV_PC_REGNUM);
   4322      1.1  christos 
   4323      1.1  christos   set_gdbarch_print_registers_info (gdbarch, riscv_print_registers_info);
   4324      1.1  christos 
   4325  1.1.1.3  christos   set_tdesc_pseudo_register_name (gdbarch, riscv_pseudo_register_name);
   4326  1.1.1.3  christos   set_tdesc_pseudo_register_type (gdbarch, riscv_pseudo_register_type);
   4327  1.1.1.3  christos   set_tdesc_pseudo_register_reggroup_p (gdbarch,
   4328  1.1.1.3  christos 					riscv_pseudo_register_reggroup_p);
   4329  1.1.1.3  christos   set_gdbarch_pseudo_register_read (gdbarch, riscv_pseudo_register_read);
   4330  1.1.1.4  christos   set_gdbarch_deprecated_pseudo_register_write (gdbarch,
   4331  1.1.1.4  christos 						riscv_pseudo_register_write);
   4332  1.1.1.3  christos 
   4333      1.1  christos   /* Finalise the target description registers.  */
   4334  1.1.1.3  christos   tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data),
   4335  1.1.1.3  christos 		       riscv_tdesc_unknown_reg);
   4336  1.1.1.3  christos 
   4337  1.1.1.3  christos   /* Calculate the number of pseudo registers we need.  The fflags and frm
   4338  1.1.1.3  christos      registers are sub-fields of the fcsr CSR register (csr3).  However,
   4339  1.1.1.3  christos      these registers can also be accessed directly as separate CSR
   4340  1.1.1.3  christos      registers (fflags is csr1, and frm is csr2).  And so, some targets
   4341  1.1.1.3  christos      might choose to offer direct access to all three registers in the
   4342  1.1.1.3  christos      target description, while other targets might choose to only offer
   4343  1.1.1.3  christos      access to fcsr.
   4344  1.1.1.3  christos 
   4345  1.1.1.3  christos      As we scan the target description we spot which of fcsr, fflags, and
   4346  1.1.1.3  christos      frm are available.  If fcsr is available but either of fflags and/or
   4347  1.1.1.3  christos      frm are not available, then we add pseudo-registers to provide the
   4348  1.1.1.3  christos      missing functionality.
   4349  1.1.1.3  christos 
   4350  1.1.1.3  christos      This has to be done after the call to tdesc_use_registers as we don't
   4351  1.1.1.3  christos      know the final register number until after that call, and the pseudo
   4352  1.1.1.3  christos      register numbers need to be after the physical registers.  */
   4353  1.1.1.3  christos   int num_pseudo_regs = 0;
   4354  1.1.1.3  christos   int next_pseudo_regnum = gdbarch_num_regs (gdbarch);
   4355  1.1.1.3  christos 
   4356  1.1.1.3  christos   if (features.has_fflags_reg)
   4357  1.1.1.3  christos     tdep->fflags_regnum = RISCV_CSR_FFLAGS_REGNUM;
   4358  1.1.1.3  christos   else if (features.has_fcsr_reg)
   4359  1.1.1.3  christos     {
   4360  1.1.1.3  christos       tdep->fflags_regnum = next_pseudo_regnum;
   4361  1.1.1.3  christos       pending_aliases.emplace_back ("csr1", (void *) &tdep->fflags_regnum);
   4362  1.1.1.3  christos       next_pseudo_regnum++;
   4363  1.1.1.3  christos       num_pseudo_regs++;
   4364  1.1.1.3  christos     }
   4365  1.1.1.3  christos 
   4366  1.1.1.3  christos   if (features.has_frm_reg)
   4367  1.1.1.3  christos     tdep->frm_regnum = RISCV_CSR_FRM_REGNUM;
   4368  1.1.1.3  christos   else if (features.has_fcsr_reg)
   4369  1.1.1.3  christos     {
   4370  1.1.1.3  christos       tdep->frm_regnum = next_pseudo_regnum;
   4371  1.1.1.3  christos       pending_aliases.emplace_back ("csr2", (void *) &tdep->frm_regnum);
   4372  1.1.1.3  christos       next_pseudo_regnum++;
   4373  1.1.1.3  christos       num_pseudo_regs++;
   4374  1.1.1.3  christos     }
   4375  1.1.1.3  christos 
   4376  1.1.1.3  christos   set_gdbarch_num_pseudo_regs (gdbarch, num_pseudo_regs);
   4377      1.1  christos 
   4378      1.1  christos   /* Override the register type callback setup by the target description
   4379      1.1  christos      mechanism.  This allows us to provide special type for floating point
   4380      1.1  christos      registers.  */
   4381      1.1  christos   set_gdbarch_register_type (gdbarch, riscv_register_type);
   4382      1.1  christos 
   4383      1.1  christos   /* Override the register name callback setup by the target description
   4384      1.1  christos      mechanism.  This allows us to force our preferred names for the
   4385      1.1  christos      registers, no matter what the target description called them.  */
   4386      1.1  christos   set_gdbarch_register_name (gdbarch, riscv_register_name);
   4387      1.1  christos 
   4388  1.1.1.3  christos   /* Tell GDB which RISC-V registers are read-only. */
   4389  1.1.1.3  christos   set_gdbarch_cannot_store_register (gdbarch, riscv_cannot_store_register);
   4390  1.1.1.3  christos 
   4391      1.1  christos   /* Override the register group callback setup by the target description
   4392      1.1  christos      mechanism.  This allows us to force registers into the groups we
   4393      1.1  christos      want, ignoring what the target tells us.  */
   4394      1.1  christos   set_gdbarch_register_reggroup_p (gdbarch, riscv_register_reggroup_p);
   4395      1.1  christos 
   4396  1.1.1.2  christos   /* Create register aliases for alternative register names.  We only
   4397  1.1.1.2  christos      create aliases for registers which were mentioned in the target
   4398  1.1.1.2  christos      description.  */
   4399  1.1.1.2  christos   for (const auto &alias : pending_aliases)
   4400  1.1.1.2  christos     alias.create (gdbarch);
   4401  1.1.1.2  christos 
   4402  1.1.1.2  christos   /* Compile command hooks.  */
   4403  1.1.1.2  christos   set_gdbarch_gcc_target_options (gdbarch, riscv_gcc_target_options);
   4404  1.1.1.2  christos   set_gdbarch_gnu_triplet_regexp (gdbarch, riscv_gnu_triplet_regexp);
   4405      1.1  christos 
   4406  1.1.1.3  christos   /* Disassembler options support.  */
   4407  1.1.1.3  christos   set_gdbarch_valid_disassembler_options (gdbarch,
   4408  1.1.1.3  christos 					  disassembler_options_riscv ());
   4409  1.1.1.3  christos   set_gdbarch_disassembler_options (gdbarch, &riscv_disassembler_options);
   4410  1.1.1.3  christos 
   4411  1.1.1.4  christos   /* SystemTap Support.  */
   4412  1.1.1.4  christos   set_gdbarch_stap_is_single_operand (gdbarch, riscv_stap_is_single_operand);
   4413  1.1.1.4  christos   set_gdbarch_stap_register_indirection_prefixes
   4414  1.1.1.4  christos     (gdbarch, stap_register_indirection_prefixes);
   4415  1.1.1.4  christos   set_gdbarch_stap_register_indirection_suffixes
   4416  1.1.1.4  christos     (gdbarch, stap_register_indirection_suffixes);
   4417  1.1.1.4  christos 
   4418      1.1  christos   /* Hook in OS ABI-specific overrides, if they have been registered.  */
   4419      1.1  christos   gdbarch_init_osabi (info, gdbarch);
   4420      1.1  christos 
   4421  1.1.1.2  christos   register_riscv_ravenscar_ops (gdbarch);
   4422  1.1.1.2  christos 
   4423      1.1  christos   return gdbarch;
   4424      1.1  christos }
   4425      1.1  christos 
   4426      1.1  christos /* This decodes the current instruction and determines the address of the
   4427      1.1  christos    next instruction.  */
   4428      1.1  christos 
   4429      1.1  christos static CORE_ADDR
   4430      1.1  christos riscv_next_pc (struct regcache *regcache, CORE_ADDR pc)
   4431      1.1  christos {
   4432      1.1  christos   struct gdbarch *gdbarch = regcache->arch ();
   4433  1.1.1.3  christos   const riscv_gdbarch_tdep *tdep
   4434  1.1.1.3  christos     = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   4435      1.1  christos   struct riscv_insn insn;
   4436      1.1  christos   CORE_ADDR next_pc;
   4437      1.1  christos 
   4438      1.1  christos   insn.decode (gdbarch, pc);
   4439      1.1  christos   next_pc = pc + insn.length ();
   4440      1.1  christos 
   4441      1.1  christos   if (insn.opcode () == riscv_insn::JAL)
   4442      1.1  christos     next_pc = pc + insn.imm_signed ();
   4443      1.1  christos   else if (insn.opcode () == riscv_insn::JALR)
   4444      1.1  christos     {
   4445      1.1  christos       LONGEST source;
   4446      1.1  christos       regcache->cooked_read (insn.rs1 (), &source);
   4447      1.1  christos       next_pc = (source + insn.imm_signed ()) & ~(CORE_ADDR) 0x1;
   4448      1.1  christos     }
   4449      1.1  christos   else if (insn.opcode () == riscv_insn::BEQ)
   4450      1.1  christos     {
   4451      1.1  christos       LONGEST src1, src2;
   4452      1.1  christos       regcache->cooked_read (insn.rs1 (), &src1);
   4453      1.1  christos       regcache->cooked_read (insn.rs2 (), &src2);
   4454      1.1  christos       if (src1 == src2)
   4455      1.1  christos 	next_pc = pc + insn.imm_signed ();
   4456      1.1  christos     }
   4457      1.1  christos   else if (insn.opcode () == riscv_insn::BNE)
   4458      1.1  christos     {
   4459      1.1  christos       LONGEST src1, src2;
   4460      1.1  christos       regcache->cooked_read (insn.rs1 (), &src1);
   4461      1.1  christos       regcache->cooked_read (insn.rs2 (), &src2);
   4462      1.1  christos       if (src1 != src2)
   4463      1.1  christos 	next_pc = pc + insn.imm_signed ();
   4464      1.1  christos     }
   4465      1.1  christos   else if (insn.opcode () == riscv_insn::BLT)
   4466      1.1  christos     {
   4467      1.1  christos       LONGEST src1, src2;
   4468      1.1  christos       regcache->cooked_read (insn.rs1 (), &src1);
   4469      1.1  christos       regcache->cooked_read (insn.rs2 (), &src2);
   4470      1.1  christos       if (src1 < src2)
   4471      1.1  christos 	next_pc = pc + insn.imm_signed ();
   4472      1.1  christos     }
   4473      1.1  christos   else if (insn.opcode () == riscv_insn::BGE)
   4474      1.1  christos     {
   4475      1.1  christos       LONGEST src1, src2;
   4476      1.1  christos       regcache->cooked_read (insn.rs1 (), &src1);
   4477      1.1  christos       regcache->cooked_read (insn.rs2 (), &src2);
   4478      1.1  christos       if (src1 >= src2)
   4479      1.1  christos 	next_pc = pc + insn.imm_signed ();
   4480      1.1  christos     }
   4481      1.1  christos   else if (insn.opcode () == riscv_insn::BLTU)
   4482      1.1  christos     {
   4483      1.1  christos       ULONGEST src1, src2;
   4484      1.1  christos       regcache->cooked_read (insn.rs1 (), &src1);
   4485      1.1  christos       regcache->cooked_read (insn.rs2 (), &src2);
   4486      1.1  christos       if (src1 < src2)
   4487      1.1  christos 	next_pc = pc + insn.imm_signed ();
   4488      1.1  christos     }
   4489      1.1  christos   else if (insn.opcode () == riscv_insn::BGEU)
   4490      1.1  christos     {
   4491      1.1  christos       ULONGEST src1, src2;
   4492      1.1  christos       regcache->cooked_read (insn.rs1 (), &src1);
   4493      1.1  christos       regcache->cooked_read (insn.rs2 (), &src2);
   4494      1.1  christos       if (src1 >= src2)
   4495      1.1  christos 	next_pc = pc + insn.imm_signed ();
   4496      1.1  christos     }
   4497  1.1.1.3  christos   else if (insn.opcode () == riscv_insn::ECALL)
   4498  1.1.1.3  christos     {
   4499  1.1.1.3  christos       if (tdep->syscall_next_pc != nullptr)
   4500  1.1.1.3  christos 	next_pc = tdep->syscall_next_pc (get_current_frame ());
   4501  1.1.1.3  christos     }
   4502      1.1  christos 
   4503      1.1  christos   return next_pc;
   4504      1.1  christos }
   4505      1.1  christos 
   4506  1.1.1.4  christos /* Return true if INSN is not a control transfer instruction and is allowed to
   4507  1.1.1.4  christos    appear in the middle of the lr/sc sequence.  */
   4508  1.1.1.4  christos 
   4509  1.1.1.4  christos static bool
   4510  1.1.1.4  christos riscv_insn_is_non_cti_and_allowed_in_atomic_sequence
   4511  1.1.1.4  christos   (const struct riscv_insn &insn)
   4512  1.1.1.4  christos {
   4513  1.1.1.4  christos   switch (insn.opcode ())
   4514  1.1.1.4  christos     {
   4515  1.1.1.4  christos     case riscv_insn::LUI:
   4516  1.1.1.4  christos     case riscv_insn::AUIPC:
   4517  1.1.1.4  christos     case riscv_insn::ADDI:
   4518  1.1.1.4  christos     case riscv_insn::ADDIW:
   4519  1.1.1.4  christos     case riscv_insn::SLTI:
   4520  1.1.1.4  christos     case riscv_insn::SLTIU:
   4521  1.1.1.4  christos     case riscv_insn::XORI:
   4522  1.1.1.4  christos     case riscv_insn::ORI:
   4523  1.1.1.4  christos     case riscv_insn::ANDI:
   4524  1.1.1.4  christos     case riscv_insn::SLLI:
   4525  1.1.1.4  christos     case riscv_insn::SLLIW:
   4526  1.1.1.4  christos     case riscv_insn::SRLI:
   4527  1.1.1.4  christos     case riscv_insn::SRLIW:
   4528  1.1.1.4  christos     case riscv_insn::SRAI:
   4529  1.1.1.4  christos     case riscv_insn::ADD:
   4530  1.1.1.4  christos     case riscv_insn::ADDW:
   4531  1.1.1.4  christos     case riscv_insn::SRAIW:
   4532  1.1.1.4  christos     case riscv_insn::SUB:
   4533  1.1.1.4  christos     case riscv_insn::SUBW:
   4534  1.1.1.4  christos     case riscv_insn::SLL:
   4535  1.1.1.4  christos     case riscv_insn::SLLW:
   4536  1.1.1.4  christos     case riscv_insn::SLT:
   4537  1.1.1.4  christos     case riscv_insn::SLTU:
   4538  1.1.1.4  christos     case riscv_insn::XOR:
   4539  1.1.1.4  christos     case riscv_insn::SRL:
   4540  1.1.1.4  christos     case riscv_insn::SRLW:
   4541  1.1.1.4  christos     case riscv_insn::SRA:
   4542  1.1.1.4  christos     case riscv_insn::SRAW:
   4543  1.1.1.4  christos     case riscv_insn::OR:
   4544  1.1.1.4  christos     case riscv_insn::AND:
   4545  1.1.1.4  christos       return true;
   4546  1.1.1.4  christos     }
   4547  1.1.1.4  christos 
   4548  1.1.1.4  christos     return false;
   4549  1.1.1.4  christos }
   4550  1.1.1.4  christos 
   4551  1.1.1.4  christos /* Return true if INSN is a direct branch instruction.  */
   4552  1.1.1.4  christos 
   4553  1.1.1.4  christos static bool
   4554  1.1.1.4  christos riscv_insn_is_direct_branch (const struct riscv_insn &insn)
   4555  1.1.1.4  christos {
   4556  1.1.1.4  christos   switch (insn.opcode ())
   4557  1.1.1.4  christos     {
   4558  1.1.1.4  christos     case riscv_insn::BEQ:
   4559  1.1.1.4  christos     case riscv_insn::BNE:
   4560  1.1.1.4  christos     case riscv_insn::BLT:
   4561  1.1.1.4  christos     case riscv_insn::BGE:
   4562  1.1.1.4  christos     case riscv_insn::BLTU:
   4563  1.1.1.4  christos     case riscv_insn::BGEU:
   4564  1.1.1.4  christos     case riscv_insn::JAL:
   4565  1.1.1.4  christos       return true;
   4566  1.1.1.4  christos     }
   4567  1.1.1.4  christos 
   4568  1.1.1.4  christos     return false;
   4569  1.1.1.4  christos }
   4570  1.1.1.4  christos 
   4571      1.1  christos /* We can't put a breakpoint in the middle of a lr/sc atomic sequence, so look
   4572      1.1  christos    for the end of the sequence and put the breakpoint there.  */
   4573      1.1  christos 
   4574  1.1.1.4  christos static std::vector<CORE_ADDR>
   4575  1.1.1.4  christos riscv_deal_with_atomic_sequence (struct regcache *regcache, CORE_ADDR pc)
   4576      1.1  christos {
   4577      1.1  christos   struct gdbarch *gdbarch = regcache->arch ();
   4578      1.1  christos   struct riscv_insn insn;
   4579  1.1.1.4  christos   CORE_ADDR cur_step_pc = pc, next_pc;
   4580  1.1.1.4  christos   std::vector<CORE_ADDR> next_pcs;
   4581  1.1.1.4  christos   bool found_valid_atomic_sequence = false;
   4582  1.1.1.4  christos   enum riscv_insn::opcode lr_opcode;
   4583      1.1  christos 
   4584      1.1  christos   /* First instruction has to be a load reserved.  */
   4585      1.1  christos   insn.decode (gdbarch, cur_step_pc);
   4586  1.1.1.4  christos   lr_opcode = insn.opcode ();
   4587  1.1.1.4  christos   if (lr_opcode != riscv_insn::LR_D && lr_opcode != riscv_insn::LR_W)
   4588  1.1.1.4  christos     return {};
   4589  1.1.1.4  christos 
   4590  1.1.1.4  christos   /* The loop comprises only an LR/SC sequence and code to retry the sequence in
   4591  1.1.1.4  christos      the case of failure, and must comprise at most 16 instructions placed
   4592  1.1.1.4  christos      sequentially in memory.  While our code tries to follow these restrictions,
   4593  1.1.1.4  christos      it has the following limitations:
   4594  1.1.1.4  christos 
   4595  1.1.1.4  christos        (a) We expect the loop to start with an LR and end with a BNE.
   4596  1.1.1.4  christos 	   Apparently this does not cover all cases for a valid sequence.
   4597  1.1.1.4  christos        (b) The atomic limitations only apply to the code that is actually
   4598  1.1.1.4  christos 	   executed, so here again it's overly restrictive.
   4599  1.1.1.4  christos        (c) The lr/sc are required to be for the same target address, but this
   4600  1.1.1.4  christos 	   information is only known at runtime.  Same as (b), in order to check
   4601  1.1.1.4  christos 	   this we will end up needing to simulate the sequence, which is more
   4602  1.1.1.4  christos 	   complicated than what we're doing right now.
   4603  1.1.1.4  christos 
   4604  1.1.1.4  christos      Also note that we only expect a maximum of (16-2) instructions in the for
   4605  1.1.1.4  christos      loop as we have assumed the presence of LR and BNE at the beginning and end
   4606  1.1.1.4  christos      respectively.  */
   4607  1.1.1.4  christos   for (int insn_count = 0; insn_count < 16 - 2; ++insn_count)
   4608  1.1.1.4  christos     {
   4609  1.1.1.4  christos       cur_step_pc += insn.length ();
   4610  1.1.1.4  christos       insn.decode (gdbarch, cur_step_pc);
   4611  1.1.1.4  christos 
   4612  1.1.1.4  christos       /* The dynamic code executed between lr/sc can only contain instructions
   4613  1.1.1.4  christos 	 from the base I instruction set, excluding loads, stores, backward
   4614  1.1.1.4  christos 	 jumps, taken backward branches, JALR, FENCE, FENCE.I, and SYSTEM
   4615  1.1.1.4  christos 	 instructions.  If the C extension is supported, then compressed forms
   4616  1.1.1.4  christos 	 of the aforementioned I instructions are also permitted.  */
   4617      1.1  christos 
   4618  1.1.1.4  christos       if (riscv_insn_is_non_cti_and_allowed_in_atomic_sequence (insn))
   4619  1.1.1.4  christos 	continue;
   4620  1.1.1.4  christos       /* Look for a conditional branch instruction, check if it's taken forward
   4621  1.1.1.4  christos 	 or not.  */
   4622  1.1.1.4  christos       else if (riscv_insn_is_direct_branch (insn))
   4623  1.1.1.4  christos 	{
   4624  1.1.1.4  christos 	  if (insn.imm_signed () > 0)
   4625  1.1.1.4  christos 	    {
   4626  1.1.1.4  christos 	      next_pc = cur_step_pc + insn.imm_signed ();
   4627  1.1.1.4  christos 	      next_pcs.push_back (next_pc);
   4628  1.1.1.4  christos 	    }
   4629  1.1.1.4  christos 	  else
   4630  1.1.1.4  christos 	    break;
   4631  1.1.1.4  christos 	}
   4632  1.1.1.4  christos       /* Look for a paired SC instruction which closes the atomic sequence.  */
   4633  1.1.1.4  christos       else if ((insn.opcode () == riscv_insn::SC_D
   4634  1.1.1.4  christos 		&& lr_opcode == riscv_insn::LR_D)
   4635  1.1.1.4  christos 	       || (insn.opcode () == riscv_insn::SC_W
   4636  1.1.1.4  christos 		   && lr_opcode == riscv_insn::LR_W))
   4637  1.1.1.4  christos 	found_valid_atomic_sequence = true;
   4638  1.1.1.4  christos       else
   4639  1.1.1.4  christos 	break;
   4640  1.1.1.4  christos     }
   4641      1.1  christos 
   4642  1.1.1.4  christos   if (!found_valid_atomic_sequence)
   4643  1.1.1.4  christos     return {};
   4644      1.1  christos 
   4645      1.1  christos   /* Next instruction should be branch to start.  */
   4646      1.1  christos   insn.decode (gdbarch, cur_step_pc);
   4647      1.1  christos   if (insn.opcode () != riscv_insn::BNE)
   4648  1.1.1.4  christos     return {};
   4649      1.1  christos   if (pc != (cur_step_pc + insn.imm_signed ()))
   4650  1.1.1.4  christos     return {};
   4651  1.1.1.4  christos   cur_step_pc += insn.length ();
   4652      1.1  christos 
   4653  1.1.1.4  christos   /* Remove all PCs that jump within the sequence.  */
   4654  1.1.1.4  christos   auto matcher = [cur_step_pc] (const CORE_ADDR addr) -> bool
   4655  1.1.1.4  christos     {
   4656  1.1.1.4  christos       return addr < cur_step_pc;
   4657  1.1.1.4  christos     };
   4658  1.1.1.4  christos   auto it = std::remove_if (next_pcs.begin (), next_pcs.end (), matcher);
   4659  1.1.1.4  christos   next_pcs.erase (it, next_pcs.end ());
   4660      1.1  christos 
   4661  1.1.1.4  christos   next_pc = cur_step_pc;
   4662  1.1.1.4  christos   next_pcs.push_back (next_pc);
   4663  1.1.1.4  christos   return next_pcs;
   4664      1.1  christos }
   4665      1.1  christos 
   4666      1.1  christos /* This is called just before we want to resume the inferior, if we want to
   4667      1.1  christos    single-step it but there is no hardware or kernel single-step support.  We
   4668      1.1  christos    find the target of the coming instruction and breakpoint it.  */
   4669      1.1  christos 
   4670      1.1  christos std::vector<CORE_ADDR>
   4671      1.1  christos riscv_software_single_step (struct regcache *regcache)
   4672      1.1  christos {
   4673  1.1.1.4  christos   CORE_ADDR cur_pc = regcache_read_pc (regcache), next_pc;
   4674  1.1.1.4  christos   std::vector<CORE_ADDR> next_pcs
   4675  1.1.1.4  christos     = riscv_deal_with_atomic_sequence (regcache, cur_pc);
   4676      1.1  christos 
   4677  1.1.1.4  christos   if (!next_pcs.empty ())
   4678  1.1.1.4  christos     return next_pcs;
   4679      1.1  christos 
   4680  1.1.1.4  christos   next_pc = riscv_next_pc (regcache, cur_pc);
   4681      1.1  christos 
   4682      1.1  christos   return {next_pc};
   4683      1.1  christos }
   4684      1.1  christos 
   4685      1.1  christos /* Create RISC-V specific reggroups.  */
   4686      1.1  christos 
   4687      1.1  christos static void
   4688      1.1  christos riscv_init_reggroups ()
   4689      1.1  christos {
   4690      1.1  christos   csr_reggroup = reggroup_new ("csr", USER_REGGROUP);
   4691      1.1  christos }
   4692      1.1  christos 
   4693  1.1.1.3  christos /* See riscv-tdep.h.  */
   4694  1.1.1.3  christos 
   4695  1.1.1.3  christos void
   4696  1.1.1.3  christos riscv_supply_regset (const struct regset *regset,
   4697  1.1.1.3  christos 		     struct regcache *regcache, int regnum,
   4698  1.1.1.3  christos 		     const void *regs, size_t len)
   4699  1.1.1.3  christos {
   4700  1.1.1.3  christos   regcache->supply_regset (regset, regnum, regs, len);
   4701  1.1.1.3  christos 
   4702  1.1.1.3  christos   if (regnum == -1 || regnum == RISCV_ZERO_REGNUM)
   4703  1.1.1.3  christos     regcache->raw_supply_zeroed (RISCV_ZERO_REGNUM);
   4704  1.1.1.3  christos 
   4705  1.1.1.3  christos   struct gdbarch *gdbarch = regcache->arch ();
   4706  1.1.1.3  christos   riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
   4707  1.1.1.3  christos 
   4708  1.1.1.3  christos   if (regnum == -1
   4709  1.1.1.3  christos       || regnum == tdep->fflags_regnum
   4710  1.1.1.3  christos       || regnum == tdep->frm_regnum)
   4711  1.1.1.3  christos     {
   4712  1.1.1.3  christos       int fcsr_regnum = RISCV_CSR_FCSR_REGNUM;
   4713  1.1.1.3  christos 
   4714  1.1.1.3  christos       /* Ensure that FCSR has been read into REGCACHE.  */
   4715  1.1.1.3  christos       if (regnum != -1)
   4716  1.1.1.3  christos 	regcache->supply_regset (regset, fcsr_regnum, regs, len);
   4717  1.1.1.3  christos 
   4718  1.1.1.3  christos       /* Grab the FCSR value if it is now in the regcache.  We must check
   4719  1.1.1.3  christos 	 the status first as, if the register was not supplied by REGSET,
   4720  1.1.1.3  christos 	 this call will trigger a recursive attempt to fetch the
   4721  1.1.1.3  christos 	 registers.  */
   4722  1.1.1.3  christos       if (regcache->get_register_status (fcsr_regnum) == REG_VALID)
   4723  1.1.1.3  christos 	{
   4724  1.1.1.3  christos 	  /* If we have an fcsr register then we should have fflags and frm
   4725  1.1.1.3  christos 	     too, either provided by the target, or provided as a pseudo
   4726  1.1.1.3  christos 	     register by GDB.  */
   4727  1.1.1.3  christos 	  gdb_assert (tdep->fflags_regnum >= 0);
   4728  1.1.1.3  christos 	  gdb_assert (tdep->frm_regnum >= 0);
   4729  1.1.1.3  christos 
   4730  1.1.1.3  christos 	  ULONGEST fcsr_val;
   4731  1.1.1.3  christos 	  regcache->raw_read (fcsr_regnum, &fcsr_val);
   4732  1.1.1.3  christos 
   4733  1.1.1.3  christos 	  /* Extract the fflags and frm values.  */
   4734  1.1.1.3  christos 	  ULONGEST fflags_val = fcsr_val & 0x1f;
   4735  1.1.1.3  christos 	  ULONGEST frm_val = (fcsr_val >> 5) & 0x7;
   4736  1.1.1.3  christos 
   4737  1.1.1.3  christos 	  /* And supply these if needed.  We can only supply real
   4738  1.1.1.3  christos 	     registers, so don't try to supply fflags or frm if they are
   4739  1.1.1.3  christos 	     implemented as pseudo-registers.  */
   4740  1.1.1.3  christos 	  if ((regnum == -1 || regnum == tdep->fflags_regnum)
   4741  1.1.1.3  christos 	      && tdep->fflags_regnum < gdbarch_num_regs (gdbarch))
   4742  1.1.1.3  christos 	    regcache->raw_supply_integer (tdep->fflags_regnum,
   4743  1.1.1.3  christos 					  (gdb_byte *) &fflags_val,
   4744  1.1.1.3  christos 					  sizeof (fflags_val),
   4745  1.1.1.3  christos 					  /* is_signed */ false);
   4746  1.1.1.3  christos 
   4747  1.1.1.3  christos 	  if ((regnum == -1 || regnum == tdep->frm_regnum)
   4748  1.1.1.3  christos 	      && tdep->frm_regnum < gdbarch_num_regs (gdbarch))
   4749  1.1.1.3  christos 	    regcache->raw_supply_integer (tdep->frm_regnum,
   4750  1.1.1.3  christos 					  (gdb_byte *)&frm_val,
   4751  1.1.1.3  christos 					  sizeof (fflags_val),
   4752  1.1.1.3  christos 					  /* is_signed */ false);
   4753  1.1.1.3  christos 	}
   4754  1.1.1.3  christos     }
   4755  1.1.1.3  christos }
   4756  1.1.1.3  christos 
   4757  1.1.1.2  christos void _initialize_riscv_tdep ();
   4758      1.1  christos void
   4759  1.1.1.2  christos _initialize_riscv_tdep ()
   4760      1.1  christos {
   4761      1.1  christos   riscv_init_reggroups ();
   4762      1.1  christos 
   4763      1.1  christos   gdbarch_register (bfd_arch_riscv, riscv_gdbarch_init, NULL);
   4764      1.1  christos 
   4765      1.1  christos   /* Add root prefix command for all "set debug riscv" and "show debug
   4766      1.1  christos      riscv" commands.  */
   4767  1.1.1.3  christos   add_setshow_prefix_cmd ("riscv", no_class,
   4768  1.1.1.3  christos 			  _("RISC-V specific debug commands."),
   4769  1.1.1.3  christos 			  _("RISC-V specific debug commands."),
   4770  1.1.1.3  christos 			  &setdebugriscvcmdlist, &showdebugriscvcmdlist,
   4771  1.1.1.3  christos 			  &setdebuglist, &showdebuglist);
   4772      1.1  christos 
   4773  1.1.1.4  christos   add_setshow_boolean_cmd ("breakpoints", class_maintenance,
   4774  1.1.1.4  christos 			   &riscv_debug_breakpoints,  _("\
   4775      1.1  christos Set riscv breakpoint debugging."), _("\
   4776      1.1  christos Show riscv breakpoint debugging."), _("\
   4777      1.1  christos When non-zero, print debugging information for the riscv specific parts\n\
   4778      1.1  christos of the breakpoint mechanism."),
   4779  1.1.1.4  christos 			   nullptr,
   4780  1.1.1.4  christos 			   show_riscv_debug_variable,
   4781  1.1.1.4  christos 			   &setdebugriscvcmdlist, &showdebugriscvcmdlist);
   4782      1.1  christos 
   4783  1.1.1.4  christos   add_setshow_boolean_cmd ("infcall", class_maintenance,
   4784  1.1.1.4  christos 			   &riscv_debug_infcall,  _("\
   4785      1.1  christos Set riscv inferior call debugging."), _("\
   4786      1.1  christos Show riscv inferior call debugging."), _("\
   4787      1.1  christos When non-zero, print debugging information for the riscv specific parts\n\
   4788      1.1  christos of the inferior call mechanism."),
   4789  1.1.1.4  christos 			   nullptr,
   4790  1.1.1.4  christos 			   show_riscv_debug_variable,
   4791  1.1.1.4  christos 			   &setdebugriscvcmdlist, &showdebugriscvcmdlist);
   4792      1.1  christos 
   4793  1.1.1.4  christos   add_setshow_boolean_cmd ("unwinder", class_maintenance,
   4794  1.1.1.4  christos 			   &riscv_debug_unwinder,  _("\
   4795      1.1  christos Set riscv stack unwinding debugging."), _("\
   4796      1.1  christos Show riscv stack unwinding debugging."), _("\
   4797  1.1.1.4  christos When on, print debugging information for the riscv specific parts\n\
   4798      1.1  christos of the stack unwinding mechanism."),
   4799  1.1.1.4  christos 			   nullptr,
   4800  1.1.1.4  christos 			   show_riscv_debug_variable,
   4801  1.1.1.4  christos 			   &setdebugriscvcmdlist, &showdebugriscvcmdlist);
   4802      1.1  christos 
   4803  1.1.1.4  christos   add_setshow_boolean_cmd ("gdbarch", class_maintenance,
   4804  1.1.1.4  christos 			   &riscv_debug_gdbarch,  _("\
   4805      1.1  christos Set riscv gdbarch initialisation debugging."), _("\
   4806      1.1  christos Show riscv gdbarch initialisation debugging."), _("\
   4807      1.1  christos When non-zero, print debugging information for the riscv gdbarch\n\
   4808      1.1  christos initialisation process."),
   4809  1.1.1.4  christos 			   nullptr,
   4810  1.1.1.4  christos 			   show_riscv_debug_variable,
   4811  1.1.1.4  christos 			   &setdebugriscvcmdlist, &showdebugriscvcmdlist);
   4812      1.1  christos 
   4813      1.1  christos   /* Add root prefix command for all "set riscv" and "show riscv" commands.  */
   4814  1.1.1.3  christos   add_setshow_prefix_cmd ("riscv", no_class,
   4815  1.1.1.3  christos 			  _("RISC-V specific commands."),
   4816  1.1.1.3  christos 			  _("RISC-V specific commands."),
   4817  1.1.1.3  christos 			  &setriscvcmdlist, &showriscvcmdlist,
   4818  1.1.1.3  christos 			  &setlist, &showlist);
   4819      1.1  christos 
   4820      1.1  christos 
   4821      1.1  christos   use_compressed_breakpoints = AUTO_BOOLEAN_AUTO;
   4822      1.1  christos   add_setshow_auto_boolean_cmd ("use-compressed-breakpoints", no_class,
   4823      1.1  christos 				&use_compressed_breakpoints,
   4824      1.1  christos 				_("\
   4825  1.1.1.4  christos Set debugger's use of compressed breakpoints."), _("\
   4826      1.1  christos Show debugger's use of compressed breakpoints."), _("\
   4827      1.1  christos Debugging compressed code requires compressed breakpoints to be used. If\n\
   4828      1.1  christos left to 'auto' then gdb will use them if the existing instruction is a\n\
   4829      1.1  christos compressed instruction. If that doesn't give the correct behavior, then\n\
   4830      1.1  christos this option can be used."),
   4831      1.1  christos 				NULL,
   4832      1.1  christos 				show_use_compressed_breakpoints,
   4833      1.1  christos 				&setriscvcmdlist,
   4834      1.1  christos 				&showriscvcmdlist);
   4835      1.1  christos }
   4836