mbox series

[v7,00/74] linux-user: Split do_syscall

Message ID 20190519203726.20729-1-richard.henderson@linaro.org
Headers show
Series linux-user: Split do_syscall | expand

Message

Richard Henderson May 19, 2019, 8:36 p.m. UTC
Based-on: <20190519201953.20161-1-richard.henderson@linaro.org>
Aka "linux-user: path, clone, sparc, shmat fixes"

Version 6 was
https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg04794.html

Since v5, I've fixed the ioctl failure that Laurent found, and
have done a few more syscalls.

I've tried to do more testing with LTP, but it's a really annoying
testsuite.  There are at least 3 tests that hang forever (before 
and after this patch set), and the host kernel's OOM handler kills
my login session, ending the test run.  This seems to be different
behaviour than I was seeing in January, when I did have test runs
that completed successfully.

OTOH, looking back at the v6 cover letter, I now see that I was
testing armhf and i386 as guests, whereas this time I was trying
aarch64 and ppc64 as guests.  32-bit guests unable to trigger the
host OOM killer?

Laurent, is there anything special that you're doing to see these
tests run to completion?


r~


Richard Henderson (74):
  linux-user: Setup split syscall infrastructure
  linux-user: Split out open, open_at
  linux-user: Share more code for open and openat
  linux-user: Tidy do_openat loop over fakes
  linux-user: Split out readlink, readlinkat
  linux-user: Split out close
  linux-user: Split out read, write
  linux-user: Reduce regpairs_aligned & target_offset64 ifdefs
  linux-user: Split out readv, writev
  linux-user: Split out pread64, pwrite64
  linux-user: Split out preadv, pwritev
  linux-user: Split out name_to_handle_at, open_by_handle_at
  linux-user: Split out ipc syscalls
  linux-user: Split out memory syscalls
  linux-user: Split out exit
  linux-user: Split out brk
  linux-user: Split out clone, fork, vfork
  linux-user: Split out wait4, waitid, waitpid
  linux-user: Implement rusage argument to waitid
  linux-user: Split out creat
  linux-user: Split out link, linkat
  linux-user: Split out unlink, unlinkat, rmdir
  linux-user: Split out execve
  linux-user: Implement execveat
  linux-user: Split out chdir
  linux-user: Split out time
  linux-user: Split out mknod, mknodat
  linux-user: Split out chmod, fchmod, fchmodat
  linux-user: Split out lseek, llseek
  linux-user: Split out getpid, getppid, getxpid
  linux-user: Split out mount
  linux-user: Split out umount, umount2
  linux-user: Split out stime
  linux-user: Split out alarm, pause
  linux-user: Split out utime, utimes, futimesat
  linux-user: Split out access, faccessat
  linux-user: Split out nice
  linux-user: Split out sync, syncfs
  linux-user: Split out kill
  linux-user: Split out rename, renameat, renameat2
  linux-user: Split out mkdir, mkdirat
  linux-user: Split out dup, dup2, dup3
  linux-user: Split out pipe, pipe2
  linux-user: Split out times
  linux-user: Split out acct
  linux-user: Move syscall_init to the end
  linux-user: Split out ioctl
  linux-user: Fix types in ioctl logging
  linux-user: Remove sentinel from ioctl_entries
  linux-user: Split out fcntl, fcntl64
  linux-user: Split out setpgid
  linux-user: Split out umask
  linux-user: Split out chroot
  linux-user: Split out getpgid, getpgrp
  linux-user: Split out getsid, setsid
  linux-user: Split out sigaction, rt_sigaction
  linux-user: Split out sgetmask, ssetmask
  linux-user: Split out sigprocmask, rt_sigprocmask
  linux-user: Split out sigpending, rt_sigpending
  linux-user: Split out sigsuspend, rt_sigsuspend
  linux-user: Split out rt_sigtimedwait
  linux-user: Split out rt_sigqueueinfo, rt_tgsigqueueinfo
  linux-user: Split out sigreturn, rt_sigreturn
  linux-user: Split out gethostname, sethostname
  linux-user: Split out getrlimit, setrlimit
  linux-user: Split out getrusage
  linux-user: Split out gettimeofday, settimeofday
  linux-user: Split out select, _newselect
  linux-user: Split out pselect6
  linux-user: Split out symlink, symlinkat
  linux-user: Split out swapon, swapoff
  linux-user: Split out reboot
  linux-user: Split out truncate, truncate64, ftruncate, ftruncate64
  linux-user: Split out getpriority, setpriority

 linux-user/syscall-defs.h      |  338 +++
 linux-user/syscall.h           |  103 +
 linux-user/strace.c            | 1569 +++-------
 linux-user/syscall-fcntl.inc.c |  322 ++
 linux-user/syscall-file.inc.c  | 1526 ++++++++++
 linux-user/syscall-ioctl.inc.c |  873 ++++++
 linux-user/syscall-ipc.inc.c   | 1088 +++++++
 linux-user/syscall-mem.inc.c   |  244 ++
 linux-user/syscall-proc.inc.c  |  758 +++++
 linux-user/syscall-sig.inc.c   |  549 ++++
 linux-user/syscall-time.inc.c  |   77 +
 linux-user/syscall.c           | 5045 ++------------------------------
 configure                      |   20 -
 linux-user/strace.list         |  414 ---
 14 files changed, 6512 insertions(+), 6414 deletions(-)
 create mode 100644 linux-user/syscall-defs.h
 create mode 100644 linux-user/syscall.h
 create mode 100644 linux-user/syscall-fcntl.inc.c
 create mode 100644 linux-user/syscall-file.inc.c
 create mode 100644 linux-user/syscall-ioctl.inc.c
 create mode 100644 linux-user/syscall-ipc.inc.c
 create mode 100644 linux-user/syscall-mem.inc.c
 create mode 100644 linux-user/syscall-proc.inc.c
 create mode 100644 linux-user/syscall-sig.inc.c
 create mode 100644 linux-user/syscall-time.inc.c

