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)
775 int nargs,
struct value **args, CORE_ADDR sp,
777 CORE_ADDR struct_addr)
783 std::vector<csky_stack_item> stack_items;
796 "csky: struct return in %s = %s\n",
806 for (argnum = 0; argnum < nargs; argnum++)
809 struct type *arg_type;
813 len = arg_type->
length ();
814 val = args[argnum]->contents ().data ();
832 int partial_len = len < 4 ? len : 4;
833 if (argreg <= last_arg_regnum)
839 if (byte_order == BFD_ENDIAN_BIG)
840 regval <<= (4 - partial_len) * 8;
850 stack_items.emplace_back (4, val);
859 std::vector<csky_stack_item>::reverse_iterator iter;
860 for (iter = stack_items.rbegin (); iter != stack_items.rend (); ++iter)
876 gdb_byte *readbuf,
const gdb_byte *writebuf)
880 int len = valtype->
length ();
903 if (writebuf != NULL)
929 return align_down (addr, 4);
966 unsigned int insn, rn;
979 register_offsets[rn] = -1;
987 "csky: Scanning prologue: start_pc = 0x%x,"
988 "limit_pc = 0x%x\n", (
unsigned int) start_pc,
989 (
unsigned int) limit_pc);
995 for (addr = start_pc; addr < limit_pc; addr += insn_len)
1011 "csky: got subi sp,%d; continuing\n",
1014 stacksize += offset;
1037 "csky: got stm r%d-r%d,(sp)\n",
1039 start_register + reg_count);
1042 for (rn = start_register, offset = 0;
1043 rn <= start_register + reg_count;
1046 register_offsets[rn] = stacksize - offset;
1050 "csky: r%d saved at 0x%x"
1052 rn, register_offsets[rn],
1068 register_offsets[rn] = stacksize - disp;
1078 adjust_fp = stacksize;
1085 int mfcr_regnum = insn & 0x1f;
1089 int stw_regnum = (insn2 >> 5) & 0x7;
1097 register_offsets[rn] = stacksize - offset;
1107 int stw_regnum = (insn2 >> 21) & 0x1f;
1115 register_offsets[rn] = framesize - offset;
1127 int mfcr_regnum = insn & 0x1f;
1131 int stw_regnum = (insn2 >> 5) & 0x7;
1140 register_offsets[rn] = stacksize - offset;
1150 int stw_regnum = (insn2 >> 21) & 0x1f;
1158 register_offsets[rn] = framesize - offset;
1170 int mfcr_regnum = insn & 0x1f;
1174 int stw_regnum = (insn2 >> 5) & 0x7;
1182 register_offsets[rn] = stacksize - offset;
1192 int stw_regnum = (insn2 >> 21) & 0x1f;
1200 register_offsets[rn] = framesize - offset;
1212 int mfcr_regnum = insn & 0x1f;
1216 int stw_regnum = (insn2 >> 5) & 0x7;
1224 register_offsets[rn] = stacksize - offset;
1234 int stw_regnum = (insn2 >> 21) & 0x1f;
1242 register_offsets[rn] = framesize - offset;
1256 register_offsets[29] = stacksize;
1264 stacksize += num * 4;
1268 "csky: push regs_array: r16-r%d\n",
1271 for (rn = 16; rn <= 16 + num - 1; rn++)
1273 register_offsets[rn] = stacksize - tmp;
1277 "csky: r%d saved at 0x%x"
1278 " (offset %d)\n", rn,
1279 register_offsets[rn], tmp);
1287 register_offsets[15] = stacksize;
1295 stacksize += num * 4;
1299 "csky: push regs_array: r4-r%d\n",
1302 for (rn = 4; rn <= 4 + num - 1; rn++)
1304 register_offsets[rn] = stacksize - tmp;
1308 "csky: r%d saved at 0x%x"
1309 " (offset %d)\n", rn,
1310 register_offsets[rn], tmp);
1316 framesize = stacksize;
1331 "csky: looking at large frame\n");
1336 int literal_addr = (addr + ((insn & 0xffff) << 2))
1342 adjust = (insn & 0xffff);
1344 adjust = (insn & 0xffff) << 16;
1348 adjust = (1 << (((insn & 0x3e00000) >> 21) + 1)) - 1;
1354 "csky: base stacksize=0x%x\n", adjust);
1358 "csky: looking for r4 adjusters...\n");
1367 int imm = (insn2 & 0xfff) + 1;
1372 "csky: addi r4,%d\n", imm);
1377 int imm = (insn2 & 0xfff) + 1;
1382 "csky: subi r4,%d\n", imm);
1391 "csky: nor r4,r4,r4\n");
1396 int imm = ((insn2 >> 21) & 0x1f);
1397 int temp = adjust >> (32 - imm);
1403 "csky: rotli r4,r4,%d\n", imm);
1408 int imm = ((insn2 >> 21) & 0x1f);
1413 "csky: lsli r4,r4,%d\n", imm);
1418 int imm = ((insn2 >> 21) & 0x1f);
1419 adjust |= (1 << imm);
1423 "csky: bseti r4,r4 %d\n", imm);
1428 int imm = ((insn2 >> 21) & 0x1f);
1429 adjust &= ~(1 << imm);
1433 "csky: bclri r4,r4 %d\n", imm);
1442 "csky: ixh r4,r4,r4\n");
1451 "csky: ixw r4,r4,r4\n");
1456 int imm = (insn2 & 0xff) + 1;
1461 "csky: addi r4,%d\n", imm);
1466 int imm = (insn2 & 0xff) + 1;
1471 "csky: subi r4,%d\n", imm);
1480 "csky: nor r4,r4\n");
1485 int imm = (insn2 & 0x1f);
1486 adjust |= (1 << imm);
1490 "csky: bseti r4, %d\n", imm);
1495 int imm = (insn2 & 0x1f);
1496 adjust &= ~(1 << imm);
1500 "csky: bclri r4, %d\n", imm);
1505 int imm = (insn2 & 0x1f);
1510 "csky: lsli r4,r4, %d\n", imm);
1530 stacksize += adjust;
1534 "csky: found stack adjustment of"
1535 " 0x%x bytes.\n", adjust);
1537 "csky: skipping to new address %s\n",
1538 core_addr_to_string_nz (addr));
1540 "csky: continuing\n");
1550 "csky: no subu sp,sp,r4; NOT altering"
1567 "csky: got subi r0,%d; continuing\n",
1570 stacksize += offset;
1581 register_offsets[rn] = stacksize - disp;
1590 adjust_fp = stacksize;
1600 register_offsets[15] = stacksize;
1609 stacksize += num * 4;
1614 "csky: push regs_array: r4-r%d\n",
1617 for (rn = 4; rn <= 4 + num - 1; rn++)
1619 register_offsets[rn] = stacksize - tmp;
1623 "csky: r%d saved at 0x%x"
1624 " (offset %d)\n", rn,
1625 register_offsets[rn], offset);
1631 framesize = stacksize;
1644 "csky: looking at large frame\n");
1649 int offset = ((insn & 0x300) >> 3) | (insn & 0x1f);
1650 int literal_addr = (addr + ( offset << 2)) & 0xfffffffc;
1657 adjust = (insn & 0xff);
1663 "csky: base stacksize=0x%x\n", adjust);
1670 "csky: looking for r4 adjusters...\n");
1678 int imm = (insn2 & 0xfff) + 1;
1683 "csky: addi r4,%d\n", imm);
1688 int imm = (insn2 & 0xfff) + 1;
1693 "csky: subi r4,%d\n", imm);
1702 "csky: nor r4,r4,r4\n");
1707 int imm = ((insn2 >> 21) & 0x1f);
1708 int temp = adjust >> (32 - imm);
1714 "csky: rotli r4,r4,%d\n", imm);
1719 int imm = ((insn2 >> 21) & 0x1f);
1724 "csky: lsli r4,r4,%d\n", imm);
1729 int imm = ((insn2 >> 21) & 0x1f);
1730 adjust |= (1 << imm);
1734 "csky: bseti r4,r4 %d\n", imm);
1739 int imm = ((insn2 >> 21) & 0x1f);
1740 adjust &= ~(1 << imm);
1744 "csky: bclri r4,r4 %d\n", imm);
1753 "csky: ixh r4,r4,r4\n");
1762 "csky: ixw r4,r4,r4\n");
1767 int imm = (insn2 & 0xff) + 1;
1772 "csky: addi r4,%d\n", imm);
1777 int imm = (insn2 & 0xff) + 1;
1782 "csky: subi r4,%d\n", imm);
1791 "csky: nor r4,r4\n");
1796 int imm = (insn2 & 0x1f);
1797 adjust |= (1 << imm);
1801 "csky: bseti r4, %d\n", imm);
1806 int imm = (insn2 & 0x1f);
1807 adjust &= ~(1 << imm);
1811 "csky: bclri r4, %d\n", imm);
1816 int imm = (insn2 & 0x1f);
1821 "csky: lsli r4,r4, %d\n", imm);
1832 "done looking for r4 adjusters\n");
1841 stacksize += adjust;
1845 "found stack adjustment of 0x%x"
1846 " bytes.\n", adjust);
1848 "skipping to new address %s\n",
1849 core_addr_to_string_nz (addr));
1860 "NOT altering stacksize.\n");
1870 " insn -- ending scan\n");
1877 CORE_ADDR unwound_fp;
1886 this_cache->
prev_sp = unwound_fp + adjust_fp;
1893 this_cache->
prev_sp = unwound_fp + stacksize;
1900 if (register_offsets[rn] >= 0)
1903 - register_offsets[rn]);
1909 "stored at 0x%08lx, value=0x%08lx\n",
1913 (
unsigned long) rn_value);
1947 CORE_ADDR func_start, func_end;
1952 bool fp_saved =
false;
1954 for (addr = func_start; addr < func_end; addr += insn_len)
1978 CORE_ADDR func_addr, func_end;
1979 const int default_search_limit = 128;
1984 CORE_ADDR post_prologue_pc
1987 if (post_prologue_pc != 0)
1988 return std::max (pc, post_prologue_pc);
1991 func_end = pc + default_search_limit;
2011static const gdb_byte *
2017 static gdb_byte csky_16_breakpoint[] = { 0, 0 };
2018 return csky_16_breakpoint;
2022 static gdb_byte csky_32_breakpoint[] = { 0, 0, 0, 0 };
2023 return csky_32_breakpoint;
2031 CORE_ADDR start_pc, CORE_ADDR end_pc)
2034 unsigned int insn, insn_len;
2037 for (addr = start_pc; addr < end_pc; addr += insn_len)
2068 CORE_ADDR prologue_start, prologue_end, func_end, prev_pc, block_addr;
2070 const struct block *bl;
2071 unsigned long func_size = 0;
2097 func_size = bl->
end () - bl->
start ();
2102 if (msymbol.
minsym != NULL)
2111 prologue_end = std::min (func_end, prev_pc);
2115 func_end, this_frame, cache, lr_type);
2126 void **this_prologue_cache,
struct frame_id *this_id)
2131 if (*this_prologue_cache == NULL)
2145static struct value *
2147 void **this_prologue_cache,
int regnum)
2151 if (*this_prologue_cache == NULL)
2179 enum bfd_endian byte_order_for_code
2213 void **this_prologue_cache)
2215 CORE_ADDR addr_in_block, pc;
2218 CORE_ADDR start_addr;
2233 if (start_addr != 0)
2261 if (*this_cache == NULL)
2269static struct value *
2276 if (*this_cache == NULL)
2314 if (*this_cache == NULL)
2445 xsnprintf (name_buf,
sizeof (name_buf),
"s%d",
2460 if ((strcmp (reg->
name ,
"pc") == 0)
2463 else if ((strcmp (reg->
name ,
"r14") == 0)
2466 else if ((strcmp (reg->
name ,
"r15") == 0)
2478 for (i = 0; i < 16; i++)
2493 for (i = 0; i < 16; i++)
2508 for (i = 0; i < 16; i++)
2525 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
2531 static const char *
const fv_pseudo_names[] = {
2532 "s0",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6",
"s7",
2533 "s8",
"s9",
"s10",
"s11",
"s12",
"s13",
"s14",
"s15",
2534 "s16",
"s17",
"s18",
"s19",
"s20",
"s21",
"s22",
"s23",
2535 "s24",
"s25",
"s26",
"s27",
"s28",
"s29",
"s30",
"s31",
2536 "s32",
"s33",
"s34",
"s35",
"s36",
"s37",
"s38",
"s39",
2537 "s40",
"s41",
"s42",
"s43",
"s44",
"s45",
"s46",
"s47",
2538 "s48",
"s49",
"s50",
"s51",
"s52",
"s53",
"s54",
"s55",
2539 "s56",
"s57",
"s58",
"s59",
"s60",
"s61",
"s62",
"s63",
2540 "s64",
"s65",
"s66",
"s67",
"s68",
"s69",
"s70",
"s71",
2541 "s72",
"s73",
"s74",
"s75",
"s76",
"s77",
"s78",
"s79",
2542 "s80",
"s81",
"s82",
"s83",
"s84",
"s85",
"s86",
"s87",
2543 "s88",
"s89",
"s90",
"s91",
"s92",
"s93",
"s94",
"s95",
2544 "s96",
"s97",
"s98",
"s99",
"s100",
"s101",
"s102",
"s103",
2545 "s104",
"s105",
"s106",
"s107",
"s108",
"s109",
"s110",
"s111",
2546 "s112",
"s113",
"s114",
"s115",
"s116",
"s117",
"s118",
"s119",
2547 "s120",
"s121",
"s122",
"s123",
"s124",
"s125",
"s126",
"s127",
2550 if (regno < tdep->fv_pseudo_registers_count)
2552 if ((regno < 64) && ((regno % 4) >= 2) && !tdep->
has_vr0)
2554 else if ((regno >= 64) && ((regno % 4) >= 2))
2557 return fv_pseudo_names[regno];
2566static enum register_status
2569 int regnum, gdb_byte *buf)
2573 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
2577 if (regnum < tdep->fv_pseudo_registers_count)
2579 enum register_status
status;
2582 gdb_byte reg_buf[16];
2590 offset = (
regnum % 4) * 4;
2596 return REG_UNAVAILABLE;
2597 offset = (
regnum % 2) * 4;
2604 return REG_UNAVAILABLE;
2605 offset = (
regnum % 2) * 4;
2610 memcpy (buf, reg_buf + offset, 4);
2621 int regnum,
const gdb_byte *buf)
2625 = gdbarch_tdep<csky_gdbarch_tdep> (
gdbarch);
2629 if (regnum < tdep->fv_pseudo_registers_count)
2631 gdb_byte reg_buf[16];
2640 offset = (
regnum % 4) * 4;
2647 offset = (
regnum % 2) * 4;
2655 offset = (
regnum % 2) * 4;
2659 memcpy (reg_buf + offset, buf, 4);
2678 unsigned int fpu_abi = 0;
2679 unsigned int vdsp_version = 0;
2680 unsigned int fpu_hardfp = 0;
2695 int support_tdesc_regs_count
2698 const struct tdesc_feature *feature;
2701 for (index = 0; index < feature_names_count; index ++)
2705 if (feature != NULL)
2707 for (i = 0; i < support_tdesc_regs_count; i++)
2720 if (num_regs < tdesc_reg->num)
2721 num_regs = tdesc_reg->
num;
2732 if (info.abfd != NULL && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
2735 fpu_abi = bfd_elf_get_obj_attr_int (info.abfd,
2738 vdsp_version = bfd_elf_get_obj_attr_int (info.abfd,
2740 Tag_CSKY_VDSP_VERSION);
2741 fpu_hardfp = bfd_elf_get_obj_attr_int (info.abfd,
2743 Tag_CSKY_FPU_HARDFP);
2752 = gdbarch_tdep<csky_gdbarch_tdep> (
arches->gdbarch);
2894 _(
"Set C-Sky debugging."),
2895 _(
"Show C-Sky debugging."),
2896 _(
"When on, C-Sky specific debugging is enabled."),
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep, gdbarch_supports_arch_info_ftype *supports_arch_info)
static std::vector< const char * > arches
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 const struct frame_unwind csky_unwind_cache
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, gdbarch_tdep_up tdep)
std::unique_ptr< gdbarch_tdep_base > gdbarch_tdep_up
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 * init_float_type(type_allocator &alloc, int bit, const char *name, const struct floatformat **floatformats, enum bfd_endian byte_order)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
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_func_ptr
struct type * builtin_data_ptr
struct type * builtin_uint64
struct type * builtin_int32
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,...)