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.
.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 $(<F)=$(SRCPATH)/$< $(@D)/.$(@F).tmp $@
+endif
+ rm -f $(@D)/.$(@F).tmp
+else
$(CC) $(CFLAGS) -c $< -o $@
+endif
%.o: %.S Makefile
$(CC) $(AFLAGS) -c $< -o $@
* compat.c
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/hypercall.h>
#include <compat/xen.h>
* with this program; If not, see <http://www.gnu.org/licenses/>.
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/lib.h>
#include <xen/init.h>
* physdev.c
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/types.h>
#include <xen/guest_access.h>
* platform_hypercall.c
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/lib.h>
#include <compat/platform.h>
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.
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
*
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/lib.h>
#include <xen/sched.h>
* kernel.c
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/init.h>
#include <xen/lib.h>
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/types.h>
#include <xen/hypercall.h>
* multicall.c
*/
-asm(".file \"" __FILE__ "\"");
+EMIT_FILE;
#include <xen/types.h>
#include <xen/multicall.h>
#ifndef __ASSEMBLY__
#include <xen/compiler.h>
+
+#if defined(CONFIG_ENFORCE_UNIQUE_SYMBOLS) || defined(__clang__)
+# define EMIT_FILE asm ( "" )
+#else
+# define EMIT_FILE asm ( ".file \"" __FILE__ "\"" )
+#endif
+
#endif
+
#include <asm/config.h>
#define EXPORT_SYMBOL(var)
CONFIG_GCOV_FORMAT_AUTODETECT=y
CONFIG_UBSAN=n
-CONFIG_ENFORCE_UNIQUE_SYMBOLS=n