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. vmlinux: arch/$(SRCARCH)/tools/vmlinux.arch.o > +arch/$(SRCARCH)/tools/.vmlinux.arch.o: vmlinux.o FORCE is missing. arch/$(SRCARCH)/tools/vmlinux.arch.o: vmlinux.o FORCE > + $(Q)$(MAKE) $(build)=arch/$(SRCARCH)/tools $@ > +endif > + > ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) > > # Final link of vmlinux with optional arch pass after final link > diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh > index f7b2503cdba9..b3a940c0e6c2 100755 > --- a/scripts/link-vmlinux.sh > +++ b/scripts/link-vmlinux.sh > @@ -100,7 +100,7 @@ vmlinux_link() > ${ld} ${ldflags} -o ${output} \ > ${wl}--whole-archive ${objs} ${wl}--no-whole-archive \ > ${wl}--start-group ${libs} ${wl}--end-group \ > - ${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs} > + ${kallsymso} ${btf_vmlinux_bin_o} ${arch_vmlinux_o} ${ldlibs} > } > > # generate .BTF typeinfo from DWARF debuginfo > @@ -214,6 +214,11 @@ fi > > ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init init/version-timestamp.o > > +arch_vmlinux_o="" > +if is_enabled CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX; then > + arch_vmlinux_o=arch/${SRCARCH}/tools/.vmlinux.arch.o arch_vmlinux_o=arch/${SRCARCH}/tools/vmlinux.arch.o > +fi > + > btf_vmlinux_bin_o= > kallsymso= > strip_debug= > -- > 2.46.0 > -- Best Regards Masahiro Yamada