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/
Home Products Support Community News


Re: [Xen-devel] A question about SYSENTER/SYSEXIT in HVM guest

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Xen-devel] A question about SYSENTER/SYSEXIT in HVM guest
From: Christoph Egger <Christoph.Egger@xxxxxxx>
Date: Mon, 6 Apr 2009 15:45:49 +0200
Cc: Guofu Xiang <whxgf1984@xxxxxxxxx>
Delivery-date: Mon, 06 Apr 2009 06:46:34 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <d15b2c7b0904060611v504df7b5g4ecaaa8bef7fe12f@xxxxxxxxxxxxxx>
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>
References: <d15b2c7b0904060611v504df7b5g4ecaaa8bef7fe12f@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: KMail/1.9.7
On Monday 06 April 2009 15:11:52 Guofu Xiang wrote:
> The CPU type of our server is Intel Xeon E5310, and the OS is Fedora 8. Xen
> 3.2 is installed by compilation. When the HVM guest is x86_32 Fedora 8, the
> system call is implemented by instruction - *int $80h*. Our debug result by
> gdb is as follow.
> Dump of assembler code for function __kernel_vsyscall:
> 0xb7f87400 <__kernel_vsyscall+0>:       int    $0x80
> 0xb7f87402 <__kernel_vsyscall+2>:       ret
> End of assembler dump.
> However, when the HVM guest is x86_64 Fedora 8, the system call is
> implemented by instruction - *syscall*. The debug result is as fellow:
> Dump of assembler code for function getuid:
> 0x00000036e7296220 <getuid+0>:  mov    $0x66,%eax
> 0x00000036e7296225 <getuid+5>:  syscall
> 0x00000036e7296227 <getuid+7>:  retq
> As far as I know, fast system call is implemented by *sysenter* on Intel
> CPU, and *syscall* on AMD CPU. Why the debug result is *syscall*, rather
> than *sysenter*?
> If the HVM guest is x86_32 Fedora 8, can we set the system call
> implementation by *sysenter*? In x86_64 OS, is all system call implemented
> by *syscall*?
> Thank you for your response!

The Linux kernel has several vdso pages, one for int 0x80, one for syscall and 
one for sysenter. The Linux kernel maps one of them into userspace
depending on the cpuid vendor string.
In 64bit mode, the glibc always uses syscall, therefore all
applications use syscall instruction. If you run a 32bit application,
the glibc uses the vdso page (if its version is new enough or patched by the 

I don't know the exact version since glibc uses the vdso, Slackware 12.1.0
comes with an unpatched glibc 2.4 and it doesn't use the vdso page.
It uses syscall in 64bit mode and int 0x80 in 32bit mode.

SLES 10.0 comes with a patched glibc 2.3.5 and uses the vdso page in 32bit


---to satisfy European Law for business letters:
Advanced Micro Devices GmbH
Karl-Hammerschmidt-Str. 34, 85609 Dornach b. Muenchen
Geschaeftsfuehrer: Jochen Polster, Thomas M. McCoy, Giuliano Meroni
Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen
Registergericht Muenchen, HRB Nr. 43632

Xen-devel mailing list

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