lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0jRxwuVgody9TbUqhyj6Ajr+NjchUSo2m6Uzs3PrNoJHw@mail.gmail.com>
Date: Wed, 21 Jan 2026 20:08:51 +0100
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Sasha Levin <sashal@...nel.org>
Cc: acme@...nel.org, irogers@...gle.com, jpoimboe@...nel.org, 
	linux-kernel@...r.kernel.org, peterz@...radead.org, rafael@...nel.org, 
	regressions@...ts.linux.dev, torvalds@...ux-foundation.org, x86@...nel.org
Subject: Re: [PATCH] objtool: fix libopcodes linking with static libraries

On Wed, Jan 21, 2026 at 5:25 PM Sasha Levin <sashal@...nel.org> wrote:
>
> Commit 436326bc525d ("objtool: fix build failure due to missing libopcodes
> check") tests for libopcodes using an empty main(), which passes even when
> static libraries lack their dependencies. This causes undefined reference
> errors (xmalloc, bfd_get_bits, etc.) when linking against static libopcodes
> without its required libbfd and libiberty.
>
> Fix by testing with an actual libopcodes symbol and trying increasingly
> complete library combinations until one succeeds.
>
> Fixes: 436326bc525d ("objtool: fix build failure due to missing libopcodes check")
> Reported-by: Rafael J. Wysocki <rafael@...nel.org>
> Signed-off-by: Sasha Levin <sashal@...nel.org>
> ---
>
> Rafael, I'd appreciate if you could test this patch without the .so symlink
> workaround. Thanks :)

Works here, so

Tested-by: Rafael J. Wysocki (Intel) <rafael@...nel.org>

>  tools/objtool/Makefile | 21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
>
> 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
> --
> 2.51.0
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