-- 
2.17.1

Comments

Laurent Vivier May 20, 2019, 6:21 a.m. UTC | #1
On 19/05/2019 22:36, Richard Henderson wrote:
> Based-on: <20190519201953.20161-1-richard.henderson@linaro.org>

> Aka "linux-user: path, clone, sparc, shmat fixes"

> 

> Version 6 was

> https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg04794.html

> 

> Since v5, I've fixed the ioctl failure that Laurent found, and

> have done a few more syscalls.

> 

> I've tried to do more testing with LTP, but it's a really annoying

> testsuite.  There are at least 3 tests that hang forever (before

> and after this patch set), and the host kernel's OOM handler kills

> my login session, ending the test run.  This seems to be different

> behaviour than I was seeing in January, when I did have test runs

> that completed successfully.

> 

> OTOH, looking back at the v6 cover letter, I now see that I was

> testing armhf and i386 as guests, whereas this time I was trying

> aarch64 and ppc64 as guests.  32-bit guests unable to trigger the

> host OOM killer?

> 

> Laurent, is there anything special that you're doing to see these

> tests run to completion?


I'm running them in a container ('unshare chroot') and aarch64 needs a 
patch that hasn't been merged:

   "[PATCH] linux-user: check valid address in access_ok()"
   https://patchew.org/QEMU/20190208173520.15007-1-remi@remlab.net/

I have a skipfile that contains:

futex_wait03
mmap13
mmap16
msgctl10
msgctl11
ptrace01
ptrace02
ptrace03
ptrace05
remap_file_pages01
remap_file_pages02
sendmsg01
fork13
fork14
creat07
mremap03

but I didn't update it for a while.

I will test as soon as possible your series in my environment.

Thanks,
Laurent
Peter Maydell May 20, 2019, 9:42 a.m. UTC | #2
On Sun, 19 May 2019 at 21:39, Richard Henderson
<richard.henderson@linaro.org> wrote:
>

> Based-on: <20190519201953.20161-1-richard.henderson@linaro.org>

> Aka "linux-user: path, clone, sparc, shmat fixes"

>

> Version 6 was

> https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg04794.html

>

> Since v5, I've fixed the ioctl failure that Laurent found, and

