diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2009-01-31 02:17:23 -0500 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-02-02 11:06:30 -0500 |
commit | e584f559c7b8711cccdf319400acd6294b2c074e (patch) | |
tree | 1e565531ed5ee273ef880cbae71593bdea2be87b /arch/x86/include/asm/paravirt.h | |
parent | 4767afbf1f60f73997a7eb69a86d380f1fb27a92 (diff) |
x86/paravirt: don't restore second return reg
Impact: bugfix
In the 32-bit calling convention, %eax:%edx is used to return 64-bit
values. Don't save and restore %edx around wrapped functions, or they
can't return a full 64-bit result.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/include/asm/paravirt.h')
-rw-r--r-- | arch/x86/include/asm/paravirt.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index b17365c39749..016dce311305 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -1524,8 +1524,8 @@ extern struct paravirt_patch_site __parainstructions[], | |||
1524 | #define PV_RESTORE_REGS "popl %edx; popl %ecx;" | 1524 | #define PV_RESTORE_REGS "popl %edx; popl %ecx;" |
1525 | 1525 | ||
1526 | /* save and restore all caller-save registers, except return value */ | 1526 | /* save and restore all caller-save registers, except return value */ |
1527 | #define PV_SAVE_ALL_CALLER_REGS PV_SAVE_REGS | 1527 | #define PV_SAVE_ALL_CALLER_REGS "pushl %ecx;" |
1528 | #define PV_RESTORE_ALL_CALLER_REGS PV_RESTORE_REGS | 1528 | #define PV_RESTORE_ALL_CALLER_REGS "popl %ecx;" |
1529 | 1529 | ||
1530 | #define PV_FLAGS_ARG "0" | 1530 | #define PV_FLAGS_ARG "0" |
1531 | #define PV_EXTRA_CLOBBERS | 1531 | #define PV_EXTRA_CLOBBERS |