|
@@ -140,6 +140,20 @@ extern void clear_cpu_cap(struct cpuinfo_x86 *c, unsigned int bit);
|
|
|
|
|
|
#define setup_force_cpu_bug(bit) setup_force_cpu_cap(bit)
|
|
|
|
|
|
+#if defined(__clang__) && !defined(CC_HAVE_ASM_GOTO)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Workaround for the sake of BPF compilation which utilizes kernel
|
|
|
+ * headers, but clang does not support ASM GOTO and fails the build.
|
|
|
+ */
|
|
|
+#ifndef __BPF_TRACING__
|
|
|
+#warning "Compiler lacks ASM_GOTO support. Add -D __BPF_TRACING__ to your compiler arguments"
|
|
|
+#endif
|
|
|
+
|
|
|
+#define static_cpu_has(bit) boot_cpu_has(bit)
|
|
|
+
|
|
|
+#else
|
|
|
+
|
|
|
/*
|
|
|
* Static testing of CPU features. Used the same as boot_cpu_has().
|
|
|
* These will statically patch the target code for additional
|
|
@@ -195,6 +209,7 @@ t_no:
|
|
|
boot_cpu_has(bit) : \
|
|
|
_static_cpu_has(bit) \
|
|
|
)
|
|
|
+#endif
|
|
|
|
|
|
#define cpu_has_bug(c, bit) cpu_has(c, (bit))
|
|
|
#define set_cpu_bug(c, bit) set_cpu_cap(c, (bit))
|