On Tue, Oct 26, 2021 at 5:05 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > Hi, > > These patches rewrite the way retpolines are rewritten. Currently objtool emits > alternative entries for most retpoline calls. However trying to extend that led > to trouble (ELF files are horrid). > > Therefore completely overhaul this and have objtool emit a .retpoline_sites > section that lists all compiler generated retpoline thunk calls. Then the > kernel can do with them as it pleases. > > Notably it will: > > - rewrite them to indirect instructions for !RETPOLINE > - rewrite them to lfence; indirect; for RETPOLINE_AMD, > where size allows (boo clang!) > > Specifically, the !RETPOLINE case can now also deal with the clang-special > conditional-indirect-tail-call: > > Jcc __x86_indirect_thunk_\reg. > > Finally, also update the x86 BPF jit to catch up to recent times and do these > same things. > > All this should help improve performance by removing an indirection. > > Patches can (soon) be found here: > > git://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git objtool/core > > Changes since v2: > > - rewrite the __x86_indirect_thunk_array[] stuff again > - rewrite the retpoline,amd rewrite logic, it now also supports > rewriting the Jcc case, if the original instruction is long enough, but > more importantly, it's simpler code. > - bpf label simplification patch > - random assorted cleanups > - actually managed to get bpf selftests working Great. The patchset didn't go through BPF CI though. See https://patchwork.kernel.org/project/netdevbpf/patch/20211026120309.658539311@xxxxxxxxxxxxx/ It's a merge conflict. The patchset failed to apply to both bpf and bpf-next trees: Cmd('git') failed due to: exit code(128) cmdline: git am -3 stdout: 'Applying: objtool: Classify symbols Patch failed at 0001 objtool: Classify symbols When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort".' stderr: 'error: sha1 information is lacking or useless (tools/objtool/check.c). error: could not build fake ancestor hint: Use 'git am --show-current-patch=diff' to see the failed patch'