On Fri, Dec 11, 2020 at 10:46:23AM -0800, Sami Tolvanen wrote: > With CONFIG_LTO_CLANG, LLVM bitcode has not yet been compiled into a > binary when the .mod files are generated, which means they don't yet > contain references to certain symbols that will be present in the final > binaries. This includes intrinsic functions, such as memcpy, memmove, > and memset [1], and stack protector symbols [2]. This change adds a > default symbol list to use with CONFIG_TRIM_UNUSED_KSYMS when Clang's > LTO is used. > > [1] https://llvm.org/docs/LangRef.html#standard-c-c-library-intrinsics > [2] https://llvm.org/docs/LangRef.html#llvm-stackprotector-intrinsic > > Signed-off-by: Sami Tolvanen <samitolvanen@xxxxxxxxxx> Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> > --- > init/Kconfig | 1 + > scripts/lto-used-symbollist | 5 +++++ > 2 files changed, 6 insertions(+) > create mode 100644 scripts/lto-used-symbollist > > diff --git a/init/Kconfig b/init/Kconfig > index 0872a5a2e759..e88c919c1bf1 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -2297,6 +2297,7 @@ config TRIM_UNUSED_KSYMS > config UNUSED_KSYMS_WHITELIST > string "Whitelist of symbols to keep in ksymtab" > depends on TRIM_UNUSED_KSYMS > + default "scripts/lto-used-symbollist" if LTO_CLANG > help > By default, all unused exported symbols will be un-exported from the > build when TRIM_UNUSED_KSYMS is selected. > diff --git a/scripts/lto-used-symbollist b/scripts/lto-used-symbollist > new file mode 100644 > index 000000000000..38e7bb9ebaae > --- /dev/null > +++ b/scripts/lto-used-symbollist > @@ -0,0 +1,5 @@ > +memcpy > +memmove > +memset > +__stack_chk_fail > +__stack_chk_guard > -- > 2.29.2.576.ga3fc446d84-goog > bikeshed: Should this filename use some kind of extension, like lto-user-symbols.txt or .list, to make it more human-friendly? -- Kees Cook