{ -1, insn_ds (62, 2, 1, 40, 0), 0 }, /* ld r11, <any>(r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, /* addis r12, r12, 1 <optional> */ { insn_d (-1, -1, -1, -1), insn_d (15, 12, 2, 1), 1 }, /* ld r2, <any>(r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 }, /* addis r12, r12, 1 <optional> */ { insn_d (-1, -1, -1, -1), insn_d (15, 12, 2, 1), 1 }, /* mtctr r11 */ { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, /* ld r11, <any>(r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, /* bctr */ { -1, 0x4e800420, 0 }, { 0, 0, 0 } }; #define PPC64_STANDARD_LINKAGE_LEN \ (sizeof (ppc64_standard_linkage) / sizeof (ppc64_standard_linkage[0])) /* When the dynamic linker is doing lazy symbol resolution, the first call to a function in another object will go like this:
{ -1, insn_ds (62, 2, 1, 40, 0), 0 }, /* ld r11, <any>(r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, /* addis r12, r12, 1 <optional> */ { insn_d (-1, -1, -1, -1), insn_d (15, 12, 12, 1), 1 }, /* ld r2, <any>(r12) */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 }, /* addis r12, r12, 1 <optional> */ { insn_d (-1, -1, -1, -1), insn_d (15, 12, 12, 1), 1 }, /* mtctr r11 */ { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, /* ld r11, <any>(r12) <optional> */ { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 }, /* bctr */ { -1, 0x4e800420, 0 }, { 0, 0, 0 } }; /* ELFv1 PLT call stub to access PLT entries more than +/- 32k from r2. Also supports older stub with different placement of std 2,40(1), a stub that omits the std 2,40(1), and both versions of power7 thread safety read barriers. Note that there are actually two more instructions following "cmpldi r2, 0", "bnectr+" and "b <glink_i>",