> have done a few more syscalls.

>

> I've tried to do more testing with LTP, but it's a really annoying

> testsuite.  There are at least 3 tests that hang forever (before

> and after this patch set), and the host kernel's OOM handler kills

> my login session, ending the test run.  This seems to be different

> behaviour than I was seeing in January, when I did have test runs

> that completed successfully.


If these are different from the ones we're already skipping
in the skiplist documented at https://wiki.qemu.org/Testing/LTP
we should update that wiki page to also skip these new
hanging-tests (and whatever it is that eats all the memory).

thanks
-- PMM
Aleksandar Markovic May 20, 2019, 10:13 a.m. UTC | #3
On May 20, 2019 11:43 AM, "Peter Maydell" <peter.maydell@linaro.org> wrote:
>

> On Sun, 19 May 2019 at 21:39, Richard Henderson

> <richard.henderson@linaro.org> wrote:

> >

> > Based-on: <20190519201953.20161-1-richard.henderson@linaro.org>

> > Aka "linux-user: path, clone, sparc, shmat fixes"

> >

> > Version 6 was

> > https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg04794.html

> >

> > Since v5, I've fixed the ioctl failure that Laurent found, and

> > have done a few more syscalls.

> >

> > I've tried to do more testing with LTP, but it's a really annoying

> > testsuite.  There are at least 3 tests that hang forever (before

> > and after this patch set), and the host kernel's OOM handler kills

> > my login session, ending the test run.  This seems to be different

> > behaviour than I was seeing in January, when I did have test runs

> > that completed successfully.

>

> If these are different from the ones we're already skipping

> in the skiplist documented at https://wiki.qemu.org/Testing/LTP

> we should update that wiki page to also skip these new

> hanging-tests (and whatever it is that eats all the memory).

>


Peter, yes, it is definitely different. It has been a moving target lately.
May I suggest that we use a stable version of QEMU, and a stable version of
LTP, and create a skiplist for such stable configuration, include it in the
docs, explicitely noting used versions? We can continue doing that for each
QEMU release and whatever the latest LTP would be at the moment of that
QEMU release (maybe even keeping the previous skiplists - which could be
useful for debugging).

Regards,
Aleksandar

> thanks

> -- PMM

>
Aleksandar Markovic May 22, 2019, 6:11 a.m. UTC | #4
On May 19, 2019 10:38 PM, "Richard Henderson" <richard.henderson@linaro.org>
wrote:
>

> Based-on: <20190519201953.20161-1-richard.henderson@linaro.org>

> Aka "linux-user: path, clone, sparc, shmat fixes"

>

> Version 6 was

> https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg04794.html

>

> Since v5, I've fixed the ioctl failure that Laurent found, and

> have done a few more syscalls.

>

> I've tried to do more testing with LTP, but it's a really annoying

> testsuite.  There are at least 3 tests that hang forever (before

> and after this patch set), and the host kernel's OOM handler kills

> my login session, ending the test run.  This seems to be different

> behaviour than I was seeing in January, when I did have test runs

> that completed successfully.

>

> OTOH, looking back at the v6 cover letter, I now see that I was

> testing armhf and i386 as guests, whereas this time I was trying

> aarch64 and ppc64 as guests.  32-bit guests unable to trigger the

> host OOM killer?

>

> Laurent, is there anything special that you're doing to see these

> tests run to completion?

>


On surface, this series looks to be a refactoring series. However, this is
not the case: burried in various patches, are removals of some features
visible to the end user. Can you please list all such cases in the cover
letter, so that they can be easier identified and evaluated by reviewers?

Thanks,
Aleksandar

>

> r~

>

>

> Richard Henderson (74):

>   linux-user: Setup split syscall infrastructure

>   linux-user: Split out open, open_at

>   linux-user: Share more code for open and openat

>   linux-user: Tidy do_openat loop over fakes

>   linux-user: Split out readlink, readlinkat

>   linux-user: Split out close

>   linux-user: Split out read, write

>   linux-user: Reduce regpairs_aligned & target_offset64 ifdefs

>   linux-user: Split out readv, writev

>   linux-user: Split out pread64, pwrite64

