public inbox for live-patching@vger.kernel.org
 help / color / mirror / Atom feed
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


  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