[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Arm: do a 4th linking pass if necessary



On Wed, May 20, 2026 at 01:53:34PM +0200, Jan Beulich wrote:
> Once we generalize linking, we may want to introduce an equivalent of
> Linux'es KALLSYMS_EXTRA_PASS as well. I don't think doing this right here
> would make overly much sense, though.

If you generalise linking, you are going to put it in a shell script,
right? Because this recipe is getting very complicated, for within a
makefile.

> --- a/xen/arch/arm/Makefile
> +++ b/xen/arch/arm/Makefile
> @@ -99,9 +99,20 @@ $(TARGET)-syms: $(objtree)/prelink.o $(o
>               | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
>               > $(dot-target).2.S
>       $(MAKE) $(build)=$(@D) $(dot-target).2.o
> -     $(call compare-symbol-tables, $(dot-target).1.o, $(dot-target).2.o)
> +     if ! { $(call compare-symbol-tables, $(dot-target).1.o, 
> $(dot-target).2.o) >/dev/null; }; \

This `>/dev/null` seems to only suppress the output of the `diff` of the
macro, is it what is intended?

> +     then \
> +             $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
> +                 $(dot-target).2.o -o $(dot-target).2; \
> +             $(NM) -pa --format=sysv $(dot-target).2 \
> +                     | $(objtree)/tools/symbols $(all_symbols) --sysv --sort 
> \
> +                     > $(dot-target).3.S; \
> +             $(MAKE) $(build)=$(@D) $(dot-target).3.o; \

This new block ignore all errors, from LD, NM and MAKE. We want
a `set -e` before the if.

> +             $(call compare-symbol-tables, $(dot-target).2.o, 
> $(dot-target).3.o); \

At least, an error returned by `diff` in that macro should be taken into
account, for now.

> +     else \
> +             ln -sf $(dot-target).2.o $(dot-target).3.o; \
> +     fi
>       $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
> -         $(dot-target).2.o -o $@
> +         $(dot-target).3.o -o $@
>       $(NM) -pa --format=sysv $@ \
>               | $(objtree)/tools/symbols --all-symbols --xensyms --sysv 
> --sort \
>               > $@.map
> --- a/xen/scripts/Kbuild.include
> +++ b/xen/scripts/Kbuild.include
> @@ -65,7 +65,7 @@ define compare-symbol-tables
>      $(OBJDUMP) -t $(@D)/.cst.$$$$ > $(1).sym; \
>      ln -f $(2) $(@D)/.cst.$$$$; \
>      $(OBJDUMP) -t $(@D)/.cst.$$$$ > $(2).sym; \
> -    rm -f $(@D)/.cst.$$$$
> +    rm -f $(@D)/.cst.$$$$; \
>      diff -u $(1).sym $(2).sym

This macro is missing `set -e`, if both OBJDUMP command fails and create
an empty file, `diff` will return success. But looks like `set -e` in
this macro isn't going to work in the condition of the `if`.


Thanks,


--
Anthony Perard | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.