23#include "gdbsupport/gdb_assert.h"
49#include "floatformat.h"
57#include "opcode/csky.h"
72 (
const char *)
"org.gnu.csky.abiv2.gpr",
73 (
const char *)
"org.gnu.csky.abiv2.fpu",
74 (
const char *)
"org.gnu.csky.abiv2.cr",
75 (
const char *)
"org.gnu.csky.abiv2.fvcr",
76 (
const char *)
"org.gnu.csky.abiv2.mmu",
77 (
const char *)
"org.gnu.csky.abiv2.tee",
78 (
const char *)
"org.gnu.csky.abiv2.fpu2",
79 (
const char *)
"org.gnu.csky.abiv2.bank0",
80 (
const char *)
"org.gnu.csky.abiv2.bank1",
81 (
const char *)
"org.gnu.csky.abiv2.bank2",
82 (
const char *)
"org.gnu.csky.abiv2.bank3",
83 (
const char *)
"org.gnu.csky.abiv2.bank4",
84 (
const char *)
"org.gnu.csky.abiv2.bank5",
85 (
const char *)
"org.gnu.csky.abiv2.bank6",
86 (
const char *)
"org.gnu.csky.abiv2.bank7",
87 (
const char *)
"org.gnu.csky.abiv2.bank8",
88 (
const char *)
"org.gnu.csky.abiv2.bank9",
89 (
const char *)
"org.gnu.csky.abiv2.bank10",
90 (
const char *)
"org.gnu.csky.abiv2.bank11",
91 (
const char *)
"org.gnu.csky.abiv2.bank12",
92 (
const char *)
"org.gnu.csky.abiv2.bank13",
93 (
const char *)
"org.gnu.csky.abiv2.bank14",
94 (
const char *)
"org.gnu.csky.abiv2.bank15",
95 (
const char *)
"org.gnu.csky.abiv2.bank16",
96 (
const char *)
"org.gnu.csky.abiv2.bank17",
97 (
const char *)
"org.gnu.csky.abiv2.bank18",
98 (
const char *)
"org.gnu.csky.abiv2.bank19",
99 (
const char *)
"org.gnu.csky.abiv2.bank20",
100 (
const char *)
"org.gnu.csky.abiv2.bank21",
101 (
const char *)
"org.gnu.csky.abiv2.bank22",
102 (
const char *)
"org.gnu.csky.abiv2.bank23",
103 (
const char *)
"org.gnu.csky.abiv2.bank24",
104 (
const char *)
"org.gnu.csky.abiv2.bank25",
105 (
const char *)
"org.gnu.csky.abiv2.bank26",
106 (
const char *)
"org.gnu.csky.abiv2.bank27",
107 (
const char *)
"org.gnu.csky.abiv2.bank28",
108 (
const char *)
"org.gnu.csky.abiv2.bank29",
109 (
const char *)
"org.gnu.csky.abiv2.bank30",
110 (
const char *)
"org.gnu.csky.abiv2.bank31"
386 count += 32 * (14 + 16);
409 if (index < (count + count_fpu))
412 if (index < (count + count_ar))
415 if (index < (count + count_bank0))
417 count += count_bank0;
418 if (index < (count + count_mmu))
421 if (index < (count + count_bank15))
423 count += count_bank15;
424 if (index < (count + count_alias))
426 count += count_alias;
434 sprintf (tdesc_reg.
name,
"cp1cr%d", remain);
435 tdesc_reg.
num = 189 + remain;
440 sprintf (tdesc_reg.
name,
"cp2cr%d", remain);
441 tdesc_reg.
num = 276 + remain;
446 sprintf (tdesc_reg.
name,
"cp3cr%d", remain);
447 tdesc_reg.
num = 221 + remain;
463 sprintf (tdesc_reg.
name,
"cp%dcr%d", (multi + 1), remain);
464 tdesc_reg.
num = 308 + ((multi - 3) * 32) + remain;
485 sprintf (tdesc_reg.
name,
"cp%dcr%d", (multi + 2), remain);
486 tdesc_reg.
num = 660 + ((multi - 14) * 32) + remain;
501 regno, offsets[regno]);
502 if (print_continuing)
511 gdb_byte target_mem[2];
546 gdb_byte target_mem[2];
547 unsigned int insn_type;
562 insn_type = ((insn_type << 16)
593 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
594 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15",
595 "r16",
"r17",
"r18",
"r19",
"r20",
"r21",
"r22",
"r23",
596 "r24",
"r25",
"r26",
"r27",
"r28",
"r29",
"r30",
"r31",
599 "",
"",
"",
"",
"hi",
"lo",
"",
"",
602 "fr0",
"fr1",
"fr2",
"fr3",
"fr4",
"fr5",
"fr6",
"fr7",
603 "fr8",
"fr9",
"fr10",
"fr11",
"fr12",
"fr13",
"fr14",
"fr15",
604 "vr0",
"vr1",
"vr2",
"vr3",
"vr4",
"vr5",
"vr6",
"vr7",
605 "vr8",
"vr9",
"vr10",
"vr11",
"vr12",
"vr13",
"vr14",
"vr15",
611 "ar0",
"ar1",
"ar2",
"ar3",
"ar4",
"ar5",
"ar6",
"ar7",
612 "ar8",
"ar9",
"ar10",
"ar11",
"ar12",
"ar13",
"ar14",
"ar15",
615 "psr",
"vbr",
"epsr",
"fpsr",
"epc",
"fpc",
"ss0",
"ss1",
616 "ss2",
"ss3",
"ss4",
"gcr",
"gsr",
"cr13",
"cr14",
"cr15",
617 "cr16",
"cr17",
"cr18",
"cr19",
"cr20",
"cr21",
"cr22",
"cr23",
618 "cr24",
"cr25",
"cr26",
"cr27",
"cr28",
"cr29",
"cr30",
"cr31",
622 "fid",
"fcr",
"fesr",
"",
"",
"",
"usp",
625 "mcr0",
"mcr2",
"mcr3",
"mcr4",
"mcr6",
"mcr8",
"mcr29",
"mcr30",
630 "profcr0",
"profcr1",
"profcr2",
"profcr3",
"profsgr0",
"profsgr1",
631 "profsgr2",
"profsgr3",
"profsgr4",
"profsgr5",
"profsgr6",
"profsgr7",
632 "profsgr8",
"profsgr9",
"profsgr10",
"profsgr11",
"profsgr12",
"profsgr13",
636 "profagr0",
"profagr1",
"profagr2",
"profagr3",
"profagr4",
"profagr5",
637 "profagr6",
"profagr7",
"profagr8",
"profagr9",
"profagr10",
"profagr11",
638 "profagr12",
"profagr13",
"profagr14",
"",
641 "profxgr0",
"profxgr1",
"profxgr2",
"profxgr3",
"profxgr4",
"profxgr5",
642 "profxgr6",
"profxgr7",
"profxgr8",
"profxgr9",
"profxgr10",
"profxgr11",
646 "",
"",
"",
"",
"",
"",
"",
"",
647 "",
"",
"",
"",
"",
"",
"",
"",
648 "cp1cr16",
"cp1cr17",
"cp1cr18",
"cp1cr19",
"cp1cr20",
"",
"",
"",
649 "",
"",
"",
"",
"",
"",
"",
"",
652 "sepsr",
"sevbr",
"seepsr",
"",
"seepc",
"",
"nsssp",
"seusp",
653 "sedcr",
"",
"",
"",
"",
"",
"",
"",
654 "",
"",
"",
"",
"",
"",
"",
"",
655 "",
"",
"",
"",
"",
"",
"",
""
692 t->
set_name (
"builtin_type_vec128i");
705 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
709 if ((reg_nr >= num_regs)
772 int nargs,
struct value **args, CORE_ADDR sp,
774 CORE_ADDR struct_addr)
780 std::vector<csky_stack_item> stack_items;
793 "csky: struct return in %s = %s\n",
803 for (argnum = 0; argnum < nargs; argnum++)
806 struct type *arg_type;
810 len = arg_type->
length ();
829 int partial_len = len < 4 ? len : 4;
830 if (argreg <= last_arg_regnum)
836 if (byte_order == BFD_ENDIAN_BIG)
837 regval <<= (4 - partial_len) * 8;
847 stack_items.emplace_back (4, val);
856 std::vector<csky_stack_item>::reverse_iterator iter;
857 for (iter = stack_items.rbegin (); iter != stack_items.rend (); ++iter)
873 gdb_byte *readbuf,
const gdb_byte *writebuf)
877 int len = valtype->
length ();
900 if (writebuf != NULL)
926 return align_down (addr, 4);
963 unsigned int insn, rn;
976 register_offsets[rn] = -1;
984 "csky: Scanning prologue: start_pc = 0x%x,"
985 "limit_pc = 0x%x\n", (
unsigned int) start_pc,
986 (
unsigned int) limit_pc);
992 for (addr = start_pc; addr < limit_pc; addr += insn_len)
1008 "csky: got subi sp,%d; continuing\n",
1011 stacksize += offset;
1034 "csky: got stm r%d-r%d,(sp)\n",
1036 start_register + reg_count);
1039 for (rn = start_register, offset = 0;
1040 rn <= start_register + reg_count;
1043 register_offsets[rn] = stacksize - offset;
1047 "csky: r%d saved at 0x%x"
1049 rn, register_offsets[rn],
1065 register_offsets[rn] = stacksize - disp;
1075 adjust_fp = stacksize;
1082 int mfcr_regnum = insn & 0x1f;
1086 int stw_regnum = (insn2 >> 5) & 0x7;
1094 register_offsets[rn] = stacksize - offset;
1104 int stw_regnum = (insn2 >> 21) & 0x1f;
1112 register_offsets[rn] = framesize - offset;
1124 int mfcr_regnum = insn & 0x1f;
1128 int stw_regnum = (insn2 >> 5) & 0x7;
1137 register_offsets[rn] = stacksize - offset;
1147 int stw_regnum = (insn2 >> 21) & 0x1f;
1155 register_offsets[rn] = framesize - offset;
1167 int mfcr_regnum = insn & 0x1f;
1171 int stw_regnum = (insn2 >> 5) & 0x7;
1179 register_offsets[rn] = stacksize - offset;
1189 int stw_regnum = (insn2 >> 21) & 0x1f;
1197 register_offsets[rn] = framesize - offset;
1209 int mfcr_regnum = insn & 0x1f;
1213 int stw_regnum = (insn2 >> 5) & 0x7;
1221 register_offsets[rn] = stacksize - offset;
1231 int stw_regnum = (insn2 >> 21) & 0x1f;
1239 register_offsets[rn] = framesize - offset;
1253 register_offsets[29] = stacksize;
1261 stacksize += num * 4;
1265 "csky: push regs_array: r16-r%d\n",
1268 for (rn = 16; rn <= 16 + num - 1; rn++)
1270 register_offsets[rn] = stacksize - tmp;
1274 "csky: r%d saved at 0x%x"
1275 " (offset %d)\n", rn,
1276 register_offsets[rn], tmp);
1284 register_offsets[15] = stacksize;
1292 stacksize += num * 4;
1296 "csky: push regs_array: r4-r%d\n",
1299 for (rn = 4; rn <= 4 + num - 1; rn++)
1301 register_offsets[rn] = stacksize - tmp;
1305 "csky: r%d saved at 0x%x"
1306 " (offset %d)\n", rn,
1307 register_offsets[rn], tmp);
1313 framesize = stacksize;
1328 "csky: looking at large frame\n");
1333 int literal_addr = (addr + ((insn & 0xffff) << 2))
1339 adjust = (insn & 0xffff);
1341 adjust = (insn & 0xffff) << 16;
1345 adjust = (1 << (((insn & 0x3e00000) >> 21) + 1)) - 1;
1351 "csky: base stacksize=0x%x\n", adjust);
1355 "csky: looking for r4 adjusters...\n");
1364 int imm = (insn2 & 0xfff) + 1;
1369 "csky: addi r4,%d\n", imm);
1374 int imm = (insn2 & 0xfff) + 1;
1379 "csky: subi r4,%d\n", imm);
1388 "csky: nor r4,r4,r4\n");
1393 int imm = ((insn2 >> 21) & 0x1f);
1394 int temp = adjust >> (32 - imm);
1400 "csky: rotli r4,r4,%d\n", imm);
1405 int imm = ((insn2 >> 21) & 0x1f);
1410 "csky: lsli r4,r4,%d\n", imm);
1415 int imm = ((insn2 >> 21) & 0x1f);
1416 adjust |= (1 << imm);
1420 "csky: bseti r4,r4 %d\n", imm);
1425 int imm = ((insn2 >> 21) & 0x1f);
1426 adjust &= ~(1 << imm);
1430 "csky: bclri r4,r4 %d\n", imm);
1439 "csky: ixh r4,r4,r4\n");
1448 "csky: ixw r4,r4,r4\n");
1453 int imm = (insn2 & 0xff) + 1;
1458 "csky: addi r4,%d\n", imm);
1463 int imm = (insn2 & 0xff) + 1;
1468 "csky: subi r4,%d\n", imm);
1477 "csky: nor r4,r4\n");
1482 int imm = (insn2 & 0x1f);
1483 adjust |= (1 << imm);
1487 "csky: bseti r4, %d\n", imm);
1492 int imm = (insn2 & 0x1f);
1493 adjust &= ~(1 << imm);
1497 "csky: bclri r4, %d\n", imm);
1502 int imm = (insn2 & 0x1f);
1507 "csky: lsli r4,r4, %d\n", imm);
1527 stacksize += adjust;
1531 "csky: found stack adjustment of"
1532 " 0x%x bytes.\n", adjust);
1534 "csky: skipping to new address %s\n",
1535 core_addr_to_string_nz (addr));
1537 "csky: continuing\n");
1547 "csky: no subu sp,sp,r4; NOT altering"
1564 "csky: got subi r0,%d; continuing\n",
1567 stacksize += offset;
1578 register_offsets[rn] = stacksize - disp;
1587 adjust_fp = stacksize;
1597 register_offsets[15] = stacksize;
1606 stacksize += num * 4;
1611 "csky: push regs_array: r4-r%d\n",
1614 for (rn = 4; rn <= 4 + num - 1; rn++)
1616 register_offsets[rn] = stacksize - tmp;
1620 "csky: r%d saved at 0x%x"
1621 " (offset %d)\n", rn,
1622 register_offsets[rn], offset);
1628 framesize = stacksize;
1641 "csky: looking at large frame\n");
1646 int offset = ((insn & 0x300) >> 3) | (insn & 0x1f);
1647 int literal_addr = (addr + ( offset << 2)) & 0xfffffffc;
1654 adjust = (insn & 0xff);
1660 "csky: base stacksize=0x%x\n", adjust);
1667 "csky: looking for r4 adjusters...\n");
1675 int imm = (insn2 & 0xfff) + 1;
1680 "csky: addi r4,%d\n", imm);
1685 int imm = (insn2 & 0xfff) + 1;
1690 "csky: subi r4,%d\n", imm);
1699 "csky: nor r4,r4,r4\n");
1704 int imm = ((insn2 >> 21) & 0x1f);
1705 int temp = adjust >> (32 - imm);
1711 "csky: rotli r4,r4,%d\n", imm);
1716 int imm = ((insn2 >> 21) & 0x1f);
1721 "csky: lsli r4,r4,%d\n", imm);
1726 int imm = ((insn2 >> 21) & 0x1f);
1727 adjust |= (1 << imm);
1731 "csky: bseti r4,r4 %d\n", imm);
1736 int imm = ((insn2 >> 21) & 0x1f);
1737 adjust &= ~(1 << imm);
1741 "csky: bclri r4,r4 %d\n", imm);
1750 "csky: ixh r4,r4,r4\n");
1759 "csky: ixw r4,r4,r4\n");
1764 int imm = (insn2 & 0xff) + 1;
1769 "csky: addi r4,%d\n", imm);
1774 int imm = (insn2 & 0xff) + 1;
1779 "csky: subi r4,%d\n", imm);
1788 "csky: nor r4,r4\n");
1793 int imm = (insn2 & 0x1f);
1794 adjust |= (1 << imm);
1798 "csky: bseti r4, %d\n", imm);
1803 int imm = (insn2 & 0x1f);
1804 adjust &= ~(1 << imm);
1808 "csky: bclri r4, %d\n", imm);
1813 int imm = (insn2 & 0x1f);
1818 "csky: lsli r4,r4, %d\n", imm);
1829 "done looking for r4 adjusters\n");
1838 stacksize += adjust;
1842 "found stack adjustment of 0x%x"
1843 " bytes.\n", adjust);
1845 "skipping to new address %s\n",
1846 core_addr_to_string_nz (addr));
1857 "NOT altering stacksize.\n");
1867 " insn -- ending scan\n");
1874 CORE_ADDR unwound_fp;
1883 this_cache->
prev_sp = unwound_fp + adjust_fp;
1890 this_cache->
prev_sp = unwound_fp + stacksize;
1897 if (register_offsets[rn] >= 0)
1900 - register_offsets[rn]);
1906 "stored at 0x%08lx, value=0x%08lx\n",
1910 (
unsigned long) rn_value);
1944 CORE_ADDR func_start, func_end;
1949 bool fp_saved =
false;
1951 for (addr = func_start; addr < func_end; addr += insn_len)
1975 CORE_ADDR func_addr, func_end;
1976 const int default_search_limit = 128;
1981 CORE_ADDR post_prologue_pc
1984 if (post_prologue_pc != 0)
1985 return std::max (pc, post_prologue_pc);
1988 func_end = pc + default_search_limit;
2008static const gdb_byte *
2014 static gdb_byte csky_16_breakpoint[] = { 0, 0 };
2015 return csky_16_breakpoint;
2019 static gdb_byte csky_32_breakpoint[] = { 0, 0, 0, 0 };
2020 return csky_32_breakpoint;
2028 CORE_ADDR start_pc, CORE_ADDR end_pc)
2031 unsigned int insn, insn_len;
2034 for (addr = start_pc; addr < end_pc; addr += insn_len)
2065 CORE_ADDR prologue_start, prologue_end, func_end, prev_pc, block_addr;
2067 const struct block *bl;
2068 unsigned long func_size = 0;
2094 func_size = bl->
end () - bl->
start ();
2099 if (msymbol.
minsym != NULL)
2108 prologue_end = std::min (func_end, prev_pc);
2112 func_end, this_frame, cache, lr_type);
2123 void **this_prologue_cache,
struct frame_id *this_id)
2128 if (*this_prologue_cache == NULL)
2142static struct value *
2144 void **this_prologue_cache,
int regnum)
2148 if (*this_prologue_cache == NULL)
2176 enum bfd_endian byte_order_for_code
2210 void **this_prologue_cache)
2212 CORE_ADDR addr_in_block, pc;
2215 CORE_ADDR start_addr;
2230 if (start_addr != 0)
2258 if (*this_cache == NULL)
2266static struct value *
2273 if (*this_cache == NULL)
2311 if (*this_cache == NULL)
2442 xsnprintf (name_buf,
sizeof (name_buf),
"s%d",
2457 if ((strcmp (reg->
name ,
"pc") == 0)
2460 else if ((strcmp (reg->
name ,
"r14") == 0)
2463 else if ((strcmp (reg->
name ,
"r15") == 0)
2475 for (i = 0; i < 16; i++)
2490 for (i = 0; i < 16; i++)
2505 for (i = 0; i < 16; i++)
2522 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
2528 static const char *
const fv_pseudo_names[] = {
2529 "s0",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6",
"s7",
2530 "s8",
"s9",
"s10",
"s11",
"s12",
"s13",
"s14",
"s15",
2531 "s16",
"s17",
"s18",
"s19",
"s20",
"s21",
"s22",
"s23",
2532 "s24",
"s25",
"s26",
"s27",
"s28",
"s29",
"s30",
"s31",
2533 "s32",
"s33",
"s34",
"s35",
"s36",
"s37",
"s38",
"s39",
2534 "s40",
"s41",
"s42",
"s43",
"s44",
"s45",
"s46",
"s47",
2535 "s48",
"s49",
"s50",
"s51",
"s52",
"s53",
"s54",
"s55",
2536 "s56",
"s57",
"s58",
"s59",
"s60",
"s61",
"s62",
"s63",
2537 "s64",
"s65",
"s66",
"s67",
"s68",
"s69",
"s70",
"s71",
2538 "s72",
"s73",
"s74",
"s75",
"s76",
"s77",
"s78",
"s79",
2539 "s80",
"s81",
"s82",
"s83",
"s84",
"s85",
"s86",
"s87",
2540 "s88",
"s89",
"s90",
"s91",
"s92",
"s93",
"s94",
"s95",
2541 "s96",
"s97",
"s98",
"s99",
"s100",
"s101",
"s102",
"s103",
2542 "s104",
"s105",
"s106",
"s107",
"s108",
"s109",
"s110",
"s111",
2543 "s112",
"s113",
"s114",
"s115",
"s116",
"s117",
"s118",
"s119",
2544 "s120",
"s121",
"s122",
"s123",
"s124",
"s125",
"s126",
"s127",
2547 if (regno < tdep->fv_pseudo_registers_count)
2549 if ((regno < 64) && ((regno % 4) >= 2) && !tdep->
has_vr0)
2551 else if ((regno >= 64) && ((regno % 4) >= 2))
2554 return fv_pseudo_names[regno];
2563static enum register_status
2566 int regnum, gdb_byte *buf)
2570 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
2574 if (regnum < tdep->fv_pseudo_registers_count)
2576 enum register_status
status;
2579 gdb_byte reg_buf[16];
2587 offset = (
regnum % 4) * 4;
2593 return REG_UNAVAILABLE;
2594 offset = (
regnum % 2) * 4;
2601 return REG_UNAVAILABLE;
2602 offset = (
regnum % 2) * 4;
2607 memcpy (buf, reg_buf + offset, 4);
2618 int regnum,
const gdb_byte *buf)
2622 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
2626 if (regnum < tdep->fv_pseudo_registers_count)
2628 gdb_byte reg_buf[16];
2637 offset = (
regnum % 4) * 4;
2644 offset = (
regnum % 2) * 4;
2652 offset = (
regnum % 2) * 4;
2656 memcpy (reg_buf + offset, buf, 4);
2676 unsigned int fpu_abi = 0;
2677 unsigned int vdsp_version = 0;
2678 unsigned int fpu_hardfp = 0;
2693 int support_tdesc_regs_count
2696 const struct tdesc_feature *feature;
2699 for (index = 0; index < feature_names_count; index ++)
2703 if (feature != NULL)
2705 for (i = 0; i < support_tdesc_regs_count; i++)
2718 if (num_regs < tdesc_reg->num)
2719 num_regs = tdesc_reg->
num;
2730 if (info.abfd != NULL && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
2733 fpu_abi = bfd_elf_get_obj_attr_int (info.abfd,
2736 vdsp_version = bfd_elf_get_obj_attr_int (info.abfd,
2738 Tag_CSKY_VDSP_VERSION);
2739 fpu_hardfp = bfd_elf_get_obj_attr_int (info.abfd,
2741 Tag_CSKY_FPU_HARDFP);
2750 = gdbarch_tdep<csky_gdbarch_tdep> (
arches->gdbarch);
2890 _(
"Set C-Sky debugging."),
2891 _(
"Show C-Sky debugging."),
2892 _(
"When on, C-Sky specific debugging is enabled."),
static std::vector< const char * > arches
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep)
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
const struct block * block_for_pc(CORE_ADDR pc)
bool find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block)
enum register_status raw_read(int regnum, gdb_byte *buf)
enum register_status cooked_read(int regnum, gdb_byte *buf)
void raw_write(int regnum, const gdb_byte *buf)
struct cmd_list_element * showdebuglist
struct cmd_list_element * setdebuglist
set_show_commands add_setshow_boolean_cmd(const char *name, enum command_class theclass, bool *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
void memory_error(enum target_xfer_status err, CORE_ADDR memaddr)
static int csky_pc_is_csky16(struct gdbarch *gdbarch, CORE_ADDR addr)
static struct csky_unwind_cache * csky_frame_unwind_cache(frame_info_ptr this_frame)
static const struct frame_base csky_frame_base
static int csky_vr0_vr15_reg_check(const struct csky_supported_tdesc_register *reg)
static const struct csky_supported_tdesc_register csky_supported_fpu_regs[]
static CORE_ADDR csky_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
static int csky_essential_reg_check(const struct csky_supported_tdesc_register *reg)
static CORE_ADDR csky_analyze_prologue(struct gdbarch *gdbarch, CORE_ADDR start_pc, CORE_ADDR limit_pc, CORE_ADDR end_pc, frame_info_ptr this_frame, struct csky_unwind_cache *this_cache, lr_type_t lr_type)
static int csky_stub_unwind_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
static const char *const csky_register_names[]
static int csky_fr16_fr31_reg_check(const struct csky_supported_tdesc_register *reg)
static const reggroup * mmu_reggroup
static const reggroup * fr_reggroup
static const gdb_byte * csky_sw_breakpoint_from_kind(struct gdbarch *gdbarch, int kind, int *size)
static frame_unwind csky_stub_unwind
static void csky_init_reggroup()
static CORE_ADDR csky_frame_base_address(frame_info_ptr this_frame, void **this_cache)
static struct type * csky_vector_type(struct gdbarch *gdbarch)
static CORE_ADDR csky_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr)
static const reggroup * vr_reggroup
static void csky_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buf)
static CORE_ADDR csky_check_long_branch(frame_info_ptr frame, CORE_ADDR pc)
static int csky_get_supported_tdesc_registers_count()
static const reggroup * prof_reggroup
static enum register_status csky_pseudo_register_read(struct gdbarch *gdbarch, struct readable_regcache *regcache, int regnum, gdb_byte *buf)
static const char * csky_supported_tdesc_feature_names[]
static void print_savedreg_msg(int regno, int offsets[], bool print_continuing)
static void csky_add_reggroups(struct gdbarch *gdbarch)
static lr_type_t csky_analyze_lr_type(struct gdbarch *gdbarch, CORE_ADDR start_pc, CORE_ADDR end_pc)
static void csky_write_pc(regcache *regcache, CORE_ADDR val)
static struct type * csky_register_type(struct gdbarch *gdbarch, int reg_nr)
static int csky_register_reggroup_p(struct gdbarch *gdbarch, int regnum, const struct reggroup *reggroup)
static int csky_fr0_fr15_reg_check(const struct csky_supported_tdesc_register *reg)
static const struct csky_supported_tdesc_register csky_supported_ar_regs[]
static const reggroup * cr_reggroup
static CORE_ADDR csky_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
static struct gdbarch * csky_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
static const struct csky_supported_tdesc_register csky_supported_mmu_regs[]
static const struct csky_supported_tdesc_register csky_supported_bank15_regs[]
static const char * csky_pseudo_register_name(struct gdbarch *gdbarch, int regno)
static int csky_breakpoint_kind_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr)
static int csky_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
static struct csky_unwind_cache * csky_make_stub_cache(frame_info_ptr this_frame)
static struct value * csky_frame_prev_register(frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
static const struct csky_supported_tdesc_register csky_supported_alias_regs[]
static CORE_ADDR csky_read_pc(readable_regcache *regcache)
static struct value * csky_stub_prev_register(frame_info_ptr this_frame, void **this_cache, int prev_regnum)
static const struct csky_supported_tdesc_register csky_supported_bank0_regs[]
static void csky_stub_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
static void csky_dwarf2_frame_init_reg(struct gdbarch *gdbarch, int regnum, struct dwarf2_frame_state_reg *reg, frame_info_ptr this_frame)
static enum return_value_convention csky_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
static const struct csky_supported_tdesc_register csky_supported_gpr_regs[]
void _initialize_csky_tdep()
static void csky_frame_this_id(frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
static int csky_get_insn(struct gdbarch *gdbarch, CORE_ADDR addr, unsigned int *insn)
static int csky_dwarf_reg_to_regnum(struct gdbarch *gdbarch, int dw_reg)
static const struct csky_supported_tdesc_register * csky_get_supported_register_by_index(int index)
static const char * csky_register_name(struct gdbarch *gdbarch, int reg_nr)
#define CSKY_32_IS_MFCR_FPC(insn)
#define CSKY_32_PUSH_LIST2(insn)
#define FV_PSEUDO_REGNO_FIRST
#define CSKY_16_IS_BR(insn)
#define CSKY_TDESC_REGS_SP_NUMBERED
#define CSKY_TDESC_REGS_ESSENTIAL_VALUE
#define CSKY_32_IS_JMPIX(insn)
#define CSKY_32_IS_MOVI4(x)
#define CSKY_32_PUSH_LIST1(insn)
#define CSKY_32_IS_MFCR_FPSR(insn)
#define CSKY_32_STM_VAL_REGNUM(insn)
#define CSKY_32_IS_SUBI0(insn)
#define CSKY_16_STWx0_OFFSET(insn)
#define CSKY_32_IS_BSETI4(x)
#define CSKY_32_IS_SUBI4(x)
#define CSKY_32_IS_PUSH_R15(insn)
#define CSKY_32_IS_LISI4(x)
#define CSKY_32_IS_PUSH_R29(insn)
#define CSKY_32_IS_STWx0(insn)
#define CSKY_16_IS_MOVI4(x)
#define CSKY_TDESC_REGS_LR_NUMBERED
#define CSKY_16_IS_ADDI4(x)
#define CSKY_16_IS_MOV_SP_FP(insn)
#define CSKY_32_STM_SIZE(insn)
#define CSKY_32_IS_STMx0(insn)
#define CSKY_32_IS_JMPI(insn)
#define CSKY_32_IS_BMASKI4(x)
#define CSKY_32_IS_MFCR_EPC(insn)
#define CSKY_16_IS_SUBI0(insn)
#define CSKY_16_IS_SUBI4(x)
@ CSKY_ABI_LAST_ARG_REGNUM
#define CSKY_32_IS_BCLRI4(x)
#define FV_PSEUDO_REGNO_LAST
#define CSKY_16_SUBI_IMM(insn)
#define CSKY_16_IS_PUSH(insn)
#define CSKY_16_ST_VAL_REGNUM(insn)
#define CSKY_32_IS_NOR4(x)
#define CSKY_32_SUBI_IMM(insn)
#define CSKY_32_IS_RFI(insn)
#define CSKY_16_IS_MOV_FP_SP(insn)
#define CSKY_16_ST_OFFSET(insn)
#define CSKY_16_IS_JMPIX(insn)
#define CSKY_16_IS_NOR4(x)
#define CSKY_16_IS_JMP(insn)
#define CSKY_32_ST_OFFSET(insn)
#define CSKY_32_IS_JMP(insn)
#define CSKY_FULL16_ONEHOT_VALUE
#define CSKY_32_ST_VAL_REGNUM(insn)
#define CSKY_NUM_GREGS_SAVED_GREGS
#define CSKY_16_IS_LRW4(x)
#define CSKY_32_IS_MOVIH4(x)
#define CSKY_16_IS_BSETI4(x)
#define CSKY_32_INSN_MASK
#define CSKY_32_IS_ROTLI4(x)
#define CSKY_IS_R4_ADJUSTER(x)
#define CSKY_32_IS_PUSH(insn)
#define CSKY_16_IS_LSLI4(x)
#define CSKY_32_IS_IXW4(x)
#define CSKY_32_IS_IXH4(x)
#define CSKY_16_IS_BCLRI4(x)
#define CSKY_16_IS_PUSH_R15(insn)
#define CSKY_32_IS_MOV_FP_SP(insn)
#define CSKY_JMP_T1_VS_NOP
#define CSKY_32_IS_LRW4(x)
#define CSKY_16_PUSH_LIST1(insn)
#define CSKY_16_IS_STWx0(insn)
#define CSKY_32_IS_ADDI4(x)
#define CSKY_32_IS_BR(insn)
#define CSKY_32_IS_MFCR_EPSR(insn)
#define CSKY_32_IS_RTE(insn)
#define CSKY_TDESC_REGS_PC_NUMBERED
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
static ULONGEST extract_unsigned_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
@ RETURN_VALUE_REGISTER_CONVENTION
@ RETURN_VALUE_STRUCT_CONVENTION
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
void dwarf2_frame_set_init_reg(struct gdbarch *gdbarch, void(*init_reg)(struct gdbarch *, int, struct dwarf2_frame_state_reg *, frame_info_ptr))
void frame_base_set_default(struct gdbarch *gdbarch, const struct frame_base *default_base)
int default_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
enum unwind_stop_reason default_frame_unwind_stop_reason(frame_info_ptr this_frame, void **this_cache)
struct value * frame_unwind_got_constant(frame_info_ptr frame, int regnum, ULONGEST val)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
ULONGEST get_frame_register_unsigned(frame_info_ptr frame, int regnum)
ULONGEST frame_unwind_register_unsigned(frame_info_ptr next_frame, int regnum)
CORE_ADDR get_frame_pc(frame_info_ptr frame)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
CORE_ADDR get_frame_func(frame_info_ptr this_frame)
CORE_ADDR get_frame_address_in_block(frame_info_ptr this_frame)
#define FRAME_OBSTACK_ZALLOC(TYPE)
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
void set_gdbarch_stab_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum)
void set_gdbarch_addr_bit(struct gdbarch *gdbarch, int addr_bit)
int gdbarch_pc_regnum(struct gdbarch *gdbarch)
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc)
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype *frame_align)
void set_gdbarch_write_pc(struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc)
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name)
void set_gdbarch_overlay_update(struct gdbarch *gdbarch, gdbarch_overlay_update_ftype *overlay_update)
void set_gdbarch_int_bit(struct gdbarch *gdbarch, int int_bit)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype *return_value)
int gdbarch_num_regs(struct gdbarch *gdbarch)
void set_gdbarch_double_bit(struct gdbarch *gdbarch, int double_bit)
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than)
enum bfd_endian gdbarch_byte_order_for_code(struct gdbarch *gdbarch)
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
void set_gdbarch_register_reggroup_p(struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *register_reggroup_p)
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
void set_gdbarch_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype *register_type)
const struct target_desc * gdbarch_target_desc(struct gdbarch *gdbarch)
void set_gdbarch_float_bit(struct gdbarch *gdbarch, int float_bit)
void set_gdbarch_stack_frame_destroyed_p(struct gdbarch *gdbarch, gdbarch_stack_frame_destroyed_p_ftype *stack_frame_destroyed_p)
void set_gdbarch_short_bit(struct gdbarch *gdbarch, int short_bit)
void set_gdbarch_pseudo_register_write(struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype *pseudo_register_write)
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum)
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
void set_gdbarch_pseudo_register_read(struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype *pseudo_register_read)
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind)
void set_gdbarch_read_pc(struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc)
void set_gdbarch_double_format(struct gdbarch *gdbarch, const struct floatformat **double_format)
void set_gdbarch_float_format(struct gdbarch *gdbarch, const struct floatformat **float_format)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call)
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, struct gdbarch_tdep_base *tdep)
function_call_return_method
struct type * arch_composite_type(struct gdbarch *gdbarch, const char *name, enum type_code code)
struct type * init_vector_type(struct type *elt_type, int n)
const struct floatformat * floatformats_ieee_single[BFD_ENDIAN_UNKNOWN]
struct type * arch_float_type(struct gdbarch *gdbarch, int bit, const char *name, const struct floatformat **floatformats)
const struct floatformat * floatformats_ieee_double[BFD_ENDIAN_UNKNOWN]
void append_composite_type_field(struct type *t, const char *name, struct type *field)
struct type * check_typedef(struct type *type)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
static int in_plt_section(CORE_ADDR pc)
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
const reggroup *const general_reggroup
const reggroup * reggroup_new(const char *name, enum reggroup_type type)
const reggroup *const save_reggroup
const reggroup *const all_reggroup
void reggroup_add(struct gdbarch *gdbarch, const reggroup *group)
const reggroup *const restore_reggroup
struct minimal_symbol * minsym
struct type * builtin_int8
struct type * builtin_func_ptr
struct type * builtin_data_ptr
struct type * builtin_uint64
struct type * builtin_int32
struct type * builtin_int16
unsigned int vdsp_version
unsigned int fv_pseudo_registers_count
csky_stack_item(int len_, const gdb_byte *data_)
trad_frame_saved_reg * saved_regs
enum dwarf2_frame_reg_rule how
unsigned long size() const
void set_addr(LONGEST addr)
void set_value(LONGEST val)
void set_name(const char *name)
void set_is_vector(bool is_vector)
void simple_overlay_update(struct obj_section *osect)
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
tdesc_arch_data_up tdesc_data_alloc(void)
const struct tdesc_feature * tdesc_find_feature(const struct target_desc *target_desc, const char *name)
int tdesc_numbered_register(const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *name)
static const registry< gdbarch >::key< tdesc_arch_data > tdesc_data
void tdesc_use_registers(struct gdbarch *gdbarch, const struct target_desc *target_desc, tdesc_arch_data_up &&early_data, tdesc_unknown_register_ftype unk_reg_cb)
void set_tdesc_pseudo_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype *pseudo_name)
int tdesc_has_registers(const struct target_desc *target_desc)
struct type * tdesc_register_type(struct gdbarch *gdbarch, int regno)
const char * tdesc_register_name(struct gdbarch *gdbarch, int regno)
int tdesc_register_in_reggroup_p(struct gdbarch *gdbarch, int regno, const struct reggroup *reggroup)
std::unique_ptr< tdesc_arch_data, tdesc_arch_data_deleter > tdesc_arch_data_up
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct gdbarch *gdbarch)
struct value * trad_frame_get_prev_register(frame_info_ptr this_frame, trad_frame_saved_reg this_saved_regs[], int regnum)
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
void gdb_printf(struct ui_file *stream, const char *format,...)
struct type * value_type(const struct value *value)
gdb::array_view< const gdb_byte > value_contents(struct value *value)