From 05db6ab3e5cbe1e5d7edaf7caaa246bb97bc45ca Mon Sep 17 00:00:00 2001 From: Tim Deegan Date: Wed, 11 Apr 2012 13:10:33 +0100 Subject: [PATCH] x86: explicitly mark __initdata variables as used when building with clang. This stops LLVM from replacing it with a different, auto-generated variable as part of an optimization. (The auto-generated variable ends up in the normal data section.) Remove stray __read_mostly annotations on declarations that this unmasked. Signed-off-by: Tim Deegan Acked-by: Keir Fraser Committed-by: Tim Deegan --- xen/arch/x86/oprofile/op_x86_model.h | 2 +- xen/include/acpi/cpufreq/cpufreq.h | 2 +- xen/include/xen/compiler.h | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/oprofile/op_x86_model.h b/xen/arch/x86/oprofile/op_x86_model.h index 87beedbf87..31d473b7f6 100644 --- a/xen/arch/x86/oprofile/op_x86_model.h +++ b/xen/arch/x86/oprofile/op_x86_model.h @@ -53,6 +53,6 @@ extern struct op_x86_model_spec const op_amd_fam15h_spec; void arch_perfmon_setup_counters(void); extern int ppro_has_global_ctrl; -extern struct op_x86_model_spec const *__read_mostly model; +extern struct op_x86_model_spec const *model; #endif /* OP_X86_MODEL_H */ diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/cpufreq.h index 3377232ccd..1798b9bb19 100644 --- a/xen/include/acpi/cpufreq/cpufreq.h +++ b/xen/include/acpi/cpufreq/cpufreq.h @@ -22,7 +22,7 @@ DECLARE_PER_CPU(spinlock_t, cpufreq_statistic_lock); -extern bool_t __read_mostly cpufreq_verbose; +extern bool_t cpufreq_verbose; struct cpufreq_governor; diff --git a/xen/include/xen/compiler.h b/xen/include/xen/compiler.h index 04f84ec393..8c26756afa 100644 --- a/xen/include/xen/compiler.h +++ b/xen/include/xen/compiler.h @@ -14,7 +14,13 @@ #define always_inline __inline__ __attribute__ ((always_inline)) #define noinline __attribute__((noinline)) +#ifdef __clang__ +/* Clang can replace some vars with new automatic ones that go in .data; + * mark all explicit-segment vars 'used' to prevent that. */ +#define __section(s) __attribute_used__ __attribute__((__section__(s))) +#else #define __section(s) __attribute__((__section__(s))) +#endif #define __used_section(s) __attribute_used__ __attribute__((__section__(s))) #define __text_section(s) __attribute__((__section__(s))) -- 2.39.5