[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aXApa2hHOjOTZkz7@laps>
Date: Tue, 20 Jan 2026 20:18:35 -0500
From: Sasha Levin <sashal@...nel.org>
To: "Rafael J. Wysocki" <rafael@...nel.org>
Cc: Peter Zijlstra <peterz@...radead.org>,
Josh Poimboeuf <jpoimboe@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
the arch/x86 maintainers <x86@...nel.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Linux regressions mailing list <regressions@...ts.linux.dev>,
irogers@...gle.com
Subject: Re: [Regression in 6.19-rc6] Build breakage after commit 436326bc525d
On Tue, Jan 20, 2026 at 10:33:12PM +0100, Rafael J. Wysocki wrote:
>On Tue, Jan 20, 2026 at 9:22 PM Sasha Levin <sashal@...nel.org> wrote:
>>
>> On Tue, Jan 20, 2026 at 09:04:25PM +0100, Rafael J. Wysocki wrote:
>> >On Tue, Jan 20, 2026 at 8:58 PM Sasha Levin <sashal@...nel.org> wrote:
>> >>
>> >> On Tue, Jan 20, 2026 at 07:29:58PM +0100, Rafael J. Wysocki wrote:
>> >> >On Tue, Jan 20, 2026 at 6:40 PM Sasha Levin <sashal@...nel.org> wrote:
>> >> >>
>> >> >> On Tue, Jan 20, 2026 at 11:28:32AM +0100, Peter Zijlstra wrote:
>> >> >> >On Mon, Jan 19, 2026 at 09:19:31PM +0100, Rafael J. Wysocki wrote:
>> >> >> >> Hi Sasha,
>> >> >> >>
>> >> >> >> Commit 436326bc525d ("objtool: fix build failure due to missing
>> >> >> >> libopcodes check") breaks kernel build for me.
>> >> >> >>
>> >> >> >> Here's what I get when I try to build the kernel after that commit:
>> >> >> >>
>> >> >> >> LD /scratch/rafael/work/build/xps13/tools/objtool/objtool-in.o
>> >> >> >> LINK /scratch/rafael/work/build/xps13/tools/objtool/objtool
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/bin/ld:
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../lib64/libopcodes.a(aarch64-dis.o):
>> >> >> >> in function `print_operands':
>> >> >> >> /home/abuild/rpmbuild/BUILD/binutils-2.45/build-dir/opcodes/../../opcodes/aarch64-dis.c:3945:(.text+0x6317):
>> >> >> >> undefined reference to `xmalloc'
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/bin/ld:
>> >> >> >> /home/abuild/rpmbuild/BUILD/binutils-2.45/build-dir/opcodes/../../opcodes/aarch64-dis.c:3992:(.text+0x6723):
>> >> >> >> undefined reference to `_sch_istable'
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/bin/ld:
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../lib64/libopcodes.a(aarch64-dis.o):
>> >> >> >> in function `print_insn_aarch64':
>> >> >> >> /home/abuild/rpmbuild/BUILD/binutils-2.45/build-dir/opcodes/../../opcodes/aarch64-dis.c:4559:(.text+0x6b1e):
>> >> >> >> undefined reference to `bfd_get_bits'
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/bin/ld:
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../lib64/libopcodes.a(aarch64-dis.o):
>> >> >> >> in function `parse_aarch64_dis_option':
>> >> >> >> /home/abuild/rpmbuild/BUILD/binutils-2.45/build-dir/opcodes/../../opcodes/aarch64-dis.c:103:(.text+0x6dea):
>> >> >> >> undefined reference to `_bfd_error_handler'
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/bin/ld:
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../lib64/libopcodes.a(aarch64-opc.o):
>> >> >> >> in function `init_insn_sequence':
>> >> >> >> /home/abuild/rpmbuild/BUILD/binutils-2.45/build-dir/opcodes/../../opcodes/aarch64-opc.c:5561:(.text+0x5c06):
>> >> >> >> undefined reference to `xcalloc'
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../x86_64-suse-linux/bin/ld:
>> >> >> >> /usr/lib64/gcc/x86_64-suse-linux/15/../../../../lib64/libopcodes.a(disassemble.o):
>> >> >> >> in function `remove_whitespace_and_extra_commas':
>> >> >> >> /home/abuild/rpmbuild/BUILD/binutils-2.45/build-dir/opcodes/../../opcodes/disassemble.c:801:(.text+0x346):
>> >> >> >> undefined reference to `_sch_istable'
>> >> >> >> ...
>> >> >> >>
>> >> >> >> (many more similar messages skipped).
>> >> >> >>
>> >> >> >> Reverting commit 436326bc525d makes the problem go away.
>> >> >>
>> >> >> Thanks for the report Rafael!
>> >> >>
>> >> >> Could you confirm that you're linking against static libraries? I haven't
>> >> >> tested that scenario.
>> >> >
>> >> >How do I check that?
>> >>
>> >> What do you get running the below?
>> >>
>> >> ls /usr/lib/*/libopcodes*
>> >
>> >"No such file or directory"
>> >
>> >However,
>> >
>> >> ls /usr/lib64/libopcodes*
>> >/usr/lib64/libopcodes-2.45.0.20251103-150100757.so /usr/lib64/libopcodes.a
>>
>> The linker looks for libopcodes.so (not the versioned .so). Without that
>> symlink, it falls back to libopcodes.a. So yes, looks like you're using static
>> linking.
>>
>> To confirm, can you try to:
>>
>> sudo ln -s libopcodes-2.45.0.20251103-150100757.so /usr/lib64/libopcodes.so
>>
>> Any then running the build again?
>
>Yes, this makes the build work (without reverting the commit in question).
Great! So something like the patch below should fix the static scenario. I've
tested it locally on Debian but it'll be great to give it a go on a different
distro.
It's also a bit ugly, but I'm not really sure what we can do about it. No
dependency info in static libs :/
diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index 9b4503113ce5f..a40f302329291 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile
@@ -77,8 +77,21 @@ HOST_OVERRIDES := CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)"
# We check using HOSTCC directly rather than the shared feature framework
# because objtool is a host tool that links against host libraries.
#
-HAVE_LIBOPCODES := $(shell echo 'int main(void) { return 0; }' | \
- $(HOSTCC) -xc - -o /dev/null -lopcodes 2>/dev/null && echo y)
+# When using shared libraries, -lopcodes is sufficient as dependencies are
+# resolved automatically. With static libraries, we must explicitly link
+# against libopcodes' dependencies: libbfd, libiberty, and sometimes libz.
+# Try each combination and use the first one that succeeds.
+#
+LIBOPCODES_LIBS := $(shell \
+ for libs in "-lopcodes" \
+ "-lopcodes -lbfd" \
+ "-lopcodes -lbfd -liberty" \
+ "-lopcodes -lbfd -liberty -lz"; do \
+ echo 'extern void disassemble_init_for_target(void *);' \
+ 'int main(void) { disassemble_init_for_target(0); return 0; }' | \
+ $(HOSTCC) -xc - -o /dev/null $$libs 2>/dev/null && \
+ echo "$$libs" && break; \
+ done)
# Styled disassembler support requires binutils >= 2.39
HAVE_DISASM_STYLED := $(shell echo '$(pound)include <dis-asm.h>' | \
@@ -86,10 +99,10 @@ HAVE_DISASM_STYLED := $(shell echo '$(pound)include <dis-asm.h>' | \
BUILD_DISAS := n
-ifeq ($(HAVE_LIBOPCODES),y)
+ifneq ($(LIBOPCODES_LIBS),)
BUILD_DISAS := y
OBJTOOL_CFLAGS += -DDISAS -DPACKAGE='"objtool"'
- OBJTOOL_LDFLAGS += -lopcodes
+ OBJTOOL_LDFLAGS += $(LIBOPCODES_LIBS)
ifeq ($(HAVE_DISASM_STYLED),y)
OBJTOOL_CFLAGS += -DDISASM_INIT_STYLED
endif
--
Thanks,
Sasha
Powered by blists - more mailing lists