x86: save/restore only partial register state where possible
authorJan Beulich <jbeulich@suse.com>
Tue, 30 Oct 2012 15:46:07 +0000 (16:46 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 30 Oct 2012 15:46:07 +0000 (16:46 +0100)
commitecf9846a6a200e8c8cfb26d409d18fd9615df9b9
tree9f3cf4c722a6991a8dc032a050984f9ba8014923
parent4d246723a85a03406e4969a260291e11b8e05960
x86: save/restore only partial register state where possible

... and make restore conditional not only upon having saved the state,
but also upon whether saved state was actually modified (and register
values are known to have been preserved).

Note that RBP is unconditionally considered a volatile register (i.e.
irrespective of CONFIG_FRAME_POINTER), since the RBP handling would
become overly complicated due to the need to save/restore it on the
compat mode hypercall path [6th argument].

Note further that for compat mode code paths, saving/restoring R8...R15
is entirely unnecessary - we don't allow those guests to enter 64-bit
mode, and hence they have no way of seeing these registers' contents
(and there consequently also is no information leak, except if the
context saving domctl would be considered such).

Finally, note that this may not properly deal with gdbstub's needs, yet
(but if so, I can't really suggest adjustments, as I don't know that
code).

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
tools/tests/x86_emulator/x86_emulate.c
xen/arch/x86/domain.c
xen/arch/x86/irq.c
xen/arch/x86/traps.c
xen/arch/x86/x86_64/compat/entry.S
xen/arch/x86/x86_64/entry.S
xen/arch/x86/x86_64/traps.c
xen/arch/x86/x86_emulate.c
xen/arch/x86/x86_emulate/x86_emulate.c
xen/common/wait.c
xen/include/asm-x86/x86_64/asm_defns.h