When compiling with CONFIG_LTO_CLANG_THIN, vmlinux.o has
__irf_[start|end] before the first FILE entry:

$ readelf -sW vmlinux.o
Symbol table '.symtab' contains 597706 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   18 __irf_start
     2: 0000000000000200     0 NOTYPE  LOCAL  DEFAULT   18 __irf_end
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT   17 .text
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT   18 .init.ramfs

This causes klp-build throwing warnings like:

vmlinux.o: warning: objtool: no correlation: __irf_start
vmlinux.o: warning: objtool: no correlation: __irf_end

Fix this by not warn for no correlation before seeing the first FILE
entry.

Signed-off-by: Song Liu <[email protected]>
---
 tools/objtool/klp-diff.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tools/objtool/klp-diff.c b/tools/objtool/klp-diff.c
index d94531e3f64e..370e5c79ae66 100644
--- a/tools/objtool/klp-diff.c
+++ b/tools/objtool/klp-diff.c
@@ -363,6 +363,7 @@ static int correlate_symbols(struct elfs *e)
 {
        struct symbol *file1_sym, *file2_sym;
        struct symbol *sym1, *sym2;
+       bool found_first_file = false;
 
        /* Correlate locals */
        for (file1_sym = first_file_symbol(e->orig),
@@ -432,9 +433,12 @@ static int correlate_symbols(struct elfs *e)
        }
 
        for_each_sym(e->orig, sym1) {
+               if (!found_first_file && is_file_sym(sym1))
+                       found_first_file = true;
                if (sym1->twin || dont_correlate(sym1))
                        continue;
-               WARN("no correlation: %s", sym1->name);
+               if (found_first_file)
+                       WARN("no correlation: %s", sym1->name);
        }
 
        return 0;
-- 
2.47.3


Reply via email to