J. Mayer wrote: > Following my previous message, I did a patch that makes syscalls take > target_long/target_ulong argument and return target_long value instead > of long/unsigned long. > I also included the #ifdef protection for do_socketcall and do_ipc to > avoid compilation warnings. > And I also converted the fd given to do_ioctl to be an int. > > In addition to my previous remarks, I noticed some other things while > reading the code: > - the do_msgctl function seems very strange to me. It looks like half of > the code is missing in the switch... > - do_ipc directly uses pointers from the emulated environment without > using lock_user related functions like it seems to be done everywhere > else. > - there are at least two problems in IPCOP_shmat: > * the returned address could not fit in the target address space when > emulating a 32 bits > target on a 64 bits host > * the returned address is always casted into a 32 bits value. I changed > this to be target_ulong. > - I also noticed some suspicious warnings (cast between pointer and > integer of different size) that may hide other problems: > * target_to_host_cmsg:567 > * host_to_target_cmsg:612 > * do_ipc:1609 > * do_ipc: 1621 > * do_ipc: 1645 > * do_ipc: 1655 > * do_ipc: 1677 (multiple times) > * do_ipc: 1687 > * do_ipc: 1711 > * do_syscall:2686 > * do_syscall: 3903 > * do_syscall: 4671 > > May someone take a look at my patch and say if it seems reasonable to > include this in the repository ?
Looks reasonable, but introduces new compiler warnings (on a ppc32/Linux host): Most (all?) targets show: /home/ths/qemu/qemu-work/linux-user/syscall.c: In function do_ipc': /home/ths/qemu/qemu-work/linux-user/syscall.c:1612: warning: long int format, target_long arg (arg 2) There's also one instance of: /home/ths/qemu/qemu-work/linux-user/syscall.c: At top level: /home/ths/qemu/qemu-work/linux-user/syscall.c:1258: warning: 'shm_regions' defined but not used which looks like a missing #ifdef TARGET_NR_ipc. Thiemo