aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lguest
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2013-11-05 05:52:28 -0500
committerRusty Russell <rusty@rustcorp.com.au>2013-11-06 20:43:05 -0500
commitcdd77e87eae52b7251acc5990207a1c4500a84ce (patch)
tree3d0bddb36432618ae04d8486e2ed4f4268d8a93f /drivers/lguest
parent4ae85370720156025e9cb873c13a0afb06ca1612 (diff)
x86, asmlinkage, lguest: Pass in globals into assembler statement
Tell the compiler that the inline assembler statement references lguest_entry. This fixes compile problems with LTO where the variable and the assembler code may end up in different files. Cc: x86@kernel.org Cc: rusty@rustcorp.com.au Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/lguest')
-rw-r--r--drivers/lguest/x86/core.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c
index 516923926335..922a1acbf652 100644
--- a/drivers/lguest/x86/core.c
+++ b/drivers/lguest/x86/core.c
@@ -157,7 +157,7 @@ static void run_guest_once(struct lg_cpu *cpu, struct lguest_pages *pages)
157 * stack, then the address of this call. This stack layout happens to 157 * stack, then the address of this call. This stack layout happens to
158 * exactly match the stack layout created by an interrupt... 158 * exactly match the stack layout created by an interrupt...
159 */ 159 */
160 asm volatile("pushf; lcall *lguest_entry" 160 asm volatile("pushf; lcall *%4"
161 /* 161 /*
162 * This is how we tell GCC that %eax ("a") and %ebx ("b") 162 * This is how we tell GCC that %eax ("a") and %ebx ("b")
163 * are changed by this routine. The "=" means output. 163 * are changed by this routine. The "=" means output.
@@ -169,7 +169,9 @@ static void run_guest_once(struct lg_cpu *cpu, struct lguest_pages *pages)
169 * physical address of the Guest's top-level page 169 * physical address of the Guest's top-level page
170 * directory. 170 * directory.
171 */ 171 */
172 : "0"(pages), "1"(__pa(cpu->lg->pgdirs[cpu->cpu_pgd].pgdir)) 172 : "0"(pages),
173 "1"(__pa(cpu->lg->pgdirs[cpu->cpu_pgd].pgdir)),
174 "m"(lguest_entry)
173 /* 175 /*
174 * We tell gcc that all these registers could change, 176 * We tell gcc that all these registers could change,
175 * which means we don't have to save and restore them in 177 * which means we don't have to save and restore them in