From: Josh Poimboeuf <jpoimboe@kernel.org>
To: x86@kernel.org
Cc: linux-kernel@vger.kernel.org, live-patching@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
Joe Lawrence <joe.lawrence@redhat.com>,
Song Liu <song@kernel.org>, Miroslav Benes <mbenes@suse.cz>,
Petr Mladek <pmladek@suse.com>
Subject: [PATCH 46/48] objtool/klp: Make function prefix handling more generic
Date: Wed, 22 Apr 2026 21:04:14 -0700 [thread overview]
Message-ID: <666c12d66a3bc3c628a265da67801090132956ca.1776916871.git.jpoimboe@kernel.org> (raw)
In-Reply-To: <cover.1776916871.git.jpoimboe@kernel.org>
The way x86 klp-diff handles function prefix symbols is a bit awkward,
Also, x86 is the only arch which needs the __pfx_/cfi_ prefix symbols,
so this approach isn't extensible to other arches. And while other
arches *do* use __patchable_function_entries (PFEs), they use them in
completely different ways.
In preparation for supporting other arches, use a more generic approach
that will work for all arches with prefixed areas and/or PFE sections.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
---
tools/objtool/include/objtool/elf.h | 15 +--
tools/objtool/klp-diff.c | 187 ++++++++++++++++++++++++----
2 files changed, 161 insertions(+), 41 deletions(-)
diff --git a/tools/objtool/include/objtool/elf.h b/tools/objtool/include/objtool/elf.h
index ba13dd67cf26..21441bd72971 100644
--- a/tools/objtool/include/objtool/elf.h
+++ b/tools/objtool/include/objtool/elf.h
@@ -119,6 +119,7 @@ struct elf {
struct list_head sections;
struct list_head symbols;
unsigned long num_relocs;
+ int pfe_offset;
int symbol_bits;
int symbol_name_bits;
@@ -532,20 +533,6 @@ static inline void set_sym_next_reloc(struct reloc *reloc, struct reloc *next)
reloc && reloc_offset(reloc) < sym->offset + sym->len; \
reloc = rsec_next_reloc(sym->sec->rsec, reloc))
-static inline struct symbol *get_func_prefix(struct symbol *func)
-{
- struct symbol *prev;
-
- if (!is_func_sym(func))
- return NULL;
-
- prev = sec_prev_sym(func);
- if (prev && is_prefix_func(prev))
- return prev;
-
- return NULL;
-}
-
#define OFFSET_STRIDE_BITS 4
#define OFFSET_STRIDE (1UL << OFFSET_STRIDE_BITS)
#define OFFSET_STRIDE_MASK (~(OFFSET_STRIDE - 1))
diff --git a/tools/objtool/klp-diff.c b/tools/objtool/klp-diff.c
index acb76aefd04f..420d05633aba 100644
--- a/tools/objtool/klp-diff.c
+++ b/tools/objtool/klp-diff.c
@@ -213,6 +213,88 @@ static int read_sym_checksums(struct elf *elf)
return 0;
}
+/*
+ * Detect the offset from the function entry point to its
+ * __patchable_function_entries (PFE) relocation target.
+ *
+ * offset < 0 (before function entry):
+ *
+ * CONFIG_FINEIBT (x86)
+ * CONFIG_MITIGATION_CALL_DEPTH_TRACKING (x86)
+ */
+static int read_pfe_offset(struct elf *elf)
+{
+ bool has_pfe = false;
+ struct section *sec;
+
+ for_each_sec(elf, sec) {
+ struct reloc *reloc;
+
+ if (strcmp(sec->name, "__patchable_function_entries"))
+ continue;
+ if (!sec->rsec)
+ continue;
+
+ has_pfe = true;
+
+ for_each_reloc(sec->rsec, reloc) {
+ unsigned long target = reloc->sym->offset + reloc_addend(reloc);
+ struct symbol *func;
+
+ func = find_func_containing(reloc->sym->sec, target);
+ if (func) {
+ if (is_prefix_func(func))
+ elf->pfe_offset = target - (func->offset + func->len);
+ else
+ elf->pfe_offset = target - func->offset;
+ return 0;
+ }
+ }
+ }
+
+ if (has_pfe) {
+ ERROR("can't find __patchable_function_entries offset");
+ return -1;
+ }
+
+ return 0;
+}
+
+/*
+ * Detect the size of the area before a function's entry point. This prefix
+ * area is used for CFI type hashes, call thunks, or ftrace call ops.
+ *
+ * __pfx_ prefix function (x86):
+ *
+ * CONFIG_MITIGATION_CALL_DEPTH_TRACKING
+ *
+ * __cfi_ prefix function (x86):
+ *
+ * CONFIG_CFI
+ */
+static unsigned long func_pfx_size(struct elf *elf, struct symbol *func)
+{
+ struct symbol *pfx;
+
+ /* x86 __pfx_ and/or __cfi_ */
+ if (func->offset) {
+ pfx = find_func_containing(func->sec, func->offset - 1);
+ if (pfx && pfx->prefix) {
+ struct symbol *pfx2;
+
+ /* FineIBT has both */
+ if (pfx->offset) {
+ pfx2 = find_func_containing(func->sec, pfx->offset - 1);
+ if (pfx2 && pfx2->prefix)
+ pfx = pfx2;
+ }
+
+ return func->offset - pfx->offset;
+ }
+ }
+ return 0;
+}
+
static struct symbol *first_file_symbol(struct elf *elf)
{
struct symbol *sym;
@@ -302,6 +384,7 @@ static bool is_special_section(struct section *sec)
"__ex_table",
"__jump_table",
"__mcount_loc",
+ "__patchable_function_entries",
/*
* Extract .static_call_sites here to inherit non-module
@@ -872,7 +955,7 @@ static struct symbol *__clone_symbol(struct elf *elf, struct symbol *patched_sym
bool data_too)
{
struct section *out_sec = NULL;
- unsigned long offset = 0;
+ unsigned long offset = 0, pfx_size = 0;
struct symbol *out_sym;
if (data_too && !is_undef_sym(patched_sym)) {
@@ -901,20 +984,26 @@ static struct symbol *__clone_symbol(struct elf *elf, struct symbol *patched_sym
offset = ALIGN(sec_size(out_sec), out_sec->sh.sh_addralign);
if (patched_sym->len || is_sec_sym(patched_sym)) {
- void *data = NULL;
size_t size;
+ void *data = NULL;
+
+ /* Clone function prefix area */
+ if (is_func_sym(patched_sym))
+ pfx_size = func_pfx_size(elf, patched_sym);
/* bss doesn't have data */
if (patched_sym->sec->data && patched_sym->sec->data->d_buf)
- data = patched_sym->sec->data->d_buf + patched_sym->offset;
+ data = patched_sym->sec->data->d_buf + patched_sym->offset - pfx_size;
if (is_sec_sym(patched_sym))
size = sec_size(patched_sym->sec);
else
- size = patched_sym->len;
+ size = patched_sym->len + pfx_size;
if (!elf_add_data(elf, out_sec, data, size))
return NULL;
+
+ offset += pfx_size;
}
}
@@ -924,6 +1013,23 @@ static struct symbol *__clone_symbol(struct elf *elf, struct symbol *patched_sym
if (!out_sym)
return NULL;
+ /*
+ * The copied prefixed area may have had a __cfi_ symbol which needs to
+ * be copied. During the module link, objtool collates these in a
+ * .cfi_sites section for FineIBT.
+ */
+ if (pfx_size && is_func_sym(patched_sym)) {
+ struct symbol *cfi_sym;
+
+ cfi_sym = find_func_containing(patched_sym->sec, patched_sym->offset - pfx_size);
+ if (cfi_sym && strstarts(cfi_sym->name, "__cfi_")) {
+ if (!elf_create_symbol(elf, cfi_sym->name, out_sec,
+ cfi_sym->bind, cfi_sym->type,
+ offset - pfx_size, cfi_sym->len))
+ return NULL;
+ }
+ }
+
sym_created:
patched_sym->clone = out_sym;
out_sym->clone = patched_sym;
@@ -960,20 +1066,11 @@ static const char *sym_bind(struct symbol *sym)
static struct symbol *clone_symbol(struct elfs *e, struct symbol *patched_sym,
bool data_too)
{
- struct symbol *pfx;
-
if (patched_sym->clone)
return patched_sym->clone;
dbg_clone("%s%s", patched_sym->name, data_too ? " [+DATA]" : "");
- /* Make sure the prefix gets cloned first */
- if (is_func_sym(patched_sym) && data_too) {
- pfx = get_func_prefix(patched_sym);
- if (pfx)
- clone_symbol(e, pfx, true);
- }
-
if (!__clone_symbol(e->out, patched_sym, data_too))
return NULL;
@@ -985,15 +1082,8 @@ static struct symbol *clone_symbol(struct elfs *e, struct symbol *patched_sym,
static void mark_included_function(struct symbol *func)
{
- struct symbol *pfx;
-
func->included = 1;
- /* Include prefix function */
- pfx = get_func_prefix(func);
- if (pfx)
- pfx->included = 1;
-
/* Make sure .cold parent+child always stay together */
if (func->cfunc && func->cfunc != func)
func->cfunc->included = 1;
@@ -1222,17 +1312,37 @@ static int convert_reloc_sym_to_secsym(struct elf *elf, struct reloc *reloc)
return 0;
}
+/*
+ * __patchable_function_entries relocs point to the patchable entry NOPs,
+ * which are at 'pfe_offset' bytes from the function symbol.
+ *
+ * Some entries (e.g., removed weak functions, syscall -ENOSYS stubs) don't
+ * have a corresponding function symbol. Skip those with a return value of 1.
+ */
+static int convert_pfe_reloc(struct elf *elf, struct reloc *reloc)
+{
+ struct symbol *func;
+
+ func = find_func_by_offset(reloc->sym->sec,
+ reloc->sym->offset +
+ reloc_addend(reloc) - elf->pfe_offset);
+ if (!func)
+ return 1;
+
+ reloc->sym = func;
+ set_reloc_sym(elf, reloc, func->idx);
+ set_reloc_addend(elf, reloc, elf->pfe_offset);
+ return 0;
+}
+
static int convert_reloc_secsym_to_sym(struct elf *elf, struct reloc *reloc)
{
struct symbol *sym = reloc->sym;
struct section *sec = sym->sec;
- /* If the symbol has a dedicated section, it's easy to find */
- sym = find_symbol_by_offset(sec, 0);
- if (sym && sym->len == sec_size(sec))
- goto found_sym;
+ if (!strcmp(reloc->sec->name, ".rela__patchable_function_entries"))
+ return convert_pfe_reloc(elf, reloc);
- /* No dedicated section; find the symbol manually */
sym = find_symbol_containing(sec, arch_adjusted_addend(reloc));
if (!sym) {
/*
@@ -1249,7 +1359,6 @@ static int convert_reloc_secsym_to_sym(struct elf *elf, struct reloc *reloc)
return -1;
}
-found_sym:
reloc->sym = sym;
set_reloc_sym(elf, reloc, sym->idx);
set_reloc_addend(elf, reloc, reloc_addend(reloc) - sym->offset);
@@ -1802,6 +1911,9 @@ static int validate_special_section_klp_reloc(struct elfs *e, struct symbol *sym
static int clone_special_section(struct elfs *e, struct section *patched_sec)
{
+ bool is_pfe = !strcmp(patched_sec->name, "__patchable_function_entries");
+ struct section *out_sec = NULL;
+ struct reloc *patched_reloc;
struct symbol *patched_sym;
/*
@@ -1809,6 +1921,7 @@ static int clone_special_section(struct elfs *e, struct section *patched_sec)
* reference included functions.
*/
sec_for_each_sym(patched_sec, patched_sym) {
+ struct symbol *out_sym;
int ret;
if (!is_object_sym(patched_sym))
@@ -1823,8 +1936,23 @@ static int clone_special_section(struct elfs *e, struct section *patched_sec)
if (ret > 0)
continue;
- if (!clone_symbol(e, patched_sym, true))
+ out_sym = clone_symbol(e, patched_sym, true);
+ if (!out_sym)
return -1;
+
+ if (!is_pfe || (out_sec && out_sec->sh.sh_link))
+ continue;
+
+ /*
+ * For reasons, the patched object has multiple PFE sections,
+ * but we only need to create one combined section for the
+ * output. Link the single PFE ouput section to a random text
+ * section to satisfy the linker for SHF_LINK_ORDER.
+ */
+ out_sec = out_sym->sec;
+ patched_reloc = find_reloc_by_dest(e->patched, patched_sec,
+ patched_sym->offset);
+ out_sec->sh.sh_link = patched_reloc->sym->clone->sec->idx;
}
return 0;
@@ -2121,6 +2249,9 @@ int cmd_klp_diff(int argc, const char **argv)
if (read_sym_checksums(e.patched))
return -1;
+ if (read_pfe_offset(e.patched))
+ return -1;
+
if (correlate_symbols(&e))
return -1;
@@ -2134,6 +2265,8 @@ int cmd_klp_diff(int argc, const char **argv)
if (!e.out)
return -1;
+ e.out->pfe_offset = e.patched->pfe_offset;
+
/*
* Special section fake symbols are needed so that individual special
* section entries can be extracted by clone_special_sections().
--
2.53.0
next prev parent reply other threads:[~2026-04-23 4:04 UTC|newest]
Thread overview: 153+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-23 4:03 [PATCH 00/48] objtool/klp: Some klp-build fixes and improvements Josh Poimboeuf
2026-04-23 4:03 ` [PATCH 01/48] objtool/klp: Fix is_uncorrelated_static_local() for Clang Josh Poimboeuf
2026-04-23 18:45 ` Song Liu
2026-04-24 9:17 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 02/48] objtool/klp: Fix .data..once static local non-correlation Josh Poimboeuf
2026-04-23 18:54 ` Song Liu
2026-04-23 23:34 ` Josh Poimboeuf
2026-04-23 23:54 ` Song Liu
2026-04-24 9:21 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 03/48] objtool/klp: Don't correlate __ADDRESSABLE() symbols Josh Poimboeuf
2026-04-24 9:23 ` Miroslav Benes
2026-04-24 9:34 ` Miroslav Benes
2026-04-27 19:00 ` Josh Poimboeuf
2026-04-28 6:35 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 04/48] objtool/klp: Ignore __UNIQUE_ID_*() PCI stub functions Josh Poimboeuf
2026-04-23 19:05 ` Song Liu
2026-04-23 19:31 ` Josh Poimboeuf
2026-04-23 21:33 ` Song Liu
2026-04-23 23:50 ` Josh Poimboeuf
2026-04-23 23:54 ` Song Liu
2026-04-24 11:26 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 05/48] objtool: Move mark_rodata() to elf.c Josh Poimboeuf
2026-04-23 8:19 ` Peter Zijlstra
2026-04-24 11:36 ` Miroslav Benes
2026-04-24 20:41 ` Song Liu
2026-04-23 4:03 ` [PATCH 06/48] objtool/klp: Don't correlate rodata symbols Josh Poimboeuf
2026-04-24 11:54 ` Miroslav Benes
2026-04-28 15:46 ` Josh Poimboeuf
2026-04-23 4:03 ` [PATCH 07/48] objtool/klp: Don't correlate absolute symbols Josh Poimboeuf
2026-04-24 12:04 ` Miroslav Benes
2026-04-24 20:56 ` Song Liu
2026-04-23 4:03 ` [PATCH 08/48] objtool/klp: Don't correlate __initstub__ symbols Josh Poimboeuf
2026-04-24 12:17 ` Miroslav Benes
2026-04-24 20:57 ` Song Liu
2026-04-23 4:03 ` [PATCH 09/48] objtool/klp: Fix create_fake_symbols() skipping entsize-based sections Josh Poimboeuf
2026-04-24 21:00 ` Song Liu
2026-04-28 11:45 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 10/48] objtool/klp: Fix --debug-checksum for duplicate symbol names Josh Poimboeuf
2026-04-24 21:06 ` Song Liu
2026-04-28 12:12 ` Miroslav Benes
2026-04-28 16:30 ` Josh Poimboeuf
2026-04-23 4:03 ` [PATCH 11/48] objtool/klp: Fix handling of zero-length .altinstr_replacement sections Josh Poimboeuf
2026-04-24 21:19 ` Song Liu
2026-04-28 15:49 ` Josh Poimboeuf
2026-04-28 12:12 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 12/48] objtool/klp: Fix cloning of zero-length section symbols Josh Poimboeuf
2026-04-24 21:24 ` Song Liu
2026-04-28 12:42 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 13/48] objtool/klp: Fix XXH3 state memory leak Josh Poimboeuf
2026-04-24 21:28 ` Song Liu
2026-04-28 12:42 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 14/48] objtool/klp: Fix extraction of text annotations for alternatives Josh Poimboeuf
2026-04-24 21:37 ` Song Liu
2026-04-28 12:42 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 15/48] objtool/klp: Fix kCFI trap handling Josh Poimboeuf
2026-04-24 21:38 ` Song Liu
2026-04-28 12:42 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 16/48] objtool/klp: Fix relocation conversion failures for R_X86_64_NONE Josh Poimboeuf
2026-04-24 21:35 ` Song Liu
2026-04-28 12:42 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 17/48] objtool: Fix reloc hash collision in find_reloc_by_dest_range() Josh Poimboeuf
2026-04-23 8:32 ` Peter Zijlstra
2026-04-23 16:34 ` Josh Poimboeuf
2026-04-24 21:47 ` Song Liu
2026-04-28 12:42 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 18/48] klp-build: Fix hang on out-of-date .config Josh Poimboeuf
2026-04-24 21:51 ` Song Liu
2026-04-28 15:57 ` Josh Poimboeuf
2026-04-23 4:03 ` [PATCH 19/48] klp-build: Fix checksum comparison for changed offsets Josh Poimboeuf
2026-04-23 4:03 ` [PATCH 20/48] klp-build: Don't use errexit Josh Poimboeuf
2026-04-24 22:07 ` Song Liu
2026-04-30 6:50 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 21/48] klp-build: Validate patch file existence Josh Poimboeuf
2026-04-24 21:53 ` Song Liu
2026-04-30 6:50 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 22/48] klp-build: Suppress excessive fuzz output by default Josh Poimboeuf
2026-04-24 21:54 ` Song Liu
2026-04-30 7:00 ` Miroslav Benes
2026-04-23 4:03 ` [PATCH 23/48] klp-build: Fix patch cleanup on interrupt Josh Poimboeuf
2026-04-24 21:56 ` Song Liu
2026-04-23 4:03 ` [PATCH 24/48] klp-build: Reject patches to vDSO Josh Poimboeuf
2026-04-24 21:57 ` Song Liu
2026-04-23 4:03 ` [PATCH 25/48] klp-build: Reject patches to realmode Josh Poimboeuf
2026-04-24 21:57 ` Song Liu
2026-04-23 4:03 ` [PATCH 26/48] objtool/klp: Don't set sym->file for section symbols Josh Poimboeuf
2026-04-23 8:34 ` Peter Zijlstra
2026-04-24 21:58 ` Song Liu
2026-04-23 4:03 ` [PATCH 27/48] objtool: Include libsubcmd headers directly from source tree Josh Poimboeuf
2026-04-24 21:59 ` Song Liu
2026-04-23 4:03 ` [PATCH 28/48] objtool/klp: Create empty checksum sections for function-less object files Josh Poimboeuf
2026-04-24 22:08 ` Song Liu
2026-04-23 4:03 ` [PATCH 29/48] klp-build: Print "objtool klp diff" command in verbose mode Josh Poimboeuf
2026-04-24 22:02 ` Song Liu
2026-04-23 4:03 ` [PATCH 30/48] objtool/klp: Handle Clang .data..Lanon anonymous data sections Josh Poimboeuf
2026-04-24 22:09 ` Song Liu
2026-04-23 4:03 ` [PATCH 31/48] objtool: Add is_alias_sym() helper Josh Poimboeuf
2026-04-23 8:35 ` Peter Zijlstra
2026-04-24 22:10 ` Song Liu
2026-04-23 4:04 ` [PATCH 32/48] objtool: Add is_cold_func() helper Josh Poimboeuf
2026-04-23 8:38 ` Peter Zijlstra
2026-04-23 15:12 ` Josh Poimboeuf
2026-04-23 15:14 ` Peter Zijlstra
2026-04-23 19:23 ` Josh Poimboeuf
2026-04-23 4:04 ` [PATCH 33/48] objtool/klp: Extricate checksum calculation from validate_branch() Josh Poimboeuf
2026-04-24 22:14 ` Song Liu
2026-04-23 4:04 ` [PATCH 34/48] objtool: Consolidate file decoding into decode_file() Josh Poimboeuf
2026-04-23 8:41 ` Peter Zijlstra
2026-04-24 22:16 ` Song Liu
2026-04-23 4:04 ` [PATCH 35/48] objtool/klp: Add "objtool klp checksum" subcommand Josh Poimboeuf
2026-04-24 22:18 ` Song Liu
2026-04-23 4:04 ` [PATCH 36/48] klp-build: Use " Josh Poimboeuf
2026-04-24 22:24 ` Song Liu
2026-04-23 4:04 ` [PATCH 37/48] objtool/klp: Remove "objtool --checksum" Josh Poimboeuf
2026-04-24 22:25 ` Song Liu
2026-04-23 4:04 ` [PATCH 38/48] klp-build: Validate short-circuit prerequisites Josh Poimboeuf
2026-04-25 0:06 ` Song Liu
2026-04-28 16:19 ` Josh Poimboeuf
2026-04-23 4:04 ` [PATCH 39/48] objtool: Replace iterator callbacks with for_each_sym_by_*() Josh Poimboeuf
2026-04-25 0:04 ` Song Liu
2026-04-28 16:14 ` Josh Poimboeuf
2026-04-23 4:04 ` [PATCH 40/48] objtool/klp: Calculate object checksums Josh Poimboeuf
2026-04-23 4:04 ` [PATCH 41/48] objtool/klp: Rewrite symbol correlation algorithm Josh Poimboeuf
2026-04-25 0:53 ` Song Liu
2026-04-28 16:23 ` Josh Poimboeuf
2026-04-28 20:50 ` Song Liu
2026-04-30 14:53 ` Josh Poimboeuf
2026-04-30 15:11 ` Song Liu
2026-04-23 4:04 ` [PATCH 42/48] objtool/klp: Add correlation debugging output Josh Poimboeuf
2026-04-25 0:30 ` Song Liu
2026-04-23 4:04 ` [PATCH 43/48] objtool: Add insn_sym() helper Josh Poimboeuf
2026-04-23 8:45 ` Peter Zijlstra
2026-04-23 15:14 ` Josh Poimboeuf
2026-04-23 4:04 ` [PATCH 44/48] objtool/klp: Fix position-dependent checksums for non-relocated jumps/calls Josh Poimboeuf
2026-04-23 4:04 ` [PATCH 45/48] x86/Kconfig: Enable CONFIG_PREFIX_SYMBOLS for FineIBT Josh Poimboeuf
2026-04-23 8:47 ` Peter Zijlstra
2026-04-23 15:16 ` Josh Poimboeuf
2026-04-23 15:19 ` Peter Zijlstra
2026-04-23 16:23 ` Josh Poimboeuf
2026-04-23 16:29 ` Peter Zijlstra
2026-04-24 9:02 ` David Laight
2026-04-23 23:30 ` Josh Poimboeuf
2026-04-24 3:38 ` Josh Poimboeuf
2026-04-24 9:45 ` Peter Zijlstra
2026-04-27 17:17 ` Josh Poimboeuf
2026-04-28 1:37 ` David Laight
2026-04-28 16:25 ` Josh Poimboeuf
2026-04-23 4:04 ` Josh Poimboeuf [this message]
2026-04-23 4:04 ` [PATCH 47/48] objtool: Improve and simplify prefix symbol detection Josh Poimboeuf
2026-04-23 8:55 ` Peter Zijlstra
2026-04-23 15:19 ` Josh Poimboeuf
2026-04-23 15:21 ` Peter Zijlstra
2026-04-23 4:04 ` [PATCH 48/48] objtool/klp: Cache dont_correlate() result Josh Poimboeuf
2026-04-25 1:19 ` Song Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=666c12d66a3bc3c628a265da67801090132956ca.1776916871.git.jpoimboe@kernel.org \
--to=jpoimboe@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=song@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox