bpf: x64: Do not emit sub/add 0, %rsp when !stack_depth
authorMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Tue, 29 Sep 2020 20:46:53 +0000 (22:46 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 29 Sep 2020 23:47:39 +0000 (16:47 -0700)
commit4d0b8c0b46a5e6f23ab8301780d689072c6c91fc
tree8d408caa5ccf28ae27a7004b0c8ada8cc42c7366
parentd207929d97ea028fd5f432c69d69df2f51c6b6c9
bpf: x64: Do not emit sub/add 0, %rsp when !stack_depth

There is no particular reason for keeping the "sub 0, %rsp" insn within
the BPF's x64 JIT prologue.

When tail call code was skipping the whole prologue section these 7
bytes that represent the rsp subtraction could not be simply discarded
as the jump target address would be broken. An option to address that
would be to substitute it with nop7.

Right now tail call is skipping only first 11 bytes of target program's
prologue and "sub X, %rsp" is the first insn that is processed, so if
stack depth is zero then this insn could be omitted without the need for
nop7 swap.

Therefore, do not emit the "sub 0, %rsp" in prologue when program is not
making use of R10 register. Also, make the emission of "add X, %rsp"
conditional in tail call code logic and take into account the presence
of mentioned insn when calculating the jump offsets.

Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200929204653.4325-3-maciej.fijalkowski@intel.com
arch/x86/net/bpf_jit_comp.c