From: Nathan Chancellor <nathan@kernel.org>
To: Josh Poimboeuf <jpoimboe@kernel.org>,
Peter Zijlstra <peterz@infradead.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>,
llvm@lists.linux.dev, linux-kernel@vger.kernel.org,
kasan-dev@googlegroups.com
Subject: objtool "no non-local symbols" error with tip of tree LLVM
Date: Mon, 16 May 2022 13:47:15 -0700 [thread overview]
Message-ID: <YoK4U9RgQ9N+HhXJ@dev-arch.thelio-3990X> (raw)
Hi Josh and Peter,
After a recent change in LLVM [1], I see warnings (errors?) from objtool
when building x86_64 allmodconfig on 5.15 and 5.17:
$ make -skj"$(nproc)" KCONFIG_ALLCONFIG=<(echo CONFIG_WERROR) LLVM=1 allmodconfig all
...
mm/highmem.o: warning: objtool: no non-local symbols !?
mm/highmem.o: warning: objtool: gelf_update_symshndx: invalid section index
make[2]: *** [scripts/Makefile.build:288: mm/highmem.o] Error 255
...
security/tomoyo/load_policy.o: warning: objtool: no non-local symbols !?
security/tomoyo/load_policy.o: warning: objtool: gelf_update_symshndx: invalid section index
make[3]: *** [scripts/Makefile.build:288: security/tomoyo/load_policy.o] Error 255
...
I don't see the same errors on x86_64 allmodconfig on mainline so I
bisected the 5.17 branch and came upon commit 4abff6d48dbc ("objtool:
Fix code relocs vs weak symbols"). I wanted to see what 5.17 might be
missing and came to commit ed53a0d97192 ("x86/alternative: Use
.ibt_endbr_seal to seal indirect calls") in mainline, which I think just
hides the issue for allmodconfig. I can reproduce this problem with a
more selective set of config values on mainline:
$ make -skj"$(nproc)" LLVM=1 defconfig
$ scripts/config -e KASAN -e SECURITY_TOMOYO -e SECURITY_TOMOYO_OMIT_USERSPACE_LOADER
$ make -skj"$(nproc)" LLVM=1 olddefconfig security/tomoyo/load_policy.o
security/tomoyo/load_policy.o: warning: objtool: no non-local symbols !?
security/tomoyo/load_policy.o: warning: objtool: gelf_update_symshndx: invalid section index
make[3]: *** [scripts/Makefile.build:288: security/tomoyo/load_policy.o] Error 255
...
Looking at the object file, the '.text.asan.module_ctor' section has
disappeared.
Before:
$ llvm-nm -S security/tomoyo/load_policy.o
0000000000000000 0000000000000001 t asan.module_ctor
$ llvm-readelf -s security/tomoyo/load_policy.o
Symbol table '.symtab' contains 4 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FILE LOCAL DEFAULT ABS load_policy.c
2: 0000000000000000 0 SECTION LOCAL DEFAULT 3 .text.asan.module_ctor
3: 0000000000000000 1 FUNC LOCAL DEFAULT 3 asan.module_ctor
After:
$ llvm-nm -S security/tomoyo/load_policy.o
0000000000000000 0000000000000001 t asan.module_ctor
$ llvm-readelf -s security/tomoyo/load_policy.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FILE LOCAL DEFAULT ABS load_policy.c
2: 0000000000000000 1 FUNC LOCAL DEFAULT 3 asan.module_ctor
As far as I understand it, the kernel uses constructors for at least
KASAN and KCSAN, hence why that change impacts the kernel. Beyond that,
I am not really sure whether the LLVM change is problematic or objtool
just is not accounting for something that it should. I am happy to
provide any additional information that might help understand what is
going wrong here.
[1]: https://github.com/llvm/llvm-project/commit/badd088c57d7d18acd337b7868fe8c7974c88c5b
Cheers,
Nathan
next reply other threads:[~2022-05-16 20:47 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-16 20:47 Nathan Chancellor [this message]
2022-05-16 21:40 ` objtool "no non-local symbols" error with tip of tree LLVM Peter Zijlstra
2022-05-16 22:48 ` Nathan Chancellor
2022-05-17 15:33 ` Peter Zijlstra
2022-05-17 15:42 ` Peter Zijlstra
2022-05-17 18:53 ` Nathan Chancellor
2022-05-18 1:24 ` Josh Poimboeuf
2022-05-18 5:30 ` Peter Zijlstra
2022-05-18 16:17 ` Josh Poimboeuf
2022-05-18 17:14 ` Josh Poimboeuf
2022-05-18 17:25 ` Peter Zijlstra
2022-05-18 18:04 ` Josh Poimboeuf
2022-05-18 7:40 ` Peter Zijlstra
2022-05-18 7:41 ` [PATCH] objtool: Fix symbol creation Peter Zijlstra
2022-05-18 17:36 ` Josh Poimboeuf
2022-05-18 22:10 ` Peter Zijlstra
2022-05-19 9:00 ` [PATCH v2] " Peter Zijlstra
2022-05-19 15:13 ` Josh Poimboeuf
2022-09-07 0:47 ` [PATCH] " Sami Tolvanen
2022-05-19 21:57 ` [tip: objtool/urgent] " tip-bot2 for Peter Zijlstra
2022-05-20 10:53 ` [tip: objtool/core] " tip-bot2 for Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YoK4U9RgQ9N+HhXJ@dev-arch.thelio-3990X \
--to=nathan@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=kasan-dev@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=ndesaulniers@google.com \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.