>   linux-user: Split out preadv, pwritev

>   linux-user: Split out name_to_handle_at, open_by_handle_at

>   linux-user: Split out ipc syscalls

>   linux-user: Split out memory syscalls

>   linux-user: Split out exit

>   linux-user: Split out brk

>   linux-user: Split out clone, fork, vfork

>   linux-user: Split out wait4, waitid, waitpid

>   linux-user: Implement rusage argument to waitid

>   linux-user: Split out creat

>   linux-user: Split out link, linkat

>   linux-user: Split out unlink, unlinkat, rmdir

>   linux-user: Split out execve

>   linux-user: Implement execveat

>   linux-user: Split out chdir

>   linux-user: Split out time

>   linux-user: Split out mknod, mknodat

>   linux-user: Split out chmod, fchmod, fchmodat

>   linux-user: Split out lseek, llseek

>   linux-user: Split out getpid, getppid, getxpid

>   linux-user: Split out mount

>   linux-user: Split out umount, umount2

>   linux-user: Split out stime

>   linux-user: Split out alarm, pause

>   linux-user: Split out utime, utimes, futimesat

>   linux-user: Split out access, faccessat

>   linux-user: Split out nice

>   linux-user: Split out sync, syncfs

>   linux-user: Split out kill

>   linux-user: Split out rename, renameat, renameat2

>   linux-user: Split out mkdir, mkdirat

>   linux-user: Split out dup, dup2, dup3

>   linux-user: Split out pipe, pipe2

>   linux-user: Split out times

>   linux-user: Split out acct

>   linux-user: Move syscall_init to the end

>   linux-user: Split out ioctl

>   linux-user: Fix types in ioctl logging

>   linux-user: Remove sentinel from ioctl_entries

>   linux-user: Split out fcntl, fcntl64

>   linux-user: Split out setpgid

>   linux-user: Split out umask

>   linux-user: Split out chroot

>   linux-user: Split out getpgid, getpgrp

>   linux-user: Split out getsid, setsid

>   linux-user: Split out sigaction, rt_sigaction

>   linux-user: Split out sgetmask, ssetmask

>   linux-user: Split out sigprocmask, rt_sigprocmask

>   linux-user: Split out sigpending, rt_sigpending

>   linux-user: Split out sigsuspend, rt_sigsuspend

>   linux-user: Split out rt_sigtimedwait

>   linux-user: Split out rt_sigqueueinfo, rt_tgsigqueueinfo

>   linux-user: Split out sigreturn, rt_sigreturn

>   linux-user: Split out gethostname, sethostname

>   linux-user: Split out getrlimit, setrlimit

>   linux-user: Split out getrusage

>   linux-user: Split out gettimeofday, settimeofday

>   linux-user: Split out select, _newselect

>   linux-user: Split out pselect6

>   linux-user: Split out symlink, symlinkat

>   linux-user: Split out swapon, swapoff

>   linux-user: Split out reboot

>   linux-user: Split out truncate, truncate64, ftruncate, ftruncate64

>   linux-user: Split out getpriority, setpriority

>

>  linux-user/syscall-defs.h      |  338 +++

>  linux-user/syscall.h           |  103 +

>  linux-user/strace.c            | 1569 +++-------

>  linux-user/syscall-fcntl.inc.c |  322 ++

>  linux-user/syscall-file.inc.c  | 1526 ++++++++++

>  linux-user/syscall-ioctl.inc.c |  873 ++++++

>  linux-user/syscall-ipc.inc.c   | 1088 +++++++

>  linux-user/syscall-mem.inc.c   |  244 ++

>  linux-user/syscall-proc.inc.c  |  758 +++++

>  linux-user/syscall-sig.inc.c   |  549 ++++

>  linux-user/syscall-time.inc.c  |   77 +

>  linux-user/syscall.c           | 5045 ++------------------------------

>  configure                      |   20 -

>  linux-user/strace.list         |  414 ---

>  14 files changed, 6512 insertions(+), 6414 deletions(-)

>  create mode 100644 linux-user/syscall-defs.h

>  create mode 100644 linux-user/syscall.h

