Home | History | Annotate | Line # | Download | only in gdb
      1 /* Target-dependent code for the Renesas RL78 for GDB, the GNU debugger.
      2 
      3    Copyright (C) 2011-2024 Free Software Foundation, Inc.
      4 
      5    Contributed by Red Hat, Inc.
      6 
      7    This file is part of GDB.
      8 
      9    This program is free software; you can redistribute it and/or modify
     10    it under the terms of the GNU General Public License as published by
     11    the Free Software Foundation; either version 3 of the License, or
     12    (at your option) any later version.
     13 
     14    This program is distributed in the hope that it will be useful,
     15    but WITHOUT ANY WARRANTY; without even the implied warranty of
     16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17    GNU General Public License for more details.
     18 
     19    You should have received a copy of the GNU General Public License
     20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     21 
     22 #include "arch-utils.h"
     23 #include "extract-store-integer.h"
     24 #include "prologue-value.h"
     25 #include "target.h"
     26 #include "regcache.h"
     27 #include "opcode/rl78.h"
     28 #include "dis-asm.h"
     29 #include "gdbtypes.h"
     30 #include "frame.h"
     31 #include "frame-unwind.h"
     32 #include "frame-base.h"
     33 #include "value.h"
     34 #include "gdbcore.h"
     35 #include "dwarf2/frame.h"
     36 #include "reggroups.h"
     37 #include "gdbarch.h"
     38 #include "inferior.h"
     39 
     40 #include "elf/rl78.h"
     41 #include "elf-bfd.h"
     42 
     43 /* Register Banks.  */
     44 
     45 enum
     46 {
     47   RL78_BANK0 = 0,
     48   RL78_BANK1 = 1,
     49   RL78_BANK2 = 2,
     50   RL78_BANK3 = 3,
     51   RL78_NUMBANKS = 4,
     52   RL78_REGS_PER_BANK = 8
     53 };
     54 
     55 /* Register Numbers.  */
     56 
     57 enum
     58 {
     59   /* All general purpose registers are 8 bits wide.  */
     60   RL78_RAW_BANK0_R0_REGNUM = 0,
     61   RL78_RAW_BANK0_R1_REGNUM,
     62   RL78_RAW_BANK0_R2_REGNUM,
     63   RL78_RAW_BANK0_R3_REGNUM,
     64   RL78_RAW_BANK0_R4_REGNUM,
     65   RL78_RAW_BANK0_R5_REGNUM,
     66   RL78_RAW_BANK0_R6_REGNUM,
     67   RL78_RAW_BANK0_R7_REGNUM,
     68 
     69   RL78_RAW_BANK1_R0_REGNUM,
     70   RL78_RAW_BANK1_R1_REGNUM,
     71   RL78_RAW_BANK1_R2_REGNUM,
     72   RL78_RAW_BANK1_R3_REGNUM,
     73   RL78_RAW_BANK1_R4_REGNUM,
     74   RL78_RAW_BANK1_R5_REGNUM,
     75   RL78_RAW_BANK1_R6_REGNUM,
     76   RL78_RAW_BANK1_R7_REGNUM,
     77 
     78   RL78_RAW_BANK2_R0_REGNUM,
     79   RL78_RAW_BANK2_R1_REGNUM,
     80   RL78_RAW_BANK2_R2_REGNUM,
     81   RL78_RAW_BANK2_R3_REGNUM,
     82   RL78_RAW_BANK2_R4_REGNUM,
     83   RL78_RAW_BANK2_R5_REGNUM,
     84   RL78_RAW_BANK2_R6_REGNUM,
     85   RL78_RAW_BANK2_R7_REGNUM,
     86 
     87   RL78_RAW_BANK3_R0_REGNUM,
     88   RL78_RAW_BANK3_R1_REGNUM,
     89   RL78_RAW_BANK3_R2_REGNUM,
     90   RL78_RAW_BANK3_R3_REGNUM,
     91   RL78_RAW_BANK3_R4_REGNUM,
     92   RL78_RAW_BANK3_R5_REGNUM,
     93   RL78_RAW_BANK3_R6_REGNUM,
     94   RL78_RAW_BANK3_R7_REGNUM,
     95 
     96   RL78_PSW_REGNUM,	/* 8 bits */
     97   RL78_ES_REGNUM,	/* 8 bits */
     98   RL78_CS_REGNUM,	/* 8 bits */
     99   RL78_RAW_PC_REGNUM,	/* 20 bits; we'll use 32 bits for it.  */
    100 
    101   /* Fixed address SFRs (some of those above are SFRs too.) */
    102   RL78_SPL_REGNUM,	/* 8 bits; lower half of SP */
    103   RL78_SPH_REGNUM,	/* 8 bits; upper half of SP */
    104   RL78_PMC_REGNUM,	/* 8 bits */
    105   RL78_MEM_REGNUM,	/* 8 bits ?? */
    106 
    107   RL78_NUM_REGS,
    108 
    109   /* Pseudo registers.  */
    110   RL78_PC_REGNUM = RL78_NUM_REGS,
    111   RL78_SP_REGNUM,
    112 
    113   RL78_X_REGNUM,
    114   RL78_A_REGNUM,
    115   RL78_C_REGNUM,
    116   RL78_B_REGNUM,
    117   RL78_E_REGNUM,
    118   RL78_D_REGNUM,
    119   RL78_L_REGNUM,
    120   RL78_H_REGNUM,
    121 
    122   RL78_AX_REGNUM,
    123   RL78_BC_REGNUM,
    124   RL78_DE_REGNUM,
    125   RL78_HL_REGNUM,
    126 
    127   RL78_BANK0_R0_REGNUM,
    128   RL78_BANK0_R1_REGNUM,
    129   RL78_BANK0_R2_REGNUM,
    130   RL78_BANK0_R3_REGNUM,
    131   RL78_BANK0_R4_REGNUM,
    132   RL78_BANK0_R5_REGNUM,
    133   RL78_BANK0_R6_REGNUM,
    134   RL78_BANK0_R7_REGNUM,
    135 
    136   RL78_BANK1_R0_REGNUM,
    137   RL78_BANK1_R1_REGNUM,
    138   RL78_BANK1_R2_REGNUM,
    139   RL78_BANK1_R3_REGNUM,
    140   RL78_BANK1_R4_REGNUM,
    141   RL78_BANK1_R5_REGNUM,
    142   RL78_BANK1_R6_REGNUM,
    143   RL78_BANK1_R7_REGNUM,
    144 
    145   RL78_BANK2_R0_REGNUM,
    146   RL78_BANK2_R1_REGNUM,
    147   RL78_BANK2_R2_REGNUM,
    148   RL78_BANK2_R3_REGNUM,
    149   RL78_BANK2_R4_REGNUM,
    150   RL78_BANK2_R5_REGNUM,
    151   RL78_BANK2_R6_REGNUM,
    152   RL78_BANK2_R7_REGNUM,
    153 
    154   RL78_BANK3_R0_REGNUM,
    155   RL78_BANK3_R1_REGNUM,
    156   RL78_BANK3_R2_REGNUM,
    157   RL78_BANK3_R3_REGNUM,
    158   RL78_BANK3_R4_REGNUM,
    159   RL78_BANK3_R5_REGNUM,
    160   RL78_BANK3_R6_REGNUM,
    161   RL78_BANK3_R7_REGNUM,
    162 
    163   RL78_BANK0_RP0_REGNUM,
    164   RL78_BANK0_RP1_REGNUM,
    165   RL78_BANK0_RP2_REGNUM,
    166   RL78_BANK0_RP3_REGNUM,
    167 
    168   RL78_BANK1_RP0_REGNUM,
    169   RL78_BANK1_RP1_REGNUM,
    170   RL78_BANK1_RP2_REGNUM,
    171   RL78_BANK1_RP3_REGNUM,
    172 
    173   RL78_BANK2_RP0_REGNUM,
    174   RL78_BANK2_RP1_REGNUM,
    175   RL78_BANK2_RP2_REGNUM,
    176   RL78_BANK2_RP3_REGNUM,
    177 
    178   RL78_BANK3_RP0_REGNUM,
    179   RL78_BANK3_RP1_REGNUM,
    180   RL78_BANK3_RP2_REGNUM,
    181   RL78_BANK3_RP3_REGNUM,
    182 
    183   /* These are the same as the above 16 registers, but have
    184      a pointer type for use as base registers in expression
    185      evaluation.  These are not user visible registers.  */
    186   RL78_BANK0_RP0_PTR_REGNUM,
    187   RL78_BANK0_RP1_PTR_REGNUM,
    188   RL78_BANK0_RP2_PTR_REGNUM,
    189   RL78_BANK0_RP3_PTR_REGNUM,
    190 
    191   RL78_BANK1_RP0_PTR_REGNUM,
    192   RL78_BANK1_RP1_PTR_REGNUM,
    193   RL78_BANK1_RP2_PTR_REGNUM,
    194   RL78_BANK1_RP3_PTR_REGNUM,
    195 
    196   RL78_BANK2_RP0_PTR_REGNUM,
    197   RL78_BANK2_RP1_PTR_REGNUM,
    198   RL78_BANK2_RP2_PTR_REGNUM,
    199   RL78_BANK2_RP3_PTR_REGNUM,
    200 
    201   RL78_BANK3_RP0_PTR_REGNUM,
    202   RL78_BANK3_RP1_PTR_REGNUM,
    203   RL78_BANK3_RP2_PTR_REGNUM,
    204   RL78_BANK3_RP3_PTR_REGNUM,
    205 
    206   RL78_NUM_TOTAL_REGS,
    207   RL78_NUM_PSEUDO_REGS = RL78_NUM_TOTAL_REGS - RL78_NUM_REGS
    208 };
    209 
    210 #define RL78_SP_ADDR 0xffff8
    211 
    212 /* Architecture specific data.  */
    213 
    214 struct rl78_gdbarch_tdep : gdbarch_tdep_base
    215 {
    216   /* The ELF header flags specify the multilib used.  */
    217   int elf_flags = 0;
    218 
    219   struct type *rl78_void = nullptr,
    220 	      *rl78_uint8 = nullptr,
    221 	      *rl78_int8 = nullptr,
    222 	      *rl78_uint16 = nullptr,
    223 	      *rl78_int16 = nullptr,
    224 	      *rl78_uint32 = nullptr,
    225 	      *rl78_int32 = nullptr,
    226 	      *rl78_data_pointer = nullptr,
    227 	      *rl78_code_pointer = nullptr,
    228 	      *rl78_psw_type = nullptr;
    229 };
    230 
    231 /* This structure holds the results of a prologue analysis.  */
    232 
    233 struct rl78_prologue
    234 {
    235   /* The offset from the frame base to the stack pointer --- always
    236      zero or negative.
    237 
    238      Calling this a "size" is a bit misleading, but given that the
    239      stack grows downwards, using offsets for everything keeps one
    240      from going completely sign-crazy: you never change anything's
    241      sign for an ADD instruction; always change the second operand's
    242      sign for a SUB instruction; and everything takes care of
    243      itself.  */
    244   int frame_size;
    245 
    246   /* Non-zero if this function has initialized the frame pointer from
    247      the stack pointer, zero otherwise.  */
    248   int has_frame_ptr;
    249 
    250   /* If has_frame_ptr is non-zero, this is the offset from the frame
    251      base to where the frame pointer points.  This is always zero or
    252      negative.  */
    253   int frame_ptr_offset;
    254 
    255   /* The address of the first instruction at which the frame has been
    256      set up and the arguments are where the debug info says they are
    257      --- as best as we can tell.  */
    258   CORE_ADDR prologue_end;
    259 
    260   /* reg_offset[R] is the offset from the CFA at which register R is
    261      saved, or 1 if register R has not been saved.  (Real values are
    262      always zero or negative.)  */
    263   int reg_offset[RL78_NUM_TOTAL_REGS];
    264 };
    265 
    266 /* Construct type for PSW register.  */
    267 
    268 static struct type *
    269 rl78_psw_type (struct gdbarch *gdbarch)
    270 {
    271   rl78_gdbarch_tdep *tdep = gdbarch_tdep<rl78_gdbarch_tdep> (gdbarch);
    272 
    273   if (tdep->rl78_psw_type == NULL)
    274     {
    275       tdep->rl78_psw_type = arch_flags_type (gdbarch,
    276 					     "builtin_type_rl78_psw", 8);
    277       append_flags_type_flag (tdep->rl78_psw_type, 0, "CY");
    278       append_flags_type_flag (tdep->rl78_psw_type, 1, "ISP0");
    279       append_flags_type_flag (tdep->rl78_psw_type, 2, "ISP1");
    280       append_flags_type_flag (tdep->rl78_psw_type, 3, "RBS0");
    281       append_flags_type_flag (tdep->rl78_psw_type, 4, "AC");
    282       append_flags_type_flag (tdep->rl78_psw_type, 5, "RBS1");
    283       append_flags_type_flag (tdep->rl78_psw_type, 6, "Z");
    284       append_flags_type_flag (tdep->rl78_psw_type, 7, "IE");
    285     }
    286 
    287   return tdep->rl78_psw_type;
    288 }
    289 
    290 /* Implement the "register_type" gdbarch method.  */
    291 
    292 static struct type *
    293 rl78_register_type (struct gdbarch *gdbarch, int reg_nr)
    294 {
    295   rl78_gdbarch_tdep *tdep = gdbarch_tdep<rl78_gdbarch_tdep> (gdbarch);
    296 
    297   if (reg_nr == RL78_PC_REGNUM)
    298     return tdep->rl78_code_pointer;
    299   else if (reg_nr == RL78_RAW_PC_REGNUM)
    300     return tdep->rl78_uint32;
    301   else if (reg_nr == RL78_PSW_REGNUM)
    302     return rl78_psw_type (gdbarch);
    303   else if (reg_nr <= RL78_MEM_REGNUM
    304 	   || (RL78_X_REGNUM <= reg_nr && reg_nr <= RL78_H_REGNUM)
    305 	   || (RL78_BANK0_R0_REGNUM <= reg_nr
    306 	       && reg_nr <= RL78_BANK3_R7_REGNUM))
    307     return tdep->rl78_int8;
    308   else if (reg_nr == RL78_SP_REGNUM
    309 	   || (RL78_BANK0_RP0_PTR_REGNUM <= reg_nr
    310 	       && reg_nr <= RL78_BANK3_RP3_PTR_REGNUM))
    311     return tdep->rl78_data_pointer;
    312   else
    313     return tdep->rl78_int16;
    314 }
    315 
    316 /* Implement the "register_name" gdbarch method.  */
    317 
    318 static const char *
    319 rl78_register_name (struct gdbarch *gdbarch, int regnr)
    320 {
    321   static const char *const reg_names[] =
    322   {
    323     "",		/* bank0_r0 */
    324     "",		/* bank0_r1 */
    325     "",		/* bank0_r2 */
    326     "",		/* bank0_r3 */
    327     "",		/* bank0_r4 */
    328     "",		/* bank0_r5 */
    329     "",		/* bank0_r6 */
    330     "",		/* bank0_r7 */
    331 
    332     "",		/* bank1_r0 */
    333     "",		/* bank1_r1 */
    334     "",		/* bank1_r2 */
    335     "",		/* bank1_r3 */
    336     "",		/* bank1_r4 */
    337     "",		/* bank1_r5 */
    338     "",		/* bank1_r6 */
    339     "",		/* bank1_r7 */
    340 
    341     "",		/* bank2_r0 */
    342     "",		/* bank2_r1 */
    343     "",		/* bank2_r2 */
    344     "",		/* bank2_r3 */
    345     "",		/* bank2_r4 */
    346     "",		/* bank2_r5 */
    347     "",		/* bank2_r6 */
    348     "",		/* bank2_r7 */
    349 
    350     "",		/* bank3_r0 */
    351     "",		/* bank3_r1 */
    352     "",		/* bank3_r2 */
    353     "",		/* bank3_r3 */
    354     "",		/* bank3_r4 */
    355     "",		/* bank3_r5 */
    356     "",		/* bank3_r6 */
    357     "",		/* bank3_r7 */
    358 
    359     "psw",
    360     "es",
    361     "cs",
    362     "",
    363 
    364     "",		/* spl */
    365     "",		/* sph */
    366     "pmc",
    367     "mem",
    368 
    369     "pc",
    370     "sp",
    371 
    372     "x",
    373     "a",
    374     "c",
    375     "b",
    376     "e",
    377     "d",
    378     "l",
    379     "h",
    380 
    381     "ax",
    382     "bc",
    383     "de",
    384     "hl",
    385 
    386     "bank0_r0",
    387     "bank0_r1",
    388     "bank0_r2",
    389     "bank0_r3",
    390     "bank0_r4",
    391     "bank0_r5",
    392     "bank0_r6",
    393     "bank0_r7",
    394 
    395     "bank1_r0",
    396     "bank1_r1",
    397     "bank1_r2",
    398     "bank1_r3",
    399     "bank1_r4",
    400     "bank1_r5",
    401     "bank1_r6",
    402     "bank1_r7",
    403 
    404     "bank2_r0",
    405     "bank2_r1",
    406     "bank2_r2",
    407     "bank2_r3",
    408     "bank2_r4",
    409     "bank2_r5",
    410     "bank2_r6",
    411     "bank2_r7",
    412 
    413     "bank3_r0",
    414     "bank3_r1",
    415     "bank3_r2",
    416     "bank3_r3",
    417     "bank3_r4",
    418     "bank3_r5",
    419     "bank3_r6",
    420     "bank3_r7",
    421 
    422     "bank0_rp0",
    423     "bank0_rp1",
    424     "bank0_rp2",
    425     "bank0_rp3",
    426 
    427     "bank1_rp0",
    428     "bank1_rp1",
    429     "bank1_rp2",
    430     "bank1_rp3",
    431 
    432     "bank2_rp0",
    433     "bank2_rp1",
    434     "bank2_rp2",
    435     "bank2_rp3",
    436 
    437     "bank3_rp0",
    438     "bank3_rp1",
    439     "bank3_rp2",
    440     "bank3_rp3",
    441 
    442     /* The 16 register slots would be named
    443        bank0_rp0_ptr_regnum ... bank3_rp3_ptr_regnum, but we don't
    444        want these to be user visible registers.  */
    445     "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
    446   };
    447 
    448   return reg_names[regnr];
    449 }
    450 
    451 /* Implement the "register_name" gdbarch method for the g10 variant.  */
    452 
    453 static const char *
    454 rl78_g10_register_name (struct gdbarch *gdbarch, int regnr)
    455 {
    456   static const char *const reg_names[] =
    457   {
    458     "",		/* bank0_r0 */
    459     "",		/* bank0_r1 */
    460     "",		/* bank0_r2 */
    461     "",		/* bank0_r3 */
    462     "",		/* bank0_r4 */
    463     "",		/* bank0_r5 */
    464     "",		/* bank0_r6 */
    465     "",		/* bank0_r7 */
    466 
    467     "",		/* bank1_r0 */
    468     "",		/* bank1_r1 */
    469     "",		/* bank1_r2 */
    470     "",		/* bank1_r3 */
    471     "",		/* bank1_r4 */
    472     "",		/* bank1_r5 */
    473     "",		/* bank1_r6 */
    474     "",		/* bank1_r7 */
    475 
    476     "",		/* bank2_r0 */
    477     "",		/* bank2_r1 */
    478     "",		/* bank2_r2 */
    479     "",		/* bank2_r3 */
    480     "",		/* bank2_r4 */
    481     "",		/* bank2_r5 */
    482     "",		/* bank2_r6 */
    483     "",		/* bank2_r7 */
    484 
    485     "",		/* bank3_r0 */
    486     "",		/* bank3_r1 */
    487     "",		/* bank3_r2 */
    488     "",		/* bank3_r3 */
    489     "",		/* bank3_r4 */
    490     "",		/* bank3_r5 */
    491     "",		/* bank3_r6 */
    492     "",		/* bank3_r7 */
    493 
    494     "psw",
    495     "es",
    496     "cs",
    497     "",
    498 
    499     "",		/* spl */
    500     "",		/* sph */
    501     "pmc",
    502     "mem",
    503 
    504     "pc",
    505     "sp",
    506 
    507     "x",
    508     "a",
    509     "c",
    510     "b",
    511     "e",
    512     "d",
    513     "l",
    514     "h",
    515 
    516     "ax",
    517     "bc",
    518     "de",
    519     "hl",
    520 
    521     "bank0_r0",
    522     "bank0_r1",
    523     "bank0_r2",
    524     "bank0_r3",
    525     "bank0_r4",
    526     "bank0_r5",
    527     "bank0_r6",
    528     "bank0_r7",
    529 
    530     "",
    531     "",
    532     "",
    533     "",
    534     "",
    535     "",
    536     "",
    537     "",
    538 
    539     "",
    540     "",
    541     "",
    542     "",
    543     "",
    544     "",
    545     "",
    546     "",
    547 
    548     "",
    549     "",
    550     "",
    551     "",
    552     "",
    553     "",
    554     "",
    555     "",
    556 
    557     "bank0_rp0",
    558     "bank0_rp1",
    559     "bank0_rp2",
    560     "bank0_rp3",
    561 
    562     "",
    563     "",
    564     "",
    565     "",
    566 
    567     "",
    568     "",
    569     "",
    570     "",
    571 
    572     "",
    573     "",
    574     "",
    575     "",
    576 
    577     /* The 16 register slots would be named
    578        bank0_rp0_ptr_regnum ... bank3_rp3_ptr_regnum, but we don't
    579        want these to be user visible registers.  */
    580     "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
    581   };
    582 
    583   return reg_names[regnr];
    584 }
    585 
    586 /* Implement the "register_reggroup_p" gdbarch method.  */
    587 
    588 static int
    589 rl78_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
    590 			  const struct reggroup *group)
    591 {
    592   if (group == all_reggroup)
    593     return 1;
    594 
    595   /* All other registers are saved and restored.  */
    596   if (group == save_reggroup || group == restore_reggroup)
    597     {
    598       if ((regnum < RL78_NUM_REGS
    599 	   && regnum != RL78_SPL_REGNUM
    600 	   && regnum != RL78_SPH_REGNUM
    601 	   && regnum != RL78_RAW_PC_REGNUM)
    602 	  || regnum == RL78_SP_REGNUM
    603 	  || regnum == RL78_PC_REGNUM)
    604 	return 1;
    605       else
    606 	return 0;
    607     }
    608 
    609   if ((RL78_BANK0_R0_REGNUM <= regnum && regnum <= RL78_BANK3_R7_REGNUM)
    610       || regnum == RL78_ES_REGNUM
    611       || regnum == RL78_CS_REGNUM
    612       || regnum == RL78_SPL_REGNUM
    613       || regnum == RL78_SPH_REGNUM
    614       || regnum == RL78_PMC_REGNUM
    615       || regnum == RL78_MEM_REGNUM
    616       || regnum == RL78_RAW_PC_REGNUM
    617       || (RL78_BANK0_RP0_REGNUM <= regnum && regnum <= RL78_BANK3_RP3_REGNUM))
    618     return group == system_reggroup;
    619 
    620   return group == general_reggroup;
    621 }
    622 
    623 /* Strip bits to form an instruction address.  (When fetching a
    624    32-bit address from the stack, the high eight bits are garbage.
    625    This function strips off those unused bits.)  */
    626 
    627 static CORE_ADDR
    628 rl78_make_instruction_address (CORE_ADDR addr)
    629 {
    630   return addr & 0xffffff;
    631 }
    632 
    633 /* Set / clear bits necessary to make a data address.  */
    634 
    635 static CORE_ADDR
    636 rl78_make_data_address (CORE_ADDR addr)
    637 {
    638   return (addr & 0xffff) | 0xf0000;
    639 }
    640 
    641 /* Implement the "pseudo_register_read" gdbarch method.  */
    642 
    643 static enum register_status
    644 rl78_pseudo_register_read (struct gdbarch *gdbarch,
    645 			   readable_regcache *regcache,
    646 			   int reg, gdb_byte *buffer)
    647 {
    648   enum register_status status;
    649 
    650   if (RL78_BANK0_R0_REGNUM <= reg && reg <= RL78_BANK3_R7_REGNUM)
    651     {
    652       int raw_regnum = RL78_RAW_BANK0_R0_REGNUM
    653 		       + (reg - RL78_BANK0_R0_REGNUM);
    654 
    655       status = regcache->raw_read (raw_regnum, buffer);
    656     }
    657   else if (RL78_BANK0_RP0_REGNUM <= reg && reg <= RL78_BANK3_RP3_REGNUM)
    658     {
    659       int raw_regnum = 2 * (reg - RL78_BANK0_RP0_REGNUM)
    660 		       + RL78_RAW_BANK0_R0_REGNUM;
    661 
    662       status = regcache->raw_read (raw_regnum, buffer);
    663       if (status == REG_VALID)
    664 	status = regcache->raw_read (raw_regnum + 1, buffer + 1);
    665     }
    666   else if (RL78_BANK0_RP0_PTR_REGNUM <= reg && reg <= RL78_BANK3_RP3_PTR_REGNUM)
    667     {
    668       int raw_regnum = 2 * (reg - RL78_BANK0_RP0_PTR_REGNUM)
    669 		       + RL78_RAW_BANK0_R0_REGNUM;
    670 
    671       status = regcache->raw_read (raw_regnum, buffer);
    672       if (status == REG_VALID)
    673 	status = regcache->raw_read (raw_regnum + 1, buffer + 1);
    674     }
    675   else if (reg == RL78_SP_REGNUM)
    676     {
    677       status = regcache->raw_read (RL78_SPL_REGNUM, buffer);
    678       if (status == REG_VALID)
    679 	status = regcache->raw_read (RL78_SPH_REGNUM, buffer + 1);
    680     }
    681   else if (reg == RL78_PC_REGNUM)
    682     {
    683       gdb_byte rawbuf[4];
    684 
    685       status = regcache->raw_read (RL78_RAW_PC_REGNUM, rawbuf);
    686       memcpy (buffer, rawbuf, 3);
    687     }
    688   else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
    689     {
    690       ULONGEST psw;
    691 
    692       status = regcache->raw_read (RL78_PSW_REGNUM, &psw);
    693       if (status == REG_VALID)
    694 	{
    695 	  /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
    696 	  int bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
    697 	  int raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
    698 			   + (reg - RL78_X_REGNUM);
    699 	  status = regcache->raw_read (raw_regnum, buffer);
    700 	}
    701     }
    702   else if (RL78_AX_REGNUM <= reg && reg <= RL78_HL_REGNUM)
    703     {
    704       ULONGEST psw;
    705 
    706       status = regcache->raw_read (RL78_PSW_REGNUM, &psw);
    707       if (status == REG_VALID)
    708 	{
    709 	  /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
    710 	  int bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
    711 	  int raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
    712 			   + 2 * (reg - RL78_AX_REGNUM);
    713 	  status = regcache->raw_read (raw_regnum, buffer);
    714 	  if (status == REG_VALID)
    715 	    status = regcache->raw_read (raw_regnum + 1, buffer + 1);
    716 	}
    717     }
    718   else
    719     gdb_assert_not_reached ("invalid pseudo register number");
    720   return status;
    721 }
    722 
    723 /* Implement the "pseudo_register_write" gdbarch method.  */
    724 
    725 static void
    726 rl78_pseudo_register_write (struct gdbarch *gdbarch,
    727 			    struct regcache *regcache,
    728 			    int reg, const gdb_byte *buffer)
    729 {
    730   if (RL78_BANK0_R0_REGNUM <= reg && reg <= RL78_BANK3_R7_REGNUM)
    731     {
    732       int raw_regnum = RL78_RAW_BANK0_R0_REGNUM
    733 		       + (reg - RL78_BANK0_R0_REGNUM);
    734 
    735       regcache->raw_write (raw_regnum, buffer);
    736     }
    737   else if (RL78_BANK0_RP0_REGNUM <= reg && reg <= RL78_BANK3_RP3_REGNUM)
    738     {
    739       int raw_regnum = 2 * (reg - RL78_BANK0_RP0_REGNUM)
    740 		       + RL78_RAW_BANK0_R0_REGNUM;
    741 
    742       regcache->raw_write (raw_regnum, buffer);
    743       regcache->raw_write (raw_regnum + 1, buffer + 1);
    744     }
    745   else if (RL78_BANK0_RP0_PTR_REGNUM <= reg && reg <= RL78_BANK3_RP3_PTR_REGNUM)
    746     {
    747       int raw_regnum = 2 * (reg - RL78_BANK0_RP0_PTR_REGNUM)
    748 		       + RL78_RAW_BANK0_R0_REGNUM;
    749 
    750       regcache->raw_write (raw_regnum, buffer);
    751       regcache->raw_write (raw_regnum + 1, buffer + 1);
    752     }
    753   else if (reg == RL78_SP_REGNUM)
    754     {
    755       regcache->raw_write (RL78_SPL_REGNUM, buffer);
    756       regcache->raw_write (RL78_SPH_REGNUM, buffer + 1);
    757     }
    758   else if (reg == RL78_PC_REGNUM)
    759     {
    760       gdb_byte rawbuf[4];
    761 
    762       memcpy (rawbuf, buffer, 3);
    763       rawbuf[3] = 0;
    764       regcache->raw_write (RL78_RAW_PC_REGNUM, rawbuf);
    765     }
    766   else if (RL78_X_REGNUM <= reg && reg <= RL78_H_REGNUM)
    767     {
    768       ULONGEST psw;
    769       int bank;
    770       int raw_regnum;
    771 
    772       regcache_raw_read_unsigned (regcache, RL78_PSW_REGNUM, &psw);
    773       bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
    774       /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
    775       raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
    776 		   + (reg - RL78_X_REGNUM);
    777       regcache->raw_write (raw_regnum, buffer);
    778     }
    779   else if (RL78_AX_REGNUM <= reg && reg <= RL78_HL_REGNUM)
    780     {
    781       ULONGEST psw;
    782       int bank, raw_regnum;
    783 
    784       regcache_raw_read_unsigned (regcache, RL78_PSW_REGNUM, &psw);
    785       bank = ((psw >> 3) & 1) | ((psw >> 4) & 1);
    786       /* RSB0 is at bit 3; RSBS1 is at bit 5.  */
    787       raw_regnum = RL78_RAW_BANK0_R0_REGNUM + bank * RL78_REGS_PER_BANK
    788 		   + 2 * (reg - RL78_AX_REGNUM);
    789       regcache->raw_write (raw_regnum, buffer);
    790       regcache->raw_write (raw_regnum + 1, buffer + 1);
    791     }
    792   else
    793     gdb_assert_not_reached ("invalid pseudo register number");
    794 }
    795 
    796 /* The documented BRK instruction is actually a two byte sequence,
    797    {0x61, 0xcc}, but instructions may be as short as one byte.
    798    Correspondence with Renesas revealed that the one byte sequence
    799    0xff is used when a one byte breakpoint instruction is required.  */
    800 constexpr gdb_byte rl78_break_insn[] = { 0xff };
    801 
    802 typedef BP_MANIPULATION (rl78_break_insn) rl78_breakpoint;
    803 
    804 /* Define a "handle" struct for fetching the next opcode.  */
    805 
    806 struct rl78_get_opcode_byte_handle
    807 {
    808   CORE_ADDR pc;
    809 };
    810 
    811 static int
    812 opc_reg_to_gdb_regnum (int opcreg)
    813 {
    814   switch (opcreg)
    815     {
    816       case RL78_Reg_X:
    817 	return RL78_X_REGNUM;
    818       case RL78_Reg_A:
    819 	return RL78_A_REGNUM;
    820       case RL78_Reg_C:
    821 	return RL78_C_REGNUM;
    822       case RL78_Reg_B:
    823 	return RL78_B_REGNUM;
    824       case RL78_Reg_E:
    825 	return RL78_E_REGNUM;
    826       case RL78_Reg_D:
    827 	return RL78_D_REGNUM;
    828       case RL78_Reg_L:
    829 	return RL78_L_REGNUM;
    830       case RL78_Reg_H:
    831 	return RL78_H_REGNUM;
    832       case RL78_Reg_AX:
    833 	return RL78_AX_REGNUM;
    834       case RL78_Reg_BC:
    835 	return RL78_BC_REGNUM;
    836       case RL78_Reg_DE:
    837 	return RL78_DE_REGNUM;
    838       case RL78_Reg_HL:
    839 	return RL78_HL_REGNUM;
    840       case RL78_Reg_SP:
    841 	return RL78_SP_REGNUM;
    842       case RL78_Reg_PSW:
    843 	return RL78_PSW_REGNUM;
    844       case RL78_Reg_CS:
    845 	return RL78_CS_REGNUM;
    846       case RL78_Reg_ES:
    847 	return RL78_ES_REGNUM;
    848       case RL78_Reg_PMC:
    849 	return RL78_PMC_REGNUM;
    850       case RL78_Reg_MEM:
    851 	return RL78_MEM_REGNUM;
    852       default:
    853 	internal_error (_("Undefined mapping for opc reg %d"),
    854 			opcreg);
    855     }
    856 
    857   /* Not reached.  */
    858   return 0;
    859 }
    860 
    861 /* Fetch a byte on behalf of the opcode decoder.  HANDLE contains
    862    the memory address of the next byte to fetch.  If successful,
    863    the address in the handle is updated and the byte fetched is
    864    returned as the value of the function.  If not successful, -1
    865    is returned.  */
    866 
    867 static int
    868 rl78_get_opcode_byte (void *handle)
    869 {
    870   struct rl78_get_opcode_byte_handle *opcdata
    871     = (struct rl78_get_opcode_byte_handle *) handle;
    872   int status;
    873   gdb_byte byte;
    874 
    875   status = target_read_memory (opcdata->pc, &byte, 1);
    876   if (status == 0)
    877     {
    878       opcdata->pc += 1;
    879       return byte;
    880     }
    881   else
    882     return -1;
    883 }
    884 
    885 /* Function for finding saved registers in a 'struct pv_area'; this
    886    function is passed to pv_area::scan.
    887 
    888    If VALUE is a saved register, ADDR says it was saved at a constant
    889    offset from the frame base, and SIZE indicates that the whole
    890    register was saved, record its offset.  */
    891 
    892 static void
    893 check_for_saved (void *result_untyped, pv_t addr, CORE_ADDR size,
    894 		 pv_t value)
    895 {
    896   struct rl78_prologue *result = (struct rl78_prologue *) result_untyped;
    897 
    898   if (value.kind == pvk_register
    899       && value.k == 0
    900       && pv_is_register (addr, RL78_SP_REGNUM)
    901       && size == register_size (current_inferior ()->arch (), value.reg))
    902     result->reg_offset[value.reg] = addr.k;
    903 }
    904 
    905 /* Analyze a prologue starting at START_PC, going no further than
    906    LIMIT_PC.  Fill in RESULT as appropriate.  */
    907 
    908 static void
    909 rl78_analyze_prologue (CORE_ADDR start_pc,
    910 		       CORE_ADDR limit_pc, struct rl78_prologue *result)
    911 {
    912   CORE_ADDR pc, next_pc;
    913   int rn;
    914   pv_t reg[RL78_NUM_TOTAL_REGS];
    915   CORE_ADDR after_last_frame_setup_insn = start_pc;
    916   int bank = 0;
    917 
    918   memset (result, 0, sizeof (*result));
    919 
    920   for (rn = 0; rn < RL78_NUM_TOTAL_REGS; rn++)
    921     {
    922       reg[rn] = pv_register (rn, 0);
    923       result->reg_offset[rn] = 1;
    924     }
    925 
    926   pv_area stack (RL78_SP_REGNUM,
    927 		 gdbarch_addr_bit (current_inferior ()->arch ()));
    928 
    929   /* The call instruction has saved the return address on the stack.  */
    930   reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM], -4);
    931   stack.store (reg[RL78_SP_REGNUM], 4, reg[RL78_PC_REGNUM]);
    932 
    933   pc = start_pc;
    934   while (pc < limit_pc)
    935     {
    936       int bytes_read;
    937       struct rl78_get_opcode_byte_handle opcode_handle;
    938       RL78_Opcode_Decoded opc;
    939 
    940       opcode_handle.pc = pc;
    941       bytes_read = rl78_decode_opcode (pc, &opc, rl78_get_opcode_byte,
    942 				       &opcode_handle, RL78_ISA_DEFAULT);
    943       next_pc = pc + bytes_read;
    944 
    945       if (opc.id == RLO_sel)
    946 	{
    947 	  bank = opc.op[1].addend;
    948 	}
    949       else if (opc.id == RLO_mov
    950 	       && opc.op[0].type == RL78_Operand_PreDec
    951 	       && opc.op[0].reg == RL78_Reg_SP
    952 	       && opc.op[1].type == RL78_Operand_Register)
    953 	{
    954 	  int rsrc = (bank * RL78_REGS_PER_BANK)
    955 	    + 2 * (opc.op[1].reg - RL78_Reg_AX);
    956 
    957 	  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM], -1);
    958 	  stack.store (reg[RL78_SP_REGNUM], 1, reg[rsrc]);
    959 	  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM], -1);
    960 	  stack.store (reg[RL78_SP_REGNUM], 1, reg[rsrc + 1]);
    961 	  after_last_frame_setup_insn = next_pc;
    962 	}
    963       else if (opc.id == RLO_sub
    964 	       && opc.op[0].type == RL78_Operand_Register
    965 	       && opc.op[0].reg == RL78_Reg_SP
    966 	       && opc.op[1].type == RL78_Operand_Immediate)
    967 	{
    968 	  int addend = opc.op[1].addend;
    969 
    970 	  reg[RL78_SP_REGNUM] = pv_add_constant (reg[RL78_SP_REGNUM],
    971 						 -addend);
    972 	  after_last_frame_setup_insn = next_pc;
    973 	}
    974       else if (opc.id == RLO_mov
    975 	       && opc.size == RL78_Word
    976 	       && opc.op[0].type == RL78_Operand_Register
    977 	       && opc.op[1].type == RL78_Operand_Indirect
    978 	       && opc.op[1].addend == RL78_SP_ADDR)
    979 	{
    980 	  reg[opc_reg_to_gdb_regnum (opc.op[0].reg)]
    981 	    = reg[RL78_SP_REGNUM];
    982 	}
    983       else if (opc.id == RLO_sub
    984 	       && opc.size == RL78_Word
    985 	       && opc.op[0].type == RL78_Operand_Register
    986 	       && opc.op[1].type == RL78_Operand_Immediate)
    987 	{
    988 	  int addend = opc.op[1].addend;
    989 	  int regnum = opc_reg_to_gdb_regnum (opc.op[0].reg);
    990 
    991 	  reg[regnum] = pv_add_constant (reg[regnum], -addend);
    992 	}
    993       else if (opc.id == RLO_mov
    994 	       && opc.size == RL78_Word
    995 	       && opc.op[0].type == RL78_Operand_Indirect
    996 	       && opc.op[0].addend == RL78_SP_ADDR
    997 	       && opc.op[1].type == RL78_Operand_Register)
    998 	{
    999 	  reg[RL78_SP_REGNUM]
   1000 	    = reg[opc_reg_to_gdb_regnum (opc.op[1].reg)];
   1001 	  after_last_frame_setup_insn = next_pc;
   1002 	}
   1003       else
   1004 	{
   1005 	  /* Terminate the prologue scan.  */
   1006 	  break;
   1007 	}
   1008 
   1009       pc = next_pc;
   1010     }
   1011 
   1012   /* Is the frame size (offset, really) a known constant?  */
   1013   if (pv_is_register (reg[RL78_SP_REGNUM], RL78_SP_REGNUM))
   1014     result->frame_size = reg[RL78_SP_REGNUM].k;
   1015 
   1016   /* Record where all the registers were saved.  */
   1017   stack.scan (check_for_saved, (void *) result);
   1018 
   1019   result->prologue_end = after_last_frame_setup_insn;
   1020 }
   1021 
   1022 /* Implement the "addr_bits_remove" gdbarch method.  */
   1023 
   1024 static CORE_ADDR
   1025 rl78_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
   1026 {
   1027   return addr & 0xffffff;
   1028 }
   1029 
   1030 /* Implement the "address_to_pointer" gdbarch method.  */
   1031 
   1032 static void
   1033 rl78_address_to_pointer (struct gdbarch *gdbarch,
   1034 			 struct type *type, gdb_byte *buf, CORE_ADDR addr)
   1035 {
   1036   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1037 
   1038   store_unsigned_integer (buf, type->length (), byte_order,
   1039 			  addr & 0xffffff);
   1040 }
   1041 
   1042 /* Implement the "pointer_to_address" gdbarch method.  */
   1043 
   1044 static CORE_ADDR
   1045 rl78_pointer_to_address (struct gdbarch *gdbarch,
   1046 			 struct type *type, const gdb_byte *buf)
   1047 {
   1048   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1049   CORE_ADDR addr
   1050     = extract_unsigned_integer (buf, type->length (), byte_order);
   1051 
   1052   /* Is it a code address?  */
   1053   if (type->target_type ()->code () == TYPE_CODE_FUNC
   1054       || type->target_type ()->code () == TYPE_CODE_METHOD
   1055       || TYPE_CODE_SPACE (type->target_type ())
   1056       || type->length () == 4)
   1057     return rl78_make_instruction_address (addr);
   1058   else
   1059     return rl78_make_data_address (addr);
   1060 }
   1061 
   1062 /* Implement the "skip_prologue" gdbarch method.  */
   1063 
   1064 static CORE_ADDR
   1065 rl78_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
   1066 {
   1067   const char *name;
   1068   CORE_ADDR func_addr, func_end;
   1069   struct rl78_prologue p;
   1070 
   1071   /* Try to find the extent of the function that contains PC.  */
   1072   if (!find_pc_partial_function (pc, &name, &func_addr, &func_end))
   1073     return pc;
   1074 
   1075   rl78_analyze_prologue (pc, func_end, &p);
   1076   return p.prologue_end;
   1077 }
   1078 
   1079 /* Implement the "unwind_pc" gdbarch method.  */
   1080 
   1081 static CORE_ADDR
   1082 rl78_unwind_pc (struct gdbarch *arch, const frame_info_ptr &next_frame)
   1083 {
   1084   return rl78_addr_bits_remove
   1085 	   (arch, frame_unwind_register_unsigned (next_frame,
   1086 						  RL78_PC_REGNUM));
   1087 }
   1088 
   1089 /* Given a frame described by THIS_FRAME, decode the prologue of its
   1090    associated function if there is not cache entry as specified by
   1091    THIS_PROLOGUE_CACHE.  Save the decoded prologue in the cache and
   1092    return that struct as the value of this function.  */
   1093 
   1094 static struct rl78_prologue *
   1095 rl78_analyze_frame_prologue (const frame_info_ptr &this_frame,
   1096 			   void **this_prologue_cache)
   1097 {
   1098   if (!*this_prologue_cache)
   1099     {
   1100       CORE_ADDR func_start, stop_addr;
   1101 
   1102       *this_prologue_cache = FRAME_OBSTACK_ZALLOC (struct rl78_prologue);
   1103 
   1104       func_start = get_frame_func (this_frame);
   1105       stop_addr = get_frame_pc (this_frame);
   1106 
   1107       /* If we couldn't find any function containing the PC, then
   1108 	 just initialize the prologue cache, but don't do anything.  */
   1109       if (!func_start)
   1110 	stop_addr = func_start;
   1111 
   1112       rl78_analyze_prologue (func_start, stop_addr,
   1113 			     (struct rl78_prologue *) *this_prologue_cache);
   1114     }
   1115 
   1116   return (struct rl78_prologue *) *this_prologue_cache;
   1117 }
   1118 
   1119 /* Given a frame and a prologue cache, return this frame's base.  */
   1120 
   1121 static CORE_ADDR
   1122 rl78_frame_base (const frame_info_ptr &this_frame, void **this_prologue_cache)
   1123 {
   1124   struct rl78_prologue *p
   1125     = rl78_analyze_frame_prologue (this_frame, this_prologue_cache);
   1126   CORE_ADDR sp = get_frame_register_unsigned (this_frame, RL78_SP_REGNUM);
   1127 
   1128   return rl78_make_data_address (sp - p->frame_size);
   1129 }
   1130 
   1131 /* Implement the "frame_this_id" method for unwinding frames.  */
   1132 
   1133 static void
   1134 rl78_this_id (const frame_info_ptr &this_frame,
   1135 	      void **this_prologue_cache, struct frame_id *this_id)
   1136 {
   1137   *this_id = frame_id_build (rl78_frame_base (this_frame,
   1138 					      this_prologue_cache),
   1139 			     get_frame_func (this_frame));
   1140 }
   1141 
   1142 /* Implement the "frame_prev_register" method for unwinding frames.  */
   1143 
   1144 static struct value *
   1145 rl78_prev_register (const frame_info_ptr &this_frame,
   1146 		    void **this_prologue_cache, int regnum)
   1147 {
   1148   struct rl78_prologue *p
   1149     = rl78_analyze_frame_prologue (this_frame, this_prologue_cache);
   1150   CORE_ADDR frame_base = rl78_frame_base (this_frame, this_prologue_cache);
   1151 
   1152   if (regnum == RL78_SP_REGNUM)
   1153     return frame_unwind_got_constant (this_frame, regnum, frame_base);
   1154 
   1155   else if (regnum == RL78_SPL_REGNUM)
   1156     return frame_unwind_got_constant (this_frame, regnum,
   1157 				      (frame_base & 0xff));
   1158 
   1159   else if (regnum == RL78_SPH_REGNUM)
   1160     return frame_unwind_got_constant (this_frame, regnum,
   1161 				      ((frame_base >> 8) & 0xff));
   1162 
   1163   /* If prologue analysis says we saved this register somewhere,
   1164      return a description of the stack slot holding it.  */
   1165   else if (p->reg_offset[regnum] != 1)
   1166     {
   1167       struct value *rv =
   1168 	frame_unwind_got_memory (this_frame, regnum,
   1169 				 frame_base + p->reg_offset[regnum]);
   1170 
   1171       if (regnum == RL78_PC_REGNUM)
   1172 	{
   1173 	  ULONGEST pc = rl78_make_instruction_address (value_as_long (rv));
   1174 
   1175 	  return frame_unwind_got_constant (this_frame, regnum, pc);
   1176 	}
   1177       return rv;
   1178     }
   1179 
   1180   /* Otherwise, presume we haven't changed the value of this
   1181      register, and get it from the next frame.  */
   1182   else
   1183     return frame_unwind_got_register (this_frame, regnum, regnum);
   1184 }
   1185 
   1186 static const struct frame_unwind rl78_unwind =
   1187 {
   1188   "rl78 prologue",
   1189   NORMAL_FRAME,
   1190   default_frame_unwind_stop_reason,
   1191   rl78_this_id,
   1192   rl78_prev_register,
   1193   NULL,
   1194   default_frame_sniffer
   1195 };
   1196 
   1197 /* Implement the "dwarf_reg_to_regnum" gdbarch method.  */
   1198 
   1199 static int
   1200 rl78_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   1201 {
   1202   if (0 <= reg && reg <= 31)
   1203     {
   1204       if ((reg & 1) == 0)
   1205 	/* Map even registers to their 16-bit counterparts which have a
   1206 	   pointer type.  This is usually what is required from the DWARF
   1207 	   info.  */
   1208 	return (reg >> 1) + RL78_BANK0_RP0_PTR_REGNUM;
   1209       else
   1210 	return reg;
   1211     }
   1212   else if (reg == 32)
   1213     return RL78_SP_REGNUM;
   1214   else if (reg == 33)
   1215     return -1;			/* ap */
   1216   else if (reg == 34)
   1217     return RL78_PSW_REGNUM;
   1218   else if (reg == 35)
   1219     return RL78_ES_REGNUM;
   1220   else if (reg == 36)
   1221     return RL78_CS_REGNUM;
   1222   else if (reg == 37)
   1223     return RL78_PC_REGNUM;
   1224   else
   1225     return -1;
   1226 }
   1227 
   1228 /* Implement the `register_sim_regno' gdbarch method.  */
   1229 
   1230 static int
   1231 rl78_register_sim_regno (struct gdbarch *gdbarch, int regnum)
   1232 {
   1233   gdb_assert (regnum < RL78_NUM_REGS);
   1234 
   1235   /* So long as regnum is in [0, RL78_NUM_REGS), it's valid.  We
   1236      just want to override the default here which disallows register
   1237      numbers which have no names.  */
   1238   return regnum;
   1239 }
   1240 
   1241 /* Implement the "return_value" gdbarch method.  */
   1242 
   1243 static enum return_value_convention
   1244 rl78_return_value (struct gdbarch *gdbarch,
   1245 		   struct value *function,
   1246 		   struct type *valtype,
   1247 		   struct regcache *regcache,
   1248 		   gdb_byte *readbuf, const gdb_byte *writebuf)
   1249 {
   1250   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1251   ULONGEST valtype_len = valtype->length ();
   1252   rl78_gdbarch_tdep *tdep = gdbarch_tdep<rl78_gdbarch_tdep> (gdbarch);
   1253   int is_g10 = tdep->elf_flags & E_FLAG_RL78_G10;
   1254 
   1255   if (valtype_len > 8)
   1256     return RETURN_VALUE_STRUCT_CONVENTION;
   1257 
   1258   if (readbuf)
   1259     {
   1260       ULONGEST u;
   1261       int argreg = RL78_RAW_BANK1_R0_REGNUM;
   1262       CORE_ADDR g10_raddr = 0xffec8;
   1263       int offset = 0;
   1264 
   1265       while (valtype_len > 0)
   1266 	{
   1267 	  if (is_g10)
   1268 	    u = read_memory_integer (g10_raddr, 1,
   1269 				     gdbarch_byte_order (gdbarch));
   1270 	  else
   1271 	    regcache_cooked_read_unsigned (regcache, argreg, &u);
   1272 	  store_unsigned_integer (readbuf + offset, 1, byte_order, u);
   1273 	  valtype_len -= 1;
   1274 	  offset += 1;
   1275 	  argreg++;
   1276 	  g10_raddr++;
   1277 	}
   1278     }
   1279 
   1280   if (writebuf)
   1281     {
   1282       ULONGEST u;
   1283       int argreg = RL78_RAW_BANK1_R0_REGNUM;
   1284       CORE_ADDR g10_raddr = 0xffec8;
   1285       int offset = 0;
   1286 
   1287       while (valtype_len > 0)
   1288 	{
   1289 	  u = extract_unsigned_integer (writebuf + offset, 1, byte_order);
   1290 	  if (is_g10) {
   1291 	    gdb_byte b = u & 0xff;
   1292 	    write_memory (g10_raddr, &b, 1);
   1293 	  }
   1294 	  else
   1295 	    regcache_cooked_write_unsigned (regcache, argreg, u);
   1296 	  valtype_len -= 1;
   1297 	  offset += 1;
   1298 	  argreg++;
   1299 	  g10_raddr++;
   1300 	}
   1301     }
   1302 
   1303   return RETURN_VALUE_REGISTER_CONVENTION;
   1304 }
   1305 
   1306 
   1307 /* Implement the "frame_align" gdbarch method.  */
   1308 
   1309 static CORE_ADDR
   1310 rl78_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
   1311 {
   1312   return rl78_make_data_address (align_down (sp, 2));
   1313 }
   1314 
   1315 
   1316 /* Implement the "dummy_id" gdbarch method.  */
   1317 
   1318 static struct frame_id
   1319 rl78_dummy_id (struct gdbarch *gdbarch, const frame_info_ptr &this_frame)
   1320 {
   1321   return
   1322     frame_id_build (rl78_make_data_address
   1323 		      (get_frame_register_unsigned
   1324 			(this_frame, RL78_SP_REGNUM)),
   1325 		    get_frame_pc (this_frame));
   1326 }
   1327 
   1328 
   1329 /* Implement the "push_dummy_call" gdbarch method.  */
   1330 
   1331 static CORE_ADDR
   1332 rl78_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
   1333 		      struct regcache *regcache, CORE_ADDR bp_addr,
   1334 		      int nargs, struct value **args, CORE_ADDR sp,
   1335 		      function_call_return_method return_method,
   1336 		      CORE_ADDR struct_addr)
   1337 {
   1338   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1339   gdb_byte buf[4];
   1340   int i;
   1341 
   1342   /* Push arguments in reverse order.  */
   1343   for (i = nargs - 1; i >= 0; i--)
   1344     {
   1345       struct type *value_type = args[i]->enclosing_type ();
   1346       int len = value_type->length ();
   1347       int container_len = (len + 1) & ~1;
   1348 
   1349       sp -= container_len;
   1350       write_memory (rl78_make_data_address (sp),
   1351 		    args[i]->contents_all ().data (), len);
   1352     }
   1353 
   1354   /* Store struct value address.  */
   1355   if (return_method == return_method_struct)
   1356     {
   1357       store_unsigned_integer (buf, 2, byte_order, struct_addr);
   1358       sp -= 2;
   1359       write_memory (rl78_make_data_address (sp), buf, 2);
   1360     }
   1361 
   1362   /* Store return address.  */
   1363   sp -= 4;
   1364   store_unsigned_integer (buf, 4, byte_order, bp_addr);
   1365   write_memory (rl78_make_data_address (sp), buf, 4);
   1366 
   1367   /* Finally, update the stack pointer...  */
   1368   regcache_cooked_write_unsigned (regcache, RL78_SP_REGNUM, sp);
   1369 
   1370   /* DWARF2/GCC uses the stack address *before* the function call as a
   1371      frame's CFA.  */
   1372   return rl78_make_data_address (sp + 4);
   1373 }
   1374 
   1375 /* Allocate and initialize a gdbarch object.  */
   1376 
   1377 static struct gdbarch *
   1378 rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   1379 {
   1380   int elf_flags;
   1381 
   1382   /* Extract the elf_flags if available.  */
   1383   if (info.abfd != NULL
   1384       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
   1385     elf_flags = elf_elfheader (info.abfd)->e_flags;
   1386   else
   1387     elf_flags = 0;
   1388 
   1389 
   1390   /* Try to find the architecture in the list of already defined
   1391      architectures.  */
   1392   for (arches = gdbarch_list_lookup_by_info (arches, &info);
   1393        arches != NULL;
   1394        arches = gdbarch_list_lookup_by_info (arches->next, &info))
   1395     {
   1396       rl78_gdbarch_tdep *tdep
   1397 	= gdbarch_tdep<rl78_gdbarch_tdep> (arches->gdbarch);
   1398 
   1399       if (tdep->elf_flags != elf_flags)
   1400 	continue;
   1401 
   1402       return arches->gdbarch;
   1403     }
   1404 
   1405   /* None found, create a new architecture from the information
   1406      provided.  */
   1407   gdbarch *gdbarch
   1408     = gdbarch_alloc (&info, gdbarch_tdep_up (new rl78_gdbarch_tdep));
   1409   rl78_gdbarch_tdep *tdep = gdbarch_tdep<rl78_gdbarch_tdep> (gdbarch);
   1410 
   1411   tdep->elf_flags = elf_flags;
   1412 
   1413   /* Initialize types.  */
   1414   type_allocator alloc (gdbarch);
   1415   tdep->rl78_void = alloc.new_type (TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
   1416   tdep->rl78_uint8 = init_integer_type (alloc, 8, 1, "uint8_t");
   1417   tdep->rl78_int8 = init_integer_type (alloc, 8, 0, "int8_t");
   1418   tdep->rl78_uint16 = init_integer_type (alloc, 16, 1, "uint16_t");
   1419   tdep->rl78_int16 = init_integer_type (alloc, 16, 0, "int16_t");
   1420   tdep->rl78_uint32 = init_integer_type (alloc, 32, 1, "uint32_t");
   1421   tdep->rl78_int32 = init_integer_type (alloc, 32, 0, "int32_t");
   1422 
   1423   tdep->rl78_data_pointer
   1424     = init_pointer_type (alloc, 16, "rl78_data_addr_t", tdep->rl78_void);
   1425   tdep->rl78_code_pointer
   1426     = init_pointer_type (alloc, 32, "rl78_code_addr_t", tdep->rl78_void);
   1427 
   1428   /* Registers.  */
   1429   set_gdbarch_num_regs (gdbarch, RL78_NUM_REGS);
   1430   set_gdbarch_num_pseudo_regs (gdbarch, RL78_NUM_PSEUDO_REGS);
   1431   if (tdep->elf_flags & E_FLAG_RL78_G10)
   1432     set_gdbarch_register_name (gdbarch, rl78_g10_register_name);
   1433   else
   1434     set_gdbarch_register_name (gdbarch, rl78_register_name);
   1435   set_gdbarch_register_type (gdbarch, rl78_register_type);
   1436   set_gdbarch_pc_regnum (gdbarch, RL78_PC_REGNUM);
   1437   set_gdbarch_sp_regnum (gdbarch, RL78_SP_REGNUM);
   1438   set_gdbarch_pseudo_register_read (gdbarch, rl78_pseudo_register_read);
   1439   set_gdbarch_deprecated_pseudo_register_write (gdbarch,
   1440 						rl78_pseudo_register_write);
   1441   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rl78_dwarf_reg_to_regnum);
   1442   set_gdbarch_register_reggroup_p (gdbarch, rl78_register_reggroup_p);
   1443   set_gdbarch_register_sim_regno (gdbarch, rl78_register_sim_regno);
   1444 
   1445   /* Data types.  */
   1446   set_gdbarch_char_signed (gdbarch, 0);
   1447   set_gdbarch_short_bit (gdbarch, 16);
   1448   set_gdbarch_int_bit (gdbarch, 16);
   1449   set_gdbarch_long_bit (gdbarch, 32);
   1450   set_gdbarch_long_long_bit (gdbarch, 64);
   1451   set_gdbarch_ptr_bit (gdbarch, 16);
   1452   set_gdbarch_addr_bit (gdbarch, 32);
   1453   set_gdbarch_dwarf2_addr_size (gdbarch, 4);
   1454   set_gdbarch_float_bit (gdbarch, 32);
   1455   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
   1456   set_gdbarch_double_bit (gdbarch, 32);
   1457   set_gdbarch_long_double_bit (gdbarch, 64);
   1458   set_gdbarch_double_format (gdbarch, floatformats_ieee_single);
   1459   set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
   1460   set_gdbarch_pointer_to_address (gdbarch, rl78_pointer_to_address);
   1461   set_gdbarch_address_to_pointer (gdbarch, rl78_address_to_pointer);
   1462   set_gdbarch_addr_bits_remove (gdbarch, rl78_addr_bits_remove);
   1463 
   1464   /* Breakpoints.  */
   1465   set_gdbarch_breakpoint_kind_from_pc (gdbarch, rl78_breakpoint::kind_from_pc);
   1466   set_gdbarch_sw_breakpoint_from_kind (gdbarch, rl78_breakpoint::bp_from_kind);
   1467   set_gdbarch_decr_pc_after_break (gdbarch, 1);
   1468 
   1469   /* Frames, prologues, etc.  */
   1470   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   1471   set_gdbarch_skip_prologue (gdbarch, rl78_skip_prologue);
   1472   set_gdbarch_unwind_pc (gdbarch, rl78_unwind_pc);
   1473   set_gdbarch_frame_align (gdbarch, rl78_frame_align);
   1474 
   1475   dwarf2_append_unwinders (gdbarch);
   1476   frame_unwind_append_unwinder (gdbarch, &rl78_unwind);
   1477 
   1478   /* Dummy frames, return values.  */
   1479   set_gdbarch_dummy_id (gdbarch, rl78_dummy_id);
   1480   set_gdbarch_push_dummy_call (gdbarch, rl78_push_dummy_call);
   1481   set_gdbarch_return_value (gdbarch, rl78_return_value);
   1482 
   1483   /* Virtual tables.  */
   1484   set_gdbarch_vbit_in_delta (gdbarch, 1);
   1485 
   1486   return gdbarch;
   1487 }
   1488 
   1489 /* Register the above initialization routine.  */
   1490 
   1491 void _initialize_rl78_tdep ();
   1492 void
   1493 _initialize_rl78_tdep ()
   1494 {
   1495   gdbarch_register (bfd_arch_rl78, rl78_gdbarch_init);
   1496 }
   1497