* [Qemu-devel] [PATCH] linux-user *at() syscalls @ 2007-09-19 12:46 Thayne Harbaugh 2007-09-19 12:51 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:46 UTC (permalink / raw) To: qemu-devel I have a series of patches to add *at() syscalls to linux-user. The patches have minor inter-dependencies due to adjacent modifications in some files. ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall 2007-09-19 12:46 [Qemu-devel] [PATCH] linux-user *at() syscalls Thayne Harbaugh @ 2007-09-19 12:51 ` Thayne Harbaugh 2007-09-19 12:53 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh 2007-09-23 15:42 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thiemo Seufer 0 siblings, 2 replies; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:51 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 53 bytes --] This patch adds the utimensat syscall to linux-user. [-- Attachment #2: 22_utimensat.patch --] [-- Type: text/x-patch, Size: 2313 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:16:40.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:17:45.000000000 -0600 @@ -158,6 +158,7 @@ #define __NR_sys_syslog __NR_syslog #define __NR_sys_tgkill __NR_tgkill #define __NR_sys_tkill __NR_tkill +#define __NR_sys_utimensat __NR_utimensat #if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__) #define __NR__llseek __NR_lseek @@ -192,6 +193,10 @@ #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) _syscall1(int,set_tid_address,int *,tidptr) #endif +#if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) +_syscall4(int,sys_utimensat,int,dirfd,const char *,pathname, + const struct timespec *,tsp,int,flags) +#endif extern int personality(int); extern int flock(int, int); @@ -4873,6 +4878,30 @@ goto unimplemented_nowarn; #endif +#if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) + case TARGET_NR_utimensat: + { + struct timespec ts[2]; + if (copy_from_user_timespec(ts, (struct target_timespec *)arg3) + || copy_from_user_timespec(ts+1, (struct target_timespec *)arg3+1)) { + ret = -EFAULT; + goto fail; + } + if (!arg2) + ret = get_errno(sys_utimensat(arg1, NULL, ts, arg4)); + else { + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_utimensat(arg1, path(p), ts, arg4)); + if (p) + unlock_user(p, arg2, 0); + } + } + break; +#endif + default: unimplemented: gemu_log("qemu: Unsupported syscall: %d\n", num); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-18 23:36:22.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:17:18.000000000 -0600 @@ -325,3 +325,4 @@ #define TARGET_NR_mbind 319 #define TARGET_NR_get_mempolicy 320 #define TARGET_NR_set_mempolicy 321 +#define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall 2007-09-19 12:51 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thayne Harbaugh @ 2007-09-19 12:53 ` Thayne Harbaugh 2007-09-19 12:54 ` [Qemu-devel] Re: [PATCH] linux-user openat() syscall Thayne Harbaugh 2007-10-02 20:50 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh 2007-09-23 15:42 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thiemo Seufer 1 sibling, 2 replies; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:53 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 54 bytes --] This patch adds the futimesat syscall to linux-user. [-- Attachment #2: 23_futimesat.patch --] [-- Type: text/x-patch, Size: 2316 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:17:45.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:18:58.000000000 -0600 @@ -151,6 +151,7 @@ #define __NR_sys_uname __NR_uname +#define __NR_sys_futimesat __NR_futimesat #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents #define __NR_sys_getdents64 __NR_getdents64 @@ -172,6 +173,10 @@ } #endif _syscall1(int,sys_uname,struct new_utsname *,buf) +#if defined(TARGET_NR_futimesat) && defined(__NR_futimesat) +_syscall3(int,sys_futimesat,int,dirfd,const char *,pathname, + const struct timeval *,times) +#endif _syscall2(int,sys_getcwd1,char *,buf,size_t,size) _syscall3(int, sys_getdents, uint, fd, struct dirent *, dirp, uint, count); #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64) @@ -4873,6 +4878,30 @@ break; #endif +#if defined(TARGET_NR_futimesat) && defined(__NR_futimesat) + case TARGET_NR_futimesat: + { + struct timeval tv[2]; + if (copy_from_user_timespec(tv, (struct target_timespec *)arg3) + || copy_from_user_timespec(tv+1, (struct target_timespec *)arg3+1)) { + ret = -EFAULT; + goto fail; + } + if (!arg2) + ret = get_errno(sys_futimesat(arg1, NULL, tv)); + else { + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_futimesat(arg1, path(p), tv)); + if (p) + unlock_user(p, arg2, 0); + } + } + break; +#endif + #ifdef TARGET_NR_set_robust_list case TARGET_NR_set_robust_list: goto unimplemented_nowarn; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:17:18.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:18:22.000000000 -0600 @@ -325,4 +325,5 @@ #define TARGET_NR_mbind 319 #define TARGET_NR_get_mempolicy 320 #define TARGET_NR_set_mempolicy 321 +#define TARGET_NR_futimesat 326 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user openat() syscall 2007-09-19 12:53 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh @ 2007-09-19 12:54 ` Thayne Harbaugh 2007-09-19 12:57 ` [Qemu-devel] Re: [PATCH] linux-user mkdirat() syscall Thayne Harbaugh 2007-10-02 20:50 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh 1 sibling, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:54 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 50 bytes --] This patch adds the openat syscall to linux-user. [-- Attachment #2: 24_openat.patch --] [-- Type: text/x-patch, Size: 2276 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:18:58.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:19:38.000000000 -0600 @@ -155,6 +155,7 @@ #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents #define __NR_sys_getdents64 __NR_getdents64 +#define __NR_sys_openat __NR_openat #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo #define __NR_sys_syslog __NR_syslog #define __NR_sys_tgkill __NR_tgkill @@ -184,6 +185,9 @@ #endif _syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh); +#if defined(TARGET_NR_openat) && defined(__NR_openat) +_syscall4(int,sys_openat,int,dirfd,const char *,pathname,int,flags,mode_t,mode) +#endif _syscall3(int,sys_rt_sigqueueinfo,int,pid,int,sig,siginfo_t *,uinfo) _syscall3(int,sys_syslog,int,type,char*,bufp,int,len) #if defined(TARGET_NR_tgkill) && defined(__NR_tgkill) @@ -2685,6 +2689,24 @@ arg3)); unlock_user(p, arg1, 0); break; +#if defined(TARGET_NR_openat) && defined(__NR_openat) + case TARGET_NR_openat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_openat(arg1, + path(p), + target_to_host_bitmask(arg3, fcntl_flags_tbl), + arg4)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif case TARGET_NR_close: ret = get_errno(close(arg1)); break; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:18:22.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:19:07.000000000 -0600 @@ -325,5 +325,6 @@ #define TARGET_NR_mbind 319 #define TARGET_NR_get_mempolicy 320 #define TARGET_NR_set_mempolicy 321 +#define TARGET_NR_openat 322 #define TARGET_NR_futimesat 326 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user mkdirat() syscall 2007-09-19 12:54 ` [Qemu-devel] Re: [PATCH] linux-user openat() syscall Thayne Harbaugh @ 2007-09-19 12:57 ` Thayne Harbaugh 2007-09-19 12:58 ` [Qemu-devel] Re: [PATCH] linux-user mknodat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:57 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 51 bytes --] This patch adds the mkdirat syscall to linux-user. [-- Attachment #2: 25_mkdirat.patch --] [-- Type: text/x-patch, Size: 2090 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:19:38.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:20:59.000000000 -0600 @@ -155,6 +155,7 @@ #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents #define __NR_sys_getdents64 __NR_getdents64 +#define __NR_sys_mkdirat __NR_mkdirat #define __NR_sys_openat __NR_openat #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo #define __NR_sys_syslog __NR_syslog @@ -185,6 +186,9 @@ #endif _syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh); +#if defined(TARGET_NR_mkdirat) && defined(__NR_mkdirat) +_syscall3(int,sys_mkdirat,int,dirfd,const char *,pathname,mode_t,mode) +#endif #if defined(TARGET_NR_openat) && defined(__NR_openat) _syscall4(int,sys_openat,int,dirfd,const char *,pathname,int,flags,mode_t,mode) #endif @@ -2973,6 +2977,21 @@ ret = get_errno(mkdir(p, arg2)); unlock_user(p, arg1, 0); break; +#if defined(TARGET_NR_mkdirat) && defined(__NR_mkdirat) + case TARGET_NR_mkdirat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_mkdirat(arg1, p, arg3)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif case TARGET_NR_rmdir: p = lock_user_string(arg1); ret = get_errno(rmdir(p)); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:19:07.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:20:24.000000000 -0600 @@ -326,5 +326,6 @@ #define TARGET_NR_get_mempolicy 320 #define TARGET_NR_set_mempolicy 321 #define TARGET_NR_openat 322 +#define TARGET_NR_mkdirat 323 #define TARGET_NR_futimesat 326 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user mknodat() syscall 2007-09-19 12:57 ` [Qemu-devel] Re: [PATCH] linux-user mkdirat() syscall Thayne Harbaugh @ 2007-09-19 12:58 ` Thayne Harbaugh 2007-09-19 12:59 ` [Qemu-devel] Re: [PATCH] linux-user fchownat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:58 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 51 bytes --] This patch adds the mknodat syscall to linux-user. [-- Attachment #2: 26_mknodat.patch --] [-- Type: text/x-patch, Size: 2160 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:20:59.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:21:49.000000000 -0600 @@ -156,6 +156,7 @@ #define __NR_sys_getdents __NR_getdents #define __NR_sys_getdents64 __NR_getdents64 #define __NR_sys_mkdirat __NR_mkdirat +#define __NR_sys_mknodat __NR_mknodat #define __NR_sys_openat __NR_openat #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo #define __NR_sys_syslog __NR_syslog @@ -189,6 +190,10 @@ #if defined(TARGET_NR_mkdirat) && defined(__NR_mkdirat) _syscall3(int,sys_mkdirat,int,dirfd,const char *,pathname,mode_t,mode) #endif +#if defined(TARGET_NR_mknodat) && defined(__NR_mknodat) +_syscall4(int,sys_mknodat,int,dirfd,const char *,pathname, + mode_t,mode,dev_t,dev) +#endif #if defined(TARGET_NR_openat) && defined(__NR_openat) _syscall4(int,sys_openat,int,dirfd,const char *,pathname,int,flags,mode_t,mode) #endif @@ -2828,6 +2833,21 @@ ret = get_errno(mknod(p, arg2, arg3)); unlock_user(p, arg1, 0); break; +#if defined(TARGET_NR_mknodat) && defined(__NR_mknodat) + case TARGET_NR_mknodat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_mknodat(arg1, p, arg3, arg4)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif case TARGET_NR_chmod: p = lock_user_string(arg1); ret = get_errno(chmod(p, arg2)); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:20:24.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:21:07.000000000 -0600 @@ -327,5 +327,6 @@ #define TARGET_NR_set_mempolicy 321 #define TARGET_NR_openat 322 #define TARGET_NR_mkdirat 323 +#define TARGET_NR_mknodat 324 #define TARGET_NR_futimesat 326 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user fchownat() syscall 2007-09-19 12:58 ` [Qemu-devel] Re: [PATCH] linux-user mknodat() syscall Thayne Harbaugh @ 2007-09-19 12:59 ` Thayne Harbaugh 2007-09-19 13:00 ` [Qemu-devel] Re: [PATCH] linux-user unlinkat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 12:59 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 52 bytes --] This patch adds the fchownat syscall to linux-user. [-- Attachment #2: 27_fchownat.patch --] [-- Type: text/x-patch, Size: 2085 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:21:49.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:22:58.000000000 -0600 @@ -151,6 +151,7 @@ #define __NR_sys_uname __NR_uname +#define __NR_sys_fchownat __NR_fchownat #define __NR_sys_futimesat __NR_futimesat #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents @@ -176,6 +177,10 @@ } #endif _syscall1(int,sys_uname,struct new_utsname *,buf) +#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat) +_syscall5(int,sys_fchownat,int,dirfd,const char *,pathname, + uid_t,owner,gid_t,group,int,flags) +#endif #if defined(TARGET_NR_futimesat) && defined(__NR_futimesat) _syscall3(int,sys_futimesat,int,dirfd,const char *,pathname, const struct timeval *,times) @@ -4518,6 +4523,21 @@ case TARGET_NR_fchown: ret = get_errno(fchown(arg1, low2highuid(arg2), low2highgid(arg3))); break; +#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat) + case TARGET_NR_fchownat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_fchownat(arg1, p, low2highuid(arg3), low2highgid(arg4), arg5)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif #ifdef TARGET_NR_setresuid case TARGET_NR_setresuid: ret = get_errno(setresuid(low2highuid(arg1), Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:21:07.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:22:15.000000000 -0600 @@ -328,5 +328,6 @@ #define TARGET_NR_openat 322 #define TARGET_NR_mkdirat 323 #define TARGET_NR_mknodat 324 +#define TARGET_NR_fchownat 325 #define TARGET_NR_futimesat 326 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user unlinkat() syscall 2007-09-19 12:59 ` [Qemu-devel] Re: [PATCH] linux-user fchownat() syscall Thayne Harbaugh @ 2007-09-19 13:00 ` Thayne Harbaugh 2007-09-19 13:01 ` [Qemu-devel] Re: [PATCH] linux-user renameat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:00 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 52 bytes --] This patch adds the unlinkat syscall to linux-user. [-- Attachment #2: 28_unlinkat.patch --] [-- Type: text/x-patch, Size: 2046 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:22:58.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:23:52.000000000 -0600 @@ -163,6 +163,7 @@ #define __NR_sys_syslog __NR_syslog #define __NR_sys_tgkill __NR_tgkill #define __NR_sys_tkill __NR_tkill +#define __NR_sys_unlinkat __NR_unlinkat #define __NR_sys_utimensat __NR_utimensat #if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__) @@ -216,6 +217,9 @@ #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) _syscall1(int,set_tid_address,int *,tidptr) #endif +#if defined(TARGET_NR_unlinkat) && defined(__NR_unlinkat) +_syscall3(int,sys_unlinkat,int,dirfd,const char *,pathname,int,flags) +#endif #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) _syscall4(int,sys_utimensat,int,dirfd,const char *,pathname, const struct timespec *,tsp,int,flags) @@ -2762,6 +2766,21 @@ ret = get_errno(unlink(p)); unlock_user(p, arg1, 0); break; +#if defined(TARGET_NR_unlinkat) && defined(__NR_unlinkat) + case TARGET_NR_unlinkat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_unlinkat(arg1, p, arg3)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif case TARGET_NR_execve: { char **argp, **envp; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:22:15.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:23:07.000000000 -0600 @@ -330,4 +330,5 @@ #define TARGET_NR_mknodat 324 #define TARGET_NR_fchownat 325 #define TARGET_NR_futimesat 326 +#define TARGET_NR_unlinkat 328 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user renameat() syscall 2007-09-19 13:00 ` [Qemu-devel] Re: [PATCH] linux-user unlinkat() syscall Thayne Harbaugh @ 2007-09-19 13:01 ` Thayne Harbaugh 2007-09-19 13:02 ` [Qemu-devel] Re: [PATCH] linux-user linkat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:01 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 52 bytes --] This patch adds the renameat syscall to linux-user. [-- Attachment #2: 29_renameat.patch --] [-- Type: text/x-patch, Size: 2387 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:23:52.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:24:47.000000000 -0600 @@ -159,6 +159,7 @@ #define __NR_sys_mkdirat __NR_mkdirat #define __NR_sys_mknodat __NR_mknodat #define __NR_sys_openat __NR_openat +#define __NR_sys_renameat __NR_renameat #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo #define __NR_sys_syslog __NR_syslog #define __NR_sys_tgkill __NR_tgkill @@ -203,6 +204,10 @@ #if defined(TARGET_NR_openat) && defined(__NR_openat) _syscall4(int,sys_openat,int,dirfd,const char *,pathname,int,flags,mode_t,mode) #endif +#if defined(TARGET_NR_renameat) && defined(__NR_renameat) +_syscall4(int,sys_renameat,int,olddirfd,const char *,oldpath, + int,newdirfd,const char *,newpath) +#endif _syscall3(int,sys_rt_sigqueueinfo,int,pid,int,sig,siginfo_t *,uinfo) _syscall3(int,sys_syslog,int,type,char*,bufp,int,len) #if defined(TARGET_NR_tgkill) && defined(__NR_tgkill) @@ -3016,6 +3021,28 @@ unlock_user(p, arg1, 0); } break; +#if defined(TARGET_NR_renameat) && defined(__NR_renameat) + case TARGET_NR_renameat: + if (!arg2 || !arg4) { + ret = -EFAULT; + goto fail; + } + { + void *p2 = NULL; + p = lock_user_string(arg2); + p2 = lock_user_string(arg4); + if (!access_ok(VERIFY_READ, p, 1) + || !access_ok(VERIFY_READ, p2, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_renameat(arg1, p, arg3, p2)); + if (p2) + unlock_user(p2, arg4, 0); + if (p) + unlock_user(p, arg2, 0); + } + break; +#endif case TARGET_NR_mkdir: p = lock_user_string(arg1); ret = get_errno(mkdir(p, arg2)); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:23:07.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:24:10.000000000 -0600 @@ -331,4 +331,5 @@ #define TARGET_NR_fchownat 325 #define TARGET_NR_futimesat 326 #define TARGET_NR_unlinkat 328 +#define TARGET_NR_renameat 329 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user linkat() syscall 2007-09-19 13:01 ` [Qemu-devel] Re: [PATCH] linux-user renameat() syscall Thayne Harbaugh @ 2007-09-19 13:02 ` Thayne Harbaugh 2007-09-19 13:03 ` [Qemu-devel] Re: [PATCH] linux-user symlinkat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:02 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 50 bytes --] This patch adds the linkat syscall to linux-user. [-- Attachment #2: 30_linkat.patch --] [-- Type: text/x-patch, Size: 2285 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:24:47.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:25:51.000000000 -0600 @@ -156,6 +156,7 @@ #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents #define __NR_sys_getdents64 __NR_getdents64 +#define __NR_sys_linkat __NR_linkat #define __NR_sys_mkdirat __NR_mkdirat #define __NR_sys_mknodat __NR_mknodat #define __NR_sys_openat __NR_openat @@ -194,6 +195,10 @@ #endif _syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res, uint, wh); +#if defined(TARGET_NR_linkat) && defined(__NR_linkat) +_syscall5(int,sys_linkat,int,olddirfd,const char *,oldpath, + int,newdirfd,const char *,newpath,int,flags) +#endif #if defined(TARGET_NR_mkdirat) && defined(__NR_mkdirat) _syscall3(int,sys_mkdirat,int,dirfd,const char *,pathname,mode_t,mode) #endif @@ -2766,6 +2771,28 @@ unlock_user(p, arg1, 0); } break; +#if defined(TARGET_NR_linkat) && defined(__NR_linkat) + case TARGET_NR_linkat: + if (!arg2 || !arg4) { + ret = -EFAULT; + goto fail; + } + { + void * p2 = NULL; + p = lock_user_string(arg2); + p2 = lock_user_string(arg4); + if (!access_ok(VERIFY_READ, p, 1) + || !access_ok(VERIFY_READ, p2, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_linkat(arg1, p, arg3, p2, arg5)); + if (p2) + unlock_user(p, arg2, 0); + if (p) + unlock_user(p2, arg4, 0); + } + break; +#endif case TARGET_NR_unlink: p = lock_user_string(arg1); ret = get_errno(unlink(p)); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:24:10.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:25:08.000000000 -0600 @@ -332,4 +332,5 @@ #define TARGET_NR_futimesat 326 #define TARGET_NR_unlinkat 328 #define TARGET_NR_renameat 329 +#define TARGET_NR_linkat 330 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user symlinkat() syscall 2007-09-19 13:02 ` [Qemu-devel] Re: [PATCH] linux-user linkat() syscall Thayne Harbaugh @ 2007-09-19 13:03 ` Thayne Harbaugh 2007-09-19 13:04 ` [Qemu-devel] Re: [PATCH] linux-user readlinkat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:03 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 53 bytes --] This patch adds the symlinkat syscall to linux-user. [-- Attachment #2: 31_symlinkat.patch --] [-- Type: text/x-patch, Size: 2275 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:25:51.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:26:51.000000000 -0600 @@ -162,6 +162,7 @@ #define __NR_sys_openat __NR_openat #define __NR_sys_renameat __NR_renameat #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo +#define __NR_sys_symlinkat __NR_symlinkat #define __NR_sys_syslog __NR_syslog #define __NR_sys_tgkill __NR_tgkill #define __NR_sys_tkill __NR_tkill @@ -214,6 +215,10 @@ int,newdirfd,const char *,newpath) #endif _syscall3(int,sys_rt_sigqueueinfo,int,pid,int,sig,siginfo_t *,uinfo) +#ifdef TARGET_NR_symlinkat +_syscall3(int,sys_symlinkat,const char *,oldpath, + int,newdirfd,const char *,newpath) +#endif _syscall3(int,sys_syslog,int,type,char*,bufp,int,len) #if defined(TARGET_NR_tgkill) && defined(__NR_tgkill) _syscall3(int,sys_tgkill,int,tgid,int,pid,int,sig) @@ -3543,6 +3548,28 @@ unlock_user(p, arg1, 0); } break; +#if defined(TARGET_NR_symlinkat) && defined(__NR_symlinkat) + case TARGET_NR_symlinkat: + if (!arg1 || !arg3) { + ret = -EFAULT; + goto fail; + } + { + void *p2 = NULL; + p = lock_user_string(arg1); + p2 = lock_user_string(arg3); + if (!access_ok(VERIFY_READ, p, 1) + || !access_ok(VERIFY_READ, p2, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_symlinkat(p, arg2, p2)); + if (p2) + unlock_user(p2, arg3, 0); + if (p) + unlock_user(p, arg1, 0); + } + break; +#endif #ifdef TARGET_NR_oldlstat case TARGET_NR_oldlstat: goto unimplemented; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:25:08.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:26:21.000000000 -0600 @@ -333,4 +333,5 @@ #define TARGET_NR_unlinkat 328 #define TARGET_NR_renameat 329 #define TARGET_NR_linkat 330 +#define TARGET_NR_symlinkat 331 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user readlinkat() syscall 2007-09-19 13:03 ` [Qemu-devel] Re: [PATCH] linux-user symlinkat() syscall Thayne Harbaugh @ 2007-09-19 13:04 ` Thayne Harbaugh 2007-09-19 13:05 ` [Qemu-devel] Re: [PATCH] linux-user fchmodat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:04 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 54 bytes --] This patch adds the readlinkat syscall to linux-user. [-- Attachment #2: 32_readlinkat.patch --] [-- Type: text/x-patch, Size: 2372 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:26:51.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:27:29.000000000 -0600 @@ -160,6 +160,7 @@ #define __NR_sys_mkdirat __NR_mkdirat #define __NR_sys_mknodat __NR_mknodat #define __NR_sys_openat __NR_openat +#define __NR_sys_readlinkat __NR_readlinkat #define __NR_sys_renameat __NR_renameat #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo #define __NR_sys_symlinkat __NR_symlinkat @@ -210,6 +211,10 @@ #if defined(TARGET_NR_openat) && defined(__NR_openat) _syscall4(int,sys_openat,int,dirfd,const char *,pathname,int,flags,mode_t,mode) #endif +#if defined(TARGET_NR_readlinkat) && defined(__NR_readlinkat) +_syscall4(int,sys_readlinkat,int,dirfd,const char *,pathname, + char *,buf,size_t,bufsize) +#endif #if defined(TARGET_NR_renameat) && defined(__NR_renameat) _syscall4(int,sys_renameat,int,olddirfd,const char *,oldpath, int,newdirfd,const char *,newpath) @@ -3584,6 +3589,28 @@ unlock_user(p, arg1, 0); } break; +#if defined(TARGET_NR_readlinkat) && defined(__NR_readlinkat) + case TARGET_NR_readlinkat: + if (!arg2 || !arg3) { + ret = -EFAULT; + goto fail; + } + { + void *p2 = NULL; + p = lock_user_string(arg2); + p2 = lock_user(arg3, arg4, 0); + if (!access_ok(VERIFY_READ, p, 1) + || !access_ok(VERIFY_READ, p2, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_readlinkat(arg1, path(p), p2, arg4)); + if (p2) + unlock_user(p2, arg3, ret); + if (p) + unlock_user(p, arg2, 0); + } + break; +#endif #ifdef TARGET_NR_uselib case TARGET_NR_uselib: goto unimplemented; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:26:21.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:26:57.000000000 -0600 @@ -334,4 +334,5 @@ #define TARGET_NR_renameat 329 #define TARGET_NR_linkat 330 #define TARGET_NR_symlinkat 331 +#define TARGET_NR_readlinkat 332 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user fchmodat() syscall 2007-09-19 13:04 ` [Qemu-devel] Re: [PATCH] linux-user readlinkat() syscall Thayne Harbaugh @ 2007-09-19 13:05 ` Thayne Harbaugh 2007-09-19 13:06 ` [Qemu-devel] Re: [PATCH] linux-user faccessat() syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:05 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 52 bytes --] This patch adds the fchmodat syscall to linux-user. [-- Attachment #2: 33_fchmodat.patch --] [-- Type: text/x-patch, Size: 1975 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:27:29.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:28:02.000000000 -0600 @@ -151,6 +151,7 @@ #define __NR_sys_uname __NR_uname +#define __NR_sys_fchmodat __NR_fchmodat #define __NR_sys_fchownat __NR_fchownat #define __NR_sys_futimesat __NR_futimesat #define __NR_sys_getcwd1 __NR_getcwd @@ -182,6 +183,10 @@ } #endif _syscall1(int,sys_uname,struct new_utsname *,buf) +#if defined(TARGET_NR_fchmodat) && defined(__NR_fchmodat) +_syscall4(int,sys_fchmodat,int,dirfd,const char *,pathname, + mode_t,mode,int,flags) +#endif #if defined(TARGET_NR_fchownat) && defined(__NR_fchownat) _syscall5(int,sys_fchownat,int,dirfd,const char *,pathname, uid_t,owner,gid_t,group,int,flags) @@ -3715,6 +3720,21 @@ case TARGET_NR_fchmod: ret = get_errno(fchmod(arg1, arg2)); break; +#if defined(TARGET_NR_fchmodat) && defined(__NR_fchmodat) + case TARGET_NR_fchmodat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_fchmodat(arg1, p, arg3, arg4)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif case TARGET_NR_getpriority: ret = get_errno(getpriority(arg1, arg2)); break; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:26:57.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:27:37.000000000 -0600 @@ -335,4 +335,5 @@ #define TARGET_NR_linkat 330 #define TARGET_NR_symlinkat 331 #define TARGET_NR_readlinkat 332 +#define TARGET_NR_fchmodat 333 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user faccessat() syscall 2007-09-19 13:05 ` [Qemu-devel] Re: [PATCH] linux-user fchmodat() syscall Thayne Harbaugh @ 2007-09-19 13:06 ` Thayne Harbaugh 2007-09-19 13:09 ` [Qemu-devel] Re: [PATCH] linux-user stat64_put_user function Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:06 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 53 bytes --] This patch adds the faccessat syscall to linux-user. [-- Attachment #2: 34_faccessat.patch --] [-- Type: text/x-patch, Size: 1968 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:28:02.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:28:30.000000000 -0600 @@ -151,6 +151,7 @@ #define __NR_sys_uname __NR_uname +#define __NR_sys_faccessat __NR_faccessat #define __NR_sys_fchmodat __NR_fchmodat #define __NR_sys_fchownat __NR_fchownat #define __NR_sys_futimesat __NR_futimesat @@ -183,6 +184,9 @@ } #endif _syscall1(int,sys_uname,struct new_utsname *,buf) +#if defined(TARGET_NR_faccessat) && defined(__NR_faccessat) +_syscall4(int,sys_faccessat,int,dirfd,const char *,pathname,int,mode,int,flags) +#endif #if defined(TARGET_NR_fchmodat) && defined(__NR_fchmodat) _syscall4(int,sys_fchmodat,int,dirfd,const char *,pathname, mode_t,mode,int,flags) @@ -3037,6 +3041,21 @@ ret = get_errno(access(p, arg2)); unlock_user(p, arg1, 0); break; +#if defined(TARGET_NR_faccessat) && defined(__NR_faccessat) + case TARGET_NR_faccessat: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_faccessat(arg1, p, arg3, arg4)); + if (p) + unlock_user(p, arg2, 0); + break; +#endif #ifdef TARGET_NR_nice /* not on alpha */ case TARGET_NR_nice: ret = get_errno(nice(arg1)); Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:27:37.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:28:08.000000000 -0600 @@ -336,4 +336,5 @@ #define TARGET_NR_symlinkat 331 #define TARGET_NR_readlinkat 332 #define TARGET_NR_fchmodat 333 +#define TARGET_NR_faccessat 334 #define TARGET_NR_utimensat 348 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user stat64_put_user function 2007-09-19 13:06 ` [Qemu-devel] Re: [PATCH] linux-user faccessat() syscall Thayne Harbaugh @ 2007-09-19 13:09 ` Thayne Harbaugh 2007-09-19 13:11 ` [Qemu-devel] Re: [PATCH] linux-user fstatat syscall Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:09 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 202 bytes --] This patch puts stat64 functionality into a function rather than using gotos for all the locations that copy stat64 buffers to user space. This patch is necessary for following fstatat64 syscall patch. [-- Attachment #2: 35_stat64_put_user.patch --] [-- Type: text/x-patch, Size: 7816 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:28:30.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:28:34.000000000 -0600 @@ -526,6 +526,77 @@ return 0; } +#ifdef TARGET_ARM +#define copy_to_user_statbuf64_wrapper(tsb,hsb) \ + ((((CPUARMState *)cpu_env)->eabi) \ + ? copy_to_user_statbuf64_eabi((tsb),(hsb)) \ + : copy_to_user_statbuf64((tsb),(hsb))) +#else +#define copy_to_user_statbuf64_wrapper(tsb,hsb) \ + copy_to_user_eabi_statbuf64((tsb),(hsb)) +#endif + +#ifdef TARGET_ARM +static inline long copy_to_user_statbuf64_eabi(void *gen_target_stbuf, + const struct stat *host_stbuf) +{ + struct target_eabi_stat64 *target_stbuf = (struct target_eabi_stat64 *)gen_target_stbuf; + int i; + + if( !access_ok(VERIFY_WRITE,target_stbuf,sizeof(struct target_eabi_stat64)) ) return -EFAULT; + memset(target_stbuf, 0, sizeof(struct target_eabi_stat64)); + /* use __put_user() since we just checked that the buffer is valid */ + __put_user(host_stbuf->st_dev, &target_stbuf->st_dev); + __put_user(host_stbuf->st_ino, &target_stbuf->st_ino); +#ifdef TARGET_STAT64_HAS_BROKEN_ST_INO + __put_user(host_stbuf->st_ino, &target_stbuf->__st_ino); +#endif + __put_user(host_stbuf->st_mode, &target_stbuf->st_mode); + __put_user(host_stbuf->st_nlink, &target_stbuf->st_nlink); + __put_user(host_stbuf->st_uid, &target_stbuf->st_uid); + __put_user(host_stbuf->st_gid, &target_stbuf->st_gid); + __put_user(host_stbuf->st_rdev, &target_stbuf->st_rdev); + /* XXX: better use of kernel struct */ + __put_user(host_stbuf->st_size, &target_stbuf->st_size); + __put_user(host_stbuf->st_blksize, &target_stbuf->st_blksize); + __put_user(host_stbuf->st_blocks, &target_stbuf->st_blocks); + __put_user(host_stbuf->st_atime, &target_stbuf->target_st_atime); + __put_user(host_stbuf->st_mtime, &target_stbuf->target_st_mtime); + __put_user(host_stbuf->st_ctime, &target_stbuf->target_st_ctime); + + return 0; +} +#endif + +static inline long copy_to_user_statbuf64(void *gen_target_stbuf, + const struct stat *host_stbuf) +{ + struct target_stat64 *target_stbuf = (struct target_stat64 *)gen_target_stbuf; + gemu_log("%s()\n", __func__); + if( !access_ok(VERIFY_WRITE,target_stbuf,sizeof(struct target_stat64)) ) return -EFAULT; + memset(target_stbuf, 0, sizeof(struct target_stat64)); + /* use __put_user() since we just checked that the buffer is valid */ + __put_user(host_stbuf->st_dev, &target_stbuf->st_dev); + __put_user(host_stbuf->st_ino, &target_stbuf->st_ino); +#ifdef TARGET_STAT64_HAS_BROKEN_ST_INO + __put_user(host_stbuf->st_ino, &target_stbuf->__st_ino); +#endif + __put_user(host_stbuf->st_mode, &target_stbuf->st_mode); + __put_user(host_stbuf->st_nlink, &target_stbuf->st_nlink); + __put_user(host_stbuf->st_uid, &target_stbuf->st_uid); + __put_user(host_stbuf->st_gid, &target_stbuf->st_gid); + __put_user(host_stbuf->st_rdev, &target_stbuf->st_rdev); + /* XXX: better use of kernel struct */ + __put_user(host_stbuf->st_size, &target_stbuf->st_size); + __put_user(host_stbuf->st_blksize, &target_stbuf->st_blksize); + __put_user(host_stbuf->st_blocks, &target_stbuf->st_blocks); + __put_user(host_stbuf->st_atime, &target_stbuf->target_st_atime); + __put_user(host_stbuf->st_mtime, &target_stbuf->target_st_mtime); + __put_user(host_stbuf->st_ctime, &target_stbuf->target_st_ctime); + return 0; +} + + static inline long copy_from_user_timeval(struct timeval *tv, struct target_timeval *target_tv) { @@ -4562,7 +4633,10 @@ if( !access_ok(VERIFY_READ,p,1) ) return -EFAULT; ret = get_errno(stat(path(p), &st)); unlock_user(p, arg1, 0); - goto do_stat64; + if (!is_error(ret) + && copy_to_user_statbuf64_wrapper(arg2,&st)) + return -EFAULT; + break; #endif #ifdef TARGET_NR_lstat64 case TARGET_NR_lstat64: @@ -4570,65 +4644,18 @@ if( !access_ok(VERIFY_READ,p,1) ) return -EFAULT; ret = get_errno(lstat(path(p), &st)); unlock_user(p, arg1, 0); - goto do_stat64; + if (!is_error(ret) + && copy_to_user_statbuf64_wrapper(arg2,&st)) + return -EFAULT; + break; #endif #ifdef TARGET_NR_fstat64 case TARGET_NR_fstat64: - { - ret = get_errno(fstat(arg1, &st)); - do_stat64: - if (!is_error(ret)) { -#ifdef TARGET_ARM - if (((CPUARMState *)cpu_env)->eabi) { - struct target_eabi_stat64 *target_st = (struct target_eabi_stat64 *)arg2; - if( !access_ok(VERIFY_WRITE,target_st,sizeof(struct target_eabi_stat64)) ) return -EFAULT; - memset(target_st, 0, sizeof(struct target_eabi_stat64)); - /* use __put_user() since we just checked that the buffer is valid */ - __put_user(st.st_dev, &target_st->st_dev); - __put_user(st.st_ino, &target_st->st_ino); -#ifdef TARGET_STAT64_HAS_BROKEN_ST_INO - __put_user(st.st_ino, &target_st->__st_ino); -#endif - __put_user(st.st_mode, &target_st->st_mode); - __put_user(st.st_nlink, &target_st->st_nlink); - __put_user(st.st_uid, &target_st->st_uid); - __put_user(st.st_gid, &target_st->st_gid); - __put_user(st.st_rdev, &target_st->st_rdev); - /* XXX: better use of kernel struct */ - __put_user(st.st_size, &target_st->st_size); - __put_user(st.st_blksize, &target_st->st_blksize); - __put_user(st.st_blocks, &target_st->st_blocks); - __put_user(st.st_atime, &target_st->target_st_atime); - __put_user(st.st_mtime, &target_st->target_st_mtime); - __put_user(st.st_ctime, &target_st->target_st_ctime); - } else -#endif - { - struct target_stat64 *target_st = (struct target_stat64 *)arg2; - if( !access_ok(VERIFY_WRITE,target_st,sizeof(struct target_stat64)) ) return -EFAULT; - memset(target_st, 0, sizeof(struct target_stat64)); - /* use __put_user() since we just checked that the buffer is valid */ - __put_user(st.st_dev, &target_st->st_dev); - __put_user(st.st_ino, &target_st->st_ino); -#ifdef TARGET_STAT64_HAS_BROKEN_ST_INO - __put_user(st.st_ino, &target_st->__st_ino); -#endif - __put_user(st.st_mode, &target_st->st_mode); - __put_user(st.st_nlink, &target_st->st_nlink); - __put_user(st.st_uid, &target_st->st_uid); - __put_user(st.st_gid, &target_st->st_gid); - __put_user(st.st_rdev, &target_st->st_rdev); - /* XXX: better use of kernel struct */ - __put_user(st.st_size, &target_st->st_size); - __put_user(st.st_blksize, &target_st->st_blksize); - __put_user(st.st_blocks, &target_st->st_blocks); - __put_user(st.st_atime, &target_st->target_st_atime); - __put_user(st.st_mtime, &target_st->target_st_mtime); - __put_user(st.st_ctime, &target_st->target_st_ctime); - } - } - } - break; + ret = get_errno(fstat(arg1, &st)); + if (!is_error(ret) + && copy_to_user_statbuf64_wrapper(arg2,&st)) + return -EFAULT; + break; #endif #ifdef USE_UID16 case TARGET_NR_lchown: ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user fstatat syscall 2007-09-19 13:09 ` [Qemu-devel] Re: [PATCH] linux-user stat64_put_user function Thayne Harbaugh @ 2007-09-19 13:11 ` Thayne Harbaugh 0 siblings, 0 replies; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-19 13:11 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 102 bytes --] This patch adds the fstatat syscall to linux-user. To depends on the previous stat64_put_user patch. [-- Attachment #2: 35_fstatat64.patch --] [-- Type: text/x-patch, Size: 3648 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-19 06:28:34.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-19 06:31:35.000000000 -0600 @@ -149,11 +149,26 @@ return syscall(__NR_##name, arg1, arg2, arg3, arg4, arg5, arg6); \ } +#if defined(__NR_fstatat64) +#define HOST_NR_FSTATAT __NR_fstatat64 +typedef struct stat64 host_statbuf_t; +#elif defined(__NR_newfstatat) +#define HOST_NR_FSTATAT __NR_newfstatat +typedef struct stat host_statbuf_t; +#endif +#if defined(TARGET_NR_fstatat64) +#define TARGET_NR_FSTATAT (TARGET_NR_fstatat64) +typedef struct target_stat64 target_statbuf_t; +#elif defined(TARGET_NR_newfstatat) +#define TARGET_NR_FSTATAT (TARGET_NR_newfstatat) +typedef struct target_stat target_statbuf_t; +#endif #define __NR_sys_uname __NR_uname #define __NR_sys_faccessat __NR_faccessat #define __NR_sys_fchmodat __NR_fchmodat #define __NR_sys_fchownat __NR_fchownat +#define __NR_sys_fstatat HOST_NR_FSTATAT #define __NR_sys_futimesat __NR_futimesat #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents @@ -170,6 +185,9 @@ #define __NR_sys_tgkill __NR_tgkill #define __NR_sys_tkill __NR_tkill #define __NR_sys_unlinkat __NR_unlinkat +#if !defined(__NR_utimensat) && defined(__x86_64__) +#define __NR_utimensat 280 +#endif #define __NR_sys_utimensat __NR_utimensat #if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__) @@ -199,6 +217,10 @@ _syscall3(int,sys_futimesat,int,dirfd,const char *,pathname, const struct timeval *,times) #endif +#if defined(TARGET_NR_FSTATAT) && (HOST_NR_FSTATAT) +_syscall4(int,sys_fstatat,int,dirfd,const char *,pathname, + host_statbuf_t *,buf,int,flags) +#endif _syscall2(int,sys_getcwd1,char *,buf,size_t,size) _syscall3(int, sys_getdents, uint, fd, struct dirent *, dirp, uint, count); #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64) @@ -533,7 +555,7 @@ : copy_to_user_statbuf64((tsb),(hsb))) #else #define copy_to_user_statbuf64_wrapper(tsb,hsb) \ - copy_to_user_eabi_statbuf64((tsb),(hsb)) + copy_to_user_statbuf64((tsb),(hsb)) #endif #ifdef TARGET_ARM @@ -4731,6 +4753,28 @@ unlock_user(p, arg2, 0); break; #endif +#if defined(TARGET_NR_FSTATAT) && defined(HOST_NR_FSTATAT) + case TARGET_NR_FSTATAT: + if (!arg2) { + ret = -EFAULT; + goto fail; + } + { + host_statbuf_t statbuf; + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else { + ret = get_errno(sys_fstatat(arg1, path(p), &statbuf, arg4)); + if (!is_error(ret) + && copy_to_user_statbuf64_wrapper((struct target_stat64 *)arg3, &statbuf)) + ret = -EFAULT; + } + if (p) + unlock_user(p, arg2, 0); + } + break; +#endif #ifdef TARGET_NR_setresuid case TARGET_NR_setresuid: ret = get_errno(setresuid(low2highuid(arg1), Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-19 06:28:08.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-19 06:29:54.000000000 -0600 @@ -330,6 +330,7 @@ #define TARGET_NR_mknodat 324 #define TARGET_NR_fchownat 325 #define TARGET_NR_futimesat 326 +#define TARGET_NR_fstatat64 327 #define TARGET_NR_unlinkat 328 #define TARGET_NR_renameat 329 #define TARGET_NR_linkat 330 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall 2007-09-19 12:53 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh 2007-09-19 12:54 ` [Qemu-devel] Re: [PATCH] linux-user openat() syscall Thayne Harbaugh @ 2007-10-02 20:50 ` Thayne Harbaugh 1 sibling, 0 replies; 21+ messages in thread From: Thayne Harbaugh @ 2007-10-02 20:50 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 441 bytes --] On Wed, 2007-09-19 at 06:53 -0600, Thayne Harbaugh wrote: > This patch adds the futimesat syscall to linux-user. The previous futimesat() patch that was sent was horribly brain-damaged: it used timespec in a few places that should have used timeval. This is a corrected patch. I'm sure the previous patch was composed and sent by my evil twin from a parallel universe. I will find him and discipline him appropriately. Yeah, that's it. [-- Attachment #2: 23_futimesat.patch --] [-- Type: text/x-patch, Size: 2769 bytes --] Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-28 13:08:43.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-10-02 14:56:47.000000000 -0600 @@ -151,6 +151,7 @@ #define __NR_sys_uname __NR_uname +#define __NR_sys_futimesat __NR_futimesat #define __NR_sys_getcwd1 __NR_getcwd #define __NR_sys_getdents __NR_getdents #define __NR_sys_getdents64 __NR_getdents64 @@ -172,6 +173,10 @@ } #endif _syscall1(int,sys_uname,struct new_utsname *,buf) +#if defined(TARGET_NR_futimesat) && defined(__NR_futimesat) +_syscall3(int,sys_futimesat,int,dirfd,const char *,pathname, + const struct timeval *,times) +#endif _syscall2(int,sys_getcwd1,char *,buf,size_t,size) _syscall3(int, sys_getdents, uint, fd, struct dirent *, dirp, uint, count); #if defined(TARGET_NR_getdents64) && defined(__NR_getdents64) @@ -4873,6 +4878,30 @@ break; #endif +#if defined(TARGET_NR_futimesat) && defined(__NR_futimesat) + case TARGET_NR_futimesat: + { + struct timeval tv[2]; + if (copy_from_user_timeval(tv, (struct target_timeval *)arg3) + || copy_from_user_timeval(tv+1, (struct target_timeval *)arg3+1)) { + ret = -EFAULT; + goto fail; + } + if (!arg2) + ret = get_errno(sys_futimesat(arg1, NULL, tv)); + else { + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_futimesat(arg1, path(p), tv)); + if (p) + unlock_user(p, arg2, 0); + } + } + break; +#endif + #ifdef TARGET_NR_set_robust_list case TARGET_NR_set_robust_list: goto unimplemented_nowarn; Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-28 13:08:43.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-10-02 14:54:56.000000000 -0600 @@ -325,4 +325,5 @@ #define TARGET_NR_mbind 319 #define TARGET_NR_get_mempolicy 320 #define TARGET_NR_set_mempolicy 321 +#define TARGET_NR_futimesat 326 #define TARGET_NR_utimensat 348 Index: qemu/linux-user/i386/syscall_nr.h =================================================================== --- qemu.orig/linux-user/i386/syscall_nr.h 2007-09-28 13:08:43.000000000 -0600 +++ qemu/linux-user/i386/syscall_nr.h 2007-10-02 14:54:56.000000000 -0600 @@ -274,6 +274,8 @@ #define TARGET_NR_tgkill 270 #define TARGET_NR_utimes 271 +#define TARGET_NR_futimesat 299 + #define TARGET_NR_set_robust_list 311 #define TARGET_NR_utimensat 320 ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall 2007-09-19 12:51 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thayne Harbaugh 2007-09-19 12:53 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh @ 2007-09-23 15:42 ` Thiemo Seufer 2007-09-23 16:58 ` Stuart Anderson 1 sibling, 1 reply; 21+ messages in thread From: Thiemo Seufer @ 2007-09-23 15:42 UTC (permalink / raw) To: Thayne Harbaugh; +Cc: qemu-devel Thayne Harbaugh wrote: > This patch adds the utimensat syscall to linux-user. Doesn't build: gcc-3.4 -g -Wl,-T,/home/ths/qemu/qemu-work/ppc.ld -o qemu-arm main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o elfload.o linuxload.o flatload.o nwfpe/fpa11.o nwfpe/fpa11_cpdo.o nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o libqemu.a gdbstub.o -lm -lrt syscall.o: In function `do_syscall': /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' collect2: ld returned 1 exit status make[1]: *** [qemu-arm] Error 1 make[1]: Leaving directory `/home/ths/qemu/qemu-work/arm-linux-user' make: *** [subdir-arm-linux-user] Error 2 Thiemo ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall 2007-09-23 15:42 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thiemo Seufer @ 2007-09-23 16:58 ` Stuart Anderson 2007-09-24 19:45 ` Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Stuart Anderson @ 2007-09-23 16:58 UTC (permalink / raw) To: qemu-devel On Sun, 23 Sep 2007, Thiemo Seufer wrote: > Thayne Harbaugh wrote: >> This patch adds the utimensat syscall to linux-user. > > Doesn't build: > > gcc-3.4 -g -Wl,-T,/home/ths/qemu/qemu-work/ppc.ld -o qemu-arm main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o elfload.o linuxload.o flatload.o nwfpe/fpa11.o nwfpe/fpa11_cpdo.o nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o libqemu.a gdbstub.o -lm -lrt > syscall.o: In function `do_syscall': > /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' > /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' It's looking for something that is in the EFAULT patch. Stuart Stuart R. Anderson anderson@netsweng.com Network & Software Engineering http://www.netsweng.com/ 1024D/37A79149: 0791 D3B8 9A4C 2CDC A31F BD03 0A62 E534 37A7 9149 ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall 2007-09-23 16:58 ` Stuart Anderson @ 2007-09-24 19:45 ` Thayne Harbaugh 2007-09-25 4:25 ` Thayne Harbaugh 0 siblings, 1 reply; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-24 19:45 UTC (permalink / raw) To: qemu-devel On Sun, 2007-09-23 at 12:58 -0400, Stuart Anderson wrote: > On Sun, 23 Sep 2007, Thiemo Seufer wrote: > > > Thayne Harbaugh wrote: > >> This patch adds the utimensat syscall to linux-user Oops! > > Doesn't build: > > > > gcc-3.4 -g -Wl,-T,/home/ths/qemu/qemu-work/ppc.ld -o qemu-arm main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o elfload.o linuxload.o flatload.o nwfpe/fpa11.o nwfpe/fpa11_cpdo.o nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o libqemu.a gdbstub.o -lm -lrt > > syscall.o: In function `do_syscall': > > /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' > > /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' > > It's looking for something that is in the EFAULT patch. Yeah, I guess I had the EFAULT patch applied. I'll work up a patch for utimensat() without the EFAULT patch. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall 2007-09-24 19:45 ` Thayne Harbaugh @ 2007-09-25 4:25 ` Thayne Harbaugh 0 siblings, 0 replies; 21+ messages in thread From: Thayne Harbaugh @ 2007-09-25 4:25 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 1162 bytes --] On Mon, 2007-09-24 at 13:45 -0600, Thayne Harbaugh wrote: > On Sun, 2007-09-23 at 12:58 -0400, Stuart Anderson wrote: > > On Sun, 23 Sep 2007, Thiemo Seufer wrote: > > > > > Thayne Harbaugh wrote: > > >> This patch adds the utimensat syscall to linux-user > > Oops! > > > > Doesn't build: > > > > > > gcc-3.4 -g -Wl,-T,/home/ths/qemu/qemu-work/ppc.ld -o qemu-arm main.o syscall.o mmap.o signal.o path.o osdep.o thunk.o elfload.o linuxload.o flatload.o nwfpe/fpa11.o nwfpe/fpa11_cpdo.o nwfpe/fpa11_cpdt.o nwfpe/fpa11_cprt.o nwfpe/fpopcode.o nwfpe/single_cpdo.o nwfpe/double_cpdo.o nwfpe/extended_cpdo.o arm-semi.o libqemu.a gdbstub.o -lm -lrt > > > syscall.o: In function `do_syscall': > > > /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' > > > /home/ths/qemu/qemu-work/linux-user/syscall.c:4665: undefined reference to `copy_from_user_timespec' > > > > It's looking for something that is in the EFAULT patch. > > Yeah, I guess I had the EFAULT patch applied. I'll work up a patch for > utimensat() without the EFAULT patch. Try this patch for utimensat() that doesn't depend on the EFAULT patch. [-- Attachment #2: 22_utimensat.2.patch --] [-- Type: text/x-patch, Size: 2600 bytes --] Index: qemu/linux-user/arm/syscall_nr.h =================================================================== --- qemu.orig/linux-user/arm/syscall_nr.h 2007-09-24 15:22:35.000000000 -0600 +++ qemu/linux-user/arm/syscall_nr.h 2007-09-24 15:22:58.000000000 -0600 @@ -325,3 +325,4 @@ #define TARGET_NR_mbind 319 #define TARGET_NR_get_mempolicy 320 #define TARGET_NR_set_mempolicy 321 +#define TARGET_NR_utimensat 348 Index: qemu/linux-user/i386/syscall_nr.h =================================================================== --- qemu.orig/linux-user/i386/syscall_nr.h 2007-09-24 15:22:42.000000000 -0600 +++ qemu/linux-user/i386/syscall_nr.h 2007-09-24 15:22:58.000000000 -0600 @@ -275,3 +275,5 @@ #define TARGET_NR_utimes 271 #define TARGET_NR_set_robust_list 311 + +#define TARGET_NR_utimensat 320 Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-09-24 15:22:50.000000000 -0600 +++ qemu/linux-user/syscall.c 2007-09-24 15:41:51.000000000 -0600 @@ -146,6 +146,7 @@ #define __NR_sys_syslog __NR_syslog #define __NR_sys_tgkill __NR_tgkill #define __NR_sys_tkill __NR_tkill +#define __NR_sys_utimensat __NR_utimensat #if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__) #define __NR__llseek __NR_lseek @@ -180,6 +181,10 @@ #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) _syscall1(int,set_tid_address,int *,tidptr) #endif +#if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) +_syscall4(int,sys_utimensat,int,dirfd,const char *,pathname, + const struct timespec *,tsp,int,flags) +#endif extern int personality(int); extern int flock(int, int); @@ -4653,6 +4658,27 @@ goto unimplemented_nowarn; #endif +#if defined(TARGET_NR_utimensat) && defined(__NR_utimensat) + case TARGET_NR_utimensat: + { + struct timespec ts[2]; + target_to_host_timespec(ts, arg3); + target_to_host_timespec(ts+1, arg3+sizeof(struct target_timespec)); + if (!arg2) + ret = get_errno(sys_utimensat(arg1, NULL, ts, arg4)); + else { + p = lock_user_string(arg2); + if (!access_ok(VERIFY_READ, p, 1)) + ret = -EFAULT; + else + ret = get_errno(sys_utimensat(arg1, path(p), ts, arg4)); + if (p) + unlock_user(p, arg2, 0); + } + } + break; +#endif + default: unimplemented: gemu_log("qemu: Unsupported syscall: %d\n", num); ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2007-10-02 20:58 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-09-19 12:46 [Qemu-devel] [PATCH] linux-user *at() syscalls Thayne Harbaugh 2007-09-19 12:51 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thayne Harbaugh 2007-09-19 12:53 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh 2007-09-19 12:54 ` [Qemu-devel] Re: [PATCH] linux-user openat() syscall Thayne Harbaugh 2007-09-19 12:57 ` [Qemu-devel] Re: [PATCH] linux-user mkdirat() syscall Thayne Harbaugh 2007-09-19 12:58 ` [Qemu-devel] Re: [PATCH] linux-user mknodat() syscall Thayne Harbaugh 2007-09-19 12:59 ` [Qemu-devel] Re: [PATCH] linux-user fchownat() syscall Thayne Harbaugh 2007-09-19 13:00 ` [Qemu-devel] Re: [PATCH] linux-user unlinkat() syscall Thayne Harbaugh 2007-09-19 13:01 ` [Qemu-devel] Re: [PATCH] linux-user renameat() syscall Thayne Harbaugh 2007-09-19 13:02 ` [Qemu-devel] Re: [PATCH] linux-user linkat() syscall Thayne Harbaugh 2007-09-19 13:03 ` [Qemu-devel] Re: [PATCH] linux-user symlinkat() syscall Thayne Harbaugh 2007-09-19 13:04 ` [Qemu-devel] Re: [PATCH] linux-user readlinkat() syscall Thayne Harbaugh 2007-09-19 13:05 ` [Qemu-devel] Re: [PATCH] linux-user fchmodat() syscall Thayne Harbaugh 2007-09-19 13:06 ` [Qemu-devel] Re: [PATCH] linux-user faccessat() syscall Thayne Harbaugh 2007-09-19 13:09 ` [Qemu-devel] Re: [PATCH] linux-user stat64_put_user function Thayne Harbaugh 2007-09-19 13:11 ` [Qemu-devel] Re: [PATCH] linux-user fstatat syscall Thayne Harbaugh 2007-10-02 20:50 ` [Qemu-devel] Re: [PATCH] linux-user futimesat() syscall Thayne Harbaugh 2007-09-23 15:42 ` [Qemu-devel] Re: [PATCH] linux-user utimensat() syscall Thiemo Seufer 2007-09-23 16:58 ` Stuart Anderson 2007-09-24 19:45 ` Thayne Harbaugh 2007-09-25 4:25 ` Thayne Harbaugh
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).