On Mon, 29 Apr 2019 11:06:58 -0700 Linus Torvalds torvalds@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