On Mon, Jun 10, 2024 at 5:39 PM Naveen N Rao <nav...@kernel.org> wrote: > > 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 link-vmlinux.sh that architectures can use for this purpose. > Architectures need to select CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX and must > provide arch/<arch>/tools/vmlinux_o.sh, which will be invoked prior to > the final vmlinux link step. > > Signed-off-by: Naveen N Rao <nav...@kernel.org> > --- > arch/Kconfig | 3 +++ > scripts/link-vmlinux.sh | 18 +++++++++++++++--- > 2 files changed, 18 insertions(+), 3 deletions(-) > > diff --git a/arch/Kconfig b/arch/Kconfig > index 975dd22a2dbd..649f0903e7ef 100644 > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -1643,4 +1643,7 @@ config CC_HAS_SANE_FUNCTION_ALIGNMENT > config ARCH_NEED_CMPXCHG_1_EMU > bool > > +config ARCH_WANTS_PRE_LINK_VMLINUX > + def_bool n > + > endmenu > diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh > index 46ce5d04dbeb..07f70e105d82 100755 > --- a/scripts/link-vmlinux.sh > +++ b/scripts/link-vmlinux.sh > @@ -122,7 +122,7 @@ gen_btf() > return 1 > fi > > - vmlinux_link ${1} > + vmlinux_link ${1} ${arch_vmlinux_o} > > info "BTF" ${2} > LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J ${PAHOLE_FLAGS} ${1} > @@ -178,7 +178,7 @@ kallsyms_step() > kallsymso=${kallsyms_vmlinux}.o > kallsyms_S=${kallsyms_vmlinux}.S > > - vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" > ${btf_vmlinux_bin_o} > + vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" > ${btf_vmlinux_bin_o} ${arch_vmlinux_o} > mksysmap ${kallsyms_vmlinux} ${kallsyms_vmlinux}.syms > kallsyms ${kallsyms_vmlinux}.syms ${kallsyms_S} > > @@ -203,6 +203,7 @@ sorttable() > > cleanup() > { > + rm -f .arch.vmlinux.* > rm -f .btf.* > rm -f System.map > rm -f vmlinux > @@ -223,6 +224,17 @@ 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.vmlinux.o > + info "ARCH" ${arch_vmlinux_o} > + if ! ${srctree}/arch/${SRCARCH}/tools/vmlinux_o.sh ${arch_vmlinux_o} > ; then > + echo >&2 "Failed to generate ${arch_vmlinux_o}" > + echo >&2 "Try to disable CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX" > + exit 1 > + fi > +fi
This is wrong because scripts/link-vmlinux.sh is not triggered even when source files under arch/powerpc/tools/ are changed. Presumably, scripts/Makefile.vmlinux will be the right place. > + > btf_vmlinux_bin_o="" > if is_enabled CONFIG_DEBUG_INFO_BTF; then > btf_vmlinux_bin_o=.btf.vmlinux.bin.o > @@ -273,7 +285,7 @@ if is_enabled CONFIG_KALLSYMS; then > fi > fi > > -vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o} > +vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o} ${arch_vmlinux_o} > > # fill in BTF IDs > if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then > -- > 2.45.2 > -- Best Regards Masahiro Yamada