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>
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 */
DECLARE_PER_CPU(spinlock_t, cpufreq_statistic_lock);
-extern bool_t __read_mostly cpufreq_verbose;
+extern bool_t cpufreq_verbose;
struct cpufreq_governor;
#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)))