mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Shivang Upadhyay <shivangu@linux.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, sv@linux.ibm.com,
	alexandre.chartre@oracle.com, alexghiti@rivosinc.com,
	aliceryhl@google.com, ardb@kernel.org, bp@alien8.de,
	chleroy@kernel.org, elver@google.com, ihor.solodrai@linux.dev,
	jpoimboe@kernel.org, kees@kernel.org, legion@kernel.org,
	lossin@kernel.org, maddy@linux.ibm.com, masahiroy@kernel.org,
	mpe@ellerman.id.au, nathan@kernel.org, npiggin@gmail.com,
	nsc@kernel.org, ojeda@kernel.org, pmladek@suse.com,
	rostedt@goodmis.org, tamird@kernel.org,
	thomas.weissschuh@linutronix.de, thuth@redhat.com,
	yuxuan.zuo@outlook.com, sourabhjain@linux.ibm.com
Subject: Re: [PATCH v2 4/6] objtool/powerpc: Skip jump destination analysis and unnanotated intra-function call warnings for --ftr-fixup
Date: Tue, 06 Oct 2026 11:44:25 +0530	[thread overview]
Message-ID: <3297b07cf058b29251063e5e7dc61bf047c5148f.camel@linux.ibm.com> (raw)
In-Reply-To: <20260930094449.GJ88198@noisy.programming.kicks-ass.net>

On Wed, 2026-09-30 at 11:44 +0200, Peter Zijlstra wrote:
> On Wed, Sep 30, 2026 at 11:43:10AM +0530, Shivang Upadhyay wrote:
> > On Tue, 2026-09-29 at 16:25 +0200, Peter Zijlstra wrote:
> > > > c00000000002a610 <system_reset_exception>:
> > > > c00000000002a610:       0e 01 4c 3c     addis   r2,r12,270
> > > >                          c00000000002a610: R_PPC64_REL16_HA   
> > > > .TOC.
> > > > c00000000002a614:       f0 6c 42 38     addi    r2,r2,27888
> > > >                          c00000000002a614: R_PPC64_REL16_LO   
> > > > .TOC.+0x4
> > > > c00000000002a618:       a6 02 08 7c     mflr    r0
> > > > 
> > > > This is happening because we should be looking for destination
> > > > symbols that are at absolute offsets instead of relative
> > > > offsets.
> > > 
> > > Again, confused. We run objtool on objects, this is pre-linking,
> > > there
> > > are no absolute offsets.
> > Hi Peter,
> > 
> > This is the special requirement of patching jump assembly
> > instructions
> > that we need to know where the jump is performed from/to. As per
> > 5/6
> > objtool is run post link on vmlinux. If handling post-link
> > information
> > is outside the scope of objtool, please let me know.
> 
> I think we can make it work; but this wasn't immediately obvious.
> Also
> I'm still struggling to understand what exactly you're doing -- I'm
> not
> well versed in the PPC details and have no idea what this ftr thing
> really is and your patches don't really explain anything much at all.
> 
> (Gemini is suggesting this is all somewhat similar to the x86 RIP
> relative fixup we do for alternatives, but your case is more 'fun').
> 

Hi Peter,
Sorry for the delayed response.

I think I can explain the feature fixup mechanism and the problem we're
trying to solve more clearly in the cover letter.

Here is a basic example of what we're trying to achieve.

        GEN_COMMON data_access

            ld      r4,_DSISR(r1)
            addi    r3,r1,STACK_INT_FRAME_REGS
            andis.  r0,r4,DSISR_DABRMATCH@h
            bne-    1f

        #ifdef CONFIG_PPC_64S_HASH_MMU
        BEGIN_MMU_FTR_SECTION
            bl      CFUNC(do_hash_fault)
        MMU_FTR_SECTION_ELSE
            bl      CFUNC(do_page_fault)
        ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
        #else
            bl      CFUNC(do_page_fault)
        #endif

            b       interrupt_return_srr

This is the implementation of the data_access exception handler on
ppc64le. Depending on whether the machine is using the hash or radix
MMU, we need to execute a different fault handler. The choice is made
at runtime based on the CPU's feature bits.

The assembly macros therefore generate code for both possible cases at
build time, and the feature-fixup mechanism later patches the code so
that only the appropriate path is executed.

The problem is that the linker does not know about this later patching
when it resolves branch relocations.
For example, consider:

feat_loc:
    ...

BEGIN_MMU_FTR_SECTION

    ...
loc_a:
    bl      CFUNC(main_feature)
    ...

MMU_FTR_SECTION_ELSE

    ...
loc_b:
    bl      CFUNC(alt_feature)
    ...

When linking this code, the linker will encode 
main_feature - loc_a at loc_a and alt_feature - loc_b at loc_b at two
bl instructions ablove.


