|
@@ -388,10 +388,11 @@ extern struct pv_lock_ops pv_lock_ops;
|
|
_paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]")
|
|
_paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]")
|
|
|
|
|
|
/* Simple instruction patching code. */
|
|
/* Simple instruction patching code. */
|
|
-#define DEF_NATIVE(ops, name, code) \
|
|
|
|
- extern const char start_##ops##_##name[] __visible, \
|
|
|
|
- end_##ops##_##name[] __visible; \
|
|
|
|
- asm("start_" #ops "_" #name ": " code "; end_" #ops "_" #name ":")
|
|
|
|
|
|
+#define NATIVE_LABEL(a,x,b) "\n\t.globl " a #x "_" #b "\n" a #x "_" #b ":\n\t"
|
|
|
|
+
|
|
|
|
+#define DEF_NATIVE(ops, name, code) \
|
|
|
|
+ __visible extern const char start_##ops##_##name[], end_##ops##_##name[]; \
|
|
|
|
+ asm(NATIVE_LABEL("start_", ops, name) code NATIVE_LABEL("end_", ops, name))
|
|
|
|
|
|
unsigned paravirt_patch_nop(void);
|
|
unsigned paravirt_patch_nop(void);
|
|
unsigned paravirt_patch_ident_32(void *insnbuf, unsigned len);
|
|
unsigned paravirt_patch_ident_32(void *insnbuf, unsigned len);
|