37 size_t insn_len = loongarch_insn_length (0);
38 gdb_byte buf[insn_len];
53 if ((insn & 0xfc000000) == 0x4c000000
54 || (insn & 0xfc000000) == 0x50000000
55 || (insn & 0xfc000000) == 0x54000000)
65 if ((insn & 0xfc000000) == 0x58000000
66 || (insn & 0xfc000000) == 0x5c000000
67 || (insn & 0xfc000000) == 0x60000000
68 || (insn & 0xfc000000) == 0x64000000
69 || (insn & 0xfc000000) == 0x68000000
70 || (insn & 0xfc000000) == 0x6c000000
71 || (insn & 0xfc000000) == 0x40000000
72 || (insn & 0xfc000000) == 0x44000000)
85 return (is_uncond || is_cond);
93 if ((insn & 0xff000000) == 0x20000000
94 || (insn & 0xff000000) == 0x22000000)
104 if ((insn & 0xff000000) == 0x21000000
105 || (insn & 0xff000000) == 0x23000000)
118 CORE_ADDR cur_pc = start_pc, prologue_end = 0;
122 int32_t reg_used[32] = {1, 0};
124 while (cur_pc < limit_pc)
127 size_t insn_len = loongarch_insn_length (insn);
128 int32_t rd = loongarch_decode_imm (
"0:5", insn, 0);
129 int32_t rj = loongarch_decode_imm (
"5:5", insn, 0);
130 int32_t rk = loongarch_decode_imm (
"10:5", insn, 0);
131 int32_t si12 = loongarch_decode_imm (
"10:12", insn, 1);
132 int32_t si20 = loongarch_decode_imm (
"5:20", insn, 1);
134 if ((insn & 0xffc00000) == 0x02c00000
135 && rd == sp && rj == sp && si12 < 0)
137 prologue_end = cur_pc + insn_len;
139 else if ((insn & 0xffc00000) == 0x02c00000
140 && rd == fp && rj == sp && si12 > 0)
142 prologue_end = cur_pc + insn_len;
144 else if ((insn & 0xffc00000) == 0x29c00000
147 prologue_end = cur_pc + insn_len;
149 else if ((insn & 0xff000000) == 0x27000000
152 prologue_end = cur_pc + insn_len;
154 else if ((insn & 0xfe000000) == 0x14000000)
159 else if ((insn & 0xffc00000) == 0x03800000)
167 else if ((insn & 0xffff8000) == 0x00108000
168 && rd == sp && rj == sp)
170 if (reg_used[rk] == 1 &&
reg_value[rk] < 0)
172 prologue_end = cur_pc + insn_len;
184 if (prologue_end == 0)
185 prologue_end = cur_pc;
202 CORE_ADDR post_prologue_pc
204 if (post_prologue_pc != 0)
205 return std::max (pc, post_prologue_pc);
230 size_t insn_len = loongarch_insn_length (insn);
231 CORE_ADDR next_pc = cur_pc + insn_len;
233 if ((insn & 0xfc000000) == 0x4c000000)
236 loongarch_decode_imm (
"5:5", insn, 0));
237 next_pc = rj + loongarch_decode_imm (
"10:16<<2", insn, 1);
239 else if ((insn & 0xfc000000) == 0x50000000
240 || (insn & 0xfc000000) == 0x54000000)
242 next_pc = cur_pc + loongarch_decode_imm (
"0:10|10:16<<2", insn, 1);
244 else if ((insn & 0xfc000000) == 0x58000000)
247 loongarch_decode_imm (
"5:5", insn, 0));
249 loongarch_decode_imm (
"0:5", insn, 0));
251 next_pc = cur_pc + loongarch_decode_imm (
"10:16<<2", insn, 1);
253 else if ((insn & 0xfc000000) == 0x5c000000)
256 loongarch_decode_imm (
"5:5", insn, 0));
258 loongarch_decode_imm (
"0:5", insn, 0));
260 next_pc = cur_pc + loongarch_decode_imm (
"10:16<<2", insn, 1);
262 else if ((insn & 0xfc000000) == 0x60000000)
265 loongarch_decode_imm (
"5:5", insn, 0));
267 loongarch_decode_imm (
"0:5", insn, 0));
269 next_pc = cur_pc + loongarch_decode_imm (
"10:16<<2", insn, 1);
271 else if ((insn & 0xfc000000) == 0x64000000)
274 loongarch_decode_imm (
"5:5", insn, 0));
276 loongarch_decode_imm (
"0:5", insn, 0));
278 next_pc = cur_pc + loongarch_decode_imm (
"10:16<<2", insn, 1);
280 else if ((insn & 0xfc000000) == 0x68000000)
282 ULONGEST rj = regcache_raw_get_unsigned (
regcache,
283 loongarch_decode_imm (
"5:5", insn, 0));
284 ULONGEST rd = regcache_raw_get_unsigned (
regcache,
285 loongarch_decode_imm (
"0:5", insn, 0));
287 next_pc = cur_pc + loongarch_decode_imm (
"10:16<<2", insn, 1);
289 else if ((insn & 0xfc000000) == 0x6c000000)
291 ULONGEST rj = regcache_raw_get_unsigned (
regcache,
292 loongarch_decode_imm (
"5:5", insn, 0));
293 ULONGEST rd = regcache_raw_get_unsigned (
regcache,
294 loongarch_decode_imm (
"0:5", insn, 0));
296 next_pc = cur_pc + loongarch_decode_imm (
"10:16<<2", insn, 1);
298 else if ((insn & 0xfc000000) == 0x40000000)
301 loongarch_decode_imm (
"5:5", insn, 0));
303 next_pc = cur_pc + loongarch_decode_imm (
"0:5|10:16<<2", insn, 1);
305 else if ((insn & 0xfc000000) == 0x44000000)
308 loongarch_decode_imm (
"5:5", insn, 0));
310 next_pc = cur_pc + loongarch_decode_imm (
"0:5|10:16<<2", insn, 1);
312 else if ((insn & 0xffff8000) == 0x002b0000)
324static std::vector<CORE_ADDR>
328 std::vector<CORE_ADDR> next_pcs;
330 size_t insn_len = loongarch_insn_length (insn);
331 const int atomic_sequence_length = 16;
332 bool found_atomic_sequence_endpoint =
false;
339 for (
int insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
353 next_pcs.push_back (next_pc);
358 found_atomic_sequence_endpoint =
true;
359 next_pc = cur_pc + insn_len;
360 next_pcs.push_back (next_pc);
366 if (!found_atomic_sequence_endpoint)
374static std::vector<CORE_ADDR>
378 std::vector<CORE_ADDR> next_pcs
381 if (!next_pcs.empty ())
394 return align_down (addr, 16);
405 if (*this_cache !=
nullptr)
435 void **prologue_cache,
int regnum)
444 "loongarch prologue",
491 size_t len,
int align, gdb_byte **addr)
493 align = align_up (align, 8);
497 CORE_ADDR align_addr = (CORE_ADDR) (*addr);
498 align_addr = align_up (align_addr, align);
499 *addr = (gdb_byte *) align_addr;
500 memcpy (*addr, val, len);
508 unsigned int *fixed_point_members,
509 unsigned int *floating_point_members,
510 bool *first_member_is_fixed_point)
516 if (field_type->
code () == TYPE_CODE_INT
517 || field_type->
code () == TYPE_CODE_BOOL
518 || field_type->
code () == TYPE_CODE_CHAR
519 || field_type->
code () == TYPE_CODE_RANGE
520 || field_type->
code () == TYPE_CODE_ENUM
521 || field_type->
code () == TYPE_CODE_PTR)
523 (*fixed_point_members)++;
525 if (*floating_point_members == 0)
526 *first_member_is_fixed_point =
true;
528 else if (field_type->
code () == TYPE_CODE_FLT)
529 (*floating_point_members)++;
530 else if (field_type->
code () == TYPE_CODE_STRUCT)
533 floating_point_members,
534 first_member_is_fixed_point);
535 else if (field_type->
code () == TYPE_CODE_COMPLEX)
536 (*floating_point_members) += 2;
544 struct value *function,
551 CORE_ADDR struct_addr)
556 unsigned int fixed_point_members;
557 unsigned int floating_point_members;
558 bool first_member_is_fixed_point;
559 gdb_byte buf[1024] = { 0 };
560 gdb_byte *addr = buf;
565 for (
int i = 0; i < nargs; i++)
567 struct value *arg = args[i];
581 case TYPE_CODE_RANGE:
609 if (len == 2 * regsize)
675 if (!varargs && far > 0)
683 case TYPE_CODE_STRUCT:
685 fixed_point_members = 0;
686 floating_point_members = 0;
687 first_member_is_fixed_point =
false;
689 &fixed_point_members,
690 &floating_point_members,
691 &first_member_is_fixed_point);
693 if (len > 0 && len <= regsize)
696 if (fixed_point_members > 0 && floating_point_members == 0)
707 else if (fixed_point_members == 0 && floating_point_members > 0)
713 if (floating_point_members == 1)
715 if (!varargs && far > 0)
728 else if (floating_point_members == 2)
730 if (!varargs && far >= 2)
746 else if (fixed_point_members > 0 && floating_point_members > 0)
751 if (floating_point_members == 1 && fixed_point_members > 1)
764 else if (floating_point_members == 1 && fixed_point_members == 1)
766 if (!varargs && far > 0 && gar > 0)
768 if (first_member_is_fixed_point ==
false)
789 else if (len > regsize && len <= 2 * regsize)
792 if (fixed_point_members > 0 && floating_point_members == 0)
817 else if (fixed_point_members == 0 && floating_point_members > 0)
829 if ((len == 16 && floating_point_members == 1)
830 || (len == 16 && floating_point_members == 3)
831 || (len == 12 && floating_point_members == 3)
832 || (len == 16 && floating_point_members == 4))
870 else if ((len == 16 && floating_point_members == 2)
871 || (len == 12 && floating_point_members == 2))
873 if (!varargs && far >= 2)
895 else if (fixed_point_members > 0 && floating_point_members > 0)
898 if (floating_point_members == 1 && fixed_point_members == 1)
909 if (!varargs && far > 0 && gar > 0)
911 if (first_member_is_fixed_point ==
false)
922 else if ((!varargs && far == 0 && gar >= 2) || (varargs && gar >= 2))
927 else if ((!varargs && far == 0 && gar == 1) || (varargs && gar == 1))
932 else if ((!varargs && far == 0 && gar == 0) || (varargs && gar == 0))
963 else if (len > 2 * regsize)
968 sp = align_down (sp - len, 16);
978 case TYPE_CODE_UNION:
980 if (len > 0 && len <= regsize)
989 else if (len > regsize && len <= 2 * regsize)
1013 else if (len > 2 * regsize)
1018 sp = align_down (sp - len, 16);
1027 case TYPE_CODE_COMPLEX:
1032 if (target_len < regsize)
1040 if (!varargs && far >= 2)
1054 else if (target_len == regsize)
1069 if (!varargs && far >= 2)
1090 else if (target_len == 2 * regsize)
1096 sp = align_down (sp - len, 16);
1114 sp = align_down (sp, 16);
1128 int regnum,
int len, gdb_byte *readbuf,
1129 const gdb_byte *writebuf,
size_t offset)
1142 gdb_byte *readbuf,
const gdb_byte *writebuf)
1147 unsigned int fixed_point_members;
1148 unsigned int floating_point_members;
1149 bool first_member_is_fixed_point;
1155 if (len > 2 * regsize)
1161 case TYPE_CODE_BOOL:
1162 case TYPE_CODE_CHAR:
1163 case TYPE_CODE_RANGE:
1164 case TYPE_CODE_ENUM:
1173 gdb_byte buf[regsize];
1193 if (len == 2 * regsize)
1205 case TYPE_CODE_STRUCT:
1207 fixed_point_members = 0;
1208 floating_point_members = 0;
1209 first_member_is_fixed_point =
false;
1211 &fixed_point_members,
1212 &floating_point_members,
1213 &first_member_is_fixed_point);
1215 if (len > 0 && len <= regsize)
1218 if (fixed_point_members > 0 && floating_point_members == 0)
1224 else if (fixed_point_members == 0 && floating_point_members > 0)
1228 if (floating_point_members == 1)
1234 else if (floating_point_members == 2)
1241 else if (fixed_point_members > 0 && floating_point_members > 0)
1245 if (floating_point_members == 1 && fixed_point_members > 1)
1250 else if (floating_point_members == 1 && fixed_point_members == 1)
1253 if (first_member_is_fixed_point ==
false)
1267 else if (len > regsize && len <= 2 * regsize)
1270 if (fixed_point_members > 0 && floating_point_members == 0)
1277 else if (fixed_point_members == 0 && floating_point_members > 0)
1283 if ((len == 16 && floating_point_members == 1)
1284 || (len == 16 && floating_point_members == 3)
1285 || (len == 12 && floating_point_members == 3)
1286 || (len == 16 && floating_point_members == 4))
1294 else if ((len == 16 && floating_point_members == 2)
1295 || (len == 12 && floating_point_members == 2))
1302 else if (fixed_point_members > 0 && floating_point_members > 0)
1305 if (floating_point_members == 1 && fixed_point_members == 1)
1308 if (first_member_is_fixed_point ==
false)
1330 case TYPE_CODE_UNION:
1331 if (len > 0 && len <= regsize)
1336 else if (len > regsize && len <= 2 * regsize)
1343 case TYPE_CODE_COMPLEX:
1377loongarch_features_from_bfd (const bfd *abfd)
1387 if (abfd !=
nullptr && bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1389 unsigned char eclass = elf_elfheader (abfd)->e_ident[EI_CLASS];
1390 int e_flags = elf_elfheader (abfd)->e_flags;
1392 if (eclass == ELFCLASS32)
1394 else if (eclass == ELFCLASS64)
1397 internal_error (_(
"unknown ELF header class %d"), eclass);
1399 if (EF_LOONGARCH_IS_SINGLE_FLOAT (e_flags))
1401 else if (EF_LOONGARCH_IS_DOUBLE_FLOAT (e_flags))
1417 = loongarch_features_from_bfd (info.abfd);
1423 if (features.
xlen == 0)
1424 features.
xlen = info.bfd_arch_info->bits_per_address == 32 ? 4 : 8;
1445 const struct target_desc *tdesc = info.target_desc;
1451 const struct tdesc_feature *feature_cpu
1453 if (feature_cpu ==
nullptr)
1459 bool valid_p =
true;
1460 for (
int i = 0; i < 32; i++)
1462 loongarch_r_normal_name[i] + 1);
1469 const struct tdesc_feature *feature_fpu
1471 if (feature_fpu ==
nullptr)
1479 loongarch_f_normal_name[i] + 1);
1482 loongarch_c_normal_name[i] + 1);
1488 info.byte_order_for_code = BFD_ENDIAN_LITTLE;
1494 = loongarch_features_from_bfd (info.abfd);
1499 if (abi_features.
xlen == 0)
1502 features.
xlen = (xlen_bitsize / 8);
1504 abi_features = features;
1506 if (abi_features.
fputype == 0)
1510 abi_features = features;
1522 = gdbarch_tdep<loongarch_gdbarch_tdep> (
arches->gdbarch);
1549 info.target_desc = tdesc;
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)
#define BP_MANIPULATION(BREAK_INSN)
bool find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr, const struct block **block)
enum register_status cooked_read_part(int regnum, int offset, int len, gdb_byte *buf)
void cooked_write(int regnum, const gdb_byte *buf)
void cooked_write_part(int regnum, int offset, int len, const gdb_byte *buf)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
void memory_error(enum target_xfer_status err, CORE_ADDR memaddr)
static void store_signed_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, LONGEST val)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
static LONGEST extract_signed_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
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)
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)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
struct frame_id frame_id_build_unavailable_stack(CORE_ADDR code_addr)
frame_info_ptr get_current_frame(void)
CORE_ADDR get_frame_address_in_block(frame_info_ptr this_frame)
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype *breakpoint_kind_from_pc)
void set_gdbarch_software_single_step(struct gdbarch *gdbarch, gdbarch_software_single_step_ftype *software_single_step)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype *frame_align)
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue)
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)
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)
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
void set_gdbarch_long_double_format(struct gdbarch *gdbarch, const struct floatformat **long_double_format)
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
void set_gdbarch_float_bit(struct gdbarch *gdbarch, int float_bit)
void set_gdbarch_short_bit(struct gdbarch *gdbarch, int short_bit)
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_num_regs(struct gdbarch *gdbarch, int num_regs)
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype *sw_breakpoint_from_kind)
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
const struct floatformat * floatformats_ieee_quad[BFD_ENDIAN_UNKNOWN]
unsigned type_align(struct type *type)
struct type * check_typedef(struct type *type)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t err
static CORE_ADDR loongarch_scan_prologue(struct gdbarch *gdbarch, CORE_ADDR start_pc, CORE_ADDR limit_pc, frame_info_ptr this_frame, struct trad_frame_cache *this_cache)
static void loongarch_frame_this_id(frame_info_ptr this_frame, void **prologue_cache, struct frame_id *this_id)
static void loongarch_xfer_reg(struct regcache *regcache, int regnum, int len, gdb_byte *readbuf, const gdb_byte *writebuf, size_t offset)
static struct value * loongarch_frame_prev_register(frame_info_ptr this_frame, void **prologue_cache, int regnum)
static bool loongarch_insn_is_branch(insn_t insn)
static CORE_ADDR loongarch_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 void pass_in_far(struct regcache *regcache, unsigned int far, const gdb_byte *val)
static void pass_in_gar(struct regcache *regcache, unsigned int gar, const gdb_byte *val)
static constexpr gdb_byte loongarch_default_breakpoint[]
static std::vector< CORE_ADDR > loongarch_deal_with_atomic_sequence(struct regcache *regcache, CORE_ADDR cur_pc)
static void compute_struct_member(struct type *type, unsigned int *fixed_point_members, unsigned int *floating_point_members, bool *first_member_is_fixed_point)
static enum return_value_convention loongarch_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
static struct trad_frame_cache * loongarch_frame_cache(frame_info_ptr this_frame, void **this_cache)
static bool loongarch_insn_is_uncond_branch(insn_t insn)
void _initialize_loongarch_tdep()
static int loongarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, int regnum)
static bool loongarch_insn_is_sc(insn_t insn)
static const struct target_desc * loongarch_find_default_target_description(const struct gdbarch_info info)
static CORE_ADDR loongarch_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
static void pass_on_stack(struct regcache *regcache, const gdb_byte *val, size_t len, int align, gdb_byte **addr)
static CORE_ADDR loongarch_next_pc(struct regcache *regcache, CORE_ADDR cur_pc)
static bool loongarch_insn_is_ll(insn_t insn)
static bool loongarch_insn_is_cond_branch(insn_t insn)
static struct gdbarch * loongarch_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
static const struct frame_unwind loongarch_frame_unwind
static insn_t loongarch_fetch_instruction(CORE_ADDR pc)
static CORE_ADDR loongarch_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
static std::vector< CORE_ADDR > loongarch_software_single_step(struct regcache *regcache)
const target_desc * loongarch_lookup_target_description(const struct loongarch_gdbarch_features features)
@ LOONGARCH_LINUX_NUM_FPREGSET
@ LOONGARCH_LINUX_NUM_FCC
@ LOONGARCH_FIRST_FP_REGNUM
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
CORE_ADDR regcache_read_pc(struct regcache *regcache)
int register_size(struct gdbarch *gdbarch, int regnum)
LONGEST regcache_raw_get_signed(struct regcache *regcache, int regnum)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
struct type * type() const
struct loongarch_gdbarch_features abi_features
CORE_ADDR(* syscall_next_pc)(frame_info_ptr frame)
frame_info_ptr this_frame
struct type * target_type() const
struct field & field(int idx) const
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)
int tdesc_has_registers(const struct target_desc *target_desc)
int tdesc_register_bitsize(const struct tdesc_feature *feature, const char *name)
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)
void trad_frame_set_reg_realreg(struct trad_frame_cache *this_trad_cache, int regnum, int realreg)
struct trad_frame_cache * trad_frame_cache_zalloc(frame_info_ptr this_frame)
void trad_frame_get_id(struct trad_frame_cache *this_trad_cache, struct frame_id *this_id)
void trad_frame_set_id(struct trad_frame_cache *this_trad_cache, struct frame_id this_id)
struct value * trad_frame_get_register(struct trad_frame_cache *this_trad_cache, frame_info_ptr this_frame, int regnum)
struct type * value_type(const struct value *value)
gdb::array_view< const gdb_byte > value_contents(struct value *value)