diff --git a/xen/Kconfig.debug b/xen/Kconfig.debug index 22573e74db..cf42e5e7a0 100644 --- a/xen/Kconfig.debug +++ b/xen/Kconfig.debug @@ -38,7 +38,7 @@ config FRAME_POINTER config COVERAGE bool "Code coverage support" depends on !LIVEPATCH - select SUPPRESS_DUPLICATE_SYMBOL_WARNINGS + select SUPPRESS_DUPLICATE_SYMBOL_WARNINGS if !ENFORCE_UNIQUE_SYMBOLS ---help--- Enable code coverage support. diff --git a/xen/Rules.mk b/xen/Rules.mk index 3090ea7828..b0bc7601c1 100644 --- a/xen/Rules.mk +++ b/xen/Rules.mk @@ -194,12 +194,24 @@ FORCE: .PHONY: clean clean:: $(addprefix _clean_, $(subdir-all)) - rm -f *.o *~ core $(DEPS_RM) + rm -f *.o .*.o.tmp *~ core $(DEPS_RM) _clean_%/: FORCE $(MAKE) -f $(BASEDIR)/Rules.mk -C $* clean +SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR)) + %.o: %.c Makefile +ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y) + $(CC) $(CFLAGS) -c $< -o $(@D)/.$(@F).tmp +ifeq ($(clang),y) + $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(@D)/.$(@F).tmp $@ +else + $(OBJCOPY) --redefine-sym $( #include diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index fa55f3474e..8ea09ecc30 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -16,7 +16,7 @@ * with this program; If not, see . */ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/arch/x86/x86_64/physdev.c b/xen/arch/x86/x86_64/physdev.c index c5a00ea93f..0a50cbd4d8 100644 --- a/xen/arch/x86/x86_64/physdev.c +++ b/xen/arch/x86/x86_64/physdev.c @@ -2,7 +2,7 @@ * physdev.c */ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/arch/x86/x86_64/platform_hypercall.c b/xen/arch/x86/x86_64/platform_hypercall.c index 8fa2543a2d..fbba893a47 100644 --- a/xen/arch/x86/x86_64/platform_hypercall.c +++ b/xen/arch/x86/x86_64/platform_hypercall.c @@ -2,7 +2,7 @@ * platform_hypercall.c */ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/common/Kconfig b/xen/common/Kconfig index f754741972..2f516da101 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -373,8 +373,7 @@ config FAST_SYMBOL_LOOKUP config ENFORCE_UNIQUE_SYMBOLS bool "Enforce unique symbols" - default y - depends on LIVEPATCH + default LIVEPATCH ---help--- Multiple symbols with the same name aren't generally a problem unless livepatching is to be used. @@ -387,8 +386,8 @@ config ENFORCE_UNIQUE_SYMBOLS livepatch build and apply correctly. config SUPPRESS_DUPLICATE_SYMBOL_WARNINGS - bool "Suppress duplicate symbol warnings" if !ENFORCE_UNIQUE_SYMBOLS - default y if !ENFORCE_UNIQUE_SYMBOLS + bool "Suppress duplicate symbol warnings" + depends on !ENFORCE_UNIQUE_SYMBOLS ---help--- Multiple symbols with the same name aren't generally a problem unless Live patching is to be used, so these warnings can be diff --git a/xen/common/compat/domain.c b/xen/common/compat/domain.c index 2531fa7421..11c6afc463 100644 --- a/xen/common/compat/domain.c +++ b/xen/common/compat/domain.c @@ -3,7 +3,7 @@ * */ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/common/compat/kernel.c b/xen/common/compat/kernel.c index 64232669d2..5c6e7322f8 100644 --- a/xen/common/compat/kernel.c +++ b/xen/common/compat/kernel.c @@ -2,7 +2,7 @@ * kernel.c */ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/common/compat/memory.c b/xen/common/compat/memory.c index 10a954f281..3851f756c7 100644 --- a/xen/common/compat/memory.c +++ b/xen/common/compat/memory.c @@ -1,4 +1,4 @@ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/common/compat/multicall.c b/xen/common/compat/multicall.c index 43d2d8152d..a0e9918f48 100644 --- a/xen/common/compat/multicall.c +++ b/xen/common/compat/multicall.c @@ -2,7 +2,7 @@ * multicall.c */ -asm(".file \"" __FILE__ "\""); +EMIT_FILE; #include #include diff --git a/xen/include/xen/config.h b/xen/include/xen/config.h index a106380a23..b76222ecf6 100644 --- a/xen/include/xen/config.h +++ b/xen/include/xen/config.h @@ -11,7 +11,15 @@ #ifndef __ASSEMBLY__ #include + +#if defined(CONFIG_ENFORCE_UNIQUE_SYMBOLS) || defined(__clang__) +# define EMIT_FILE asm ( "" ) +#else +# define EMIT_FILE asm ( ".file \"" __FILE__ "\"" ) #endif + +#endif + #include #define EXPORT_SYMBOL(var) diff --git a/xen/tools/kconfig/allrandom.config b/xen/tools/kconfig/allrandom.config index c480896b96..76f74320b5 100644 --- a/xen/tools/kconfig/allrandom.config +++ b/xen/tools/kconfig/allrandom.config @@ -2,4 +2,3 @@ CONFIG_GCOV_FORMAT_AUTODETECT=y CONFIG_UBSAN=n -CONFIG_ENFORCE_UNIQUE_SYMBOLS=n