Le mardi 01 janvier 2013 à 19:45 +0000, Peter Maydell a écrit : > On 1 January 2013 18:37, Laurent Vivier <laur...@vivier.eu> wrote: > > Le mardi 01 janvier 2013 à 18:27 +0100, Laurent Vivier a écrit : > >> Le mardi 01 janvier 2013 à 15:03 +0000, Peter Maydell a écrit : > >> > On 31 December 2012 22:19, Laurent Vivier <laur...@vivier.eu> wrote: > >> > > works... sometime. In fact, work if target endianess is network > >> > > endianess. > >> > > > >> > > Correct me if I'm wrong. > >> > > > >> > > target host > >> > > little endian / big endian > >> > > > >> > > memory 00 00 00 03 > >> > > >> > Syscall arguments aren't generally passed in memory, they're > >> > in registers (and if they were pased in memory for some architecture > >> > then that arch would do a load-and-swap-from-memory in main.c). > >> > So the value you see in do_socket() is always "the integer passed > >> > as a syscall parameter, as a host-order integer". > >> > >> Yes, I missed that. > > > > But, in fact, for socketcall(), they are read from memory : > > Yes, this is because socketcall is weird. The actual kernel > implementation also reads them from memory: > http://lxr.linux.no/#linux+v3.7.1/net/socket.c#L2443 > as an array of unsigned longs. So as long as qemu also reads > them out of memory as an array of target abi_ulongs (which as > you can see we do) then we'll retrieve the same value (0x3 or > 0x300) to pass to do_socket() as the guest program wrote into > its guest view of memory (since it should have written an > unsigned long). (What is happening here is that the guest > binary writes the protocol value to memory as an unsigned > long, so it goes in as 4 bytes in whichever order the guest uses; > qemu's get_user_ual() then rereads those 4 bytes, swapping > the value back so we get the same integer value the guest > program stored. Note that the guest doesn't write the protocol > argument as a 2 byte value!) > > I would encourage you to write some simple test programs > and check them using strace (both of the native program and > of qemu running the program).
OK, I will... but I think we will fall back to my original patch ;-) Regards, Laurent -- "Just play. Have fun. Enjoy the game." - Michael Jordan