WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] syscall32 being vectored through syscall handler

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] syscall32 being vectored through syscall handler
From: John Levon <levon@xxxxxxxxxxxxxxxxx>
Date: Tue, 24 Feb 2009 02:24:16 -0500
Delivery-date: Mon, 23 Feb 2009 23:24:44 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.9i
I presume this is known-working on Linux?

I've verified that we're setting up two different callback addresses,
but a 32u/64k/64h syscall is ending up in the 64u handler. From what I
can see, this code:

        /* TB_eip = (32-bit syscall && syscall32_addr) ?
         *          syscall32_addr : syscall_addr */
        xor   %eax,%eax
        cmpw  $FLAT_USER_CS32,UREGS_cs(%rsp)
        /*cmpw $0x43,UREGS_cs(%rsp)*/
        cmoveq VCPU_syscall32_addr(%rbx),%rax
        testq %rax,%rax
        cmovzq VCPU_syscall_addr(%rbx),%rax

is supposed to be noticing the %cs written to the stack via here:

410     /* Trampoline for SYSCALL entry from compatibility mode. */
411     stack = (char *)L1_CACHE_ALIGN((unsigned long)stack);
412     wrmsrl(MSR_CSTAR, (unsigned long)stack);
413     stack += write_stack_trampoline(stack, stack_bottom, FLAT_USER_CS32);

and loading my syscall32 handler's %rip. Any suggestions on what might be going
wrong? Here's the state of the world when dropped into the syscall handler:

kmdb: stop at sys_syscall
kmdb: target stopped at:
sys_syscall:    popq   %rcx
[9]> ::regs
%rax = 0x0000000000000014                 %r9  = 0x000000000000281f 
%rbx = 0x00000000feffb7b4                 %r10 = 0x0000000000000001 
%rcx = 0xfffffffffb8012f8     sys_syscall %r11 = 0x0000000000000206 
%rdx = 0x0000000000000000                 %r12 = 0x0000000000000001 
%rsi = 0x0000000008047d88                 %r13 = 0x0000000000000000 
%rdi = 0x0000000008047e1c                 %r14 = 0xffffff091c1070f0 
%r8  = 0xffffff091c1070f0                 %r15 = 0x00000000ffff4ff0 

%rip = 0xfffffffffb8012f8 sys_syscall
%rbp = 0x0000000008047d88
%rsp = 0xffffff003c09cfb8
%rflags = 0x00000006
  id=0 vip=0 vif=0 ac=0 vm=0 rf=0 nt=0 iopl=0x0
  status=<of,df,if,tf,sf,zf,af,PF,cf>

                        %cs = 0xe030    %ds = 0x004b    %es = 0x004b
%trapno = 0x3           %fs = 0x0000    %gs = 0x01c3
   %err = 0x0
[9]> 0xffffff003c09cfb8,0x100::dump -g 8 -e
ffffff003c09cfb8:  0000000008050c81 0000000000000306
ffffff003c09cfc8:  0000000008050c81 000000000000e023
ffffff003c09cfd8:  0000000000000306 0000000008047d84
ffffff003c09cfe8:  000000000000e02b 0000000000000000
ffffff003c09cff8:  0000000000000000                 

thanks
john

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>