|
From: Philippe W. <phi...@sk...> - 2018-06-02 15:26:05
|
Hello, Thanks for the below patch. Could you attach the patch to the bug https://bugs.kde.org/show_bug.cgi?id=392118 ? That gives a better chance to not have it forgotten Thanks Philippe On Fri, 2018-06-01 at 21:08 +0200, Mattias Andrée wrote: > --- > coregrind/m_syswrap/priv_syswrap-linux.h | 3 +++ > coregrind/m_syswrap/syswrap-amd64-linux.c | 6 +++-- > coregrind/m_syswrap/syswrap-arm-linux.c | 4 +++- > coregrind/m_syswrap/syswrap-arm64-linux.c | 2 ++ > coregrind/m_syswrap/syswrap-linux.c | 16 +++++++++++++ > coregrind/m_syswrap/syswrap-mips32-linux.c | 4 +++- > coregrind/m_syswrap/syswrap-mips64-linux.c | 3 ++- > coregrind/m_syswrap/syswrap-ppc32-linux.c | 4 +++- > coregrind/m_syswrap/syswrap-ppc64-linux.c | 4 +++- > coregrind/m_syswrap/syswrap-x86-linux.c | 4 +++- > include/vki/vki-linux.h | 38 ++++++++++++++++++++++++++++++ > 11 files changed, 80 insertions(+), 8 deletions(-) > > diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h > index 5b5c8ef37..f66acc697 100644 > --- a/coregrind/m_syswrap/priv_syswrap-linux.h > +++ b/coregrind/m_syswrap/priv_syswrap-linux.h > @@ -293,6 +293,9 @@ DECL_TEMPLATE(linux, sys_memfd_create); > > DECL_TEMPLATE(linux, sys_syncfs); > > +// Linux-specific (new in Linux 4.11) > +DECL_TEMPLATE(linux, sys_statx); > + > /* --------------------------------------------------------------------- > Wrappers for sockets and ipc-ery. These are split into standalone > procedures because x86-linux hides them inside multiplexors > diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c > index 14ad6499e..d7d322c8b 100644 > --- a/coregrind/m_syswrap/syswrap-amd64-linux.c > +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c > @@ -839,10 +839,12 @@ static SyscallTableEntry syscall_table[] = { > LINX_(__NR_renameat2, sys_renameat2), // 316 > // LIN__(__NR_seccomp, sys_ni_syscall), // 317 > LINXY(__NR_getrandom, sys_getrandom), // 318 > - LINXY(__NR_memfd_create, sys_memfd_create) // 319 > + LINXY(__NR_memfd_create, sys_memfd_create), // 319 > > // LIN__(__NR_kexec_file_load, sys_ni_syscall), // 320 > -// LIN__(__NR_bpf, sys_ni_syscall) // 321 > +// LIN__(__NR_bpf, sys_ni_syscall), // 321 > + > + LINXY(__NR_statx, sys_statx), // 332 > }; > > SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) > diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c > index 4ae4e891d..9f1bdab5f 100644 > --- a/coregrind/m_syswrap/syswrap-arm-linux.c > +++ b/coregrind/m_syswrap/syswrap-arm-linux.c > @@ -1014,7 +1014,9 @@ static SyscallTableEntry syscall_main_table[] = { > LINX_(__NR_renameat2, sys_renameat2), // 382 > > LINXY(__NR_getrandom, sys_getrandom), // 384 > - LINXY(__NR_memfd_create, sys_memfd_create) // 385 > + LINXY(__NR_memfd_create, sys_memfd_create), // 385 > + > + LINXY(__NR_statx, sys_statx), // 397 > }; > > > diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c > index d2444590d..23a2788a7 100644 > --- a/coregrind/m_syswrap/syswrap-arm64-linux.c > +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c > @@ -888,6 +888,8 @@ static SyscallTableEntry syscall_main_table[] = { > // (__NR_pkey_mprotect, sys_ni_syscall), // 288 > // (__NR_pkey_alloc, sys_ni_syscall), // 289 > // (__NR_pkey_free, sys_ni_syscall), // 290 > + > + LINXY(__NR_statx, sys_statx), // 397 > }; > > > diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c > index 5ed732c36..157108ec8 100644 > --- a/coregrind/m_syswrap/syswrap-linux.c > +++ b/coregrind/m_syswrap/syswrap-linux.c > @@ -3653,6 +3653,22 @@ PRE(sys_syncfs) > PRE_REG_READ1(long, "syncfs", unsigned int, fd); > } > > +PRE(sys_statx) > +{ > + FUSE_COMPATIBLE_MAY_BLOCK(); > + PRINT("sys_statx ( %ld, %#" FMT_REGWORD "x(%s), %ld, %ld, %#" FMT_REGWORD "x )", > + ARG1,ARG2,(char*)(Addr)ARG2,ARG3,ARG4,ARG5); > + PRE_REG_READ5(long, "statx", > + int, dirfd, char *, file_name, int, flags, > + unsigned int, mask, struct statx *, buf); > + PRE_MEM_RASCIIZ( "statx(file_name)", ARG2 ); > + PRE_MEM_WRITE( "statx(buf)", ARG5, sizeof(struct vki_statx) ); > +} > +POST(sys_statx) > +{ > + POST_MEM_WRITE( ARG5, sizeof(struct vki_statx) ); > +} > + > /* --------------------------------------------------------------------- > utime wrapper > ------------------------------------------------------------------ */ > diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c > index aecffe80d..6187e0dc6 100644 > --- a/coregrind/m_syswrap/syswrap-mips32-linux.c > +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c > @@ -1062,7 +1062,9 @@ static SyscallTableEntry syscall_main_table[] = { > LINX_ (__NR_process_vm_writev, sys_process_vm_writev), // 346 > //.. > LINXY(__NR_getrandom, sys_getrandom), // 353 > - LINXY(__NR_memfd_create, sys_memfd_create) // 354 > + LINXY(__NR_memfd_create, sys_memfd_create), // 354 > + //.. > + LINXY(__NR_statx, sys_statx), // 366 > }; > > SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) > diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c > index c644ecd71..e9a5bc8ce 100644 > --- a/coregrind/m_syswrap/syswrap-mips64-linux.c > +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c > @@ -827,7 +827,8 @@ static SyscallTableEntry syscall_main_table[] = { > LINX_ (__NR_process_vm_writev, sys_process_vm_writev), > LINXY(__NR_getrandom, sys_getrandom), > LINXY(__NR_memfd_create, sys_memfd_create), > - LINX_(__NR_syncfs, sys_syncfs) > + LINX_(__NR_syncfs, sys_syncfs), > + LINX_(__NR_statx, sys_statx), > }; > > SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) > diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c > index d1506028c..f812f1f6c 100644 > --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c > +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c > @@ -1019,7 +1019,9 @@ static SyscallTableEntry syscall_table[] = { > LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 > > LINXY(__NR_getrandom, sys_getrandom), // 359 > - LINXY(__NR_memfd_create, sys_memfd_create) // 360 > + LINXY(__NR_memfd_create, sys_memfd_create), // 360 > + > + LINXY(__NR_statx, sys_statx), // 383 > }; > > SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) > diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c > index 46bb31778..2d699a4ed 100644 > --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c > +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c > @@ -937,7 +937,9 @@ static SyscallTableEntry syscall_table[] = { > LINX_(__NR_renameat2, sys_renameat2), // 357 > > LINXY(__NR_getrandom, sys_getrandom), // 359 > - LINXY(__NR_memfd_create, sys_memfd_create) // 360 > + LINXY(__NR_memfd_create, sys_memfd_create), // 360 > + > + LINXY(__NR_statx, sys_statx), // 383 > }; > > SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) > diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c > index bec145aca..5f44ed394 100644 > --- a/coregrind/m_syswrap/syswrap-x86-linux.c > +++ b/coregrind/m_syswrap/syswrap-x86-linux.c > @@ -1604,7 +1604,9 @@ static SyscallTableEntry syscall_table[] = { > LINX_(__NR_sendmsg, sys_sendmsg), // 370 > LINXY(__NR_recvfrom, sys_recvfrom), // 371 > LINXY(__NR_recvmsg, sys_recvmsg), // 372 > - LINX_(__NR_shutdown, sys_shutdown) // 373 > + LINX_(__NR_shutdown, sys_shutdown), // 373 > + > + LINXY(__NR_statx, sys_statx), // 383 > }; > > SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) > diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h > index 707208040..1beeebba1 100644 > --- a/include/vki/vki-linux.h > +++ b/include/vki/vki-linux.h > @@ -1381,6 +1381,44 @@ struct vki_robust_list_head { > #define VKI_S_IWOTH 00002 > #define VKI_S_IXOTH 00001 > > +struct vki_statx_timestamp { > + __vki_s64 tv_sec; > + __vki_u32 tv_nsec; > + __vki_s32 __reserved; > +}; > + > +struct vki_statx { > + /* 0x00 */ > + __vki_u32 stx_mask; /* What results were written [uncond] */ > + __vki_u32 stx_blksize; /* Preferred general I/O size [uncond] */ > + __vki_u64 stx_attributes; /* Flags conveying information about the file [uncond] */ > + /* 0x10 */ > + __vki_u32 stx_nlink; /* Number of hard links */ > + __vki_u32 stx_uid; /* User ID of owner */ > + __vki_u32 stx_gid; /* Group ID of owner */ > + __vki_u16 stx_mode; /* File mode */ > + __vki_u16 __spare0[1]; > + /* 0x20 */ > + __vki_u64 stx_ino; /* Inode number */ > + __vki_u64 stx_size; /* File size */ > + __vki_u64 stx_blocks; /* Number of 512-byte blocks allocated */ > + __vki_u64 stx_attributes_mask; /* Mask to show what's supported in stx_attributes */ > + /* 0x40 */ > + struct vki_statx_timestamp stx_atime; /* Last access time */ > + struct vki_statx_timestamp stx_btime; /* File creation time */ > + struct vki_statx_timestamp stx_ctime; /* Last attribute change time */ > + struct vki_statx_timestamp stx_mtime; /* Last data modification time */ > + /* 0x80 */ > + __vki_u32 stx_rdev_major; /* Device ID of special file [if bdev/cdev] */ > + __vki_u32 stx_rdev_minor; > + __vki_u32 stx_dev_major; /* ID of device containing file [uncond] */ > + __vki_u32 stx_dev_minor; > + /* 0x90 */ > + __vki_u64 __spare2[14]; /* Spare space for future expansion */ > + /* 0x100 */ > +}; > + > + > //---------------------------------------------------------------------- > // From linux-2.6.8.1/include/linux/dirent.h > //---------------------------------------------------------------------- |