Thread (16 messages) 16 messages, 8 authors, 2024-08-30

Re: [PATCH v3 0/2] Fix kallsyms with CONFIG_LTO_CLANG

From: Song Liu <hidden>
Date: 2024-08-13 21:20:53
Also in: live-patching, lkml

Hi Masami, 

Thanks for your review and test!

@Sami, could you please also review the set?

@Luis, I replied to 1/2 and 2/2 with Fixes tags that I think make most 
sense. Please let me know if we need changes to the set or more reviews
and tests. 

Thanks,
Song
On Aug 12, 2024, at 9:29 PM, Masami Hiramatsu [off-list ref] wrote:

On Wed,  7 Aug 2024 15:05:11 -0700
Song Liu [off-list ref] wrote:
quoted
With CONFIG_LTO_CLANG, the compiler/linker adds .llvm.<hash> suffix to
local symbols to avoid duplications. Existing scripts/kallsyms sorts
symbols without .llvm.<hash> suffix. However, this causes quite some
issues later on. Some users of kallsyms, such as livepatch, have to match
symbols exactly.

Address this by sorting full symbols at build time, and let kallsyms
lookup APIs to match the symbols exactly.
I've tested this series and confirmed it makes kprobes work with llvm suffixed
symbols.

/sys/kernel/tracing # echo "p c_start.llvm.8011538628216713357" >> kprobe_events
/sys/kernel/tracing # cat kprobe_events 
p:kprobes/p_c_start_llvm_8011538628216713357_0 c_start.llvm.8011538628216713357
/sys/kernel/tracing # echo "p c_start" >> kprobe_events 
/sys/kernel/tracing # cat kprobe_events 
p:kprobes/p_c_start_llvm_8011538628216713357_0 c_start.llvm.8011538628216713357
p:kprobes/p_c_start_0 c_start

And ftrace too.

/sys/kernel/tracing # grep ^c_start available_filter_functions
c_start.llvm.8011538628216713357
c_start
c_start.llvm.17132674095431275852

Tested-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>

for this series.
quoted
Changes v2 => v3:
1. Remove the _without_suffix APIs, as kprobe will not use them.
  (Masami Hiramatsu)

v2: https://lore.kernel.org/live-patching/20240802210836.2210140-1-song@kernel.org/T/#u (local)

Changes v1 => v2:
1. Update the APIs to remove all .XXX suffixes (v1 only removes .llvm.*).
2. Rename the APIs as *_without_suffix. (Masami Hiramatsu)
3. Fix another user from kprobe. (Masami Hiramatsu)
4. Add tests for the new APIs in kallsyms_selftests.

v1: https://lore.kernel.org/live-patching/20240730005433.3559731-1-song@kernel.org/T/#u (local)

Song Liu (2):
 kallsyms: Do not cleanup .llvm.<hash> suffix before sorting symbols
 kallsyms: Match symbols exactly with CONFIG_LTO_CLANG

kernel/kallsyms.c          | 55 +++++---------------------------------
kernel/kallsyms_selftest.c | 22 +--------------
scripts/kallsyms.c         | 31 ++-------------------
scripts/link-vmlinux.sh    |  4 ---
4 files changed, 9 insertions(+), 103 deletions(-)

--
2.43.5

-- 
Masami Hiramatsu (Google) [off-list ref]
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help