[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/5] compat: enforce distinguishable file names in symbol table
On Mon, 2015-10-26 at 05:50 -0600, Jan Beulich wrote: > 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 ^ time ? > 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 <jbeulich@xxxxxxxx> > > --- 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)))) Is this generating a .subdir.file.d for each subdir/file.o in obj-y? This is as a consequence of now building subdir/file.o from the parent directory instead of recursing for some subset of files? It seems quite inconsistent to me to have xen/arch/x86/x86_64/Makefile building some files directly and xen/arch/x86/Makefile to be building another subset of those files via x86_64/FOO.o. Even more so that other than compat.o I can't see what makes many affected files (e.g. mm.o or platform_hypercall.o) special in this regard. Does all of that fall out from a desire to reuse __FILE__? If so I'm inclined to suggest that -DBUILD_FILENAME_PREFIX="compat/" or whatever would seem likely to me to end up less strange (but maybe you tried that and it was worse?). > + > # 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 <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/hypercall.h> > #include <compat/xen.h> > #include <compat/physdev.h> > --- 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 <http://www.gnu.org/licenses/>. > */ > > -#include <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/lib.h> > #include <xen/init.h> > #include <xen/mm.h> > --- a/xen/arch/x86/x86_64/physdev.c > +++ b/xen/arch/x86/x86_64/physdev.c > @@ -2,7 +2,8 @@ > * physdev.c > */ > > -#include <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/types.h> > #include <xen/guest_access.h> > #include <compat/xen.h> > --- 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 <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/lib.h> > #include <compat/platform.h> > > --- 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 <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/lib.h> > #include <xen/sched.h> > #include <xen/domain.h> > --- a/xen/common/compat/kernel.c > +++ b/xen/common/compat/kernel.c > @@ -2,7 +2,8 @@ > * kernel.c > */ > > -#include <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/init.h> > #include <xen/lib.h> > #include <xen/errno.h> > --- a/xen/common/compat/memory.c > +++ b/xen/common/compat/memory.c > @@ -1,4 +1,5 @@ > -#include <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/types.h> > #include <xen/hypercall.h> > #include <xen/guest_access.h> > --- a/xen/common/compat/multicall.c > +++ b/xen/common/compat/multicall.c > @@ -2,7 +2,8 @@ > * multicall.c > */ > > -#include <xen/config.h> > +asm(".file \"" __FILE__ "\""); > + > #include <xen/types.h> > #include <xen/multicall.h> > #include <xen/trace.h> > --- 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) > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |