aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Deegan <tim@xen.org>2012-04-11 13:10:33 +0100
committerTim Deegan <tim@xen.org>2012-04-11 13:10:33 +0100
commit05db6ab3e5cbe1e5d7edaf7caaa246bb97bc45ca (patch)
tree810b79071d4d65f38f822cb5c6a494e0e284e06d
parent2b7aac76417d57e336f41b6f6d5b0cb301d512f8 (diff)
downloadxen-05db6ab3e5cbe1e5d7edaf7caaa246bb97bc45ca.tar.gz
xen-05db6ab3e5cbe1e5d7edaf7caaa246bb97bc45ca.tar.bz2
xen-05db6ab3e5cbe1e5d7edaf7caaa246bb97bc45ca.zip
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 <tim@xen.org> Acked-by: Keir Fraser <keir@xen.org> Committed-by: Tim Deegan <tim@xen.org>
-rw-r--r--xen/arch/x86/oprofile/op_x86_model.h2
-rw-r--r--xen/include/acpi/cpufreq/cpufreq.h2
-rw-r--r--xen/include/xen/compiler.h6
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)))