Messages in this thread | | | Date | Thu, 29 Jul 2021 17:29:04 +0200 | From | Padmanabha Srinivasaiah <> | Subject | Re: [PATCH v2] kallsyms: strip ThinLTO postfix ".cfi_jt" |
| |
On Wed, Jul 28, 2021 at 01:57:21PM -0700, Sami Tolvanen wrote: > Hi, > > On Tue, Jul 27, 2021 at 7:07 AM Padmanabha Srinivasaiah > <treasure4paddy@gmail.com> wrote: > > > > Clang ThinLTO adds a postfix ".cfi_jt" to a symbols of extern functions. > > These symbols are added with CONFIG_CFI_CLANG no matter which LTO mode > is selected, so talking about ThinLTO here isn't quite correct. > Yes, checked irrespective of the LTO mode choosen ".cfi_jt" postfix is added with CONFIG_CFI_CLANG flag. Thanks for correcting out, will make neccessary changes.
> > For example this breaks syscall tracer that doesn't expect such postfix, > > so strip out the postfix from the output. > > > > Signed-off-by: Padmanabha Srinivasaiah <treasure4paddy@gmail.com> > > --- > > Change in v2: > > - Use existing routine in kallsyms to strip postfix ".cfi_jt" from > > extern function name. > > - Modified the commit message accordingly > > > > kernel/kallsyms.c | 12 ++++++++---- > > 1 file changed, 8 insertions(+), 4 deletions(-) > > > > diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c > > index 0ba87982d017..e9148626ae6c 100644 > > --- a/kernel/kallsyms.c > > +++ b/kernel/kallsyms.c > > @@ -166,16 +166,20 @@ static unsigned long kallsyms_sym_address(int idx) > > > > #if defined(CONFIG_CFI_CLANG) && defined(CONFIG_LTO_CLANG_THIN) > > /* > > - * LLVM appends a hash to static function names when ThinLTO and CFI are > > - * both enabled, i.e. foo() becomes foo$707af9a22804d33c81801f27dcfe489b. > > - * This causes confusion and potentially breaks user space tools, so we > > - * strip the suffix from expanded symbol names. > > + * LLVM appends a hash to static function names and just ".cfi_jt" postfix > > + * for non-static functions when both ThinLTO and CFI are enabled, > > Functions aren't technically speaking renamed to add a .cfi_jt > postfix. Instead, these are separate symbols that point to the CFI > jump table. Perhaps the comment should just say that we want to strip > .cfi_jt from CFI jump table symbols? >
Agree, in jest modified existing comment. Will address same.
> > + * i.e. for example foo() becomes foo$707af9a22804d33c81801f27dcfe489b. > > + * This causes confusion and potentially breaks user space tools and > > + * built-in components, so we strip the suffix from expanded symbol names. > > */ > > static inline bool cleanup_symbol_name(char *s) > > { > > char *res; > > > > res = strrchr(s, '$'); > > + if (!res) > > + res = strstr(s, ".cfi_jt"); > > + > > if (res) > > *res = '\0'; > > This looks otherwise fine to me, but it's going to conflict with > Nick's earlier patch: > > https://lore.kernel.org/lkml/20210707181814.365496-1-ndesaulniers@google.com/ > > Could you please rebase this on top of that, and take into account > that we should do this when CONFIG_LTO_CLANG is enabled, not only with > LTO_CLANG_THIN? >
Thanks Sami for pointing out the link, will rebase and refactor the change.
> Sami
| |