diff options
author | Andi Kleen <ak@linux.intel.com> | 2013-11-05 05:52:28 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2013-11-06 20:43:05 -0500 |
commit | cdd77e87eae52b7251acc5990207a1c4500a84ce (patch) | |
tree | 3d0bddb36432618ae04d8486e2ed4f4268d8a93f /drivers/lguest | |
parent | 4ae85370720156025e9cb873c13a0afb06ca1612 (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.c | 6 |
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 |