From mboxrd@z Thu Jan 1 00:00:00 1970 From: Goswin von Brederlow Subject: Re: Using SYSCALL/SYSRET with a minios kernel Date: Mon, 25 Feb 2008 11:04:37 +0100 Message-ID: <87oda5mjwq.fsf@web.de> References: <87k5kuym6k.fsf@web.de> <1203897714.9103.6.camel@thinkpad.localdomain> <87hcfx3ima.fsf@web.de> <1203906381.9103.24.camel@thinkpad.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <1203906381.9103.24.camel@thinkpad.localdomain> (Daniel Stodden's message of "Mon, 25 Feb 2008 03:26:21 +0100") List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Daniel Stodden Cc: xen-devel@lists.xensource.com, Goswin von Brederlow List-Id: xen-devel@lists.xenproject.org Daniel Stodden writes: > On Mon, 2008-02-25 at 02:55 +0100, Goswin von Brederlow wrote: >> Daniel Stodden writes: >>=20 >> > Hi. >> > >> > On Mon, 2008-02-25 at 00:22 +0100, Goswin von Brederlow wrote:=20 >> >> Hi, >> >>=20 >> >> I'm trying to use the SYSCALL/SYSRET opcodes with a minios kernel >> >> without much success. >> >... >> > 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 prese= ntly >> > 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 presen= tly >> > is. >> > >> > regards, >> > daniel >>=20 >> Ok, here is what I did for the callbacks: >>=20 >> --- x86_64.S --- >> ENTRY(syscall_callback) >> int $80 >> zeroentry do_syscall >>=20 >> --- kernel.c --- >> HYPERVISOR_set_callbacks((unsigned long)hypervisor_callback, >> (unsigned long)failsafe_callback, >> (unsigned long)syscall_callback); >>=20 >> __asm__ __volatile__("syscall"); >>=20 >> If I understood you right that should set the RIP to syscall_callback >> and execute from there. > > M=C3=B6=C3=B6p! Only when calling in from virtual user mode. Otherwise,= you're > triggering a hypercall service routine, and one might suspect you're > presently just generating an error condition with that. :) That sounds verry odd. I'm getting no indication of it from xen. But ok. How do I test that. Or differently phrased: What is the best way to go into user space for the verry first time? Do I really have to create a fake stack frame and call HYPERVISOR_iret? > BTW: I found building Xen with 'debug=3Dy' generates a helpful comment = on > the console every now and xen. I did that and added a patch that makes HYPERVISOR_console_io work for domU so it shows up in "xm dmesg". >> But still, the syscall opcode does nothing. >> In case you wonder. The "int $80" is there to crash the domain and >> tell me it reached that point. > > hth, > daniel MfG Goswin