Re: [PATCH v5 11/17] kbuild: Add generic hook for architectures to use before the final vmlinux link

From: Masahiro Yamada
Date: Thu Oct 10 2024 - 07:40:07 EST


On Thu, Oct 10, 2024 at 6:57 PM Hari Bathini <hbathini@xxxxxxxxxxxxx> wrote:
>
>
> On 09/10/24 8:53 pm, Masahiro Yamada wrote:
> > On Mon, Sep 16, 2024 at 5:58 AM Hari Bathini <hbathini@xxxxxxxxxxxxx> wrote:
> >>
> >> From: Naveen N Rao <naveen@xxxxxxxxxx>
> >>
> >> On powerpc, we would like to be able to make a pass on vmlinux.o and
> >> generate a new object file to be linked into vmlinux. Add a generic pass
> >> in Makefile.vmlinux that architectures can use for this purpose.
> >>
> >> Architectures need to select CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX and must
> >> provide arch/<arch>/tools/Makefile with .arch.vmlinux.o target, which
> >> will be invoked prior to the final vmlinux link step.
> >>
> >> Signed-off-by: Naveen N Rao <naveen@xxxxxxxxxx>
> >> Signed-off-by: Hari Bathini <hbathini@xxxxxxxxxxxxx>
> >> ---
> >>
> >> Changes in v5:
> >> * Intermediate files named .vmlinux.arch.* instead of .arch.vmlinux.*
> >>
> >>
> >> arch/Kconfig | 6 ++++++
> >> scripts/Makefile.vmlinux | 7 +++++++
> >> scripts/link-vmlinux.sh | 7 ++++++-
> >> 3 files changed, 19 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/arch/Kconfig b/arch/Kconfig
> >> index 975dd22a2dbd..ef868ff8156a 100644
> >> --- a/arch/Kconfig
> >> +++ b/arch/Kconfig
> >> @@ -1643,4 +1643,10 @@ config CC_HAS_SANE_FUNCTION_ALIGNMENT
> >> config ARCH_NEED_CMPXCHG_1_EMU
> >> bool
> >>
> >> +config ARCH_WANTS_PRE_LINK_VMLINUX
> >> + def_bool n
> >
> >
> > Redundant default. This line should be "bool".
> >
> >
> >
> >
> >
> >
> >> + help
> >> + An architecture can select this if it provides arch/<arch>/tools/Makefile
> >> + with .arch.vmlinux.o target to be linked into vmlinux.
> >> +
> >> endmenu
> >> diff --git a/scripts/Makefile.vmlinux b/scripts/Makefile.vmlinux
> >> index 49946cb96844..edf6fae8d960 100644
> >> --- a/scripts/Makefile.vmlinux
> >> +++ b/scripts/Makefile.vmlinux
> >> @@ -22,6 +22,13 @@ targets += .vmlinux.export.o
> >> vmlinux: .vmlinux.export.o
> >> endif
> >>
> >> +ifdef CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX
> >> +vmlinux: arch/$(SRCARCH)/tools/.vmlinux.arch.o
> >
> > If you move this to arch/*/tools/, there is no reason
> > to make it a hidden file.
>
> Thanks for reviewing and the detailed comments, Masahiro.
>
> >
> >
> > vmlinux: arch/$(SRCARCH)/tools/vmlinux.arch.o
> >
> >
> >
> >
> >> +arch/$(SRCARCH)/tools/.vmlinux.arch.o: vmlinux.o
> >
> > FORCE is missing.
>
>
> I dropped FORCE as it was rebuilding vmlinux on every invocation
> of `make` irrespective of whether vmlinux.o changed or not..


It is because you did not add vmlinux.arch.S to 'targets'

See my comment in 12/17.

targets += vmlinux.arch.S


> Just curious if the changes you suggested makes FORCE necessary
> or FORCE was expected even without the other changes you suggested?


FORCE is necessary.

arch/powerpc/tools/Makefile must be checked every time.


When arch/powerpc/tools/ftrace-gen-ool-stubs.sh is changed,
vmlinux must be relinked.





> Thanks
> Hari




--
Best Regards
Masahiro Yamada