However, alt_feature - loc_b is not the offset that we ultimately need
from the alt branch. When the feature fixup is applied, the instruction
at loc_a is replaced with the alternative instruction, so the branch
needs to encode (alt_feature - loc_a) jump.

This distinction matters because the branch displacement has to fit in
the range representable by the 32-bit PowerPC branch instruction.
Depending on where feat_loc, main_feature, and alt_feature end up after
linking, the linker-generated displacement can therefore be different
from the displacement that is actually needed after the feature fixup.
In some layouts this can result in either a build-time failure or, more
importantly, an invalid branch at runtime.

What we're trying to do with the build-time pass is detect these cases
and prepare the branch relocations for the code as it will actually
exist after feature patching. At minimum, it should allow us to detect
an impossible branch offset at build time rather than discovering it
only after the feature fixup is applied at runtime.


> Anyway, I would much rather objtool learns how to deal with absolute
> sections rather than making things depend on a 'random' ftr option.
> That
> is, if we need conditional code, have it be because the secion has
> non-zero address, not because ftr option or somesuch.
> 
> But noting that, can't we simply change:
> 
>   decode_instructions()
>     hash_add(file->insn_hash, &insn->hash, sec_offset_hash(sec, insn-
> >offset));
> 
> to take sh_addr into account? I mean, when unlinked, it'll be 0 so
> nothing changes, but when already linked, it'll get you the absolute
> value and then you don't need that fixup later on, or am I missing
> some
> details?
> 
> So from where I'm at, please:
> 
>  - teach objtool about absolute sections, not ftr specials
Sure I will try to rework these patches towards that.

> 
>  - expand changelog to actually explain what these ftr things are and
>    how they work and what the actual problem is we're solving, so we
>    don't need to employ LLMs to understand patches and all that :-)
> 
> Does that sound reasonable?

Yes.

Thanks
~Shivang.

  reply	other threads:[~2026-10-06  6:15 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-29  5:51 [PATCH v2 0/6] objtool: Fixup alternate feature relative addresses Shivang Upadhyay
2026-09-29  5:51 ` [PATCH v2 1/6] objtool/powerpc: Add build-time fixup of alternate feature branch targets Shivang Upadhyay
2026-09-29  5:51 ` [PATCH v2 2/6] objtool: Set ELF_F_LAYOUT flag to preserve vmlinux segment layout Shivang Upadhyay
2026-09-30  9:48   ` Peter Zijlstra
2026-09-29  5:51 ` [PATCH v2 3/6] objtool: Fix "can't find starting instruction" warnings on vmlinux Shivang Upadhyay
2026-09-29 14:12   ` Peter Zijlstra
2026-09-29 14:24   ` Peter Zijlstra
2026-09-29  5:51 ` [PATCH v2 4/6] objtool/powerpc: Skip jump destination analysis and unnanotated intra-function call warnings for --ftr-fixup Shivang Upadhyay
2026-09-29 14:25   ` Peter Zijlstra
2026-09-30  6:13     ` Shivang Upadhyay
2026-09-30  9:44       ` Peter Zijlstra
2026-10-06  6:14         ` Shivang Upadhyay [this message]
2026-09-29  5:51 ` [PATCH v2 5/6] kbuild: Add objtool integration for PowerPC feature fixups Shivang Upadhyay
2026-09-29  5:51 ` [PATCH v2 6/6] powerpc: Enable build-time feature fixup processing by default Shivang Upadhyay

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=3297b07cf058b29251063e5e7dc61bf047c5148f.camel@linux.ibm.com \
    --to=shivangu@linux.ibm.com \
    --cc=alexandre.chartre@oracle.com \
    --cc=alexghiti@rivosinc.com \
    --cc=aliceryhl@google.com \
    --cc=ardb@kernel.org \
    --cc=bp@alien8.de \
    --cc=chleroy@kernel.org \
    --cc=elver@google.com \
    --cc=ihor.solodrai@linux.dev \
    --cc=jpoimboe@kernel.org \
    --cc=kees@kernel.org \
    --cc=legion@kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lossin@kernel.org \
    --cc=maddy@linux.ibm.com \
    --cc=masahiroy@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=nathan@kernel.org \
    --cc=npiggin@gmail.com \
    --cc=nsc@kernel.org \
    --cc=ojeda@kernel.org \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sourabhjain@linux.ibm.com \
    --cc=sv@linux.ibm.com \
    --cc=tamird@kernel.org \
    --cc=thomas.weissschuh@linutronix.de \
    --cc=thuth@redhat.com \
    --cc=yuxuan.zuo@outlook.com \
    /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

all inboxes | Powered by JetHome®