mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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@suse.com> Reviewed-by: Anthony PERARD <anthony.perard@vates.tech> Acked-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
1 parent
b74e973b96
commit
35de7285d5
2 files changed
+15
-3
No files matched your search
+14
-2
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||