uretprobes/x86: hijack return address

Function to hijack the return address, replace it with a "trampoline"
and function to predict the stack pointer address value at return.

Signed-off-by: Anton Arapov <anton@redhat.com>
uretprobes: trampoline implementation

The first time a uprobe with return consumer is hit for a process, a
trampoline slot is obtained in the xol_area and initialized with a
breakpoint instruction. This slot is subsequently used by all
uretprobes.

Signed-off-by: Anton Arapov <anton@redhat.com>
uretprobes: return probe entry, prepare uretprobe

When a uprobe with return consumer is hit, prepare_uretprobe function is
invoked. It creates return_instance, hijacks return address and replaces
it with the trampoline.

Signed-off-by: Anton Arapov <anton@redhat.com>
uretprobes: invoke return probe handlers

uretprobe handlers are invoked when the trampoline is hit, on completion
the trampoline is replaced with the saved return address and the
uretprobe instance deleted.

Signed-off-by: Anton Arapov <anton@redhat.com>