Home | History | Annotate | Line # | Download | only in gdb
tic6x-tdep.c revision 1.10
      1 /* Target dependent code for GDB on TI C6x systems.
      2 
      3    Copyright (C) 2010-2023 Free Software Foundation, Inc.
      4    Contributed by Andrew Jenner <andrew (at) codesourcery.com>
      5    Contributed by Yao Qi <yao (at) codesourcery.com>
      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 "defs.h"
     23 #include "frame.h"
     24 #include "frame-unwind.h"
     25 #include "frame-base.h"
     26 #include "trad-frame.h"
     27 #include "dwarf2/frame.h"
     28 #include "symtab.h"
     29 #include "inferior.h"
     30 #include "gdbtypes.h"
     31 #include "gdbcore.h"
     32 #include "gdbcmd.h"
     33 #include "target.h"
     34 #include "dis-asm.h"
     35 #include "regcache.h"
     36 #include "value.h"
     37 #include "symfile.h"
     38 #include "arch-utils.h"
     39 #include "glibc-tdep.h"
     40 #include "infcall.h"
     41 #include "regset.h"
     42 #include "tramp-frame.h"
     43 #include "linux-tdep.h"
     44 #include "solib.h"
     45 #include "objfiles.h"
     46 #include "osabi.h"
     47 #include "tic6x-tdep.h"
     48 #include "language.h"
     49 #include "target-descriptions.h"
     50 #include <algorithm>
     51 
     52 #define TIC6X_OPCODE_SIZE 4
     53 #define TIC6X_FETCH_PACKET_SIZE 32
     54 
     55 #define INST_S_BIT(INST) ((INST >> 1) & 1)
     56 #define INST_X_BIT(INST) ((INST >> 12) & 1)
     57 
     58 const gdb_byte tic6x_bkpt_illegal_opcode_be[] = { 0x56, 0x45, 0x43, 0x14 };
     59 const gdb_byte tic6x_bkpt_illegal_opcode_le[] = { 0x14, 0x43, 0x45, 0x56 };
     60 
     61 struct tic6x_unwind_cache
     62 {
     63   /* The frame's base, optionally used by the high-level debug info.  */
     64   CORE_ADDR base;
     65 
     66   /* The previous frame's inner most stack address.  Used as this
     67      frame ID's stack_addr.  */
     68   CORE_ADDR cfa;
     69 
     70   /* The address of the first instruction in this function */
     71   CORE_ADDR pc;
     72 
     73   /* Which register holds the return address for the frame.  */
     74   int return_regnum;
     75 
     76   /* The offset of register saved on stack.  If register is not saved, the
     77      corresponding element is -1.  */
     78   CORE_ADDR reg_saved[TIC6X_NUM_CORE_REGS];
     79 };
     80 
     81 
     82 /* Name of TI C6x core registers.  */
     83 static const char *const tic6x_register_names[] =
     84 {
     85   "A0",  "A1",  "A2",  "A3",  /*  0  1  2  3 */
     86   "A4",  "A5",  "A6",  "A7",  /*  4  5  6  7 */
     87   "A8",  "A9",  "A10", "A11", /*  8  9 10 11 */
     88   "A12", "A13", "A14", "A15", /* 12 13 14 15 */
     89   "B0",  "B1",  "B2",  "B3",  /* 16 17 18 19 */
     90   "B4",  "B5",  "B6",  "B7",  /* 20 21 22 23 */
     91   "B8",  "B9",  "B10", "B11", /* 24 25 26 27 */
     92   "B12", "B13", "B14", "B15", /* 28 29 30 31 */
     93   "CSR", "PC",                /* 32 33       */
     94 };
     95 
     96 /* This array maps the arguments to the register number which passes argument
     97    in function call according to C6000 ELF ABI.  */
     98 static const int arg_regs[] = { 4, 20, 6, 22, 8, 24, 10, 26, 12, 28 };
     99 
    100 /* This is the implementation of gdbarch method register_name.  */
    101 
    102 static const char *
    103 tic6x_register_name (struct gdbarch *gdbarch, int regno)
    104 {
    105   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
    106     return tdesc_register_name (gdbarch, regno);
    107   else if (regno >= ARRAY_SIZE (tic6x_register_names))
    108     return "";
    109   else
    110     return tic6x_register_names[regno];
    111 }
    112 
    113 /* This is the implementation of gdbarch method register_type.  */
    114 
    115 static struct type *
    116 tic6x_register_type (struct gdbarch *gdbarch, int regno)
    117 {
    118 
    119   if (regno == TIC6X_PC_REGNUM)
    120     return builtin_type (gdbarch)->builtin_func_ptr;
    121   else
    122     return builtin_type (gdbarch)->builtin_uint32;
    123 }
    124 
    125 static void
    126 tic6x_setup_default (struct tic6x_unwind_cache *cache)
    127 {
    128   int i;
    129 
    130   for (i = 0; i < TIC6X_NUM_CORE_REGS; i++)
    131     cache->reg_saved[i] = -1;
    132 }
    133 
    134 static unsigned long tic6x_fetch_instruction (struct gdbarch *, CORE_ADDR);
    135 static int tic6x_register_number (int reg, int side, int crosspath);
    136 
    137 /* Do a full analysis of the prologue at START_PC and update CACHE accordingly.
    138    Bail out early if CURRENT_PC is reached.  Returns the address of the first
    139    instruction after the prologue.  */
    140 
    141 static CORE_ADDR
    142 tic6x_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
    143 			const CORE_ADDR current_pc,
    144 			struct tic6x_unwind_cache *cache,
    145 			frame_info_ptr this_frame)
    146 {
    147   unsigned int src_reg, base_reg, dst_reg;
    148   int i;
    149   CORE_ADDR pc = start_pc;
    150   CORE_ADDR return_pc = start_pc;
    151   int frame_base_offset_to_sp = 0;
    152   /* Counter of non-stw instructions after first insn ` sub sp, xxx, sp'.  */
    153   int non_stw_insn_counter = 0;
    154 
    155   if (start_pc >= current_pc)
    156     return_pc = current_pc;
    157 
    158   cache->base = 0;
    159 
    160   /* The landmarks in prologue is one or two SUB instructions to SP.
    161      Instructions on setting up dsbt are in the last part of prologue, if
    162      needed.  In maxim, prologue can be divided to three parts by two
    163      `sub sp, xx, sp' insns.  */
    164 
    165   /* Step 1: Look for the 1st and 2nd insn `sub sp, xx, sp',  in which, the
    166      2nd one is optional.  */
    167   while (pc < current_pc)
    168     {
    169       unsigned long inst = tic6x_fetch_instruction (gdbarch, pc);
    170 
    171       if ((inst & 0x1ffc) == 0x1dc0 || (inst & 0x1ffc) == 0x1bc0
    172 	  || (inst & 0x0ffc) == 0x9c0)
    173 	{
    174 	  /* SUBAW/SUBAH/SUB, and src1 is ucst 5.  */
    175 	  unsigned int src2 = tic6x_register_number ((inst >> 18) & 0x1f,
    176 						     INST_S_BIT (inst), 0);
    177 	  unsigned int dst = tic6x_register_number ((inst >> 23) & 0x1f,
    178 						    INST_S_BIT (inst), 0);
    179 
    180 	  if (src2 == TIC6X_SP_REGNUM && dst == TIC6X_SP_REGNUM)
    181 	    {
    182 	      /* Extract const from insn SUBAW/SUBAH/SUB, and translate it to
    183 		 offset.  The constant offset is decoded in bit 13-17 in all
    184 		 these three kinds of instructions.  */
    185 	      unsigned int ucst5 = (inst >> 13) & 0x1f;
    186 
    187 	      if ((inst & 0x1ffc) == 0x1dc0)	/* SUBAW */
    188 		frame_base_offset_to_sp += ucst5 << 2;
    189 	      else if ((inst & 0x1ffc) == 0x1bc0)	/* SUBAH */
    190 		frame_base_offset_to_sp += ucst5 << 1;
    191 	      else if ((inst & 0x0ffc) == 0x9c0)	/* SUB */
    192 		frame_base_offset_to_sp += ucst5;
    193 	      else
    194 		gdb_assert_not_reached ("unexpected instruction");
    195 
    196 	      return_pc = pc + 4;
    197 	    }
    198 	}
    199       else if ((inst & 0x174) == 0x74)	/* stw SRC, *+b15(uconst) */
    200 	{
    201 	  /* The y bit determines which file base is read from.  */
    202 	  base_reg = tic6x_register_number ((inst >> 18) & 0x1f,
    203 					    (inst >> 7) & 1, 0);
    204 
    205 	  if (base_reg == TIC6X_SP_REGNUM)
    206 	    {
    207 	      src_reg = tic6x_register_number ((inst >> 23) & 0x1f,
    208 					       INST_S_BIT (inst), 0);
    209 
    210 	      cache->reg_saved[src_reg] = ((inst >> 13) & 0x1f) << 2;
    211 
    212 	      return_pc = pc + 4;
    213 	    }
    214 	  non_stw_insn_counter = 0;
    215 	}
    216       else
    217 	{
    218 	  non_stw_insn_counter++;
    219 	  /* Following instruction sequence may be emitted in prologue:
    220 
    221 	     <+0>: subah .D2 b15,28,b15
    222 	     <+4>: or .L2X 0,a4,b0
    223 	     <+8>: || stw .D2T2 b14,*+b15(56)
    224 	     <+12>:[!b0] b .S1 0xe50e4c1c <sleep+220>
    225 	     <+16>:|| stw .D2T1 a10,*+b15(48)
    226 	     <+20>:stw .D2T2 b3,*+b15(52)
    227 	     <+24>:stw .D2T1 a4,*+b15(40)
    228 
    229 	     we should look forward for next instruction instead of breaking loop
    230 	     here.  So far, we allow almost two sequential non-stw instructions
    231 	     in prologue.  */
    232 	  if (non_stw_insn_counter >= 2)
    233 	    break;
    234 	}
    235 
    236 
    237       pc += 4;
    238     }
    239   /* Step 2: Skip insn on setting up dsbt if it is.  Usually, it looks like,
    240      ldw .D2T2 *+b14(0),b14 */
    241   unsigned long inst = tic6x_fetch_instruction (gdbarch, pc);
    242   /* The s bit determines which file dst will be loaded into, same effect as
    243      other places.  */
    244   dst_reg = tic6x_register_number ((inst >> 23) & 0x1f, (inst >> 1) & 1, 0);
    245   /* The y bit (bit 7), instead of s bit, determines which file base be
    246      used.  */
    247   base_reg = tic6x_register_number ((inst >> 18) & 0x1f, (inst >> 7) & 1, 0);
    248 
    249   if ((inst & 0x164) == 0x64	/* ldw */
    250       && dst_reg == TIC6X_DP_REGNUM	/* dst is B14 */
    251       && base_reg == TIC6X_DP_REGNUM)	/* baseR is B14 */
    252     {
    253       return_pc = pc + 4;
    254     }
    255 
    256   if (this_frame)
    257     {
    258       cache->base = get_frame_register_unsigned (this_frame, TIC6X_SP_REGNUM);
    259 
    260       if (cache->reg_saved[TIC6X_FP_REGNUM] != -1)
    261 	{
    262 	  /* If the FP now holds an offset from the CFA then this is a frame
    263 	     which uses the frame pointer.  */
    264 
    265 	  cache->cfa = get_frame_register_unsigned (this_frame,
    266 						    TIC6X_FP_REGNUM);
    267 	}
    268       else
    269 	{
    270 	  /* FP doesn't hold an offset from the CFA.  If SP still holds an
    271 	     offset from the CFA then we might be in a function which omits
    272 	     the frame pointer.  */
    273 
    274 	  cache->cfa = cache->base + frame_base_offset_to_sp;
    275 	}
    276     }
    277 
    278   /* Adjust all the saved registers such that they contain addresses
    279      instead of offsets.  */
    280   for (i = 0; i < TIC6X_NUM_CORE_REGS; i++)
    281     if (cache->reg_saved[i] != -1)
    282       cache->reg_saved[i] = cache->base + cache->reg_saved[i];
    283 
    284   return return_pc;
    285 }
    286 
    287 /* This is the implementation of gdbarch method skip_prologue.  */
    288 
    289 static CORE_ADDR
    290 tic6x_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
    291 {
    292   CORE_ADDR func_addr;
    293   struct tic6x_unwind_cache cache;
    294 
    295   /* See if we can determine the end of the prologue via the symbol table.
    296      If so, then return either PC, or the PC after the prologue, whichever is
    297      greater.  */
    298   if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
    299     {
    300       CORE_ADDR post_prologue_pc
    301 	= skip_prologue_using_sal (gdbarch, func_addr);
    302       if (post_prologue_pc != 0)
    303 	return std::max (start_pc, post_prologue_pc);
    304     }
    305 
    306   /* Can't determine prologue from the symbol table, need to examine
    307      instructions.  */
    308   return tic6x_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache,
    309 				 NULL);
    310 }
    311 
    312 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
    313 
    314 static int
    315 tic6x_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
    316 {
    317   return 4;
    318 }
    319 
    320 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
    321 
    322 static const gdb_byte *
    323 tic6x_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
    324 {
    325   tic6x_gdbarch_tdep *tdep = gdbarch_tdep<tic6x_gdbarch_tdep> (gdbarch);
    326 
    327   *size = kind;
    328 
    329   if (tdep == NULL || tdep->breakpoint == NULL)
    330     {
    331       if (BFD_ENDIAN_BIG == gdbarch_byte_order_for_code (gdbarch))
    332 	return tic6x_bkpt_illegal_opcode_be;
    333       else
    334 	return tic6x_bkpt_illegal_opcode_le;
    335     }
    336   else
    337     return tdep->breakpoint;
    338 }
    339 
    340 static void
    341 tic6x_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
    342 			     struct dwarf2_frame_state_reg *reg,
    343 			     frame_info_ptr this_frame)
    344 {
    345   /* Mark the PC as the destination for the return address.  */
    346   if (regnum == gdbarch_pc_regnum (gdbarch))
    347     reg->how = DWARF2_FRAME_REG_RA;
    348 
    349   /* Mark the stack pointer as the call frame address.  */
    350   else if (regnum == gdbarch_sp_regnum (gdbarch))
    351     reg->how = DWARF2_FRAME_REG_CFA;
    352 
    353   /* The above was taken from the default init_reg in dwarf2-frame.c
    354      while the below is c6x specific.  */
    355 
    356   /* Callee save registers.  The ABI designates A10-A15 and B10-B15 as
    357      callee-save.  */
    358   else if ((regnum >= 10 && regnum <= 15) || (regnum >= 26 && regnum <= 31))
    359     reg->how = DWARF2_FRAME_REG_SAME_VALUE;
    360   else
    361     /* All other registers are caller-save.  */
    362     reg->how = DWARF2_FRAME_REG_UNDEFINED;
    363 }
    364 
    365 /* This is the implementation of gdbarch method unwind_pc.  */
    366 
    367 static CORE_ADDR
    368 tic6x_unwind_pc (struct gdbarch *gdbarch, frame_info_ptr next_frame)
    369 {
    370   gdb_byte buf[8];
    371 
    372   frame_unwind_register (next_frame,  TIC6X_PC_REGNUM, buf);
    373   return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
    374 }
    375 
    376 /* Frame base handling.  */
    377 
    378 static struct tic6x_unwind_cache*
    379 tic6x_frame_unwind_cache (frame_info_ptr this_frame,
    380 			  void **this_prologue_cache)
    381 {
    382   struct gdbarch *gdbarch = get_frame_arch (this_frame);
    383   CORE_ADDR current_pc;
    384   struct tic6x_unwind_cache *cache;
    385 
    386   if (*this_prologue_cache)
    387     return (struct tic6x_unwind_cache *) *this_prologue_cache;
    388 
    389   cache = FRAME_OBSTACK_ZALLOC (struct tic6x_unwind_cache);
    390   (*this_prologue_cache) = cache;
    391 
    392   cache->return_regnum = TIC6X_RA_REGNUM;
    393 
    394   tic6x_setup_default (cache);
    395 
    396   cache->pc = get_frame_func (this_frame);
    397   current_pc = get_frame_pc (this_frame);
    398 
    399   /* Prologue analysis does the rest...  */
    400   if (cache->pc != 0)
    401     tic6x_analyze_prologue (gdbarch, cache->pc, current_pc, cache, this_frame);
    402 
    403   return cache;
    404 }
    405 
    406 static void
    407 tic6x_frame_this_id (frame_info_ptr this_frame, void **this_cache,
    408 		     struct frame_id *this_id)
    409 {
    410   struct tic6x_unwind_cache *cache =
    411     tic6x_frame_unwind_cache (this_frame, this_cache);
    412 
    413   /* This marks the outermost frame.  */
    414   if (cache->base == 0)
    415     return;
    416 
    417   (*this_id) = frame_id_build (cache->cfa, cache->pc);
    418 }
    419 
    420 static struct value *
    421 tic6x_frame_prev_register (frame_info_ptr this_frame, void **this_cache,
    422 			   int regnum)
    423 {
    424   struct tic6x_unwind_cache *cache =
    425     tic6x_frame_unwind_cache (this_frame, this_cache);
    426 
    427   gdb_assert (regnum >= 0);
    428 
    429   /* The PC of the previous frame is stored in the RA register of
    430      the current frame.  Frob regnum so that we pull the value from
    431      the correct place.  */
    432   if (regnum == TIC6X_PC_REGNUM)
    433     regnum = cache->return_regnum;
    434 
    435   if (regnum == TIC6X_SP_REGNUM && cache->cfa)
    436     return frame_unwind_got_constant (this_frame, regnum, cache->cfa);
    437 
    438   /* If we've worked out where a register is stored then load it from
    439      there.  */
    440   if (regnum < TIC6X_NUM_CORE_REGS && cache->reg_saved[regnum] != -1)
    441     return frame_unwind_got_memory (this_frame, regnum,
    442 				    cache->reg_saved[regnum]);
    443 
    444   return frame_unwind_got_register (this_frame, regnum, regnum);
    445 }
    446 
    447 static CORE_ADDR
    448 tic6x_frame_base_address (frame_info_ptr this_frame, void **this_cache)
    449 {
    450   struct tic6x_unwind_cache *info
    451     = tic6x_frame_unwind_cache (this_frame, this_cache);
    452   return info->base;
    453 }
    454 
    455 static const struct frame_unwind tic6x_frame_unwind =
    456 {
    457   "tic6x prologue",
    458   NORMAL_FRAME,
    459   default_frame_unwind_stop_reason,
    460   tic6x_frame_this_id,
    461   tic6x_frame_prev_register,
    462   NULL,
    463   default_frame_sniffer
    464 };
    465 
    466 static const struct frame_base tic6x_frame_base =
    467 {
    468   &tic6x_frame_unwind,
    469   tic6x_frame_base_address,
    470   tic6x_frame_base_address,
    471   tic6x_frame_base_address
    472 };
    473 
    474 
    475 static struct tic6x_unwind_cache *
    476 tic6x_make_stub_cache (frame_info_ptr this_frame)
    477 {
    478   struct tic6x_unwind_cache *cache;
    479 
    480   cache = FRAME_OBSTACK_ZALLOC (struct tic6x_unwind_cache);
    481 
    482   cache->return_regnum = TIC6X_RA_REGNUM;
    483 
    484   tic6x_setup_default (cache);
    485 
    486   cache->cfa = get_frame_register_unsigned (this_frame, TIC6X_SP_REGNUM);
    487 
    488   return cache;
    489 }
    490 
    491 static void
    492 tic6x_stub_this_id (frame_info_ptr this_frame, void **this_cache,
    493 		    struct frame_id *this_id)
    494 {
    495   struct tic6x_unwind_cache *cache;
    496 
    497   if (*this_cache == NULL)
    498     *this_cache = tic6x_make_stub_cache (this_frame);
    499   cache = (struct tic6x_unwind_cache *) *this_cache;
    500 
    501   *this_id = frame_id_build (cache->cfa, get_frame_pc (this_frame));
    502 }
    503 
    504 static int
    505 tic6x_stub_unwind_sniffer (const struct frame_unwind *self,
    506 			   frame_info_ptr this_frame,
    507 			   void **this_prologue_cache)
    508 {
    509   CORE_ADDR addr_in_block;
    510 
    511   addr_in_block = get_frame_address_in_block (this_frame);
    512   if (in_plt_section (addr_in_block))
    513     return 1;
    514 
    515   return 0;
    516 }
    517 
    518 static const struct frame_unwind tic6x_stub_unwind =
    519 {
    520   "tic6x stub",
    521   NORMAL_FRAME,
    522   default_frame_unwind_stop_reason,
    523   tic6x_stub_this_id,
    524   tic6x_frame_prev_register,
    525   NULL,
    526   tic6x_stub_unwind_sniffer
    527 };
    528 
    529 /* Return the instruction on address PC.  */
    530 
    531 static unsigned long
    532 tic6x_fetch_instruction (struct gdbarch *gdbarch, CORE_ADDR pc)
    533 {
    534   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    535   return read_memory_unsigned_integer (pc, TIC6X_OPCODE_SIZE, byte_order);
    536 }
    537 
    538 /* Compute the condition of INST if it is a conditional instruction.  Always
    539    return 1 if INST is not a conditional instruction.  */
    540 
    541 static int
    542 tic6x_condition_true (struct regcache *regcache, unsigned long inst)
    543 {
    544   int register_number;
    545   int register_value;
    546   static const int register_numbers[8] = { -1, 16, 17, 18, 1, 2, 0, -1 };
    547 
    548   register_number = register_numbers[(inst >> 29) & 7];
    549   if (register_number == -1)
    550     return 1;
    551 
    552   register_value = regcache_raw_get_signed (regcache, register_number);
    553   if ((inst & 0x10000000) != 0)
    554     return register_value == 0;
    555   return register_value != 0;
    556 }
    557 
    558 /* Get the register number by decoding raw bits REG, SIDE, and CROSSPATH in
    559    instruction.  */
    560 
    561 static int
    562 tic6x_register_number (int reg, int side, int crosspath)
    563 {
    564   int r = (reg & 15) | ((crosspath ^ side) << 4);
    565   if ((reg & 16) != 0) /* A16 - A31, B16 - B31 */
    566     r += 37;
    567   return r;
    568 }
    569 
    570 static int
    571 tic6x_extract_signed_field (int value, int low_bit, int bits)
    572 {
    573   int mask = (1 << bits) - 1;
    574   int r = (value >> low_bit) & mask;
    575   if ((r & (1 << (bits - 1))) != 0)
    576     r -= mask + 1;
    577   return r;
    578 }
    579 
    580 /* Determine where to set a single step breakpoint.  */
    581 
    582 static CORE_ADDR
    583 tic6x_get_next_pc (struct regcache *regcache, CORE_ADDR pc)
    584 {
    585   struct gdbarch *gdbarch = regcache->arch ();
    586   unsigned long inst;
    587   int register_number;
    588   int last = 0;
    589 
    590   do
    591     {
    592       inst = tic6x_fetch_instruction (gdbarch, pc);
    593 
    594       last = !(inst & 1);
    595 
    596       if (inst == TIC6X_INST_SWE)
    597 	{
    598 	  tic6x_gdbarch_tdep *tdep
    599 	    = gdbarch_tdep<tic6x_gdbarch_tdep> (gdbarch);
    600 
    601 	  if (tdep->syscall_next_pc != NULL)
    602 	    return tdep->syscall_next_pc (get_current_frame ());
    603 	}
    604 
    605       if (tic6x_condition_true (regcache, inst))
    606 	{
    607 	  if ((inst & 0x0000007c) == 0x00000010)
    608 	    {
    609 	      /* B with displacement */
    610 	      pc &= ~(TIC6X_FETCH_PACKET_SIZE - 1);
    611 	      pc += tic6x_extract_signed_field (inst, 7, 21) << 2;
    612 	      break;
    613 	    }
    614 	  if ((inst & 0x0f83effc) == 0x00000360)
    615 	    {
    616 	      /* B with register */
    617 
    618 	      register_number = tic6x_register_number ((inst >> 18) & 0x1f,
    619 						       INST_S_BIT (inst),
    620 						       INST_X_BIT (inst));
    621 	      pc = regcache_raw_get_unsigned (regcache, register_number);
    622 	      break;
    623 	    }
    624 	  if ((inst & 0x00001ffc) == 0x00001020)
    625 	    {
    626 	      /* BDEC */
    627 	      register_number = tic6x_register_number ((inst >> 23) & 0x1f,
    628 						       INST_S_BIT (inst), 0);
    629 	      if (regcache_raw_get_signed (regcache, register_number) >= 0)
    630 		{
    631 		  pc &= ~(TIC6X_FETCH_PACKET_SIZE - 1);
    632 		  pc += tic6x_extract_signed_field (inst, 7, 10) << 2;
    633 		}
    634 	      break;
    635 	    }
    636 	  if ((inst & 0x00001ffc) == 0x00000120)
    637 	    {
    638 	      /* BNOP with displacement */
    639 	      pc &= ~(TIC6X_FETCH_PACKET_SIZE - 1);
    640 	      pc += tic6x_extract_signed_field (inst, 16, 12) << 2;
    641 	      break;
    642 	    }
    643 	  if ((inst & 0x0f830ffe) == 0x00800362)
    644 	    {
    645 	      /* BNOP with register */
    646 	      register_number = tic6x_register_number ((inst >> 18) & 0x1f,
    647 						       1, INST_X_BIT (inst));
    648 	      pc = regcache_raw_get_unsigned (regcache, register_number);
    649 	      break;
    650 	    }
    651 	  if ((inst & 0x00001ffc) == 0x00000020)
    652 	    {
    653 	      /* BPOS */
    654 	      register_number = tic6x_register_number ((inst >> 23) & 0x1f,
    655 						       INST_S_BIT (inst), 0);
    656 	      if (regcache_raw_get_signed (regcache, register_number) >= 0)
    657 		{
    658 		  pc &= ~(TIC6X_FETCH_PACKET_SIZE - 1);
    659 		  pc += tic6x_extract_signed_field (inst, 13, 10) << 2;
    660 		}
    661 	      break;
    662 	    }
    663 	  if ((inst & 0xf000007c) == 0x10000010)
    664 	    {
    665 	      /* CALLP */
    666 	      pc &= ~(TIC6X_FETCH_PACKET_SIZE - 1);
    667 	      pc += tic6x_extract_signed_field (inst, 7, 21) << 2;
    668 	      break;
    669 	    }
    670 	}
    671       pc += TIC6X_OPCODE_SIZE;
    672     }
    673   while (!last);
    674   return pc;
    675 }
    676 
    677 /* This is the implementation of gdbarch method software_single_step.  */
    678 
    679 static std::vector<CORE_ADDR>
    680 tic6x_software_single_step (struct regcache *regcache)
    681 {
    682   CORE_ADDR next_pc = tic6x_get_next_pc (regcache, regcache_read_pc (regcache));
    683 
    684   return {next_pc};
    685 }
    686 
    687 /* This is the implementation of gdbarch method frame_align.  */
    688 
    689 static CORE_ADDR
    690 tic6x_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
    691 {
    692   return align_down (addr, 8);
    693 }
    694 
    695 /* Given a return value in REGCACHE with a type VALTYPE, extract and copy its
    696    value into VALBUF.  */
    697 
    698 static void
    699 tic6x_extract_return_value (struct type *valtype, struct regcache *regcache,
    700 			    enum bfd_endian byte_order, gdb_byte *valbuf)
    701 {
    702   int len = valtype->length ();
    703 
    704   /* pointer types are returned in register A4,
    705      up to 32-bit types in A4
    706      up to 64-bit types in A5:A4  */
    707   if (len <= 4)
    708     {
    709       /* In big-endian,
    710 	 - one-byte structure or union occupies the LSB of single even register.
    711 	 - for two-byte structure or union, the first byte occupies byte 1 of
    712 	 register and the second byte occupies byte 0.
    713 	 so, we read the contents in VAL from the LSBs of register.  */
    714       if (len < 3 && byte_order == BFD_ENDIAN_BIG)
    715 	regcache->cooked_read_part (TIC6X_A4_REGNUM, 4 - len, len, valbuf);
    716       else
    717 	regcache->cooked_read (TIC6X_A4_REGNUM, valbuf);
    718     }
    719   else if (len <= 8)
    720     {
    721       /* For a 5-8 byte structure or union in big-endian, the first byte
    722 	 occupies byte 3 (the MSB) of the upper (odd) register and the
    723 	 remaining bytes fill the decreasingly significant bytes.  5-7
    724 	 byte structures or unions have padding in the LSBs of the
    725 	 lower (even) register.  */
    726       if (byte_order == BFD_ENDIAN_BIG)
    727 	{
    728 	  regcache->cooked_read (TIC6X_A4_REGNUM, valbuf + 4);
    729 	  regcache->cooked_read (TIC6X_A5_REGNUM, valbuf);
    730 	}
    731       else
    732 	{
    733 	  regcache->cooked_read (TIC6X_A4_REGNUM, valbuf);
    734 	  regcache->cooked_read (TIC6X_A5_REGNUM, valbuf + 4);
    735 	}
    736     }
    737 }
    738 
    739 /* Write into appropriate registers a function return value
    740    of type TYPE, given in virtual format.  */
    741 
    742 static void
    743 tic6x_store_return_value (struct type *valtype, struct regcache *regcache,
    744 			  enum bfd_endian byte_order, const gdb_byte *valbuf)
    745 {
    746   int len = valtype->length ();
    747 
    748   /* return values of up to 8 bytes are returned in A5:A4 */
    749 
    750   if (len <= 4)
    751     {
    752       if (len < 3 && byte_order == BFD_ENDIAN_BIG)
    753 	regcache->cooked_write_part (TIC6X_A4_REGNUM, 4 - len, len, valbuf);
    754       else
    755 	regcache->cooked_write (TIC6X_A4_REGNUM, valbuf);
    756     }
    757   else if (len <= 8)
    758     {
    759       if (byte_order == BFD_ENDIAN_BIG)
    760 	{
    761 	  regcache->cooked_write (TIC6X_A4_REGNUM, valbuf + 4);
    762 	  regcache->cooked_write (TIC6X_A5_REGNUM, valbuf);
    763 	}
    764       else
    765 	{
    766 	  regcache->cooked_write (TIC6X_A4_REGNUM, valbuf);
    767 	  regcache->cooked_write (TIC6X_A5_REGNUM, valbuf + 4);
    768 	}
    769     }
    770 }
    771 
    772 /* This is the implementation of gdbarch method return_value.  */
    773 
    774 static enum return_value_convention
    775 tic6x_return_value (struct gdbarch *gdbarch, struct value *function,
    776 		    struct type *type, struct regcache *regcache,
    777 		    gdb_byte *readbuf, const gdb_byte *writebuf)
    778 {
    779   /* In C++, when function returns an object, even its size is small
    780      enough, it stii has to be passed via reference, pointed by register
    781      A3.  */
    782   if (current_language->la_language == language_cplus)
    783     {
    784       if (type != NULL)
    785 	{
    786 	  type = check_typedef (type);
    787 	  if (!(language_pass_by_reference (type).trivially_copyable))
    788 	    return RETURN_VALUE_STRUCT_CONVENTION;
    789 	}
    790     }
    791 
    792   if (type->length () > 8)
    793     return RETURN_VALUE_STRUCT_CONVENTION;
    794 
    795   if (readbuf)
    796     tic6x_extract_return_value (type, regcache,
    797 				gdbarch_byte_order (gdbarch), readbuf);
    798   if (writebuf)
    799     tic6x_store_return_value (type, regcache,
    800 			      gdbarch_byte_order (gdbarch), writebuf);
    801 
    802   return RETURN_VALUE_REGISTER_CONVENTION;
    803 }
    804 
    805 /* Get the alignment requirement of TYPE.  */
    806 
    807 static int
    808 tic6x_arg_type_alignment (struct type *type)
    809 {
    810   int len = check_typedef (type)->length ();
    811   enum type_code typecode = check_typedef (type)->code ();
    812 
    813   if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
    814     {
    815       /* The stack alignment of a structure (and union) passed by value is the
    816 	 smallest power of two greater than or equal to its size.
    817 	 This cannot exceed 8 bytes, which is the largest allowable size for
    818 	 a structure passed by value.  */
    819 
    820       if (len <= 2)
    821 	return len;
    822       else if (len <= 4)
    823 	return 4;
    824       else if (len <= 8)
    825 	return 8;
    826       else
    827 	gdb_assert_not_reached ("unexpected length of data");
    828     }
    829   else
    830     {
    831       if (len <= 4)
    832 	return 4;
    833       else if (len == 8)
    834 	{
    835 	  if (typecode == TYPE_CODE_COMPLEX)
    836 	    return 4;
    837 	  else
    838 	    return 8;
    839 	}
    840       else if (len == 16)
    841 	{
    842 	  if (typecode == TYPE_CODE_COMPLEX)
    843 	    return 8;
    844 	  else
    845 	    return 16;
    846 	}
    847       else
    848 	internal_error (_("unexpected length %d of type"),
    849 			len);
    850     }
    851 }
    852 
    853 /* This is the implementation of gdbarch method push_dummy_call.  */
    854 
    855 static CORE_ADDR
    856 tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
    857 		       struct regcache *regcache, CORE_ADDR bp_addr,
    858 		       int nargs, struct value **args, CORE_ADDR sp,
    859 		       function_call_return_method return_method,
    860 		       CORE_ADDR struct_addr)
    861 {
    862   int argreg = 0;
    863   int argnum;
    864   int stack_offset = 4;
    865   int references_offset = 4;
    866   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    867   struct type *func_type = value_type (function);
    868   /* The first arg passed on stack.  Mostly the first 10 args are passed by
    869      registers.  */
    870   int first_arg_on_stack = 10;
    871 
    872   /* Set the return address register to point to the entry point of
    873      the program, where a breakpoint lies in wait.  */
    874   regcache_cooked_write_unsigned (regcache, TIC6X_RA_REGNUM, bp_addr);
    875 
    876   /* The caller must pass an argument in A3 containing a destination address
    877      for the returned value.  The callee returns the object by copying it to
    878      the address in A3.  */
    879   if (return_method == return_method_struct)
    880     regcache_cooked_write_unsigned (regcache, 3, struct_addr);
    881 
    882   /* Determine the type of this function.  */
    883   func_type = check_typedef (func_type);
    884   if (func_type->code () == TYPE_CODE_PTR)
    885     func_type = check_typedef (func_type->target_type ());
    886 
    887   gdb_assert (func_type->code () == TYPE_CODE_FUNC
    888 	      || func_type->code () == TYPE_CODE_METHOD);
    889 
    890   /* For a variadic C function, the last explicitly declared argument and all
    891      remaining arguments are passed on the stack.  */
    892   if (func_type->has_varargs ())
    893     first_arg_on_stack = func_type->num_fields () - 1;
    894 
    895   /* Now make space on the stack for the args.  */
    896   for (argnum = 0; argnum < nargs; argnum++)
    897     {
    898       int len = align_up (value_type (args[argnum])->length (), 4);
    899       if (argnum >= 10 - argreg)
    900 	references_offset += len;
    901       stack_offset += len;
    902     }
    903   sp -= stack_offset;
    904   /* SP should be 8-byte aligned, see C6000 ABI section 4.4.1
    905      Stack Alignment.  */
    906   sp = align_down (sp, 8);
    907   stack_offset = 4;
    908 
    909   /* Now load as many as possible of the first arguments into
    910      registers, and push the rest onto the stack.  Loop through args
    911      from first to last.  */
    912   for (argnum = 0; argnum < nargs; argnum++)
    913     {
    914       const gdb_byte *val;
    915       struct value *arg = args[argnum];
    916       struct type *arg_type = check_typedef (value_type (arg));
    917       int len = arg_type->length ();
    918       enum type_code typecode = arg_type->code ();
    919 
    920       val = value_contents (arg).data ();
    921 
    922       /* Copy the argument to general registers or the stack in
    923 	 register-sized pieces.  */
    924       if (argreg < first_arg_on_stack)
    925 	{
    926 	  if (len <= 4)
    927 	    {
    928 	      if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
    929 		{
    930 		  /* In big-endian,
    931 		     - one-byte structure or union occupies the LSB of single
    932 		     even register.
    933 		     - for two-byte structure or union, the first byte
    934 		     occupies byte 1 of register and the second byte occupies
    935 		     byte 0.
    936 		     so, we write the contents in VAL to the lsp of
    937 		     register.  */
    938 		  if (len < 3 && byte_order == BFD_ENDIAN_BIG)
    939 		    regcache->cooked_write_part (arg_regs[argreg], 4 - len, len,
    940 						 val);
    941 		  else
    942 		    regcache->cooked_write (arg_regs[argreg], val);
    943 		}
    944 	      else
    945 		{
    946 		  /* The argument is being passed by value in a single
    947 		     register.  */
    948 		  CORE_ADDR regval = extract_unsigned_integer (val, len,
    949 							       byte_order);
    950 
    951 		  regcache_cooked_write_unsigned (regcache, arg_regs[argreg],
    952 						  regval);
    953 		}
    954 	    }
    955 	  else
    956 	    {
    957 	      if (len <= 8)
    958 		{
    959 		  if (typecode == TYPE_CODE_STRUCT
    960 		      || typecode == TYPE_CODE_UNION)
    961 		    {
    962 		      /* For a 5-8 byte structure or union in big-endian, the
    963 			 first byte occupies byte 3 (the MSB) of the upper (odd)
    964 			 register and the remaining bytes fill the decreasingly
    965 			 significant bytes.  5-7 byte structures or unions have
    966 			 padding in the LSBs of the lower (even) register.  */
    967 		      if (byte_order == BFD_ENDIAN_BIG)
    968 			{
    969 			  regcache->cooked_write (arg_regs[argreg] + 1, val);
    970 			  regcache->cooked_write_part (arg_regs[argreg], 0,
    971 						       len - 4, val + 4);
    972 			}
    973 		      else
    974 			{
    975 			  regcache->cooked_write (arg_regs[argreg], val);
    976 			  regcache->cooked_write_part (arg_regs[argreg] + 1, 0,
    977 						       len - 4, val + 4);
    978 			}
    979 		    }
    980 		  else
    981 		    {
    982 		      /* The argument is being passed by value in a pair of
    983 			 registers.  */
    984 		      ULONGEST regval = extract_unsigned_integer (val, len,
    985 								  byte_order);
    986 
    987 		      regcache_cooked_write_unsigned (regcache,
    988 						      arg_regs[argreg],
    989 						      regval);
    990 		      regcache_cooked_write_unsigned (regcache,
    991 						      arg_regs[argreg] + 1,
    992 						      regval >> 32);
    993 		    }
    994 		}
    995 	      else
    996 		{
    997 		  /* The argument is being passed by reference in a single
    998 		     register.  */
    999 		  CORE_ADDR addr;
   1000 
   1001 		  /* It is not necessary to adjust REFERENCES_OFFSET to
   1002 		     8-byte aligned in some cases, in which 4-byte alignment
   1003 		     is sufficient.  For simplicity, we adjust
   1004 		     REFERENCES_OFFSET to 8-byte aligned.  */
   1005 		  references_offset = align_up (references_offset, 8);
   1006 
   1007 		  addr = sp + references_offset;
   1008 		  write_memory (addr, val, len);
   1009 		  references_offset += align_up (len, 4);
   1010 		  regcache_cooked_write_unsigned (regcache, arg_regs[argreg],
   1011 						  addr);
   1012 		}
   1013 	    }
   1014 	  argreg++;
   1015 	}
   1016       else
   1017 	{
   1018 	  /* The argument is being passed on the stack.  */
   1019 	  CORE_ADDR addr;
   1020 
   1021 	  /* There are six different cases of alignment, and these rules can
   1022 	     be found in tic6x_arg_type_alignment:
   1023 
   1024 	     1) 4-byte aligned if size is less than or equal to 4 byte, such
   1025 	     as short, int, struct, union etc.
   1026 	     2) 8-byte aligned if size is less than or equal to 8-byte, such
   1027 	     as double, long long,
   1028 	     3) 4-byte aligned if it is of type _Complex float, even its size
   1029 	     is 8-byte.
   1030 	     4) 8-byte aligned if it is of type _Complex double or _Complex
   1031 	     long double, even its size is 16-byte.  Because, the address of
   1032 	     variable is passed as reference.
   1033 	     5) struct and union larger than 8-byte are passed by reference, so
   1034 	     it is 4-byte aligned.
   1035 	     6) struct and union of size between 4 byte and 8 byte varies.
   1036 	     alignment of struct variable is the alignment of its first field,
   1037 	     while alignment of union variable is the max of all its fields'
   1038 	     alignment.  */
   1039 
   1040 	  if (len <= 4)
   1041 	    ; /* Default is 4-byte aligned.  Nothing to be done.  */
   1042 	  else if (len <= 8)
   1043 	    stack_offset = align_up (stack_offset,
   1044 				     tic6x_arg_type_alignment (arg_type));
   1045 	  else if (len == 16)
   1046 	    {
   1047 	      /* _Complex double or _Complex long double */
   1048 	      if (typecode == TYPE_CODE_COMPLEX)
   1049 		{
   1050 		  /* The argument is being passed by reference on stack.  */
   1051 		  references_offset = align_up (references_offset, 8);
   1052 
   1053 		  addr = sp + references_offset;
   1054 		  /* Store variable on stack.  */
   1055 		  write_memory (addr, val, len);
   1056 
   1057 		  references_offset += align_up (len, 4);
   1058 
   1059 		  /* Pass the address of variable on stack as reference.  */
   1060 		  store_unsigned_integer ((gdb_byte *) val, 4, byte_order,
   1061 					  addr);
   1062 		  len = 4;
   1063 
   1064 		}
   1065 	      else
   1066 		internal_error (_("unexpected type %d of arg %d"),
   1067 				typecode, argnum);
   1068 	    }
   1069 	  else
   1070 	    internal_error (_("unexpected length %d of arg %d"), len, argnum);
   1071 
   1072 	  addr = sp + stack_offset;
   1073 	  write_memory (addr, val, len);
   1074 	  stack_offset += align_up (len, 4);
   1075 	}
   1076     }
   1077 
   1078   regcache_cooked_write_signed (regcache, TIC6X_SP_REGNUM, sp);
   1079 
   1080   /* Return adjusted stack pointer.  */
   1081   return sp;
   1082 }
   1083 
   1084 /* This is the implementation of gdbarch method stack_frame_destroyed_p.  */
   1085 
   1086 static int
   1087 tic6x_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
   1088 {
   1089   unsigned long inst = tic6x_fetch_instruction (gdbarch, pc);
   1090   /* Normally, the epilogue is composed by instruction `b .S2 b3'.  */
   1091   if ((inst & 0x0f83effc) == 0x360)
   1092     {
   1093       unsigned int src2 = tic6x_register_number ((inst >> 18) & 0x1f,
   1094 						 INST_S_BIT (inst),
   1095 						 INST_X_BIT (inst));
   1096       if (src2 == TIC6X_RA_REGNUM)
   1097 	return 1;
   1098     }
   1099 
   1100   return 0;
   1101 }
   1102 
   1103 /* This is the implementation of gdbarch method get_longjmp_target.  */
   1104 
   1105 static int
   1106 tic6x_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
   1107 {
   1108   struct gdbarch *gdbarch = get_frame_arch (frame);
   1109   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1110   CORE_ADDR jb_addr;
   1111   gdb_byte buf[4];
   1112 
   1113   /* JMP_BUF is passed by reference in A4.  */
   1114   jb_addr = get_frame_register_unsigned (frame, 4);
   1115 
   1116   /* JMP_BUF contains 13 elements of type int, and return address is stored
   1117      in the last slot.  */
   1118   if (target_read_memory (jb_addr + 12 * 4, buf, 4))
   1119     return 0;
   1120 
   1121   *pc = extract_unsigned_integer (buf, 4, byte_order);
   1122 
   1123   return 1;
   1124 }
   1125 
   1126 /* This is the implementation of gdbarch method
   1127    return_in_first_hidden_param_p.  */
   1128 
   1129 static int
   1130 tic6x_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
   1131 				      struct type *type)
   1132 {
   1133   return 0;
   1134 }
   1135 
   1136 static struct gdbarch *
   1137 tic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   1138 {
   1139   struct gdbarch *gdbarch;
   1140   tdesc_arch_data_up tdesc_data;
   1141   const struct target_desc *tdesc = info.target_desc;
   1142   int has_gp = 0;
   1143 
   1144   /* Check any target description for validity.  */
   1145   if (tdesc_has_registers (tdesc))
   1146     {
   1147       const struct tdesc_feature *feature;
   1148       int valid_p, i;
   1149 
   1150       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.tic6x.core");
   1151 
   1152       if (feature == NULL)
   1153 	return NULL;
   1154 
   1155       tdesc_data = tdesc_data_alloc ();
   1156 
   1157       valid_p = 1;
   1158       for (i = 0; i < 32; i++)	/* A0 - A15, B0 - B15 */
   1159 	valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
   1160 					    tic6x_register_names[i]);
   1161 
   1162       /* CSR */
   1163       valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i++,
   1164 					  tic6x_register_names[TIC6X_CSR_REGNUM]);
   1165       valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i++,
   1166 					  tic6x_register_names[TIC6X_PC_REGNUM]);
   1167 
   1168       if (!valid_p)
   1169 	return NULL;
   1170 
   1171       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.tic6x.gp");
   1172       if (feature)
   1173 	{
   1174 	  int j = 0;
   1175 	  static const char *const gp[] =
   1176 	    {
   1177 	      "A16", "A17", "A18", "A19", "A20", "A21", "A22", "A23",
   1178 	      "A24", "A25", "A26", "A27", "A28", "A29", "A30", "A31",
   1179 	      "B16", "B17", "B18", "B19", "B20", "B21", "B22", "B23",
   1180 	      "B24", "B25", "B26", "B27", "B28", "B29", "B30", "B31",
   1181 	    };
   1182 
   1183 	  has_gp = 1;
   1184 	  valid_p = 1;
   1185 	  for (j = 0; j < 32; j++)	/* A16 - A31, B16 - B31 */
   1186 	    valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
   1187 						i++, gp[j]);
   1188 
   1189 	  if (!valid_p)
   1190 	    return NULL;
   1191 	}
   1192 
   1193       feature = tdesc_find_feature (tdesc, "org.gnu.gdb.tic6x.c6xp");
   1194       if (feature)
   1195 	{
   1196 	  valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
   1197 					      i++, "TSR");
   1198 	  valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
   1199 					      i++, "ILC");
   1200 	  valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
   1201 					      i++, "RILC");
   1202 
   1203 	  if (!valid_p)
   1204 	    return NULL;
   1205 	}
   1206 
   1207     }
   1208 
   1209   /* Find a candidate among extant architectures.  */
   1210   for (arches = gdbarch_list_lookup_by_info (arches, &info);
   1211        arches != NULL;
   1212        arches = gdbarch_list_lookup_by_info (arches->next, &info))
   1213     {
   1214       tic6x_gdbarch_tdep *tdep
   1215 	= gdbarch_tdep<tic6x_gdbarch_tdep> (arches->gdbarch);
   1216 
   1217       if (has_gp != tdep->has_gp)
   1218 	continue;
   1219 
   1220       if (tdep && tdep->breakpoint)
   1221 	return arches->gdbarch;
   1222     }
   1223 
   1224   tic6x_gdbarch_tdep *tdep = new tic6x_gdbarch_tdep;
   1225 
   1226   tdep->has_gp = has_gp;
   1227   gdbarch = gdbarch_alloc (&info, tdep);
   1228 
   1229   /* Data type sizes.  */
   1230   set_gdbarch_ptr_bit (gdbarch, 32);
   1231   set_gdbarch_addr_bit (gdbarch, 32);
   1232   set_gdbarch_short_bit (gdbarch, 16);
   1233   set_gdbarch_int_bit (gdbarch, 32);
   1234   set_gdbarch_long_bit (gdbarch, 32);
   1235   set_gdbarch_long_long_bit (gdbarch, 64);
   1236   set_gdbarch_float_bit (gdbarch, 32);
   1237   set_gdbarch_double_bit (gdbarch, 64);
   1238 
   1239   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
   1240   set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
   1241 
   1242   /* The register set.  */
   1243   set_gdbarch_num_regs (gdbarch, TIC6X_NUM_REGS);
   1244   set_gdbarch_sp_regnum (gdbarch, TIC6X_SP_REGNUM);
   1245   set_gdbarch_pc_regnum (gdbarch, TIC6X_PC_REGNUM);
   1246 
   1247   set_gdbarch_register_name (gdbarch, tic6x_register_name);
   1248   set_gdbarch_register_type (gdbarch, tic6x_register_type);
   1249 
   1250   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
   1251 
   1252   set_gdbarch_skip_prologue (gdbarch, tic6x_skip_prologue);
   1253   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
   1254 				       tic6x_breakpoint_kind_from_pc);
   1255   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
   1256 				       tic6x_sw_breakpoint_from_kind);
   1257 
   1258   set_gdbarch_unwind_pc (gdbarch, tic6x_unwind_pc);
   1259 
   1260   /* Unwinding.  */
   1261   dwarf2_append_unwinders (gdbarch);
   1262 
   1263   frame_unwind_append_unwinder (gdbarch, &tic6x_stub_unwind);
   1264   frame_unwind_append_unwinder (gdbarch, &tic6x_frame_unwind);
   1265   frame_base_set_default (gdbarch, &tic6x_frame_base);
   1266 
   1267   dwarf2_frame_set_init_reg (gdbarch, tic6x_dwarf2_frame_init_reg);
   1268 
   1269   /* Single stepping.  */
   1270   set_gdbarch_software_single_step (gdbarch, tic6x_software_single_step);
   1271 
   1272   /* Call dummy code.  */
   1273   set_gdbarch_frame_align (gdbarch, tic6x_frame_align);
   1274 
   1275   set_gdbarch_return_value (gdbarch, tic6x_return_value);
   1276 
   1277   /* Enable inferior call support.  */
   1278   set_gdbarch_push_dummy_call (gdbarch, tic6x_push_dummy_call);
   1279 
   1280   set_gdbarch_get_longjmp_target (gdbarch, tic6x_get_longjmp_target);
   1281 
   1282   set_gdbarch_stack_frame_destroyed_p (gdbarch, tic6x_stack_frame_destroyed_p);
   1283 
   1284   set_gdbarch_return_in_first_hidden_param_p (gdbarch,
   1285 					      tic6x_return_in_first_hidden_param_p);
   1286 
   1287   /* Hook in ABI-specific overrides, if they have been registered.  */
   1288   gdbarch_init_osabi (info, gdbarch);
   1289 
   1290   if (tdesc_data != nullptr)
   1291     tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
   1292 
   1293   return gdbarch;
   1294 }
   1295 
   1296 void _initialize_tic6x_tdep ();
   1297 void
   1298 _initialize_tic6x_tdep ()
   1299 {
   1300   gdbarch_register (bfd_arch_tic6x, tic6x_gdbarch_init);
   1301 }
   1302