32 #define insn_d(opcd, rts, ra, d) \ 33 ((((opcd) & 0x3f) << 26) \ 34 | (((rts) & 0x1f) << 21) \ 35 | (((ra) & 0x1f) << 16) \ 38 #define insn_ds(opcd, rts, ra, d, xo) \ 39 ((((opcd) & 0x3f) << 26) \ 40 | (((rts) & 0x1f) << 21) \ 41 | (((ra) & 0x1f) << 16) \ 45 #define insn_xfx(opcd, rts, spr, xo) \ 46 ((((opcd) & 0x3f) << 26) \ 47 | (((rts) & 0x1f) << 21) \ 48 | (((spr) & 0x1f) << 16) \ 49 | (((spr) & 0x3e0) << 6) \ 50 | (((xo) & 0x3ff) << 1)) 89 { -1,
insn_ds (62, 2, 1, 40, 0), 0 },
92 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 12, 0, 0), 0 },
98 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 2, 12, 0, 0), 0 },
107 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 12, 0, 0), 1 },
110 { -1, 0x4e800420, 0 },
125 { -1,
insn_ds (62, 2, 1, 40, 0), 1 },
131 { -1,
insn_ds (62, 2, 1, 40, 0), 1 },
134 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 12, 0, 0), 0 },
143 { -1, 0x7d6b5a78, 1 },
146 { -1, 0x7d8c5a14, 1 },
149 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 2, 12, 0, 0), 0 },
152 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 12, 0, 0), 1 },
155 { -1, 0x4e800420, 1 },
158 { -1, 0x28220000, 1 },
168 { -1,
insn_ds (62, 2, 1, 40, 0), 1 },
171 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 2, 0, 0), 0 },
180 { -1, 0x7d6b5a78, 1 },
183 { -1, 0x7c425a14, 1 },
186 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 2, 0, 0), 1 },
189 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 2, 2, 0, 0), 0 },
192 { -1, 0x4e800420, 1 },
195 { -1, 0x28220000, 1 },
207 { -1,
insn_ds (62, 2, 1, 40, 0), 1 },
213 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 12, 11, 0, 0), 0 },
222 { -1, 0x7d826278, 1 },
225 { -1, 0x7d6b1214, 1 },
228 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 2, 11, 0, 0), 0 },
231 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 11, 0, 0), 1 },
234 { -1, 0x4e800420, 1 },
237 { -1, 0x28220000, 1 },
249 { -1,
insn_ds (62, 2, 1, 40, 0), 1 },
252 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 12, 2, 0, 0), 0 },
261 { -1, 0x7d8b6278, 1 },
264 { -1, 0x7c425a14, 1 },
267 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 11, 2, 0, 0), 1 },
270 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 2, 2, 0, 0), 0 },
273 { -1, 0x4e800420, 1 },
276 { -1, 0x28220000, 1 },
286 { -1,
insn_ds (62, 2, 1, 24, 0), 1 },
292 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 12, 11, 0, 0), 0 },
298 { -1, 0x4e800420, 0 },
308 { -1,
insn_ds (62, 2, 1, 24, 0), 1 },
311 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 12, 2, 0, 0), 0 },
317 { -1, 0x4e800420, 0 },
328 { -1,
insn_ds (62, 2, 1, 24, 0), 1 },
334 {
insn_ds (-1, -1, -1, 0, -1),
insn_ds (58, 12, 12, 0, 0), 0 },
340 { -1, 0x4e800420, 0 },
445 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 462 scan_limit = ARRAY_SIZE (insns) - 1;
464 for (i = 0; i < scan_limit; i++)
480 && (insns[8] != 0 || insns[9] != 0))
485 && (insns[9] != 0 || insns[10] != 0))
490 && (insns[8] != 0 || insns[9] != 0))
495 && (insns[10] != 0 || insns[11] != 0))
512 return target ? target : pc;
610 if ((sym->flags & BSF_SYNTHETIC) != 0 && sym->udata.p != NULL)
612 elf_symbol_type *elf_sym = (elf_symbol_type *) sym->udata.p;
static struct ppc_insn_pattern ppc64_standard_linkage4[]
#define insn_ds(opcd, rts, ra, d, xo)
static CORE_ADDR ppc64_standard_linkage2_target(struct frame_info *frame, unsigned int *insn)
static struct ppc_insn_pattern ppc64_standard_linkage5[]
static struct ppc_insn_pattern ppc64_standard_linkage6[]
static struct ppc_insn_pattern ppc64_standard_linkage1[]
#define insn_d(opcd, rts, ra, d)
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
CORE_ADDR ppc64_skip_trampoline_code(struct frame_info *frame, CORE_ADDR pc)
static struct ppc_insn_pattern ppc64_standard_linkage3[]
enum exec_direction_kind execution_direction
CORE_ADDR find_solib_trampoline_target(struct frame_info *frame, CORE_ADDR pc)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
CORE_ADDR ppc_insn_ds_field(unsigned int insn)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
CORE_ADDR ppc64_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
static struct ppc_insn_pattern ppc64_standard_linkage8[]
#define SET_MSYMBOL_SIZE(msymbol, sz)
struct bfd_section * the_bfd_section
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
int ppc_insns_match_pattern(struct frame_info *frame, CORE_ADDR pc, struct ppc_insn_pattern *pattern, unsigned int *insns)
void ppc64_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
static CORE_ADDR ppc64_standard_linkage3_target(struct frame_info *frame, unsigned int *insn)
CORE_ADDR ppc_insn_d_field(unsigned int insn)
static struct ppc_insn_pattern ppc64_standard_linkage7[]
struct target_section * target_section_by_addr(struct target_ops *target, CORE_ADDR addr)
static struct ppc_insn_pattern ppc64_standard_linkage2[]
static CORE_ADDR ppc64_plt_entry_point(struct frame_info *frame, CORE_ADDR plt_off)
int gdbarch_skip_entrypoint_p(struct gdbarch *gdbarch)
static CORE_ADDR ppc64_skip_trampoline_code_1(struct frame_info *frame, CORE_ADDR pc)
CORE_ADDR gdbarch_skip_entrypoint(struct gdbarch *gdbarch, CORE_ADDR ip)
#define insn_xfx(opcd, rts, spr, xo)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
static CORE_ADDR ppc64_standard_linkage1_target(struct frame_info *frame, unsigned int *insn)
static CORE_ADDR ppc64_standard_linkage4_target(struct frame_info *frame, unsigned int *insn)
enum bfd_endian byte_order
struct gdbarch * get_frame_arch(struct frame_info *this_frame)