qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Posix timer syscalls ; dealing with the timer_t type


From: Erik de Castro Lopo
Subject: Re: [Qemu-devel] Posix timer syscalls ; dealing with the timer_t type
Date: Fri, 31 Aug 2012 05:15:45 +1000

Andreas Färber wrote:

> Hi,
> 
> Am 30.08.2012 14:30, schrieb Erik de Castro Lopo:
> > I'm working on implementing Posix timers in linux-user.
> > 
> > I'm having trouble figuring out how to handle the timer_t type.
> > Consider the following code with say 32 bit ARM being emulated
> > on 64 bit x86-64:
> > 
> >     timer_t timerid;
> > 
> >     err = timer_create(clockid, &sev, &timerid);
> >     err = timer_gettime(timerid, &curr);
> > 
> > The issue is that memory for the timer_t value in the 32 bit
> > target is alloacted on the stack (where the timer_t is 4 bytes)
> > but the value provided by the 64 bit host where the timer_t is
> > 8 bytes.
> > 
> > Any suggestions on dealing with this?
> 
> typedef target_ulong target_timer_t;
> 
> or abi_ulong, or without the u if signed.

The timer_t type is actually an alias for void*.

> Depending on where/how you use this, you may need to convert back and
> forth between host and target values.

The complication is that each call to the host's timer_create() function
generates 64 bits of data, but on the 32 bit target, where there are only
32 bits to store that data.

The only obvious solution is store the 64 bit pointers from the host
in a table and return the index into that table to the target as its
version of the timer_t. Does that make sense?

Cheers,
Erik
-- 
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/



reply via email to

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