qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] User mode: Handle x86_64 vsyscall


From: Laurent Desnogues
Subject: Re: [Qemu-devel] [PATCH] User mode: Handle x86_64 vsyscall
Date: Sun, 18 Oct 2009 02:16:33 +0200

Hi Edgar,

On Sat, Oct 17, 2009 at 9:57 PM, Edgar E. Iglesias
<address@hidden> wrote:
>
> It feels a bit strange to have the CPU model know about linux vsyscalls.
> Did you consider having the linux-user loader pass a qemu version of the
> x86_64 vdso to the guest through the auxvector? That version could probably
> implement the vsyscalls by translating them into syscalls with x86_64 code.
> It probably doesn't even need to do that btw, just make sure to fill it
> with syscall insns to raise exceptions and then have the linux-user/ code
> treat syscalls with eip from vdso page differently. That way the CPU model
> doesn't need to know about vdso and you can implement vsyscalls that may
> need magic interactions with qemu.
>
> Or does that not work for some reason? Performance?
> Are there maybe old binaries that don't look in the auxvector and just assume
> a fixed address for the vdso?

A recent compiler (gcc 4.4.0) produces this code for a statically
compiled program:

00000000005779e0 <time>:
  5779e0:       48 83 ec 08             sub    $0x8,%rsp
  5779e4:       48 c7 c0 00 04 60 ff    mov    $0xffffffffff600400,%rax
  5779eb:       ff d0                   callq  *%rax
  5779ed:       48 83 c4 08             add    $0x8,%rsp
  5779f1:       c3                      retq

I never heard of "auxvector" before.  Is this related to what is
discussed here?

http://manugarg.googlepages.com/aboutelfauxiliaryvectors

I dumped 4KB mapped at AT_SYSINFO_EHDR and processed
it through readelf. Nothing matches the address above:

     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: ffffffffff70030c     0 SECTION LOCAL  DEFAULT    7
     2: ffffffffff700800    74 FUNC    WEAK   DEFAULT   12
clock_gettime@@LINUX_2.6
     3: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6
     4: ffffffffff7006c0   137 FUNC    GLOBAL DEFAULT   12
__vdso_gettimeofday@@LINUX_2.6
     5: ffffffffff700850    61 FUNC    GLOBAL DEFAULT   12
__vdso_getcpu@@LINUX_2.6
     6: ffffffffff7006c0   137 FUNC    WEAK   DEFAULT   12
gettimeofday@@LINUX_2.6
     7: ffffffffff700850    61 FUNC    WEAK   DEFAULT   12 getcpu@@LINUX_2.6
     8: ffffffffff700800    74 FUNC    GLOBAL DEFAULT   12
__vdso_clock_gettime@@LINUX_2.6

I probably missed your point :-)

Thanks,

Laurent




reply via email to

[Prev in Thread] Current Thread [Next in Thread]