X86_PATCH_SIZE
orig_call += X86_PATCH_SIZE;
emit_nops(&prog, X86_PATCH_SIZE);
emit_nops(&prog, X86_PATCH_SIZE);
offset = func - (ip + X86_PATCH_SIZE);
u8 old_insn[X86_PATCH_SIZE];
u8 new_insn[X86_PATCH_SIZE];
memcpy(old_insn, nop_insn, X86_PATCH_SIZE);
memcpy(new_insn, nop_insn, X86_PATCH_SIZE);
if (memcmp(ip, old_insn, X86_PATCH_SIZE))
if (memcmp(ip, new_insn, X86_PATCH_SIZE)) {
smp_text_poke_single(ip, new_insn, X86_PATCH_SIZE, NULL);
poke->tailcall_target = ip + ctx->tail_call_direct_label - X86_PATCH_SIZE;
poke->bypass_addr = (u8 *)poke->tailcall_target + X86_PATCH_SIZE;
emit_jump(&prog, (u8 *)poke->tailcall_target + X86_PATCH_SIZE,
emit_nops(&prog, X86_PATCH_SIZE);
X86_PATCH_SIZE, NULL);