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

Re: [Xen-devel] Using SYSCALL/SYSRET with a minios kernel


On Mon, 2008-02-25 at 00:22 +0100, Goswin von Brederlow wrote: 
> Hi,
> I'm trying to use the SYSCALL/SYSRET opcodes with a minios kernel
> without much success.
> Going by the manuals (and linux sources) I first have to setup the
> STAR and LSTAR registers to define the segment and instruction pointer
> to be used for SYSCALL:
>       /* 
>          * LSTAR and STAR live in a bit strange symbiosis.
>          * They both write to the same internal register. STAR allows to set
>          * CS/DS but only a 32bit target. LSTAR sets the 64bit rip.
>          */ 
>         wrmsrl(MSR_STAR,  ((uint64_t)__USER_CS)<<48  | 
> ((uint64_t)__KERNEL_CS)<<32); 
>         wrmsrl(MSR_LSTAR, system_call); 
> But all that does is give a message on the xen console:
> (XEN) traps.c:1467:d137 Domain attempted WRMSR 00000000c0000081 from 
> e023e010:00000000 to e033e033:00000000.
> (XEN) traps.c:1467:d137 Domain attempted WRMSR 00000000c0000082 from 
> ffff8300:001e0800 to 00000000:001054c0.

The PV interface simply does not support STAR/LSTAR. It's that
simple. :) I suppose you want to implement system calls? Check the
HYPERVISOR_set_callbacks() call. The syscall_address parameter presently
remains entirely unused in mini-os. But as far as I could tell
immediately from the source, syscall/sysret appears to be supported by
the general callback mechanism the same way sysenter/sysleave presently


Daniel Stodden
LRR     -      Lehrstuhl fÃr Rechnertechnik und Rechnerorganisation
Institut fÃr Informatik der TU MÃnchen             D-85748 Garching
http://www.lrr.in.tum.de/~stodden         mailto:stodden@xxxxxxxxxx
PGP Fingerprint: F5A4 1575 4C56 E26A 0B33  3D80 457E 82AE B0D8 735B

Xen-devel mailing list



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