Commit e584f559 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by H. Peter Anvin

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: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 4767afbf
...@@ -1524,8 +1524,8 @@ extern struct paravirt_patch_site __parainstructions[], ...@@ -1524,8 +1524,8 @@ extern struct paravirt_patch_site __parainstructions[],
#define PV_RESTORE_REGS "popl %edx; popl %ecx;" #define PV_RESTORE_REGS "popl %edx; popl %ecx;"
/* save and restore all caller-save registers, except return value */ /* save and restore all caller-save registers, except return value */
#define PV_SAVE_ALL_CALLER_REGS PV_SAVE_REGS #define PV_SAVE_ALL_CALLER_REGS "pushl %ecx;"
#define PV_RESTORE_ALL_CALLER_REGS PV_RESTORE_REGS #define PV_RESTORE_ALL_CALLER_REGS "popl %ecx;"
#define PV_FLAGS_ARG "0" #define PV_FLAGS_ARG "0"
#define PV_EXTRA_CLOBBERS #define PV_EXTRA_CLOBBERS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment