public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Alexandre Chartre <alexandre.chartre@oracle.com>
To: Guenter Roeck <linux@roeck-us.net>,
	"Maciej W. Rozycki" <macro@orcam.me.uk>
Cc: alexandre.chartre@oracle.com, linux-kernel@vger.kernel.org,
	Ingo Molnar <mingo@kernel.org>,
	jpoimboe@kernel.org, peterz@infradead.org,
	david.laight.linux@gmail.com
Subject: Re: [PATCH v6 03/30] objtool: Disassemble code with libopcodes instead of running objdump
Date: Wed, 10 Dec 2025 17:36:07 +0100	[thread overview]
Message-ID: <89da2d1e-698c-488a-b634-eafcb4dcb31a@oracle.com> (raw)
In-Reply-To: <9c5c46a7-ce06-4a25-8f53-f5b461ed7829@roeck-us.net>



On 12/10/25 16:26, Guenter Roeck wrote:
> On 12/9/25 23:53, Alexandre Chartre wrote:
>>
>>
>> On 12/10/25 06:08, Guenter Roeck wrote:
>>> On 12/9/25 14:25, Maciej W. Rozycki wrote:
>>>> On Tue, 9 Dec 2025, Alexandre Chartre wrote:
>>>>
>>>>>> Bisect log is attached. I see the problem with gcc 11.4.0, 13.3.0, and
>>>>>> 14.3.0. I tried with both Ubuntu 22.04 and 24.04.
>>>>>
>>>>> This sounds like a configuration issue depending on the binutils version; in
>>>>> particular the setting of DISASM_INIT_STYLED (although that's supposed to be
>>>>> automatically configured by tools/objtool/Makefile).
>>>>
>>>>   I only came across these patches now.
>>>>
>>>>   As attractive as it may seem how is this stuff supposed to fly given that
>>>> binutils internal libraries promise no stable API to out-of-tree software.
>>>> The interfaces can change anytime, just as it is with our internals.
>>>>
>>>>   Wouldn't it make sense to improve objdump instead so as to provide the
>>>> features required?
>>>>
>>>>   Also is it actually legal to link objtool and libopcodes together, given
>>>> that they are GPLv2 and GPLv3 respectively?
>>>>
>>>>   FWIW asking as one of the binutils contributors and port maintainers.
>>>>
>>>
>>> After some more digging I found that the version of binutils installed in
>>> the system determines if the build error is seen or not. So I can have
>>> a toolchain with the latest binutils version, but the build still fails if
>>> the binutils version installed in the system is too old. 2.38 (as in
>>> Ubuntu 22.04) is too old since it does not define 'enum disassembler_style'
>>> in dis-asm.h. As far as I can see that enum was only introduced with
>>> binutils 2.39.
>>>
>>> Now the problem is that DISASM_INIT_STYLED is evaluated with
>>> tools/build/feature/test-disassembler-init-styled.c, which checks for
>>> the existence of struct disassemble_info (not the enum). AFAICS that
>>> structure was introduced with binutils-2_18.
>>>
>>> Unless my analysis is wrong that means that Linux will now fail to build
>>> on systems with binutils 2.18 ... 2.38 installed.
>>
>>
>> test-disassembler-init-styled.c tests that init_disassemble_info() has four
>> arguments. If this fails then this means that it has only three args and in
>> that case enum disassembler_style is not defined, and the build should be done
>> without defining DISASM_INIT_STYLED.
>>
>> init_disassemble_info() was changed from 3 args to 4 args by the following
>> binutils change, and enum disassembler_style was introduced at the same time:
>>
>>    https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
>>
>> This change has caused the Linux build to fail, and this was fixed by commit
>> a45b3d6926231 ("tools include: add dis-asm-compat.h to handle version differences")
>> which introduced dis-asm-compat.h
>>
>> Can you check that init_disassemble_info() is declared with only 3 arguments
>> in your dis-asm.h file? (/usr/include/dis-asm.h).
>>
>> dis-asm.h should either:
>>
>> - declare init_disassemble_info() with 3 args and not define enum disassembler_style
>>
>> or
>>
>> - declare init_disassemble_info() with 4 args and define enum disassembler_style
>>
> 
> Thanks for the clarification.
> 
> Here is the declaration:
> 
> /* Method to initialize a disassemble_info struct.  This should be
>     called by all applications creating such a struct.  */
> extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream,
>                                     fprintf_ftype fprintf_func);
> 
> So it has three arguments, but DISASM_INIT_STYLED is defined anyway.
> 
> I think I found the problem: not even "make mrproper" or "make distclean" deletes
> ./tools/objtool/feature/test-disassembler-init-styled.bin, and the file existed
> in my tree. So DISASM_INIT_STYLED just ended up being defined until I deleted
> the file manually.
> 
> This condition also happens in my build system. I have not been able to re-create
> the situation where the .bin file exists but shouldn't, but it somehow does happen.
> 

That's weird because the "clean" rule in tools/objtool/Makefile should remove the
entire tools/objtool/feature directory:

$ cat tools/objtool/Makefile
...
clean: $(LIBSUBCMD)-clean
	$(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL)
	$(Q)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
	$(Q)$(RM) $(OUTPUT)arch/x86/lib/cpu-feature-names.c $(OUTPUT)fixdep
	$(Q)$(RM) $(OUTPUT)arch/x86/lib/inat-tables.c $(OUTPUT)fixdep
	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.objtool
	$(Q)$(RM) -r -- $(OUTPUT)feature

see $(Q)$(RM) -r -- $(OUTPUT)feature

