Skip to content

Commit f2dba60

Browse files
committed
objtool/klp: Fix bug table handling for __WARN_printf()
Running objtool klp-diff on a changed function which uses WARN() can fail with: vmlinux.o: error: objtool: md_run+0x866: failed to convert reloc sym '__bug_table' to its proper format The problem is that since commit 5b472b6 ("x86_64/bug: Implement __WARN_printf()"), each __WARN_printf() call site now directly references its bug table entry. klp-diff errors out when it can't convert such section-based references to object symbols (because bug table entries don't have symbols). Luckily, klp-diff already has code to create symbols for bug table entries. Move that code earlier, before function diffing. Fixes: dd590d4 ("objtool/klp: Introduce klp diff subcommand for diffing object files") Fixes: 5b472b6 ("x86_64/bug: Implement __WARN_printf()") Reported-by: Song Liu <song@kernel.org> Tested-by: Song Liu <song@kernel.org> Link: https://patch.msgid.link/a8e0a714b9da962858842b9aecd63b4900927c88.1769406850.git.jpoimboe@kernel.org Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
1 parent d107b32 commit f2dba60

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

tools/objtool/klp-diff.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,9 +1425,6 @@ static int clone_special_sections(struct elfs *e)
14251425
{
14261426
struct section *patched_sec;
14271427

1428-
if (create_fake_symbols(e->patched))
1429-
return -1;
1430-
14311428
for_each_sec(e->patched, patched_sec) {
14321429
if (is_special_section(patched_sec)) {
14331430
if (clone_special_section(e, patched_sec))
@@ -1704,6 +1701,17 @@ int cmd_klp_diff(int argc, const char **argv)
17041701
if (!e.out)
17051702
return -1;
17061703

1704+
/*
1705+
* Special section fake symbols are needed so that individual special
1706+
* section entries can be extracted by clone_special_sections().
1707+
*
1708+
* Note the fake symbols are also needed by clone_included_functions()
1709+
* because __WARN_printf() call sites add references to bug table
1710+
* entries in the calling functions.
1711+
*/
1712+
if (create_fake_symbols(e.patched))
1713+
return -1;
1714+
17071715
if (clone_included_functions(&e))
17081716
return -1;
17091717

0 commit comments

Comments
 (0)