On Fri, May 1, 2026 at 5:09 AM Josh Poimboeuf <[email protected]> wrote:
>
> Rewrite the symbol correlation code, using a tiered list of
> deterministic strategies in a loop.  For duplicately named symbols, each
> tier applies a filter with the goal of finding a 1:1 deterministic
> correlation between the original and patched version of the symbol.
>
> The three matching strategies are:
>
>   find_twin(): A funnel of progressively tighter filters.  Candidates
>   with the same demangled name are counted at four levels: name, scope
>   (local-vs-global), file (strict file association), and checksum
>   (unchanged functions).  The widest level that yields a 1:1 match wins,
>   narrower levels are only tried when the wider level is ambiguous.
>
>   find_twin_suffixed(): Uses already-correlated LLVM symbol pairs to map
>   .llvm.<hash> suffixes from orig to patched.  Because all promoted
>   symbols from the same TU share the same hash, one correlated pair
>   seeds the mapping for the entire TU.
>
>   find_twin_positional(): Last resort, matches symbols by position among
>   same-named candidates, similar to livepatch sympos.  Used for data
>   objects like __quirk variables where no deterministic filter can
>   distinguish the candidates.
>
> Overall this works much better than the existing algorithm, particularly
> with LTO kernels.
>
> Signed-off-by: Josh Poimboeuf <[email protected]>

Acked-by: Song Liu <[email protected]>

Thanks for improving the correlation algorithm and adding detailed
comments about all these scenarios!

Reply via email to