alex.






  reply	other threads:[~2025-12-10 16:36 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-21  9:53 [PATCH v6 00/30] objtool: Function validation tracing Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 01/30] objtool: Move disassembly functions to a separated file Alexandre Chartre
2025-11-24  9:12   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 02/30] objtool: Create disassembly context Alexandre Chartre
2025-11-24  9:12   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 03/30] objtool: Disassemble code with libopcodes instead of running objdump Alexandre Chartre
2025-11-24  9:12   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-25 18:16   ` [PATCH v6 03/30] " Nathan Chancellor
2025-11-26  9:00     ` Alexandre Chartre
2025-11-26 10:07       ` David Laight
2025-11-26 10:29         ` Alexandre Chartre
2025-12-09  6:58   ` Guenter Roeck
2025-12-09  7:51     ` Alexandre Chartre
2025-12-09 15:11       ` Guenter Roeck
2025-12-09 22:25       ` Maciej W. Rozycki
2025-12-10  5:08         ` Guenter Roeck
2025-12-10  7:53           ` Alexandre Chartre
2025-12-10 15:26             ` Guenter Roeck
2025-12-10 16:36               ` Alexandre Chartre [this message]
2025-12-10 18:42                 ` Guenter Roeck
2025-12-10 21:54                   ` Guenter Roeck
2025-12-15 16:00                     ` Alexandre Chartre
2025-12-15 16:46                       ` Guenter Roeck
2025-12-10  7:06         ` Alexandre Chartre
2025-12-10  8:56           ` Peter Zijlstra
2025-12-10  8:53         ` Peter Zijlstra
2025-12-10 12:01           ` Maciej W. Rozycki
2025-11-21  9:53 ` [PATCH v6 04/30] tool build: Remove annoying newline in build output Alexandre Chartre
2025-11-24  9:12   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 05/30] objtool: Print symbol during disassembly Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 06/30] objtool: Store instruction disassembly result Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 07/30] objtool: Disassemble instruction on warning or backtrace Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 08/30] objtool: Extract code to validate instruction from the validate branch loop Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 09/30] objtool: Record symbol name max length Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 10/30] objtool: Add option to trace function validation Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 11/30] objtool: Trace instruction state changes during " Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-12-01 20:23   ` [PATCH v6 11/30] " Nathan Chancellor
2025-12-02  1:30     ` Josh Poimboeuf
2025-12-02  8:34       ` Alexandre Chartre
2025-12-02 16:13         ` Josh Poimboeuf
2025-12-02 18:09           ` David Laight
2025-11-21  9:53 ` [PATCH v6 12/30] objtool: Improve register reporting " Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 13/30] objtool: Identify the different types of alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 14/30] objtool: Add functions to better name alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 15/30] objtool: Improve tracing of alternative instructions Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 16/30] objtool: Do not validate IBT for .return_sites and .call_sites Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 17/30] objtool: Add the --disas=<function-pattern> action Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 18/30] objtool: Preserve alternatives order Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 19/30] objtool: Print headers for alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 20/30] objtool: Disassemble group alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 21/30] objtool: Print addresses with alternative instructions Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 22/30] objtool: Disassemble exception table alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 23/30] objtool: Disassemble jump " Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 24/30] objtool: Fix address references in alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 25/30] objtool: Provide access to feature and flags of group alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 26/30] objtool: Function to get the name of a CPU feature Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-24 10:44   ` tip-bot2 for Alexandre Chartre
2025-11-24 11:59     ` Peter Zijlstra
2025-11-24 12:26       ` Borislav Petkov
2025-11-24 12:40         ` Alexandre Chartre
2025-11-24 19:05           ` david laight
2025-11-24 16:43         ` Alexandre Chartre
2025-11-24 20:14           ` Borislav Petkov
2025-11-24 19:49   ` [tip: objtool/core] objtool: Add " tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 27/30] objtool: Improve naming of group alternatives Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-24 10:44   ` tip-bot2 for Alexandre Chartre
2025-11-24 19:49   ` tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 28/30] objtool: Compact output for alternatives with one instruction Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-24 10:43   ` tip-bot2 for Alexandre Chartre
2025-11-24 19:49   ` tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 29/30] objtool: Add wide output for disassembly Alexandre Chartre
2025-11-24  9:11   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-24 10:43   ` tip-bot2 for Alexandre Chartre
2025-11-24 19:49   ` tip-bot2 for Alexandre Chartre
2025-11-21  9:53 ` [PATCH v6 30/30] objtool: Trim trailing NOPs in alternative Alexandre Chartre
2025-11-24  9:10   ` [tip: objtool/core] " tip-bot2 for Alexandre Chartre
2025-11-24 10:43   ` tip-bot2 for Alexandre Chartre
2025-11-24 19:49   ` tip-bot2 for Alexandre Chartre
2025-11-21 10:36 ` [PATCH v6 00/30] objtool: Function validation tracing Peter Zijlstra
2025-11-21 13:16   ` Alexandre Chartre
2025-11-21 13:51     ` Alexandre Chartre
2025-11-21 14:30       ` Peter Zijlstra
2025-11-24 11:04 ` Borislav Petkov
2025-11-24 11:39   ` Alexandre Chartre
2025-11-24 12:39     ` Borislav Petkov
2025-11-24 12:27   ` David Laight

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=89da2d1e-698c-488a-b634-eafcb4dcb31a@oracle.com \
    --to=alexandre.chartre@oracle.com \
    --cc=david.laight.linux@gmail.com \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=macro@orcam.me.uk \
    --cc=mingo@kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox