[PATCH 2/6] Arm: split xen-syms linking rule
Jan Beulich <[email protected]>
| Newsgroups | gmane.comp.emulators.xen.devel |
|---|---|
| Message-ID | <[email protected]> |
Doing so, besides (hopefully) adding clarity (not the least by way of
[re-]using pattern rules where possible), also avoids explicit recursive
$(MAKE) invocations.
By re-using the generic rules introduced when the respective x86 rule was
split,
- the .map file now isn't created after the final binary anymore,
- --strip-debug is passed to $(LD) during early linking passes (for
consistency the option is also explicitly added to the optional linking
pass rule),
- CONFIG_{SUPPRESS_DUPLICATE_SYMBOL_WARNINGS,ENFORCE_UNIQUE_SYMBOLS} are
now properly respected.
Orphan section checking, otoh, is getting suppressed for now, until the
about a dozen warnings which would result have been taken care of.
While the 4th linking step continues to be avoided when possible, a
redundant invocation of $(NM) and tools/symbols (plus the assembling of
the resulting .S file) is hopefully deemed acceptable.
Signed-off-by: Jan Beulich <[email protected]>
---
As for the x86 patch, I'd like to keep the "beautification" part, i.e.
transforming to $(if_changed ...) machinery, separate.
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -84,40 +84,12 @@ ifeq ($(CONFIG_ARM_64),y)
ln -sf $(@F) [email protected]
endif
-$(TARGET)-syms: $(objtree)/prelink.o $(obj)/xen.lds
- $(objtree)/tools/symbols $(all_symbols) --empty > $(dot-target).0.S
- $(MAKE) $(build)=$(@D) $(dot-target).0.o
- $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
- $(dot-target).0.o -o $(dot-target).0
- $(NM) -pa --format=sysv $(dot-target).0 \
- | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
- > $(dot-target).1.S
- $(MAKE) $(build)=$(@D) $(dot-target).1.o
- $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $< $(build_id_linker) \
- $(dot-target).1.o -o $(dot-target).1
- $(NM) -pa --format=sysv $(dot-target).1 \
- | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
- > $(dot-target).2.S
- $(MAKE) $(build)=$(@D) $(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).3.o -o $@
- $(NM) -pa --format=sysv $@ \
- | $(objtree)/tools/symbols --all-symbols --xensyms --sysv --sort \
- > [email protected]
- rm -f $(dot-target).[0-9]* $(@D)/..$(@F).[0-9]*
+LAST_LINKING_PASS := 3
+
+include scripts/Makefile.link
+
+# Suppress orphan section checking for the time being.
+orphan-handling-y :=
.PHONY: include
include:
--- a/xen/scripts/Makefile.link
+++ b/xen/scripts/Makefile.link
@@ -31,6 +31,19 @@ final-image-check-y ?= true
$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $(filter %.o,$^) \
$(build_id_linker) --strip-debug -o $@
+ifneq ($(LAST_LINKING_PASS),2)
+
+.$(TARGET)-syms.2: $(objtree)/prelink.o .$(TARGET)-syms.2.o $(obj)/xen.lds
+ if ! { $(call compare-symbol-tables, .$(TARGET)-syms.1.o, .$(TARGET)-syms.2.o) >/dev/null; }; \
+ then \
+ $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds $(filter %.o,$^) \
+ $(build_id_linker) --strip-debug -o $@; \
+ else \
+ ln -sf .$(TARGET)-syms.1 $@; \
+ fi
+
+endif
+
.$(TARGET)-syms.$(LAST_LINKING_PASS): $(objtree)/prelink.o \
.$(TARGET)-syms.$(LAST_LINKING_PASS).o \
$(obj)/xen.lds