|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] Arm: do a 4th linking pass if necessary
commit 35de7285d508d97e22aff18a9cdba21d52431e27
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri May 22 08:16:25 2026 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri May 22 08:16:25 2026 +0200
Arm: do a 4th linking pass if necessary
The .rodata growth between 1st and 2nd linking passes may affect the
number of stubs the linker wants to insert, which in turn affects the
number of symbols. If symbol table sizes change after the 2nd linking
pass, insert another one before the final one. (As a comment in Linux puts
it, "In theory it's possible this results in even more stubs, but
unlikely.")
To use the $(compare-symbol-tables) macro in a shell "if", it needs
slightly adjusting (and then wrapping to be run in a sub-shell).
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
Acked-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
---
xen/arch/arm/Makefile | 16 ++++++++++++++--
xen/scripts/Kbuild.include | 2 +-
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 982c6c396a..84c4062b30 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -99,9 +99,21 @@ $(TARGET)-syms: $(objtree)/prelink.o $(obj)/xen.lds
| $(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; }; \
+ then \
+ set -e; \
+ $(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; \
+ $(call compare-symbol-tables, $(dot-target).2.o,
$(dot-target).3.o); \
+ 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
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index d5e36e7f55..41483513ac 100644
--- 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
endef
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |