On Mon, 29 Apr 2019 11:06:58 -0700
Linus Torvalds <torva...@linux-foundation.org> wrote:

> +void replace_call(void *addr, const void *opcode, size_t len, void *target)
> +{
> +     bp_int3_call_target = target;
> +     bp_int3_call_return = addr + len;
> +     bp_int3_handler_irqoff = emulate_call_irqoff;
> +     text_poke_bp(addr, opcode, len, emulate_call_irqon);
> +}

Note, the function tracer does not use text poke. It does it in batch
mode. It can update over 40,000 calls in one go:

        add int3 breakpoint to all 40,000 call sites.
        sync()
        change the last four bytes of each of those call sites
        sync()
        remove int3 from the 40,000 call site with new call.

It's a bit more intrusive than the static call updates we were
discussing before.

-- Steve

Reply via email to