compat: enforce distinguishable file names in symbol table To make it possible to tell apart the static symbols in files built a second for compat guest support, arrange for their source file names to be prefixed by a suitable path. We can't do this without explicit .file directives, since gcc has always been stripping paths from file names handed to the internally generated .file directive. However, we can leverage __FILE__ if we make sure the second instance gets compiled out of other than the very directory the wrapper sits in. Where suitable, remove the long redundant explicit inclusions of xen/config.h at once. Signed-off-by: Jan Beulich --- a/xen/Rules.mk +++ b/xen/Rules.mk @@ -86,8 +86,7 @@ AFLAGS-$(clang) += -no-integrate ALL_OBJS := $(ALL_OBJS-y) # Get gcc to generate the dependencies for us. -CFLAGS-y += -MMD -MF .$(@F).d -DEPS = .*.d +CFLAGS-y += -MMD -MF $(@D)/.$(@F).d CFLAGS += $(CFLAGS-y) @@ -103,6 +102,14 @@ LDFLAGS += $(LDFLAGS-y) include Makefile +DEPS = .*.d +define gendep + ifneq ($(1),$(subst /,:,$(1))) + DEPS += $(dir $(1)).$(basename $(notdir $(1))).d + endif +endef +$(foreach o,$(filter-out %/,$(obj-y)),$(eval $(call gendep,$(o)))) + # Ensure each subdirectory has exactly one trailing slash. subdir-n := $(patsubst %,%/,$(patsubst %/,%,$(subdir-n) $(subdir-))) subdir-y := $(patsubst %,%/,$(patsubst %/,%,$(subdir-y))) --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -13,7 +13,7 @@ obj-y += bitops.o obj-bin-y += bzimage.init.o obj-bin-y += clear_page.o obj-bin-y += copy_page.o -obj-y += compat.o +obj-y += compat.o x86_64/compat.o obj-$(CONFIG_KEXEC) += crash.o obj-y += debug.o obj-y += delay.o @@ -25,7 +25,6 @@ obj-y += domain_page.o obj-y += e820.o obj-y += extable.o obj-y += flushtlb.o -obj-y += platform_hypercall.o obj-y += i387.o obj-y += i8259.o obj-y += io_apic.o @@ -37,14 +36,15 @@ obj-y += microcode_amd.o obj-y += microcode_intel.o # This must come after the vendor specific files. obj-y += microcode.o -obj-y += mm.o +obj-y += mm.o x86_64/mm.o obj-y += monitor.o obj-y += mpparse.o obj-y += nmi.o obj-y += numa.o obj-y += pci.o obj-y += percpu.o -obj-y += physdev.o +obj-y += physdev.o x86_64/physdev.o +obj-y += platform_hypercall.o x86_64/platform_hypercall.o obj-y += psr.o obj-y += setup.o obj-y += shutdown.o --- a/xen/arch/x86/x86_64/Makefile +++ b/xen/arch/x86/x86_64/Makefile @@ -2,7 +2,6 @@ subdir-y += compat obj-bin-y += entry.o obj-bin-y += gpr_switch.o -obj-y += mm.o obj-y += traps.o obj-y += machine_kexec.o obj-y += pci.o @@ -10,10 +9,7 @@ obj-y += acpi_mmcfg.o obj-y += mmconf-fam10h.o obj-y += mmconfig_64.o obj-y += mmconfig-shared.o -obj-y += compat.o obj-y += domain.o -obj-y += physdev.o -obj-y += platform_hypercall.o obj-y += cpu_idle.o obj-y += cpufreq.o obj-bin-y += kexec_reloc.o --- a/xen/arch/x86/x86_64/compat.c +++ b/xen/arch/x86/x86_64/compat.c @@ -2,7 +2,8 @@ * compat.c */ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -16,7 +16,8 @@ * with this program; If not, see . */ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/arch/x86/x86_64/physdev.c +++ b/xen/arch/x86/x86_64/physdev.c @@ -2,7 +2,8 @@ * physdev.c */ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/arch/x86/x86_64/platform_hypercall.c +++ b/xen/arch/x86/x86_64/platform_hypercall.c @@ -2,7 +2,8 @@ * platform_hypercall.c */ -#include +asm(".file \"" __FILE__ "\""); + #include #include --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -63,7 +63,7 @@ obj-$(perfc) += perfc.o obj-$(crash_debug) += gdbstub.o obj-$(xenoprof) += xenoprof.o -subdir-$(CONFIG_COMPAT) += compat +obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o multicall.o tmem_xen.o xlat.o) subdir-$(x86_64) += hvm --- a/xen/common/compat/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -obj-y += domain.o -obj-y += kernel.o -obj-y += memory.o -obj-y += multicall.o -obj-y += xlat.o -obj-y += tmem_xen.o --- a/xen/common/compat/domain.c +++ b/xen/common/compat/domain.c @@ -3,7 +3,8 @@ * */ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/common/compat/kernel.c +++ b/xen/common/compat/kernel.c @@ -2,7 +2,8 @@ * kernel.c */ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/common/compat/memory.c +++ b/xen/common/compat/memory.c @@ -1,4 +1,5 @@ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/common/compat/multicall.c +++ b/xen/common/compat/multicall.c @@ -2,7 +2,8 @@ * multicall.c */ -#include +asm(".file \"" __FILE__ "\""); + #include #include #include --- a/xen/include/Makefile +++ b/xen/include/Makefile @@ -58,7 +58,7 @@ compat/%.h: compat/%.i Makefile $(BASEDI mv -f $@.new $@ compat/%.i: compat/%.c Makefile - $(CPP) $(filter-out -M% .%.d -include %/include/xen/config.h,$(CFLAGS)) $(cppflags-y) -o $@ $< + $(CPP) $(filter-out -M% %.d -include %/include/xen/config.h,$(CFLAGS)) $(cppflags-y) -o $@ $< compat/%.c: public/%.h xlat.lst Makefile $(BASEDIR)/tools/compat-build-source.py mkdir -p $(@D)