>  create mode 100644 linux-user/syscall-fcntl.inc.c

>  create mode 100644 linux-user/syscall-file.inc.c

>  create mode 100644 linux-user/syscall-ioctl.inc.c

>  create mode 100644 linux-user/syscall-ipc.inc.c

>  create mode 100644 linux-user/syscall-mem.inc.c

>  create mode 100644 linux-user/syscall-proc.inc.c

>  create mode 100644 linux-user/syscall-sig.inc.c

>  create mode 100644 linux-user/syscall-time.inc.c

>

> --

> 2.17.1

>

>
Richard Henderson May 22, 2019, 11:29 a.m. UTC | #5
[Adding the mailing list back in.]

On 5/22/19 2:47 AM, Aleksandar Markovic wrote:
>> > Version 6 was

>> > https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg04794.html

>> >

>> > Since v5, I've fixed the ioctl failure that Laurent found, and

>> > have done a few more syscalls.

>> >

>> > I've tried to do more testing with LTP....

> 

> Running LTP is certainly a very important way of testing this series. However,

> it is not sufficient. This is because this series completely replaces internal

> QEMU strace mechanism for involved system calls,


What you missed because of the very large time lag between iterations, and
because I was lazy and only referenced v6 in this cover letter, is that in an
early revision the major objection was that I *wasn't* replacing strace, and
thus we were retaining lots of duplicate logic in multiple places.


> and any bug in such

> replacement would not be captured by LTP results. How did you test new strace

> bits and peaces? Can you provide logs of such tests (for example, before/after

> comparisons of strace output for relevant system calls, or similar)?


My strace testing is totally ad-hoc.  Run something with -strace and eyeball it.

