Commit 248366894044f564ce56ac6340882bde17d24ec7
1 parent
d4b8f039
Implement acct and pretend to implement madvise.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1819 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
10 additions
and
2 deletions
linux-user/syscall.c
@@ -2145,7 +2145,10 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | @@ -2145,7 +2145,10 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
2145 | goto unimplemented; | 2145 | goto unimplemented; |
2146 | 2146 | ||
2147 | case TARGET_NR_acct: | 2147 | case TARGET_NR_acct: |
2148 | - goto unimplemented; | 2148 | + p = lock_user_string(arg1); |
2149 | + ret = get_errno(acct(path(p))); | ||
2150 | + unlock_user(p, arg1, 0); | ||
2151 | + break; | ||
2149 | case TARGET_NR_umount2: | 2152 | case TARGET_NR_umount2: |
2150 | p = lock_user_string(arg1); | 2153 | p = lock_user_string(arg1); |
2151 | ret = get_errno(umount2(p, arg2)); | 2154 | ret = get_errno(umount2(p, arg2)); |
@@ -3547,7 +3550,12 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | @@ -3547,7 +3550,12 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
3547 | #endif | 3550 | #endif |
3548 | #ifdef TARGET_NR_madvise | 3551 | #ifdef TARGET_NR_madvise |
3549 | case TARGET_NR_madvise: | 3552 | case TARGET_NR_madvise: |
3550 | - goto unimplemented; | 3553 | + /* A straight passthrough may not be safe because qemu sometimes |
3554 | + turns private flie-backed mappings into anonymous mappings. | ||
3555 | + This will break MADV_DONTNEED. | ||
3556 | + This is a hint, so ignoring and returning success is ok. */ | ||
3557 | + ret = get_errno(0); | ||
3558 | + break; | ||
3551 | #endif | 3559 | #endif |
3552 | #if TARGET_LONG_BITS == 32 | 3560 | #if TARGET_LONG_BITS == 32 |
3553 | case TARGET_NR_fcntl64: | 3561 | case TARGET_NR_fcntl64: |