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

[Xen-devel] syscall32 being vectored through syscall handler



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


 


Rackspace

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