[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 085/108] linux-user: Split out cacheflush, fcntl6
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v2 085/108] linux-user: Split out cacheflush, fcntl64, getpagesize, madvise |
Date: |
Sat, 9 Jun 2018 17:01:57 -1000 |
All targets define madvise; remove the ifdef.
Signed-off-by: Richard Henderson <address@hidden>
---
linux-user/syscall.c | 144 ++++++++++++++++++++++++-------------------
1 file changed, 80 insertions(+), 64 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5f056cf660..bcddb28947 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7675,6 +7675,14 @@ IMPL(brk)
return do_brk(arg1);
}
+#ifdef TARGET_NR_cacheflush
+IMPL(cacheflush)
+{
+ /* Self-modifying code is handled automatically, so nothing needed. */
+ return 0;
+}
+#endif
+
IMPL(capget)
{
struct target_user_cap_header *target_header;
@@ -8269,6 +8277,52 @@ IMPL(fcntl)
}
#endif
+#if TARGET_ABI_BITS == 32
+IMPL(fcntl64)
+{
+ int cmd;
+ struct flock64 fl;
+ from_flock64_fn *copyfrom = copy_from_user_flock64;
+ to_flock64_fn *copyto = copy_to_user_flock64;
+ abi_long ret;
+
+#ifdef TARGET_ARM
+ if (!((CPUARMState *)cpu_env)->eabi) {
+ copyfrom = copy_from_user_oabi_flock64;
+ copyto = copy_to_user_oabi_flock64;
+ }
+#endif
+ cmd = target_to_host_fcntl_cmd(arg2);
+ if (cmd == -TARGET_EINVAL) {
+ return -TARGET_EINVAL;
+ }
+
+ switch (arg2) {
+ case TARGET_F_GETLK64:
+ ret = copyfrom(&fl, arg3);
+ if (ret) {
+ return ret;
+ }
+ ret = get_errno(fcntl(arg1, cmd, &fl));
+ if (ret == 0) {
+ ret = copyto(arg3, &fl);
+ }
+ return ret;
+
+ case TARGET_F_SETLK64:
+ case TARGET_F_SETLKW64:
+ ret = copyfrom(&fl, arg3);
+ if (ret) {
+ return ret;
+ }
+ return get_errno(safe_fcntl(arg1, cmd, &fl));
+
+ default:
+ return do_fcntl(arg1, arg2, arg3);
+ }
+}
+#endif
+
IMPL(fdatasync)
{
return get_errno(fdatasync(arg1));
@@ -8709,6 +8763,13 @@ IMPL(getitimer)
return ret;
}
+#ifdef TARGET_NR_getpagesize
+IMPL(getpagesize)
+{
+ return TARGET_PAGE_SIZE;
+}
+#endif
+
#ifdef TARGET_NR_getpeername
IMPL(getpeername)
{
@@ -9247,6 +9308,15 @@ IMPL(lstat64)
}
#endif
+IMPL(madvise)
+{
+ /* A straight passthrough may not be safe because qemu sometimes
+ turns private file-backed mappings into anonymous mappings.
+ This will break MADV_DONTNEED.
+ This is a hint, so ignoring and returning success is ok. */
+ return 0;
+}
+
IMPL(mincore)
{
void *a, *p;
@@ -12114,70 +12184,6 @@ static abi_long do_syscall1(void *cpu_env, unsigned
num, abi_long arg1,
void *p;
switch(num) {
-#ifdef TARGET_NR_madvise
- case TARGET_NR_madvise:
- /* A straight passthrough may not be safe because qemu sometimes
- turns private file-backed mappings into anonymous mappings.
- This will break MADV_DONTNEED.
- This is a hint, so ignoring and returning success is ok. */
- return 0;
-#endif
-#if TARGET_ABI_BITS == 32
- case TARGET_NR_fcntl64:
- {
- int cmd;
- struct flock64 fl;
- from_flock64_fn *copyfrom = copy_from_user_flock64;
- to_flock64_fn *copyto = copy_to_user_flock64;
-
-#ifdef TARGET_ARM
- if (!((CPUARMState *)cpu_env)->eabi) {
- copyfrom = copy_from_user_oabi_flock64;
- copyto = copy_to_user_oabi_flock64;
- }
-#endif
-
- cmd = target_to_host_fcntl_cmd(arg2);
- if (cmd == -TARGET_EINVAL) {
- return cmd;
- }
-
- switch(arg2) {
- case TARGET_F_GETLK64:
- ret = copyfrom(&fl, arg3);
- if (ret) {
- break;
- }
- ret = get_errno(fcntl(arg1, cmd, &fl));
- if (ret == 0) {
- ret = copyto(arg3, &fl);
- }
- break;
-
- case TARGET_F_SETLK64:
- case TARGET_F_SETLKW64:
- ret = copyfrom(&fl, arg3);
- if (ret) {
- break;
- }
- ret = get_errno(safe_fcntl(arg1, cmd, &fl));
- break;
- default:
- ret = do_fcntl(arg1, arg2, arg3);
- break;
- }
- return ret;
- }
-#endif
-#ifdef TARGET_NR_cacheflush
- case TARGET_NR_cacheflush:
- /* self-modifying code is handled automatically, so nothing needed */
- return 0;
-#endif
-#ifdef TARGET_NR_getpagesize
- case TARGET_NR_getpagesize:
- return TARGET_PAGE_SIZE;
-#endif
case TARGET_NR_gettid:
return get_errno(gettid());
#ifdef TARGET_NR_readahead
@@ -13179,6 +13185,9 @@ static impl_fn *syscall_table(unsigned num)
SYSCALL(bind);
#endif
SYSCALL(brk);
+#ifdef TARGET_NR_cacheflush
+ SYSCALL(cacheflush);
+#endif
SYSCALL(capget);
SYSCALL(capset);
#ifdef CONFIG_CLOCK_ADJTIME
@@ -13236,6 +13245,9 @@ static impl_fn *syscall_table(unsigned num)
SYSCALL(fchownat);
#ifdef TARGET_NR_fcntl
SYSCALL(fcntl);
+#endif
+#if TARGET_ABI_BITS == 32
+ SYSCALL(fcntl64);
#endif
SYSCALL(fdatasync);
SYSCALL(flock);
@@ -13292,6 +13304,9 @@ static impl_fn *syscall_table(unsigned num)
SYSCALL(getgroups32);
#endif
SYSCALL(getitimer);
+#ifdef TARGET_NR_getpagesize
+ SYSCALL(getpagesize);
+#endif
#ifdef TARGET_NR_getpeername
SYSCALL(getpeername);
#endif
@@ -13372,6 +13387,7 @@ static impl_fn *syscall_table(unsigned num)
#ifdef TARGET_NR_lstat64
SYSCALL(lstat64);
#endif
+ SYSCALL(madvise);
SYSCALL(mincore);
#ifdef TARGET_NR_mkdir
SYSCALL(mkdir);
--
2.17.1
- [Qemu-devel] [PATCH v2 074/108] linux-user: Split out fchown, fchownat, setresgid, setresuid, (continued)
- [Qemu-devel] [PATCH v2 074/108] linux-user: Split out fchown, fchownat, setresgid, setresuid, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 076/108] linux-user: Split out setfsgid, setfsuid, setgid, setuid, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 077/108] linux-user: Split out getuid32, getxgid, getxuid, lchown32, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 079/108] linux-user: Split out getegid32, geteuid32, getgid32, setregid32, setreuid32, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 080/108] linux-user: Split out fchown32, getgroups32, setgroups32, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 078/108] linux-user: Split out osf_getsysinfo, osf_setsysinfo, osf_sigprocmask, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 081/108] linux-user: Split out getresgid32, getresuid32, setresgid32, setresuid32, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 082/108] linux-user: Split out chown32, setfsgid32, setfsuid32, setgid32, setuid32, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 083/108] linux-user: Split out mincore, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 084/108] linux-user: Split out fadvise64, fadvise64_64, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 085/108] linux-user: Split out cacheflush, fcntl64, getpagesize, madvise,
Richard Henderson <=
- [Qemu-devel] [PATCH v2 086/108] linux-user: Split out gettid, readahead, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 087/108] linux-user: Split out xattr syscalls, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 089/108] linux-user: Split out clock syscalls, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 090/108] linux-user: Fix clock_nanosleep, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 088/108] linux-user: Split out getdomainname, get_thread_area, set_thread_area, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 091/108] linux-user: Split out set_tid_address, tgkill, tkill, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 092/108] linux-user: Split out futex, utimensat, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 093/108] linux-user: Remove sys_futex, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 094/108] linux-user: Split out inotify syscalls, Richard Henderson, 2018/06/09
- [Qemu-devel] [PATCH v2 095/108] linux-user: Split out mq syscalls, Richard Henderson, 2018/06/09