|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |