38 #include "gdb/sim-ppc.h" 46 #include "coff/internal.h" 48 #include "coff/xcoff.h" 53 #include "elf/ppc64.h" 90 #define IS_SPE_PSEUDOREG(tdep, regnum) ((tdep)->ppc_ev0_regnum >= 0 \ 91 && (regnum) >= (tdep)->ppc_ev0_regnum \ 92 && (regnum) < (tdep)->ppc_ev0_regnum + 32) 95 #define IS_DFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_dl0_regnum >= 0 \ 96 && (regnum) >= (tdep)->ppc_dl0_regnum \ 97 && (regnum) < (tdep)->ppc_dl0_regnum + 16) 100 #define IS_VSX_PSEUDOREG(tdep, regnum) ((tdep)->ppc_vsr0_regnum >= 0 \ 101 && (regnum) >= (tdep)->ppc_vsr0_regnum \ 102 && (regnum) < (tdep)->ppc_vsr0_regnum + ppc_num_vsrs) 105 #define IS_EFP_PSEUDOREG(tdep, regnum) ((tdep)->ppc_efpr0_regnum >= 0 \ 106 && (regnum) >= (tdep)->ppc_efpr0_regnum \ 107 && (regnum) < (tdep)->ppc_efpr0_regnum + ppc_num_efprs) 274 static const char *
const segment_regs[] = {
275 "sr0",
"sr1",
"sr2",
"sr3",
"sr4",
"sr5",
"sr6",
"sr7",
276 "sr8",
"sr9",
"sr10",
"sr11",
"sr12",
"sr13",
"sr14",
"sr15" 281 for (i = 0; i < total_regs; i++)
293 sim_ppc_f0_regnum + i);
317 sim_ppc_vr0_regnum + i);
323 sim_ppc_vscr_regnum);
332 sim_ppc_rh0_regnum + i);
341 for (i = 0; i < sim_ppc_num_sprs; i++)
343 const char *spr_name = sim_spr_register_name (i);
346 if (spr_name != NULL)
398 if (gdb_regsize < regsize
400 offset += regsize - gdb_regsize;
419 if (gdb_regsize < regsize)
424 offset += regsize - gdb_regsize;
428 regsize - gdb_regsize);
512 int regnum,
const void *gregs,
size_t len)
562 int regnum,
const void *fpregs,
size_t len)
600 int regnum,
const void *vsxregs,
size_t len)
631 int regnum,
const void *vrregs,
size_t len)
677 int regnum,
void *gregs,
size_t len)
728 int regnum,
void *fpregs,
size_t len)
768 int regnum,
void *vsxregs,
size_t len)
802 int regnum,
void *vrregs,
size_t len)
844 int opcode = (insn >> 26) & 0x03f;
845 int sd = (insn >> 21) & 0x01f;
846 int a = (insn >> 16) & 0x01f;
847 int subcode = (insn >> 1) & 0x3ff;
855 if (opcode == 31 && subcode == 444 && a == 1)
857 if (opcode == 14 && sd == 1)
859 if (opcode == 58 && sd == 1)
868 if (opcode == 19 && subcode == 16)
870 if (opcode == 19 && subcode == 528)
900 CORE_ADDR scan_pc, func_start, func_end, epilogue_start, epilogue_end;
909 if (epilogue_start < func_start) epilogue_start = func_start;
912 if (epilogue_end > func_end) epilogue_end = func_end;
921 if (insn == 0x4e800020)
925 if (insn == 0x4e800420)
929 if (ctr > func_start && ctr < func_end)
941 scan_pc >= epilogue_start;
980 #define BRANCH_MASK 0xfc000000 981 #define BP_MASK 0xFC0007FE 982 #define B_INSN 0x48000000 983 #define BC_INSN 0x40000000 984 #define BXL_INSN 0x4c000000 985 #define BP_INSN 0x7C000008 989 #define LOAD_AND_RESERVE_MASK 0xfc0007fe 990 #define LWARX_INSTRUCTION 0x7c000028 991 #define LDARX_INSTRUCTION 0x7c0000A8 992 #define LBARX_INSTRUCTION 0x7c000068 993 #define LHARX_INSTRUCTION 0x7c0000e8 994 #define LQARX_INSTRUCTION 0x7c000228 995 #define STORE_CONDITIONAL_MASK 0xfc0007ff 996 #define STWCX_INSTRUCTION 0x7c00012d 997 #define STDCX_INSTRUCTION 0x7c0001ad 998 #define STBCX_INSTRUCTION 0x7c00056d 999 #define STHCX_INSTRUCTION 0x7c0005ad 1000 #define STQCX_INSTRUCTION 0x7c00016d 1004 #define IS_LOAD_AND_RESERVE_INSN(insn) ((insn & LOAD_AND_RESERVE_MASK) == LWARX_INSTRUCTION \ 1005 || (insn & LOAD_AND_RESERVE_MASK) == LDARX_INSTRUCTION \ 1006 || (insn & LOAD_AND_RESERVE_MASK) == LBARX_INSTRUCTION \ 1007 || (insn & LOAD_AND_RESERVE_MASK) == LHARX_INSTRUCTION \ 1008 || (insn & LOAD_AND_RESERVE_MASK) == LQARX_INSTRUCTION) 1011 #define IS_STORE_CONDITIONAL_INSN(insn) ((insn & STORE_CONDITIONAL_MASK) == STWCX_INSTRUCTION \ 1012 || (insn & STORE_CONDITIONAL_MASK) == STDCX_INSTRUCTION \ 1013 || (insn & STORE_CONDITIONAL_MASK) == STBCX_INSTRUCTION \ 1014 || (insn & STORE_CONDITIONAL_MASK) == STHCX_INSTRUCTION \ 1015 || (insn & STORE_CONDITIONAL_MASK) == STQCX_INSTRUCTION) 1027 std::unique_ptr<ppc_displaced_step_closure> closure
1028 (
new ppc_displaced_step_closure (len));
1029 gdb_byte *buf = closure->buf.data ();
1043 "displaced: can't displaced step " 1044 "atomic sequence at %s\n",
1060 return closure.release ();
1073 ppc_displaced_step_closure *closure = (ppc_displaced_step_closure *) closure_;
1084 "displaced: (ppc) fixup (%s, %s)\n",
1098 offset = current_pc - to;
1110 "displaced: (ppc) branch instruction: %s\n" 1111 "displaced: (ppc) adjusted PC from %s to %s\n",
1142 "displaced: (ppc) adjusted LR to %s\n",
1170 std::vector<CORE_ADDR>
1182 int last_breakpoint = 0;
1183 const int atomic_sequence_length = 16;
1184 int bc_insn_count = 0;
1192 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
1202 int immediate = ((insn & 0xfffc) ^ 0x8000) - 0x8000;
1203 int absolute = insn & 2;
1205 if (bc_insn_count >= 1)
1210 breaks[1] = immediate;
1212 breaks[1] =
loc + immediate;
1236 && (breaks[1] == breaks[0]
1237 || (breaks[1] >= pc && breaks[1] <= closing_insn)))
1238 last_breakpoint = 0;
1240 std::vector<CORE_ADDR> next_pcs;
1242 for (index = 0; index <= last_breakpoint; index++)
1243 next_pcs.push_back (breaks[index]);
1249 #define SIGNED_SHORT(x) \ 1250 ((sizeof (short) == 2) \ 1251 ? ((int)(short)(x)) \ 1252 : ((int)((((x) & 0xffff) ^ 0x8000) - 0x8000))) 1254 #define GET_SRC_REG(x) (((x) >> 21) & 0x1f) 1269 if ((op & 0xfc0007fe) == 0x7c000378)
1272 const int rx_regno = (op >> 16) & 31;
1276 if (rx_regno == 0 && ry_regno >= 3 && ry_regno <= 10)
1278 *r0_contains_arg = 1;
1287 if ((op & 0xfc1f0003) == 0xf8010000 ||
1288 (op & 0xfc1f0000) == 0xd8010000)
1293 return (rx_regno >= 3 && rx_regno <= 10);
1299 ((op & 0xfc1f0000) == 0x901f0000 ||
1300 (op & 0xfc1f0000) == 0x981f0000 ||
1301 (op & 0xfc1f0000) == 0xd81f0000))
1307 return ((rx_regno >= 3 && rx_regno <= 10)
1308 || (rx_regno == 0 && *r0_contains_arg));
1311 if ((op & 0xfc1f0000) == 0xfc010000)
1316 return (src_regno >= 2 && src_regno <= 8);
1319 if (framep && ((op & 0xfc1f0000) == 0xfc1f0000))
1324 return (src_regno >= 2 && src_regno <= 8);
1346 absolute = (int) ((insn >> 1) & 1);
1347 immediate = ((insn & ~3) << 6) >> 6;
1351 dest = pc + immediate;
1354 if ((dest_insn & 0xfc00ffff) == 0x4c000021)
1370 #define BL_MASK 0xfc000001 1371 #define BL_INSTRUCTION 0x48000001 1372 #define BL_DISPLACEMENT_MASK 0x03fffffc 1374 static unsigned long 1404 if ((op & 0xffff0000) == 0x90010000)
1406 while ((op & 0xffff0000) == 0x90010000)
1429 if ((op & 0xffff0000) != 0x39810000)
1435 if ((op & 0xffff0000) != 0x3c000000)
1441 if ((op & 0xffff0000) == 0x60000000)
1447 if (op != 0x7c0c0214)
1453 if (op != 0x7c0c0000)
1459 if ((op & 0xff9f0001) != 0x41820000)
1465 if ((op & 0xffff0000) != 0x398c0000)
1471 if (op != 0x900c0000)
1477 if ((op & 0xfc000001) != 0x48000000)
1483 if ((op & 0xffff0000) == 0x900c0000)
1512 if ((op & 0xffff0000) != 0x38010000)
1518 if ((op & 0xffff0000) != 0x3c010000)
1524 if ((op & 0xffff0000) != 0x30000000)
1531 if ((op & 0xffff0000) != 0x3d800000)
1537 if ((op & 0xffff0000) != 0x818c0000)
1543 if ((op & 0xfffffffe) != 0x7c406008)
1586 long vr_saved_offset = 0;
1592 int vrsave_reg = -1;
1595 int minimal_toc_loaded = 0;
1596 int prev_insn_was_prologue_insn = 1;
1597 int num_skip_non_prologue_insns = 0;
1598 int r0_contains_arg = 0;
1623 if (prev_insn_was_prologue_insn)
1624 last_prologue_pc =
pc;
1630 prev_insn_was_prologue_insn = 1;
1637 if ((op & 0xfc1fffff) == 0x7c0802a6)
1657 lr_reg = (op & 0x03e00000) >> 21;
1659 r0_contains_arg = 0;
1662 else if ((op & 0xfc1fffff) == 0x7c000026)
1664 cr_reg = (op & 0x03e00000);
1666 r0_contains_arg = 0;
1670 else if ((op & 0xfc1f0000) == 0xd8010000)
1681 else if (((op & 0xfc1f0000) == 0xbc010000) ||
1682 (((op & 0xfc1f0000) == 0x90010000 ||
1683 (op & 0xfc1f0003) == 0xf8010000) &&
1684 (op & 0x03e00000) >= 0x01a00000))
1688 if ((op & 0xfc1f0000) == 0xbc010000)
1695 if ((op & 0xfc1f0003) == 0xf8010000)
1702 else if ((op & 0xffff0000) == 0x3c4c0000
1703 || (op & 0xffff0000) == 0x3c400000
1704 || (op & 0xffff0000) == 0x38420000)
1714 else if (op == 0x60000000)
1720 prev_insn_was_prologue_insn = 0;
1724 else if ((op & 0xffff0000) == 0x3c000000)
1726 fdata->
offset = (op & 0x0000ffff) << 16;
1728 r0_contains_arg = 0;
1732 else if ((op & 0xffff0000) == 0x60000000)
1734 fdata->
offset |= (op & 0x0000ffff);
1736 r0_contains_arg = 0;
1740 else if (lr_reg >= 0 &&
1742 (((op & 0xffff0000) == (lr_reg | 0xf8010000)) ||
1744 ((op & 0xffff0000) == (lr_reg | 0x90010000)) ||
1746 ((op & 0xffff0000) == (lr_reg | 0x94010000))))
1753 if ((op & 0xfc000003) == 0xf8000000 ||
1754 (op & 0xfc000000) == 0x90000000)
1762 else if (cr_reg >= 0 &&
1764 (((op & 0xffff0000) == (cr_reg | 0xf8010000)) ||
1766 ((op & 0xffff0000) == (cr_reg | 0x90010000)) ||
1768 ((op & 0xffff0000) == (cr_reg | 0x94010000))))
1774 if ((op & 0xfc000003) == 0xf8000000 ||
1775 (op & 0xfc000000) == 0x90000000)
1783 else if ((op & 0xfe80ffff) == 0x42800005 && lr_reg != -1)
1790 else if (op == 0x48000005)
1797 else if (op == 0x48000004)
1802 else if ((op & 0xffff0000) == 0x3fc00000 ||
1804 (op & 0xffff0000) == 0x3bde0000)
1809 else if ((op & 0xfc000001) == 0x48000001)
1828 if ((
pc - orig_pc) > 8)
1833 if ((prologue_sal.
line == 0)
1834 || (prologue_sal.
line != this_sal.
line))
1845 if (op == 0x4def7b82 || op == 0)
1853 else if ((op & 0xfc1f0000) == 0x94010000)
1860 else if ((op & 0xfc1f016a) == 0x7c01016e)
1867 else if ((op & 0xfc1f0003) == 0xf8010001)
1874 else if ((op & 0xfc1f016a) == 0x7c01016a)
1881 else if ((op & 0xffff0000) == 0x38210000)
1890 else if (((op >> 22) == 0x20f ||
1891 (op >> 22) == 0x3af)
1893 && !minimal_toc_loaded)
1895 minimal_toc_loaded = 1;
1901 else if ((op & 0xfc0007fe) == 0x7c000378 &&
1902 (((op >> 21) & 31) >= 3) &&
1903 (((op >> 21) & 31) <= 10) &&
1904 ((
long) ((op >> 16) & 31)
1918 else if (op == 0x603d0000)
1927 else if (op == 0x603f0000
1928 || op == 0x7c3f0b78)
1937 else if ((op & 0xfc1fffff) == 0x38010000)
1942 + ((op & ~0x38010000) >> 21));
1953 else if ((op & 0xfc1fffff) == 0x7c0042a6)
1958 else if ((op & 0xfc1fffff) == 0x7c0043a6)
1966 else if ((op & 0xfc1f0000) == 0x90010000)
1977 else if (((op & 0xfc000000) == 0x64000000)
1978 || ((op & 0xfc000000) == 0x60000000))
1987 else if ((op & 0xffff0000) == 0x38000000
1988 || (op & 0xffff0000) == 0x39c00000)
1990 if ((op & 0xffff0000) == 0x38000000)
1991 r0_contains_arg = 0;
1998 prev_insn_was_prologue_insn = 0;
2002 else if ((op & 0xfc1fffff) == 0x7c1f01ce)
2004 if (
pc == (li_found_pc + 4))
2015 vr_saved_offset = -1;
2026 else if (arch_info->mach == bfd_mach_ppc_e500
2027 && (op & 0xfc1f07ff) == 0x101f0321)
2029 if ((op & 0x03e00000) >= 0x01a00000)
2033 imm = (op >> 11) & 0x1f;
2034 ev_offset = imm * 8;
2048 else if (arch_info->mach == bfd_mach_ppc_e500
2049 && (op & 0xffe007ff) == 0x13e00320)
2051 if (
pc == (li_found_pc + 4))
2063 vr_saved_offset = -1;
2071 else if (arch_info->mach == bfd_mach_ppc_e500
2072 && (op & 0xffe007ff) == 0x13e00321)
2077 ev_offset = ((op >> 11) & 0x1f) * 8;
2092 else if (arch_info->mach == bfd_mach_ppc_e500
2093 && (op & 0xfc1fffff) == 0x101f0320)
2095 if (
pc == (li_found_pc + 4))
2097 if ((op & 0x03e00000) >= 0x01a00000)
2112 vr_saved_offset = -1;
2121 unsigned int all_mask = ~((1U << fdata->
saved_gpr) - 1);
2129 && (fdata->
gpr_mask & all_mask) == all_mask)
2132 if (op == 0x4e800020
2133 || op == 0x4e800420)
2137 if ((op & 0xf4000000) == 0x40000000)
2147 prev_insn_was_prologue_insn = 0;
2164 if ((op & 0xfc000001) == 0x48000001)
2168 if (op == 0x4def7b82)
2174 tmp = find_pc_misc_function (
pc);
2176 && strcmp (misc_function_vector[tmp].
name,
main_name ()) == 0)
2182 if (
pc == lim_pc && lr_reg >= 0)
2186 return last_prologue_pc;
2193 CORE_ADDR limit_pc, func_addr, func_end_addr = 0;
2202 if (post_prologue_pc != 0)
2203 return std::max (pc, post_prologue_pc);
2214 limit_pc = pc + 100;
2218 if (func_end_addr && limit_pc > func_end_addr)
2219 limit_pc = func_end_addr;
2266 return (addr & -16);
2319 unsigned int ii, op;
2324 static unsigned trampoline_code[] =
2344 if ((op & 0xfc000003) == 0x48000000)
2348 rel = ((int)(op << 6) >> 6);
2349 return pc + 8 + rel;
2355 if (solib_target_pc)
2356 return solib_target_pc;
2358 for (ii = 0; trampoline_code[ii]; ++ii)
2361 if (op != trampoline_code[ii])
2372 static struct type *
2383 union __gdb_builtin_type_vec64
2387 int32_t v2_int32[2];
2388 int16_t v4_int16[4];
2408 TYPE_NAME (t) =
"ppc_builtin_type_vec64";
2417 static struct type *
2455 TYPE_NAME (t) =
"ppc_builtin_type_vec128";
2487 static const char *
const spe_regnames[] = {
2488 "ev0",
"ev1",
"ev2",
"ev3",
"ev4",
"ev5",
"ev6",
"ev7",
2489 "ev8",
"ev9",
"ev10",
"ev11",
"ev12",
"ev13",
"ev14",
"ev15",
2490 "ev16",
"ev17",
"ev18",
"ev19",
"ev20",
"ev21",
"ev22",
"ev23",
2491 "ev24",
"ev25",
"ev26",
"ev27",
"ev28",
"ev29",
"ev30",
"ev31",
2499 static const char *
const dfp128_regnames[] = {
2500 "dl0",
"dl1",
"dl2",
"dl3",
2501 "dl4",
"dl5",
"dl6",
"dl7",
2502 "dl8",
"dl9",
"dl10",
"dl11",
2503 "dl12",
"dl13",
"dl14",
"dl15" 2511 static const char *
const vsx_regnames[] = {
2512 "vs0",
"vs1",
"vs2",
"vs3",
"vs4",
"vs5",
"vs6",
"vs7",
2513 "vs8",
"vs9",
"vs10",
"vs11",
"vs12",
"vs13",
"vs14",
2514 "vs15",
"vs16",
"vs17",
"vs18",
"vs19",
"vs20",
"vs21",
2515 "vs22",
"vs23",
"vs24",
"vs25",
"vs26",
"vs27",
"vs28",
2516 "vs29",
"vs30",
"vs31",
"vs32",
"vs33",
"vs34",
"vs35",
2517 "vs36",
"vs37",
"vs38",
"vs39",
"vs40",
"vs41",
"vs42",
2518 "vs43",
"vs44",
"vs45",
"vs46",
"vs47",
"vs48",
"vs49",
2519 "vs50",
"vs51",
"vs52",
"vs53",
"vs54",
"vs55",
"vs56",
2520 "vs57",
"vs58",
"vs59",
"vs60",
"vs61",
"vs62",
"vs63" 2528 static const char *
const efpr_regnames[] = {
2529 "f32",
"f33",
"f34",
"f35",
"f36",
"f37",
"f38",
2530 "f39",
"f40",
"f41",
"f42",
"f43",
"f44",
"f45",
2531 "f46",
"f47",
"f48",
"f49",
"f50",
"f51",
2532 "f52",
"f53",
"f54",
"f55",
"f56",
"f57",
2533 "f58",
"f59",
"f60",
"f61",
"f62",
"f63" 2544 static struct type *
2612 int *optimizedp,
int *unavailablep)
2621 from, optimizedp, unavailablep))
2626 *optimizedp = *unavailablep = 0;
2734 reg_nr, (
void *)
buffer);
2753 2 * reg_index + 1,
buffer + 8);
2758 2 * reg_index + 1,
buffer);
2761 2 * reg_index,
buffer + 8);
2782 2 * reg_index + 1,
buffer + 8);
2787 2 * reg_index + 1,
buffer);
2789 2 * reg_index,
buffer + 8);
2908 _(
"rs6000_pseudo_register_read: " 2909 "called on unexpected register '%s' (%d)"),
2933 _(
"rs6000_pseudo_register_write: " 2934 "called on unexpected register '%s' (%d)"),
2975 _(
"rs6000_pseudo_register_collect: " 2976 "called on unexpected register '%s' (%d)"),
3000 if (0 <= num && num <= 31)
3002 else if (32 <= num && num <= 63)
3007 else if (77 <= num && num <= 108)
3009 else if (1200 <= num && num < 1200 + 32)
3042 if (0 <= num && num <= 31)
3044 else if (32 <= num && num <= 63)
3049 else if (1124 <= num && num < 1124 + 32)
3051 else if (1200 <= num && num < 1200 + 32)
3113 if (0 <= num && num <= 63)
3115 else if (68 <= num && num <= 75)
3116 return num - 68 + 86;
3117 else if (77 <= num && num <= 108)
3118 return num - 77 + 1124;
3168 {
"powerpc",
"PowerPC user-level", bfd_arch_powerpc,
3170 {
"power",
"POWER user-level", bfd_arch_rs6000,
3172 {
"403",
"IBM PowerPC 403", bfd_arch_powerpc,
3174 {
"405",
"IBM PowerPC 405", bfd_arch_powerpc,
3176 {
"601",
"Motorola PowerPC 601", bfd_arch_powerpc,
3178 {
"602",
"Motorola PowerPC 602", bfd_arch_powerpc,
3180 {
"603",
"Motorola/IBM PowerPC 603 or 603e", bfd_arch_powerpc,
3182 {
"604",
"Motorola PowerPC 604 or 604e", bfd_arch_powerpc,
3184 {
"403GC",
"IBM PowerPC 403GC", bfd_arch_powerpc,
3186 {
"505",
"Motorola PowerPC 505", bfd_arch_powerpc,
3188 {
"860",
"Motorola PowerPC 860 or 850", bfd_arch_powerpc,
3190 {
"750",
"Motorola/IBM PowerPC 750 or 740", bfd_arch_powerpc,
3192 {
"7400",
"Motorola/IBM PowerPC 7400 (G4)", bfd_arch_powerpc,
3194 {
"e500",
"Motorola PowerPC e500", bfd_arch_powerpc,
3198 {
"powerpc64",
"PowerPC 64-bit user-level", bfd_arch_powerpc,
3200 {
"620",
"Motorola PowerPC 620", bfd_arch_powerpc,
3202 {
"630",
"Motorola PowerPC 630", bfd_arch_powerpc,
3204 {
"a35",
"PowerPC A35", bfd_arch_powerpc,
3206 {
"rs64ii",
"PowerPC rs64ii", bfd_arch_powerpc,
3208 {
"rs64iii",
"PowerPC rs64iii", bfd_arch_powerpc,
3212 {
"rs1",
"IBM POWER RS1", bfd_arch_rs6000,
3214 {
"rsc",
"IBM POWER RSC", bfd_arch_rs6000,
3216 {
"rs2",
"IBM POWER RS2", bfd_arch_rs6000,
3219 {0, 0, (
enum bfd_architecture) 0, 0, 0}
3278 if ((*this_cache) != NULL)
3281 (*this_cache) = cache;
3325 if (
func == 0 && saved_lr == pc)
3330 if (
func == saved_func)
3347 byte_order, &backchain))
3398 for (i = fdata.
saved_vr; i < 32; i++)
3414 CORE_ADDR off = (byte_order == BFD_ENDIAN_BIG ? 4 : 0);
3475 if (info->
base == 0)
3481 static struct value *
3483 void **this_cache,
int regnum)
3514 (*this_cache) = cache;
3547 void **this_cache,
struct frame_id *this_id)
3554 if (info->
base == 0)
3563 static struct value *
3565 void **this_cache,
int regnum)
3578 void **this_prologue_cache)
3707 vector_abi = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_GNU,
3708 Tag_GNU_Power_ABI_Vector);
3713 sect = bfd_get_section_by_name (abfd,
".PPC.EMB.apuinfo");
3717 size = bfd_get_section_size (sect);
3719 if (!bfd_get_section_contents (abfd, sect, contents, 0,
size))
3746 unsigned int name_len;
3747 unsigned int data_len;
3754 name_len = bfd_get_32 (abfd, ptr);
3755 name_len = (name_len + 3) & ~3U;
3756 data_len = bfd_get_32 (abfd, ptr + 4);
3757 type = bfd_get_32 (abfd, ptr + 8);
3762 && strcmp ((
const char *) ptr,
"APUinfo") != 0)
3781 unsigned int apuinfo = bfd_get_32 (abfd, ptr);
3782 unsigned int apu = apuinfo >> 16;
3788 if (apu == 0x100 || apu == 0x101)
3805 #define PPC_FIELD(value, from, len) \ 3806 (((value) >> (32 - (from) - (len))) & ((1 << (len)) - 1)) 3807 #define PPC_SEXT(v, bs) \ 3808 ((((CORE_ADDR) (v) & (((CORE_ADDR) 1 << (bs)) - 1)) \ 3809 ^ ((CORE_ADDR) 1 << ((bs) - 1))) \ 3810 - ((CORE_ADDR) 1 << ((bs) - 1))) 3811 #define PPC_OP6(insn) PPC_FIELD (insn, 0, 6) 3812 #define PPC_EXTOP(insn) PPC_FIELD (insn, 21, 10) 3813 #define PPC_RT(insn) PPC_FIELD (insn, 6, 5) 3814 #define PPC_RS(insn) PPC_FIELD (insn, 6, 5) 3815 #define PPC_RA(insn) PPC_FIELD (insn, 11, 5) 3816 #define PPC_RB(insn) PPC_FIELD (insn, 16, 5) 3817 #define PPC_NB(insn) PPC_FIELD (insn, 16, 5) 3818 #define PPC_VRT(insn) PPC_FIELD (insn, 6, 5) 3819 #define PPC_FRT(insn) PPC_FIELD (insn, 6, 5) 3820 #define PPC_SPR(insn) (PPC_FIELD (insn, 11, 5) \ 3821 | (PPC_FIELD (insn, 16, 5) << 5)) 3822 #define PPC_BO(insn) PPC_FIELD (insn, 6, 5) 3823 #define PPC_T(insn) PPC_FIELD (insn, 6, 5) 3824 #define PPC_D(insn) PPC_SEXT (PPC_FIELD (insn, 16, 16), 16) 3825 #define PPC_DS(insn) PPC_SEXT (PPC_FIELD (insn, 16, 14), 14) 3826 #define PPC_DQ(insn) PPC_SEXT (PPC_FIELD (insn, 16, 12), 12) 3827 #define PPC_BIT(insn,n) ((insn & (1 << (31 - (n)))) ? 1 : 0) 3828 #define PPC_OE(insn) PPC_BIT (insn, 21) 3829 #define PPC_RC(insn) PPC_BIT (insn, 31) 3830 #define PPC_Rc(insn) PPC_BIT (insn, 21) 3831 #define PPC_LK(insn) PPC_BIT (insn, 31) 3832 #define PPC_TX(insn) PPC_BIT (insn, 31) 3833 #define PPC_LEV(insn) PPC_FIELD (insn, 20, 7) 3835 #define PPC_XT(insn) ((PPC_TX (insn) << 5) | PPC_T (insn)) 3836 #define PPC_XER_NB(xer) (xer & 0x7f) 3845 if (vsr < 0 || vsr >= 64)
3913 switch ((ext & 0x1ff))
3946 switch (ext & 0x3ff)
4247 switch (ext & 0x01f)
4271 if ((
PPC_BO (insn) & 0x4) == 0)
4304 switch (ext & 0x1ff)
4352 if ((ext & 0x1f) == 15)
4360 if ((ext & 0xff) == 170)
4487 for (i = 0; i < nr; i++)
4490 + ((
PPC_RT (insn) + i) & 0x1f));
4623 if (ext == 694 || ext == 726 || ext == 150 || ext == 214 || ext == 182)
4691 addr = addr & ~0x1ULL;
4695 addr = addr & ~0x3ULL;
4700 addr = addr & ~0xfULL;
4717 nb = (rb & 0xff) > 16 ? 16 : (rb & 0xff);
4850 ea = (ra + rb) & ~((
ULONGEST) (at_dcsz - 1));
5077 switch ((ext >> 2) & 0x7f)
5306 if (((ext >> 3) & 0x3) == 3)
5337 ea +=
PPC_DS (insn) << 2;
5366 ea +=
PPC_DQ (insn) << 4;
5706 if ((
PPC_BO (insn) & 0x4) == 0)
5767 for (i =
PPC_RT (insn); i < 32; i++)
5797 addr +=
PPC_D (insn);
5823 addr +=
PPC_D (insn);
5825 if (op6 == 36 || op6 == 37 || op6 == 52 || op6 == 53)
5827 else if (op6 == 54 || op6 == 55)
5829 else if (op6 == 44 || op6 == 45)
5831 else if (op6 == 38 || op6 == 39)
5901 size = (sub2 == 2) ? 16 : 8;
5903 addr +=
PPC_DS (insn) << 2;
5906 if (op6 == 62 && sub2 == 1)
5945 int wordsize, from_xcoff_exec, from_elf_exec;
5946 enum bfd_architecture arch;
5954 int have_fpu = 1, have_spe = 0, have_mq = 0, have_altivec = 0, have_dfp = 0,
5956 int tdesc_wordsize = -1;
5959 int num_pseudoregs = 0;
5968 && bfd_get_arch (info.
abfd) != bfd_arch_powerpc
5969 && bfd_get_arch (info.
abfd) != bfd_arch_rs6000)
5972 from_xcoff_exec = info.
abfd && info.
abfd->format == bfd_object &&
5973 bfd_get_flavour (info.
abfd) == bfd_target_xcoff_flavour;
5975 from_elf_exec = info.
abfd && info.
abfd->format == bfd_object &&
5976 bfd_get_flavour (info.
abfd) == bfd_target_elf_flavour;
5980 if (from_xcoff_exec)
5982 if (bfd_xcoff_is_xcoff64 (info.
abfd))
5987 else if (from_elf_exec)
5989 if (elf_elfheader (info.
abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6020 mach = bfd_mach_ppc_e500;
6021 bfd_default_set_arch_mach (&abfd, arch, mach);
6044 static const char *
const gprs[] = {
6045 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
6046 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15",
6047 "r16",
"r17",
"r18",
"r19",
"r20",
"r21",
"r22",
"r23",
6048 "r24",
"r25",
"r26",
"r27",
"r28",
"r29",
"r30",
"r31" 6052 static const char *
const msr_names[] = {
"msr",
"ps" };
6053 static const char *
const cr_names[] = {
"cr",
"cnd" };
6054 static const char *
const ctr_names[] = {
"ctr",
"cnt" };
6057 "org.gnu.gdb.power.core");
6058 if (feature == NULL)
6096 "org.gnu.gdb.power.fpu");
6097 if (feature != NULL)
6099 static const char *
const fprs[] = {
6100 "f0",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
6101 "f8",
"f9",
"f10",
"f11",
"f12",
"f13",
"f14",
"f15",
6102 "f16",
"f17",
"f18",
"f19",
"f20",
"f21",
"f22",
"f23",
6103 "f24",
"f25",
"f26",
"f27",
"f28",
"f29",
"f30",
"f31" 6124 have_dfp = have_fpu;
6127 "org.gnu.gdb.power.altivec");
6128 if (feature != NULL)
6130 static const char *
const vector_regs[] = {
6131 "vr0",
"vr1",
"vr2",
"vr3",
"vr4",
"vr5",
"vr6",
"vr7",
6132 "vr8",
"vr9",
"vr10",
"vr11",
"vr12",
"vr13",
"vr14",
"vr15",
6133 "vr16",
"vr17",
"vr18",
"vr19",
"vr20",
"vr21",
"vr22",
"vr23",
6134 "vr24",
"vr25",
"vr26",
"vr27",
"vr28",
"vr29",
"vr30",
"vr31" 6147 if (have_spe || !valid_p)
6159 "org.gnu.gdb.power.vsx");
6161 if (feature != NULL)
6163 static const char *
const vsx_regs[] = {
6164 "vs0h",
"vs1h",
"vs2h",
"vs3h",
"vs4h",
"vs5h",
6165 "vs6h",
"vs7h",
"vs8h",
"vs9h",
"vs10h",
"vs11h",
6166 "vs12h",
"vs13h",
"vs14h",
"vs15h",
"vs16h",
"vs17h",
6167 "vs18h",
"vs19h",
"vs20h",
"vs21h",
"vs22h",
"vs23h",
6168 "vs24h",
"vs25h",
"vs26h",
"vs27h",
"vs28h",
"vs29h",
6203 "org.gnu.gdb.power.spe");
6204 if (feature != NULL)
6206 static const char *
const upper_spe[] = {
6207 "ev0h",
"ev1h",
"ev2h",
"ev3h",
6208 "ev4h",
"ev5h",
"ev6h",
"ev7h",
6209 "ev8h",
"ev9h",
"ev10h",
"ev11h",
6210 "ev12h",
"ev13h",
"ev14h",
"ev15h",
6211 "ev16h",
"ev17h",
"ev18h",
"ev19h",
6212 "ev20h",
"ev21h",
"ev22h",
"ev23h",
6213 "ev24h",
"ev25h",
"ev26h",
"ev27h",
6214 "ev28h",
"ev29h",
"ev30h",
"ev31h" 6227 if (have_mq || have_fpu || !valid_p)
6249 if (tdesc_wordsize != -1 && tdesc_wordsize !=
wordsize)
6258 switch (elf_elfheader (info.
abfd)->e_flags & EF_PPC64_ABI)
6273 switch (bfd_elf_get_obj_attr_int (info.
abfd, OBJ_ATTR_GNU,
6274 Tag_GNU_Power_ABI_FP) & 3)
6289 switch (bfd_elf_get_obj_attr_int (info.
abfd, OBJ_ATTR_GNU,
6290 Tag_GNU_Power_ABI_FP) >> 2)
6305 switch (bfd_elf_get_obj_attr_int (info.
abfd, OBJ_ATTR_GNU,
6306 Tag_GNU_Power_ABI_Vector))
6343 soft_float = !have_fpu;
6348 if (!soft_float && !have_fpu)
6380 if (tdep && tdep->
elf_abi != elf_abi)
6452 if (have_spe || have_dfp || have_vsx)
6468 num_pseudoregs += 32;
6470 num_pseudoregs += 16;
6473 num_pseudoregs += 96;
6511 rs6000_breakpoint::kind_from_pc);
6513 rs6000_breakpoint::bp_from_kind);
6542 ppc_displaced_step_copy_insn);
6616 if (mach == bfd_mach_ppc_e500)
6623 disassembler_options_powerpc ());
6645 \"set powerpc\" must be followed by an appropriate subcommand.\n"));
6664 internal_error (__FILE__, __LINE__,
_(
"could not update architecture"));
6685 internal_error (__FILE__, __LINE__,
_(
"Invalid vector ABI accepted: %s."),
6691 internal_error (__FILE__, __LINE__,
_(
"could not update architecture"));
6731 unsigned int *insns)
6736 for (i = 0, insn = 0; pattern[i].
mask; i++)
6741 if ((insn & pattern[i].mask) == pattern[i].
data)
6747 else if (!pattern[i].optional)
6760 return ((((
CORE_ADDR) insn & 0xffff) ^ 0x8000) - 0x8000);
6770 return ((((
CORE_ADDR) insn & 0xfffc) ^ 0x8000) - 0x8000);
6805 _(
"Various PowerPC-specific commands."),
6809 _(
"Various PowerPC-specific commands."),
6815 _(
"Set whether to use a soft-float ABI."),
6816 _(
"Show whether to use a soft-float ABI."),
6823 _(
"Set the vector ABI."),
6824 _(
"Show the vector ABI."),
6831 Set whether to use just one debug register for watchpoints on scalars."),
6833 Show whether to use just one debug register for watchpoints on scalars."),
6835 If true, GDB will use only one debug register when watching a variable of\n\ 6836 scalar type, thus assuming that the variable is accessed through the address\n\ 6837 of its first byte."),
static void initialize_tdesc_powerpc_602(void)
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
struct target_desc * tdesc_powerpc_603
void set_gdbarch_double_bit(struct gdbarch *gdbarch, int double_bit)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
void set_gdbarch_have_nonsteppable_watchpoint(struct gdbarch *gdbarch, int have_nonsteppable_watchpoint)
void set_gdbarch_value_to_register(struct gdbarch *gdbarch, gdbarch_value_to_register_ftype value_to_register)
void ppc_collect_vsxregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *vsxregs, size_t len)
static void show_powerpc_exact_watchpoints(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
static const struct variant * find_variant_by_arch(enum bfd_architecture arch, unsigned long mach)
static void rs6000_gen_return_address(struct gdbarch *gdbarch, struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope)
struct type * builtin_declong
void set_gdbarch_skip_main_prologue(struct gdbarch *gdbarch, gdbarch_skip_main_prologue_ftype skip_main_prologue)
void set_gdbarch_ps_regnum(struct gdbarch *gdbarch, int ps_regnum)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
void _initialize_rs6000_tdep(void)
void ppc_supply_gregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len)
static void rs6000_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)
static void initialize_tdesc_powerpc_403gc(void)
void set_gdbarch_float_bit(struct gdbarch *gdbarch, int float_bit)
void set_gdbarch_displaced_step_fixup(struct gdbarch *gdbarch, gdbarch_displaced_step_fixup_ftype displaced_step_fixup)
static int store_param_on_stack_p(unsigned long op, int framep, int *r0_contains_arg)
CORE_ADDR get_frame_pc(struct frame_info *frame)
void set_gdbarch_fp0_regnum(struct gdbarch *gdbarch, int fp0_regnum)
#define MSYMBOL_LINKAGE_NAME(symbol)
static const char * powerpc_vector_abi_string
struct frame_info * get_current_frame(void)
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
void displaced_step_dump_bytes(struct ui_file *file, const gdb_byte *buf, size_t len)
enum register_status(* move_ev_register_func)(struct regcache *, int, void *)
static void powerpc_set_soft_float(const char *args, int from_tty, struct cmd_list_element *c)
static void ppc_dwarf2_frame_init_reg(struct gdbarch *gdbarch, int regnum, struct dwarf2_frame_state_reg *reg, struct frame_info *this_frame)
static int rs6000_in_solib_return_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
void ppc_supply_vrregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *vrregs, size_t len)
static int ppc_vrreg_offset(struct gdbarch_tdep *tdep, const struct ppc_reg_offsets *offsets, int regnum)
static const struct frame_base rs6000_frame_base
static void set_sim_regno(int *table, int gdb_regno, int sim_regno)
int safe_read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order, ULONGEST *return_value)
void ax_reg_mask(struct agent_expr *ax, int reg)
struct value * trad_frame_get_prev_register(struct frame_info *this_frame, struct trad_frame_saved_reg this_saved_regs[], int regnum)
#define BL_DISPLACEMENT_MASK
static CORE_ADDR rs6000_skip_stack_check(struct gdbarch *gdbarch, const CORE_ADDR start_pc)
void add_setshow_auto_boolean_cmd(const char *name, enum command_class theclass, enum auto_boolean *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
static void initialize_tdesc_powerpc_750(void)
#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE)
int record_full_arch_list_add_reg(struct regcache *regcache, int regnum)
void dwarf2_frame_set_adjust_regnum(struct gdbarch *gdbarch, int(*adjust_regnum)(struct gdbarch *, int, int))
void set_tdesc_pseudo_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype *pseudo_type)
static int ppc_fpreg_offset(struct gdbarch_tdep *tdep, const struct ppc_reg_offsets *offsets, int regnum)
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype skip_trampoline_code)
void trad_frame_set_value(struct trad_frame_saved_reg this_saved_regs[], int regnum, LONGEST val)
void set_gdbarch_gen_return_address(struct gdbarch *gdbarch, gdbarch_gen_return_address_ftype gen_return_address)
static int rs6000_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, int num)
struct gdbarch_tdep * tdep
static void initialize_tdesc_powerpc_altivec32(void)
static enum register_status vsx_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, gdb_byte *buffer)
void set_gdbarch_stab_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype stab_reg_to_regnum)
#define TYPE_NAME(thistype)
struct target_desc * tdesc_powerpc_altivec32
void set_gdbarch_displaced_step_location(struct gdbarch *gdbarch, gdbarch_displaced_step_location_ftype displaced_step_location)
static void initialize_tdesc_powerpc_405(void)
static CORE_ADDR skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
static struct type * rs6000_builtin_type_vec64(struct gdbarch *gdbarch)
static int ppc_record_vsr(struct regcache *regcache, struct gdbarch_tdep *tdep, int vsr)
ULONGEST frame_unwind_register_unsigned(struct frame_info *frame, int regnum)
static void show_powerpc_command(const char *args, int from_tty)
void set_gdbarch_short_bit(struct gdbarch *gdbarch, int short_bit)
static int max_skip_non_prologue_insns
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
struct frame_id frame_id_build_unavailable_stack(CORE_ADDR code_addr)
static int ppc_process_record_op60(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
static int rs6000_stab_reg_to_regnum(struct gdbarch *gdbarch, int num)
void set_gdbarch_frame_red_zone_size(struct gdbarch *gdbarch, int frame_red_zone_size)
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
static struct cmd_list_element * setpowerpccmdlist
static char * powerpc_disassembler_options
void set_gdbarch_ax_pseudo_register_collect(struct gdbarch *gdbarch, gdbarch_ax_pseudo_register_collect_ftype ax_pseudo_register_collect)
int gdbarch_update_p(struct gdbarch_info info)
const char * tdesc_register_name(struct gdbarch *gdbarch, int regno)
static unsigned int read_insn(struct frame_info *frame, CORE_ADDR pc)
void add_setshow_enum_cmd(const char *name, enum command_class theclass, const char *const *enumlist, const char **var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
static void initialize_tdesc_powerpc_603(void)
int tdesc_register_size(const struct tdesc_feature *feature, const char *name)
void target_float_convert(const gdb_byte *from, const struct type *from_type, gdb_byte *to, const struct type *to_type)
static enum register_status do_regcache_raw_write(struct regcache *regcache, int regnum, void *buffer)
constexpr gdb_byte little_breakpoint[]
#define PPC_MAX_EPILOGUE_INSTRUCTIONS
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
struct gdbarch_list * next
int vsx_register_p(struct gdbarch *gdbarch, int regno)
int gdbarch_num_regs(struct gdbarch *gdbarch)
struct reggroup *const all_reggroup
const struct bfd_arch_info * bfd_arch_info
enum powerpc_long_double_abi long_double_abi
struct target_desc * tdesc_rs6000
int ppc_process_record(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr)
static struct value * rs6000_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype dwarf2_reg_to_regnum)
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
static int rs6000_in_function_epilogue_frame_p(struct frame_info *curfrm, struct gdbarch *gdbarch, CORE_ADDR pc)
void tdesc_data_cleanup(void *data_untyped)
void set_gdbarch_displaced_step_hw_singlestep(struct gdbarch *gdbarch, gdbarch_displaced_step_hw_singlestep_ftype displaced_step_hw_singlestep)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
static int rs6000_pseudo_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
static const struct frame_unwind rs6000_frame_unwind
struct target_desc * tdesc_powerpc_604
static CORE_ADDR rs6000_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
struct type * builtin_int32
struct target_desc * tdesc_powerpc_7400
#define FRAME_OBSTACK_ZALLOC(TYPE)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
enum powerpc_vector_abi vector_abi
#define IS_LOAD_AND_RESERVE_INSN(insn)
static const char * rs6000_register_name(struct gdbarch *gdbarch, int regno)
struct target_desc * tdesc_powerpc_403gc
int ppc_altivec_support_p(struct gdbarch *gdbarch)
static void dfp_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, const gdb_byte *buffer)
struct cmd_list_element * add_prefix_cmd(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc, struct cmd_list_element **prefixlist, const char *prefixname, int allow_unknown, struct cmd_list_element **list)
void gdbarch_register(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init, gdbarch_dump_tdep_ftype *dump_tdep)
void ppc_collect_gregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *gregs, size_t len)
int gdbarch_num_pseudo_regs(struct gdbarch *gdbarch)
struct reggroup *const float_reggroup
int tdesc_numbered_register(const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *name)
struct cmd_list_element * setlist
void set_gdbarch_pseudo_register_write(struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype pseudo_register_write)
static void init_sim_regno_table(struct gdbarch *arch)
void append_composite_type_field(struct type *t, const char *name, struct type *field)
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
ULONGEST gdbarch_max_insn_length(struct gdbarch *gdbarch)
#define CATCH(EXCEPTION, MASK)
static CORE_ADDR rs6000_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
static void rs6000_value_to_register(struct frame_info *frame, int regnum, struct type *type, const gdb_byte *from)
int tdesc_numbered_register_choices(const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *const names[])
int ppc_vsr0_upper_regnum
enum register_status regcache_raw_read_part(struct regcache *regcache, int regnum, int offset, int len, gdb_byte *buf)
struct target_desc * tdesc_powerpc_602
static CORE_ADDR rs6000_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
#define PPC_MAX_REGISTER_SIZE
static enum auto_boolean powerpc_soft_float_global
static int rs6000_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
CORE_ADDR ppc64_sysv_abi_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
struct target_ops current_target
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
static const char *const powerpc_vector_strings[]
struct value::@186::@187 reg
static struct rs6000_frame_cache * rs6000_epilogue_frame_cache(struct frame_info *this_frame, void **this_cache)
static int ppc_process_record_op59(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
void fprintf_filtered(struct ui_file *stream, const char *format,...)
static void initialize_tdesc_powerpc_e500(void)
CORE_ADDR find_solib_trampoline_target(struct frame_info *frame, CORE_ADDR pc)
static struct type * rs6000_builtin_type_vec128(struct gdbarch *gdbarch)
void set_gdbarch_stack_frame_destroyed_p(struct gdbarch *gdbarch, gdbarch_stack_frame_destroyed_p_ftype stack_frame_destroyed_p)
static int rs6000_adjust_frame_regnum(struct gdbarch *gdbarch, int num, int eh_frame_p)
struct target_desc * tdesc_powerpc_403
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
int safe_frame_unwind_memory(struct frame_info *this_frame, CORE_ADDR addr, gdb_byte *buf, int len)
#define PPC_FIELD(value, from, len)
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
void register_e500_ravenscar_ops(struct gdbarch *gdbarch)
struct target_desc * tdesc_powerpc_405
static int rs6000_ax_pseudo_register_collect(struct gdbarch *gdbarch, struct agent_expr *ax, int reg_nr)
struct type * register_type(struct gdbarch *gdbarch, int regnum)
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
static int bfd_uses_spe_extensions(bfd *abfd)
void set_gdbarch_in_solib_return_trampoline(struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype in_solib_return_trampoline)
int target_auxv_search(struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
struct cmd_list_element * showlist
void set_gdbarch_believe_pcc_promotion(struct gdbarch *gdbarch, int believe_pcc_promotion)
static const struct frame_base * rs6000_frame_base_sniffer(struct frame_info *this_frame)
static struct cmd_list_element * showpowerpccmdlist
static void initialize_tdesc_rs6000(void)
static CORE_ADDR rs6000_fetch_pointer_argument(struct frame_info *frame, int argi, struct type *type)
struct type * builtin_int16
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void set_gdbarch_register_sim_regno(struct gdbarch *gdbarch, gdbarch_register_sim_regno_ftype register_sim_regno)
static int ppc_greg_offset(struct gdbarch *gdbarch, struct gdbarch_tdep *tdep, const struct ppc_reg_offsets *offsets, int regnum, int *regsize)
static void initialize_tdesc_powerpc_601(void)
static int bl_to_blrl_insn_p(CORE_ADDR pc, int insn, enum bfd_endian byte_order)
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
struct type * init_vector_type(struct type *elt_type, int n)
void set_gdbarch_register_to_value(struct gdbarch *gdbarch, gdbarch_register_to_value_ftype register_to_value)
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
static void set_powerpc_command(const char *args, int from_tty)
static CORE_ADDR rs6000_skip_main_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
int(* ppc_syscall_record)(struct regcache *regcache)
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
static int startswith(const char *string, const char *pattern)
static void initialize_tdesc_powerpc_64(void)
static struct frame_id rs6000_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
void ppc_supply_fpregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *fpregs, size_t len)
int altivec_register_p(struct gdbarch *gdbarch, int regno)
int target_exact_watchpoints
void printf_unfiltered(const char *format,...)
static void initialize_tdesc_powerpc_vsx32(void)
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static struct variant variants[]
static struct type * rs6000_pseudo_register_type(struct gdbarch *gdbarch, int regnum)
static const struct frame_unwind rs6000_epilogue_frame_unwind
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)
struct reggroup *const vector_reggroup
CORE_ADDR displaced_step_at_entry_point(struct gdbarch *gdbarch)
CORE_ADDR ppc_sysv_abi_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
static struct rs6000_frame_cache * rs6000_frame_cache(struct frame_info *this_frame, void **this_cache)
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
static int ppc_displaced_step_hw_singlestep(struct gdbarch *gdbarch, struct displaced_step_closure *closure)
void set_gdbarch_sofun_address_maybe_missing(struct gdbarch *gdbarch, int sofun_address_maybe_missing)
static int insn_changes_sp_or_jumps(unsigned long insn)
struct type * builtin_uint128
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype breakpoint_kind_from_pc)
static int ppc_process_record_op31(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
struct trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct gdbarch *gdbarch)
void set_gdbarch_frame_args_skip(struct gdbarch *gdbarch, CORE_ADDR frame_args_skip)
struct target_desc * tdesc_powerpc_64
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
void cmd_show_list(struct cmd_list_element *list, int from_tty, const char *prefix)
static void rs6000_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, const gdb_byte *buffer)
void ppc_collect_reg(const struct regcache *regcache, int regnum, gdb_byte *regs, size_t offset, int regsize)
void put_frame_register(struct frame_info *frame, int regnum, const gdb_byte *buf)
int ppc_floating_point_unit_p(struct gdbarch *gdbarch)
int record_full_arch_list_add_mem(CORE_ADDR addr, int len)
const struct target_desc * target_desc
void set_gdbarch_software_single_step(struct gdbarch *gdbarch, gdbarch_software_single_step_ftype software_single_step)
static enum register_status e500_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, gdb_byte *buffer)
void set_gdbarch_disassembler_options(struct gdbarch *gdbarch, char **disassembler_options)
CORE_ADDR ppc_insn_d_field(unsigned int insn)
static void initialize_tdesc_powerpc_altivec64(void)
static void initialize_tdesc_powerpc_505(void)
struct type * ppc_builtin_type_vec128
void regcache_raw_write_part(struct regcache *regcache, int regnum, int offset, int len, const gdb_byte *buf)
static int ppc_process_record_op63(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
void throw_exception(struct gdb_exception exception)
void tdesc_use_registers(struct gdbarch *gdbarch, const struct target_desc *target_desc, struct tdesc_arch_data *early_data)
constexpr gdb_byte big_breakpoint[]
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
struct target_desc * tdesc_powerpc_e500
static void initialize_tdesc_powerpc_vsx64(void)
void help_list(struct cmd_list_element *list, const char *cmdtype, enum command_class theclass, struct ui_file *stream)
static void initialize_tdesc_powerpc_32(void)
struct target_desc * tdesc_powerpc_altivec64
struct target_desc * tdesc_powerpc_505
void set_gdbarch_displaced_step_copy_insn(struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype displaced_step_copy_insn)
void set_gdbarch_pseudo_register_read(struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype pseudo_register_read)
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
static CORE_ADDR rs6000_frame_base_address(struct frame_info *this_frame, void **this_cache)
static void efpr_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, const gdb_byte *buffer)
struct type * builtin_double
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
void set_gdbarch_convert_register_p(struct gdbarch *gdbarch, gdbarch_convert_register_p_ftype convert_register_p)
void ppc_collect_fpregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *fpregs, size_t len)
static int rs6000_register_to_value(struct frame_info *frame, int regnum, struct type *type, gdb_byte *to, int *optimizedp, int *unavailablep)
static void e500_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, const gdb_byte *buffer)
static struct value * rs6000_epilogue_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
int frame_relative_level(struct frame_info *fi)
#define TYPE_CODE(thistype)
enum register_status regcache_raw_read(struct regcache *regcache, int regnum, gdb_byte *buf)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
#define IS_EFP_PSEUDOREG(tdep, regnum)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void gdbarch_info_init(struct gdbarch_info *info)
static void initialize_tdesc_powerpc_860(void)
CORE_ADDR regcache_read_pc(struct regcache *regcache)
#define IS_VSX_PSEUDOREG(tdep, regnum)
void set_gdbarch_int_bit(struct gdbarch *gdbarch, int int_bit)
static enum register_status e500_move_ev_register(move_ev_register_func move, struct regcache *regcache, int ev_reg, void *buffer)
struct minimal_symbol * minsym
static void powerpc_set_vector_abi(const char *args, int from_tty, struct cmd_list_element *c)
enum bfd_architecture arch
void add_setshow_boolean_cmd(const char *name, enum command_class theclass, int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
static CORE_ADDR rs6000_skip_trampoline_code(struct frame_info *frame, CORE_ADDR pc)
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
static void rs6000_dump_tdep(struct gdbarch *gdbarch, struct ui_file *file)
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
void set_gdbarch_fetch_pointer_argument(struct gdbarch *gdbarch, gdbarch_fetch_pointer_argument_ftype fetch_pointer_argument)
enum return_value_convention ppc64_sysv_abi_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
struct type * ppc_builtin_type_vec64
struct target_desc * tdesc_powerpc_860
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
CORE_ADDR ppc_insn_ds_field(unsigned int insn)
struct m32c_reg regs[M32C_MAX_NUM_REGS]
void set_gdbarch_valid_disassembler_options(struct gdbarch *gdbarch, const disasm_options_t *valid_disassembler_options)
typedef BP_MANIPULATION_ENDIAN(little_breakpoint, big_breakpoint)
struct tdesc_arch_data * tdesc_data_alloc(void)
void regcache_raw_supply(struct regcache *regcache, int regnum, const void *buf)
void frame_base_append_sniffer(struct gdbarch *gdbarch, frame_base_sniffer_ftype *sniffer)
int get_frame_register_bytes(struct frame_info *frame, int regnum, CORE_ADDR offset, int len, gdb_byte *myaddr, int *optimizedp, int *unavailablep)
static enum register_status efpr_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, gdb_byte *buffer)
static void ppc_displaced_step_fixup(struct gdbarch *gdbarch, struct displaced_step_closure *closure_, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
unsigned long long ULONGEST
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
static unsigned long rs6000_fetch_instruction(struct gdbarch *gdbarch, const CORE_ADDR pc)
static int ppc_process_record_op4(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
const struct tdesc_feature * tdesc_find_feature(const struct target_desc *target_desc, const char *name)
std::vector< CORE_ADDR > ppc_deal_with_atomic_sequence(struct regcache *regcache)
int register_size(struct gdbarch *gdbarch, int regnum)
#define IS_STORE_CONDITIONAL_INSN(insn)
int spe_register_p(struct gdbarch *gdbarch, int regno)
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
void register_ppc_ravenscar_ops(struct gdbarch *gdbarch)
struct type * builtin_int64
static int rs6000_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
void dwarf2_frame_set_init_reg(struct gdbarch *gdbarch, void(*init_reg)(struct gdbarch *, int, struct dwarf2_frame_state_reg *, struct frame_info *))
static struct gdbarch * rs6000_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
void regcache_raw_collect(const struct regcache *regcache, int regnum, void *buf)
void ppc_supply_reg(struct regcache *regcache, int regnum, const gdb_byte *regs, size_t offset, int regsize)
int gdbarch_pc_regnum(struct gdbarch *gdbarch)
static void initialize_tdesc_powerpc_403(void)
void ppc_collect_vrregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *vrregs, size_t len)
void set_tdesc_pseudo_register_reggroup_p(struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
struct target_desc * tdesc_powerpc_601
int ppc_insns_match_pattern(struct frame_info *frame, CORE_ADDR pc, struct ppc_insn_pattern *pattern, unsigned int *insns)
static void vsx_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, const gdb_byte *buffer)
static int ppc_process_record_op19(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
#define TYPE_LENGTH(thistype)
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
struct trad_frame_saved_reg * saved_regs
static int ppc_process_record_op61(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr, uint32_t insn)
CORE_ADDR get_pc_function_start(CORE_ADDR pc)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype sw_breakpoint_from_kind)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype skip_prologue)
struct type * builtin_int8
static void initialize_tdesc_powerpc_604(void)
static struct gdbarch_data * tdesc_data
enum bfd_endian byte_order
struct tdesc_arch_data * tdesc_data
enum bfd_endian byte_order
static enum register_status do_regcache_raw_read(struct regcache *regcache, int regnum, void *buffer)
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
void set_gdbarch_max_insn_length(struct gdbarch *gdbarch, ULONGEST max_insn_length)
void ppc_supply_vsxregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *vsxregs, size_t len)
int record_full_arch_list_add_end(void)
int tdesc_has_registers(const struct target_desc *target_desc)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype register_name)
CORE_ADDR get_frame_func(struct frame_info *this_frame)
struct target_desc ** tdesc
static void initialize_tdesc_powerpc_7400(void)
static enum powerpc_vector_abi powerpc_vector_abi_global
enum return_value_convention ppc_sysv_abi_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, struct gdbarch_tdep *tdep)
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype inner_than)
static enum register_status rs6000_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, gdb_byte *buffer)
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
struct type * arch_composite_type(struct gdbarch *gdbarch, const char *name, enum type_code code)
struct target_desc * tdesc_powerpc_750
static int ppc_vsx_support_p(struct gdbarch *gdbarch)
#define IS_SPE_PSEUDOREG(tdep, regnum)
struct type * builtin_float
void regcache_raw_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
static enum register_status dfp_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int reg_nr, gdb_byte *buffer)
#define IS_DFP_PSEUDOREG(tdep, regnum)
static int rs6000_register_sim_regno(struct gdbarch *gdbarch, int reg)
static int rs6000_epilogue_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
static void rs6000_epilogue_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)