Here are before/after logs for busybox ls (aka linux-user-test-0.3, which has
for some reason vanished from the qemu wiki?) for alpha-linux-user.
657 uname(0x40008014b8) = 0
657 brk(NULL) = 0x000000012006a000
657 access("/etc/ld.so.nohwcap",F_OK) = -1 errno=2 (No such file or directory)
657 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x000000400082e000
657 access("/etc/ld.so.preload",R_OK) = -1 errno=2 (No such file or directory)
657 open("/etc/ld.so.cache",O_RDONLY) = 3
657 fstat64(3,0x0000004000800c30) = 0
657 close(3) = 0
657 open("/lib/tls/libc.so.6.1",O_RDONLY) = -1 errno=2 (No such file or directory)
657 stat64("/lib/tls",0x0000004000800bb0) = -1 errno=2 (No such file or directory)
657 open("/lib/libc.so.6.1",O_RDONLY) = 3
657 read(3,0x800da8,640) = 640
657 fstat64(3,0x0000004000800c30) = 0
657 mmap(NULL,927824,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x0000004000830000
657 mprotect(0x00000040008f2000,133200,PROT_NONE) = 0
657 mmap(0x0000004000902000,65536,PROT_EXEC|PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED,3,0xc2000) = 0x0000004000902000
657 mmap(0x0000004000912000,2128,PROT_EXEC|PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x0000004000912000
657 close(3) = 0
657 mprotect(0x000000400082a000,8192,PROT_READ) = 0
657 getxuid(274886302098,4832112143,77,24,4831859744,274886356864) = 1000
657 getxgid(274886302098,4832112143,77,0,1000,274886356864) = 1000
657 setgid(1000,4832112143,77,0,1000,274886356864) = 0
657 setuid(1000,4832112143,77,0,1000,274886356864) = 0
657 ioctl(1,1074295912,274886301072,0,1000,274886356864) = 0
657 lstat64("dummyfile",0x0000004000801510) = 0
657 brk(NULL) = 0x000000012006a000
657 brk(0x000000012008c000) = 0x000000012008c000
657 open("/etc/localtime",O_RDONLY) = 3
657 fstat64(3,0x0000004000801360) = 0
657 fstat64(3,0x00000040008011f0) = 0
657 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x0000004000914000
657 read(3,0x914000,4096) = 3545
657 close(3) = 0
657 munmap(0x0000004000914000,8192) = 0
657 fstat64(1,0x0000004000800c70) = 0
657 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x0000004000916000
657 open("/etc/passwd",O_RDONLY) = 3
657 fstat64(3,0x0000004000801290) = 0
657 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x0000004000918000
657 read(3,0x918000,4096) = 2727
657 close(3) = 0
657 munmap(0x0000004000918000,8192) = 0
657 open("/etc/group",O_RDONLY) = 3
657 fstat64(3,0x0000004000801290) = 0
657 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x000000400091a000
657 read(3,0x91a000,4096) = 1043
657 close(3) = 0
657 munmap(0x000000400091a000,8192) = 0
657 gettimeofday(274886300912,0,1,0,103,1024) = 0
657 write(1,0x916000,66) = 66
657 munmap(0x0000004000916000,8192) = 0
657 exit_group(0)
17862 uname(0x40008014b8) = 0
17862 brk(NULL) = 0x000000012006a000
17862 access("/etc/ld.so.nohwcap", F_OK) = -1 errno=2 (No such file or directory)
17862 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x000000400082e000
17862 access("/etc/ld.so.preload", R_OK) = -1 errno=2 (No such file or directory)
17862 open("/etc/ld.so.cache", O_RDONLY, 01) = 3
17862 fstat64(3,0x0000004000800c30) = 0
17862 close(3) = 0
17862 open("/lib/tls/libc.so.6.1", O_RDONLY, 014) = -1 errno=2 (No such file or directory)
17862 stat64("/lib/tls",0x0000004000800bb0) = -1 errno=2 (No such file or directory)
17862 open("/lib/libc.so.6.1", O_RDONLY, 014) = 3
17862 read(3, 0x0000004000800da8, 640) = 640
17862 fstat64(3,0x0000004000800c30) = 0
17862 mmap(NULL, 927824, PROT_EXEC|PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x0000004000830000
17862 mprotect(0x00000040008f2000, 133200, PROT_NONE) = 0
17862 mmap(0x0000004000902000, 65536, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_DENYWRITE|MAP_FIXED, 3, 794624) = 0x0000004000902000
17862 mmap(0x0000004000912000, 2128, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0) = 0x0000004000912000
17862 close(3) = 0
17862 mprotect(0x000000400082a000, 8192, PROT_READ) = 0
17862 getxuid(274886302098,4832112143,77,24,4831859744,274886356864) = 1000
17862 getxgid(274886302098,4832112143,77,0,1000,274886356864) = 1000
17862 setgid(1000,4832112143,77,0,1000,274886356864) = 0
17862 setuid(1000,4832112143,77,0,1000,274886356864) = 0
17862 ioctl(1, 40087468) = 0
17862 lstat64("dummyfile",0x0000004000801510) = 0
17862 brk(NULL) = 0x000000012006a000
17862 brk(0x000000012008c000) = 0x000000012008c000
17862 open("/etc/localtime", O_RDONLY, 0666) = 3
17862 fstat64(3,0x0000004000801360) = 0
17862 fstat64(3,0x00000040008011f0) = 0
17862 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x0000004000914000
17862 read(3, 0x0000004000914000, 4096) = 3545
17862 close(3) = 0
17862 munmap(0x0000004000914000, 8192) = 0
17862 fstat64(1,0x0000004000800c70) = 0
17862 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x0000004000916000
17862 open("/etc/passwd", O_RDONLY, 0666) = 3
17862 fstat64(3,0x0000004000801290) = 0
17862 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x0000004000918000
17862 read(3, 0x0000004000918000, 4096) = 2727
17862 close(3) = 0
17862 munmap(0x0000004000918000, 8192) = 0
17862 open("/etc/group", O_RDONLY, 0666) = 3
17862 fstat64(3,0x0000004000801290) = 0
17862 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x000000400091a000
17862 read(3, 0x000000400091a000, 4096) = 1043
17862 close(3) = 0
17862 munmap(0x000000400091a000, 8192) = 0
17862 gettimeofday(0x00000040008014f0) = 0
17862 write(1, 0x0000004000916000, 66) = 66
17862 munmap(0x0000004000916000, 8192) = 0
17862 exit_group(0)