At thin-lto mode, compilers often promote some static
functions from <foo>() to <foo>.llvm.<...>() to avoid
name conflict. But these <foo>.llvm.<...>() functions
makes live patch difficult and complicated.
Song Liu and I presented what we found in LPC2025.
https://lpc.events/event/19/contributions/2212/
Basically, live patch might cause generating new
functions like <foo>.llvm.<...> and such new functions
do not exist in the kernel without live patch.
This makes things difficult and developers
have to work hard to workaround this to avoid
these new functions.
We did an experiment with a recent kernel with thin-LTO.
There are total 2117 functions like <foo>.llvm.<...>.
All of them are unique without suffix .llvm.<...>.
That is, all these .llvm.<...> suffix can be removed.
In summary, we want to do
<foo>.llvm.<...>() ==> <foo>()
whenever possible.
Of course, it is possible that some of .llvm.<...> suffix
cannot be removed. But based on the above kernel
experiments, the case with needed .llvm.<...> suffix
should be really rare and then live patch will have large
chance to work in most cases at thin-lto mode.
The above LPC2025 link has more details. Can we have a pass
in llvm to check those <foo>.llvm.<...>() functions if it can
be renamed to <foo>() without any conflict? If the rename is
allowed, llvm can do renaming to <foo>() and this will make
live patch easier (best will be similar to non-lto mode).