[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [linux-2.6.18-xen] x86-64: fix HYPERVISOR_iret unwind annotation


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-linux-2.6.18-xen <patchbot@xxxxxxx>
  • Date: Mon, 04 Mar 2013 09:22:02 +0000
  • Delivery-date: Mon, 04 Mar 2013 09:22:18 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxx>
# Date 1362388145 -3600
# Node ID 805186ebb4ab418f1ff968a634a59d7658ba126c
# Parent  28e95bbec82172230b27c9cdb8bfa8aa0d342bbc
x86-64: fix HYPERVISOR_iret unwind annotation

Minimally for %rax this needs to reflect that the value is no longer
saved: Since the whole hypercall page is covered by a single FDE,
subsequent entries would otherwise retain the state of %rax being saved
on the stack, yet the offset it's being saved at is out of bounds for
the "normal" hypercall stubs.

Breaking up the single FDE into per stub ones would increase the size
of the resulting .eh_frame section, which is already quite big for this
simple a piece of code.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---


diff -r 28e95bbec821 -r 805186ebb4ab arch/x86_64/kernel/head-xen.S
--- a/arch/x86_64/kernel/head-xen.S     Wed Feb 27 11:21:03 2013 +0100
+++ b/arch/x86_64/kernel/head-xen.S     Mon Mar 04 10:09:05 2013 +0100
@@ -98,6 +98,9 @@ NEXT_PAGE(hypercall_page)
        .skip 2 /* syscall */
        .if i == __HYPERVISOR_iret
        CFI_ADJUST_CFA_OFFSET   -3*8
+       CFI_SAME_VALUE  rax
+       CFI_SAME_VALUE  r11
+       CFI_SAME_VALUE  rcx
        .else
        .skip 2 /* pop %r11 */
        CFI_ADJUST_CFA_OFFSET -8
diff -r 28e95bbec821 -r 805186ebb4ab include/asm-x86_64/dwarf2.h
--- a/include/asm-x86_64/dwarf2.h       Wed Feb 27 11:21:03 2013 +0100
+++ b/include/asm-x86_64/dwarf2.h       Mon Mar 04 10:09:05 2013 +0100
@@ -28,6 +28,7 @@
 #define CFI_REMEMBER_STATE .cfi_remember_state
 #define CFI_RESTORE_STATE .cfi_restore_state
 #define CFI_UNDEFINED .cfi_undefined
+#define CFI_SAME_VALUE .cfi_same_value
 
 #else
 
@@ -45,6 +46,7 @@
 #define CFI_REMEMBER_STATE     #
 #define CFI_RESTORE_STATE      #
 #define CFI_UNDEFINED  #
+#define CFI_SAME_VALUE         #
 
 #endif
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.