/* If the current thread is about to execute a series of instructions at PC matching the ppc64_standard_linkage pattern, and INSN is the result from that pattern match, return the code address to which the standard linkage function will send them. (This doesn't deal with dynamic linker lazy symbol resolution stubs.) */ static CORE_ADDR ppc64_standard_linkage_target (CORE_ADDR pc, unsigned int *insn) { struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); /* The address of the function descriptor this linkage function references. */ CORE_ADDR desc = ((CORE_ADDR) read_register (tdep->ppc_gp0_regnum + 2) + (insn_d_field (insn[0]) << 16) + insn_ds_field (insn[2])); /* The first word of the descriptor is the entry point. Return that. */ return ppc64_desc_entry_point (desc); }
static CORE_ADDR ppc64_standard_linkage3_target (struct frame_info *frame, CORE_ADDR pc, unsigned int *insn) { struct gdbarch *gdbarch = get_frame_arch (frame); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* The address of the function descriptor this linkage function references. */ CORE_ADDR desc = ((CORE_ADDR) get_frame_register_unsigned (frame, tdep->ppc_gp0_regnum + 2) + ppc_insn_ds_field (insn[1])); /* The first word of the descriptor is the entry point. Return that. */ return ppc64_desc_entry_point (gdbarch, desc); }