Revision ec86b0fb
b/linux-user/syscall.c | ||
---|---|---|
105 | 105 |
_syscall2(int,sys_statfs,const char *,path,struct kernel_statfs *,buf) |
106 | 106 |
_syscall2(int,sys_fstatfs,int,fd,struct kernel_statfs *,buf) |
107 | 107 |
_syscall3(int,sys_rt_sigqueueinfo,int,pid,int,sig,siginfo_t *,uinfo) |
108 |
#ifdef __NR_exit_group |
|
109 |
_syscall1(int,exit_group,int,error_code) |
|
110 |
#endif |
|
108 | 111 |
|
109 | 112 |
extern int personality(int); |
110 | 113 |
extern int flock(int, int); |
... | ... | |
1212 | 1215 |
ret = get_errno(write(arg1, (void *)arg2, arg3)); |
1213 | 1216 |
break; |
1214 | 1217 |
case TARGET_NR_open: |
1215 |
ret = get_errno(open((const char *)arg1, arg2, arg3));
|
|
1218 |
ret = get_errno(open(path((const char *)arg1), arg2, arg3));
|
|
1216 | 1219 |
break; |
1217 | 1220 |
case TARGET_NR_close: |
1218 | 1221 |
ret = get_errno(close(arg1)); |
... | ... | |
1700 | 1703 |
case TARGET_NR_oldlstat: |
1701 | 1704 |
goto unimplemented; |
1702 | 1705 |
case TARGET_NR_readlink: |
1703 |
ret = get_errno(readlink((const char *)arg1, (char *)arg2, arg3));
|
|
1706 |
ret = get_errno(readlink(path((const char *)arg1), (char *)arg2, arg3));
|
|
1704 | 1707 |
break; |
1705 | 1708 |
case TARGET_NR_uselib: |
1706 | 1709 |
goto unimplemented; |
... | ... | |
1779 | 1782 |
goto unimplemented; |
1780 | 1783 |
case TARGET_NR_statfs: |
1781 | 1784 |
stfs = (void *)arg2; |
1782 |
ret = get_errno(sys_statfs((const char *)arg1, stfs));
|
|
1785 |
ret = get_errno(sys_statfs(path((const char *)arg1), stfs));
|
|
1783 | 1786 |
convert_statfs: |
1784 | 1787 |
if (!is_error(ret)) { |
1785 | 1788 |
tswap32s(&stfs->f_type); |
... | ... | |
1844 | 1847 |
} |
1845 | 1848 |
break; |
1846 | 1849 |
case TARGET_NR_stat: |
1847 |
ret = get_errno(stat((const char *)arg1, &st));
|
|
1850 |
ret = get_errno(stat(path((const char *)arg1), &st));
|
|
1848 | 1851 |
goto do_stat; |
1849 | 1852 |
case TARGET_NR_lstat: |
1850 |
ret = get_errno(lstat((const char *)arg1, &st));
|
|
1853 |
ret = get_errno(lstat(path((const char *)arg1), &st));
|
|
1851 | 1854 |
goto do_stat; |
1852 | 1855 |
case TARGET_NR_fstat: |
1853 | 1856 |
{ |
... | ... | |
1857 | 1860 |
struct target_stat *target_st = (void *)arg2; |
1858 | 1861 |
target_st->st_dev = tswap16(st.st_dev); |
1859 | 1862 |
target_st->st_ino = tswapl(st.st_ino); |
1860 |
target_st->st_mode = tswap32(st.st_mode);
|
|
1863 |
target_st->st_mode = tswap16(st.st_mode);
|
|
1861 | 1864 |
target_st->st_nlink = tswap16(st.st_nlink); |
1862 | 1865 |
target_st->st_uid = tswap16(st.st_uid); |
1863 | 1866 |
target_st->st_gid = tswap16(st.st_gid); |
... | ... | |
1930 | 1933 |
case TARGET_NR_clone: |
1931 | 1934 |
ret = get_errno(do_fork(cpu_env, arg1, arg2)); |
1932 | 1935 |
break; |
1936 |
#ifdef __NR_exit_group |
|
1937 |
/* new thread calls */ |
|
1938 |
case TARGET_NR_exit_group: |
|
1939 |
ret = get_errno(exit_group(arg1)); |
|
1940 |
break; |
|
1941 |
#endif |
|
1933 | 1942 |
case TARGET_NR_setdomainname: |
1934 | 1943 |
ret = get_errno(setdomainname((const char *)arg1, arg2)); |
1935 | 1944 |
break; |
... | ... | |
2235 | 2244 |
case TARGET_NR_ftruncate64: |
2236 | 2245 |
goto unimplemented; |
2237 | 2246 |
case TARGET_NR_stat64: |
2238 |
ret = get_errno(stat((const char *)arg1, &st));
|
|
2247 |
ret = get_errno(stat(path((const char *)arg1), &st));
|
|
2239 | 2248 |
goto do_stat64; |
2240 | 2249 |
case TARGET_NR_lstat64: |
2241 |
ret = get_errno(lstat((const char *)arg1, &st));
|
|
2250 |
ret = get_errno(lstat(path((const char *)arg1), &st));
|
|
2242 | 2251 |
goto do_stat64; |
2243 | 2252 |
case TARGET_NR_fstat64: |
2244 | 2253 |
{ |
... | ... | |
2246 | 2255 |
do_stat64: |
2247 | 2256 |
if (!is_error(ret)) { |
2248 | 2257 |
struct target_stat64 *target_st = (void *)arg2; |
2258 |
memset(target_st, 0, sizeof(struct target_stat64)); |
|
2249 | 2259 |
target_st->st_dev = tswap16(st.st_dev); |
2250 | 2260 |
target_st->st_ino = tswapl(st.st_ino); |
2261 |
#ifdef TARGET_STAT64_HAS_BROKEN_ST_INO |
|
2262 |
target_st->__st_ino = tswapl(st.st_ino); |
|
2263 |
#endif |
|
2251 | 2264 |
target_st->st_mode = tswap32(st.st_mode); |
2252 |
target_st->st_nlink = tswap16(st.st_nlink);
|
|
2253 |
target_st->st_uid = tswap16(st.st_uid);
|
|
2254 |
target_st->st_gid = tswap16(st.st_gid);
|
|
2265 |
target_st->st_nlink = tswap32(st.st_nlink);
|
|
2266 |
target_st->st_uid = tswapl(st.st_uid);
|
|
2267 |
target_st->st_gid = tswapl(st.st_gid);
|
|
2255 | 2268 |
target_st->st_rdev = tswap16(st.st_rdev); |
2256 | 2269 |
/* XXX: better use of kernel struct */ |
2257 |
target_st->st_size = tswapl(st.st_size);
|
|
2270 |
target_st->st_size = tswap64(st.st_size);
|
|
2258 | 2271 |
target_st->st_blksize = tswapl(st.st_blksize); |
2259 | 2272 |
target_st->st_blocks = tswapl(st.st_blocks); |
2260 | 2273 |
target_st->target_st_atime = tswapl(st.st_atime); |
Also available in: Unified diff