qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL 00/15] Testing, CI and bsd-user patches
@ 2021-01-11 13:43 Thomas Huth
  2021-01-11 13:43 ` [PULL 01/15] gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD Thomas Huth
                   ` (15 more replies)
  0 siblings, 16 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

 Hi,

the following changes since commit 7b09f127738ae3d0e71716cea086fc8f847a5686:

  Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210108' into staging (2021-01-08 15:37:04 +0000)

are available in the Git repository at:

  https://gitlab.com/huth/qemu.git tags/pull-request-2021-01-11

for you to fetch changes up to 2ee8a60bc51af853b2adfb581bf106b0db109dd9:

  fuzz: map all BARs and enable PCI devices (2021-01-11 11:38:15 +0100)

----------------------------------------------------------------
* Fuzzer improvements
* Add OpenSUSE leap to the gitlab-CI
* Some fixes to get our CI "green" again
* Some initial patches to update bsd-user
----------------------------------------------------------------

Alexander Bulekov (1):
      fuzz: map all BARs and enable PCI devices

Cho, Yu-Chen via (1):
      gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD

Gan Qixin (1):
      qtest/libqtest: fix heap-buffer-overflow in qtest_cb_for_every_machine()

Philippe Mathieu-Daudé (1):
      util/oslib-win32: Fix _aligned_malloc() arguments order

Qiuhao Li (7):
      fuzz: accelerate non-crash detection
      fuzz: double the IOs to remove for every loop
      fuzz: split write operand using binary approach
      fuzz: remove IO commands iteratively
      fuzz: set bits in operand of write/out to zero
      fuzz: add minimization options
      fuzz: heuristic split write based on past IOs

Stacey Son (1):
      bsd-user: move strace OS/arch dependent code to host/arch dirs

Thomas Huth (1):
      tests/acceptance: Fix race conditions in s390x tests & skip fedora on gitlab-CI

Warner Losh (2):
      bsd-user: regenerate FreeBSD's system call numbers
      bsd-user: Update strace.list for FreeBSD's latest syscalls

 .gitlab-ci.d/containers.yml                   |   5 +
 .gitlab-ci.yml                                |  31 ++
 bsd-user/arm/target_arch_sysarch.h            |  78 +++
 bsd-user/arm/target_syscall.h                 |  36 ++
 bsd-user/freebsd/os-strace.h                  |  29 ++
 bsd-user/freebsd/strace.list                  |  65 ++-
 bsd-user/freebsd/syscall_nr.h                 | 695 ++++++++++++++------------
 bsd-user/i386/target_arch_sysarch.h           |  77 +++
 bsd-user/i386/target_syscall.h                |  19 +
 bsd-user/mips/target_arch_sysarch.h           |  69 +++
 bsd-user/mips/target_syscall.h                |  52 ++
 bsd-user/mips64/target_arch_sysarch.h         |  69 +++
 bsd-user/mips64/target_syscall.h              |  53 ++
 bsd-user/netbsd/os-strace.h                   |   1 +
 bsd-user/openbsd/os-strace.h                  |   1 +
 bsd-user/sparc/target_arch_sysarch.h          |  52 ++
 bsd-user/sparc/target_syscall.h               |  24 +-
 bsd-user/sparc64/target_arch_sysarch.h        |  52 ++
 bsd-user/sparc64/target_syscall.h             |  24 +-
 bsd-user/strace.c                             |  11 +
 bsd-user/x86_64/target_arch_sysarch.h         |  76 +++
 bsd-user/x86_64/target_syscall.h              |  21 +-
 meson.build                                   |   1 +
 scripts/oss-fuzz/minimize_qtest_trace.py      | 260 ++++++++--
 tests/acceptance/machine_s390_ccw_virtio.py   |  14 +-
 tests/docker/dockerfiles/opensuse-leap.docker |  55 ++
 tests/qtest/fuzz/generic_fuzz.c               |  24 +
 tests/qtest/libqtest.c                        |   2 +-
 util/oslib-win32.c                            |   2 +-
 29 files changed, 1521 insertions(+), 377 deletions(-)
 create mode 100644 bsd-user/arm/target_arch_sysarch.h
 create mode 100644 bsd-user/arm/target_syscall.h
 create mode 100644 bsd-user/freebsd/os-strace.h
 create mode 100644 bsd-user/i386/target_arch_sysarch.h
 create mode 100644 bsd-user/mips/target_arch_sysarch.h
 create mode 100644 bsd-user/mips/target_syscall.h
 create mode 100644 bsd-user/mips64/target_arch_sysarch.h
 create mode 100644 bsd-user/mips64/target_syscall.h
 create mode 100644 bsd-user/netbsd/os-strace.h
 create mode 100644 bsd-user/openbsd/os-strace.h
 create mode 100644 bsd-user/sparc/target_arch_sysarch.h
 create mode 100644 bsd-user/sparc64/target_arch_sysarch.h
 create mode 100644 bsd-user/x86_64/target_arch_sysarch.h
 create mode 100644 tests/docker/dockerfiles/opensuse-leap.docker



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PULL 01/15] gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 02/15] qtest/libqtest: fix heap-buffer-overflow in qtest_cb_for_every_machine() Thomas Huth
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: "Cho, Yu-Chen via" <qemu-devel@nongnu.org>

Add build-system-opensuse jobs and opensuse-leap.docker dockerfile.
Use openSUSE Leap 15.2 container image in the gitlab-CI.

Signed-off-by: Cho, Yu-Chen <acho@suse.com>
Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Message-Id: <20201229085046.8536-1-acho@suse.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 .gitlab-ci.d/containers.yml                   |  5 ++
 .gitlab-ci.yml                                | 31 +++++++++++
 tests/docker/dockerfiles/opensuse-leap.docker | 55 +++++++++++++++++++
 3 files changed, 91 insertions(+)
 create mode 100644 tests/docker/dockerfiles/opensuse-leap.docker

diff --git a/.gitlab-ci.d/containers.yml b/.gitlab-ci.d/containers.yml
index 892ca8d838..910754a699 100644
--- a/.gitlab-ci.d/containers.yml
+++ b/.gitlab-ci.d/containers.yml
@@ -246,3 +246,8 @@ amd64-ubuntu-container:
   <<: *container_job_definition
   variables:
     NAME: ubuntu
+
+amd64-opensuse-leap-container:
+  <<: *container_job_definition
+  variables:
+    NAME: opensuse-leap
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 01c9e46410..4532f1718a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -200,6 +200,37 @@ acceptance-system-centos:
     MAKE_CHECK_ARGS: check-acceptance
   <<: *acceptance_definition
 
+build-system-opensuse:
+  <<: *native_build_job_definition
+  variables:
+    IMAGE: opensuse-leap
+    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
+    MAKE_CHECK_ARGS: check-build
+  artifacts:
+    expire_in: 2 days
+    paths:
+      - build
+
+check-system-opensuse:
+  <<: *native_test_job_definition
+  needs:
+    - job: build-system-opensuse
+      artifacts: true
+  variables:
+    IMAGE: opensuse-leap
+    MAKE_CHECK_ARGS: check
+
+acceptance-system-opensuse:
+   <<: *native_test_job_definition
+   needs:
+     - job: build-system-opensuse
+       artifacts: true
+   variables:
+     IMAGE: opensuse-leap
+     MAKE_CHECK_ARGS: check-acceptance
+   <<: *acceptance_definition
+
+
 build-disabled:
   <<: *native_build_job_definition
   variables:
diff --git a/tests/docker/dockerfiles/opensuse-leap.docker b/tests/docker/dockerfiles/opensuse-leap.docker
new file mode 100644
index 0000000000..0e64893e4a
--- /dev/null
+++ b/tests/docker/dockerfiles/opensuse-leap.docker
@@ -0,0 +1,55 @@
+FROM opensuse/leap:15.2
+
+# Please keep this list sorted alphabetically
+ENV PACKAGES \
+    bc \
+    brlapi-devel \
+    bzip2 \
+    cyrus-sasl-devel \
+    gcc \
+    gcc-c++ \
+    mkisofs \
+    gettext-runtime \
+    git \
+    glib2-devel \
+    glusterfs-devel \
+    libgnutls-devel \
+    gtk3-devel \
+    libaio-devel \
+    libattr-devel \
+    libcap-ng-devel \
+    libepoxy-devel \
+    libfdt-devel \
+    libiscsi-devel \
+    libjpeg8-devel \
+    libpmem-devel \
+    libpng16-devel \
+    librbd-devel \
+    libseccomp-devel \
+    libssh-devel \
+    lzo-devel \
+    make \
+    libSDL2_image-devel \
+    ncurses-devel \
+    ninja \
+    libnuma-devel \
+    perl \
+    libpixman-1-0-devel \
+    python3-base \
+    python3-virtualenv \
+    rdma-core-devel \
+    libSDL2-devel \
+    snappy-devel \
+    libspice-server-devel \
+    systemd-devel \
+    systemtap-sdt-devel \
+    tar \
+    usbredir-devel \
+    virglrenderer-devel \
+    xen-devel \
+    vte-devel \
+    zlib-devel
+ENV QEMU_CONFIGURE_OPTS --python=/usr/bin/python3.6
+
+RUN zypper update -y && zypper --non-interactive install -y $PACKAGES
+RUN rpm -q $PACKAGES | sort > /packages.txt
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 02/15] qtest/libqtest: fix heap-buffer-overflow in qtest_cb_for_every_machine()
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
  2021-01-11 13:43 ` [PULL 01/15] gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 03/15] util/oslib-win32: Fix _aligned_malloc() arguments order Thomas Huth
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Gan Qixin <ganqixin@huawei.com>

When the length of mname is less than 5, memcpy("xenfv", mname, 5) will cause
heap buffer overflow. Therefore, use strncmp to avoid this problem.

The asan showed stack:

ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000f2f4 at
pc 0x7f65d8cc2225 bp 0x7ffe93cc5a60 sp 0x7ffe93cc5208 READ of size 5 at
0x60200000f2f4 thread T0
    #0 0x7f65d8cc2224 in memcmp (/lib64/libasan.so.5+0xdf224)
    #1 0x5632c20be95b in qtest_cb_for_every_machine tests/qtest/libqtest.c:1282
    #2 0x5632c20b7995 in main tests/qtest/test-hmp.c:160
    #3 0x7f65d88fed42 in __libc_start_main (/lib64/libc.so.6+0x26d42)
    #4 0x5632c20b72cd in _start (build/tests/qtest/test-hmp+0x542cd)

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Gan Qixin <ganqixin@huawei.com>
Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Message-Id: <20210106050625.518041-1-ganqixin@huawei.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 tests/qtest/libqtest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 8e93b0a707..5249a628cc 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -1279,7 +1279,7 @@ void qtest_cb_for_every_machine(void (*cb)(const char *machine),
         g_assert(qstr);
         mname = qstring_get_str(qstr);
         /* Ignore machines that cannot be used for qtests */
-        if (!memcmp("xenfv", mname, 5) || g_str_equal("xenpv", mname)) {
+        if (!strncmp("xenfv", mname, 5) || g_str_equal("xenpv", mname)) {
             continue;
         }
         if (!skip_old_versioned || !qtest_is_old_versioned_machine(mname)) {
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 03/15] util/oslib-win32: Fix _aligned_malloc() arguments order
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
  2021-01-11 13:43 ` [PULL 01/15] gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD Thomas Huth
  2021-01-11 13:43 ` [PULL 02/15] qtest/libqtest: fix heap-buffer-overflow in qtest_cb_for_every_machine() Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 04/15] fuzz: accelerate non-crash detection Thomas Huth
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Philippe Mathieu-Daudé <f4bug@amsat.org>

Commit dfbd0b873a8 inadvertently swapped the arguments
of _aligned_malloc(), correct it to fix [*]:

  G_TEST_SRCDIR=C:/Users/ContainerAdministrator/AppData/Local/Temp/cirrus-ci-build/tests
  G_TEST_BUILDDIR=C:/Users/ContainerAdministrator/AppData/Local/Temp/cirrus-ci-build/build/tests
  tests/test-qht.exe --tap -k
  ERROR test-qht - too few tests run (expected 2, got 0)
  make: *** [Makefile.mtest:256: run-test-30] Error 1

[*] https://cirrus-ci.com/task/6055645751279616?command=test#L593

Fixes: dfbd0b873a8 ("util/oslib-win32: Use _aligned_malloc for qemu_try_memalign")
Reported-by: Yonggang Luo <luoyonggang@gmail.com>
Reported-by: Volker Rümelin <vr_qemu@t-online.de>
Suggested-by: Volker Rümelin <vr_qemu@t-online.de>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Yonggang Luo <luoyonggang@gmail.com>
Message-Id: <20210111001606.1122983-1-f4bug@amsat.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 util/oslib-win32.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index e6f83e10ed..f68b8012bb 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -59,7 +59,7 @@ void *qemu_try_memalign(size_t alignment, size_t size)
 
     g_assert(size != 0);
     g_assert(is_power_of_2(alignment));
-    ptr = _aligned_malloc(alignment, size);
+    ptr = _aligned_malloc(size, alignment);
     trace_qemu_memalign(alignment, size, ptr);
     return ptr;
 }
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 04/15] fuzz: accelerate non-crash detection
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (2 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 03/15] util/oslib-win32: Fix _aligned_malloc() arguments order Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 05/15] fuzz: double the IOs to remove for every loop Thomas Huth
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

We spend much time waiting for the timeout program during the minimization
process until it passes a time limit. This patch hacks the CLOSED (indicates
the redirection file closed) notification in QTest's output if it doesn't
crash.

Test with quadrupled trace input at:
  https://bugs.launchpad.net/qemu/+bug/1890333/comments/1

Original version:
  real	1m37.246s
  user	0m13.069s
  sys	0m8.399s

Refined version:
  real	0m45.904s
  user	0m16.874s
  sys	0m10.042s

Note:

Sometimes the mutated or the same trace may trigger a different crash
summary (second-to-last line) but indicates the same bug. For example, Bug
1910826 [1], which will trigger a stack overflow, may output summaries
like:

SUMMARY: AddressSanitizer: stack-overflow
/home/qiuhao/hack/qemu/build/../softmmu/physmem.c:488 in
flatview_do_translate

or

SUMMARY: AddressSanitizer: stack-overflow
(/home/qiuhao/hack/qemu/build/qemu-system-i386+0x27ca049) in __asan_memcpy

Etc.

If we use the whole summary line as the token, we may be prevented from
further minimization. So in this patch, we only use the first three words
which indicate the type of crash:

SUMMARY: AddressSanitizer: stack-overflow

[1] https://bugs.launchpad.net/qemu/+bug/1910826

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB350251DC04003450348FAF68FCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 44 +++++++++++++++++-------
 1 file changed, 31 insertions(+), 13 deletions(-)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index 5e405a0d5f..a28913a2a7 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -29,8 +29,14 @@ whether the crash occred. Optionally, manually set a string that idenitifes the
 crash by setting CRASH_TOKEN=
 """.format((sys.argv[0])))
 
+deduplication_note = """\n\
+Note: While trimming the input, sometimes the mutated trace triggers a different
+type crash but indicates the same bug. Under this situation, our minimizer is
+incapable of recognizing and stopped from removing it. In the future, we may
+use a more sophisticated crash case deduplication method.
+\n"""
+
 def check_if_trace_crashes(trace, path):
-    global CRASH_TOKEN
     with open(path, "w") as tracefile:
         tracefile.write("".join(trace))
 
@@ -41,18 +47,31 @@ def check_if_trace_crashes(trace, path):
                            trace_path=path),
                           shell=True,
                           stdin=subprocess.PIPE,
-                          stdout=subprocess.PIPE)
-    stdo = rc.communicate()[0]
-    output = stdo.decode('unicode_escape')
-    if rc.returncode == 137:    # Timed Out
-        return False
-    if len(output.splitlines()) < 2:
-        return False
-
+                          stdout=subprocess.PIPE,
+                          encoding="utf-8")
+    global CRASH_TOKEN
     if CRASH_TOKEN is None:
-        CRASH_TOKEN = output.splitlines()[-2]
-
-    return CRASH_TOKEN in output
+        try:
+            outs, _ = rc.communicate(timeout=5)
+            CRASH_TOKEN = " ".join(outs.splitlines()[-2].split()[0:3])
+        except subprocess.TimeoutExpired:
+            print("subprocess.TimeoutExpired")
+            return False
+        print("Identifying Crashes by this string: {}".format(CRASH_TOKEN))
+        global deduplication_note
+        print(deduplication_note)
+        return True
+
+    for line in iter(rc.stdout.readline, ""):
+        if "CLOSED" in line:
+            return False
+        if CRASH_TOKEN in line:
+            return True
+
+    print("\nWarning:")
+    print("  There is no 'CLOSED'or CRASH_TOKEN in the stdout of subprocess.")
+    print("  Usually this indicates a different type of crash.\n")
+    return False
 
 
 def minimize_trace(inpath, outpath):
@@ -66,7 +85,6 @@ def minimize_trace(inpath, outpath):
     print("Crashed in {} seconds".format(end-start))
     TIMEOUT = (end-start)*5
     print("Setting the timeout for {} seconds".format(TIMEOUT))
-    print("Identifying Crashes by this string: {}".format(CRASH_TOKEN))
 
     i = 0
     newtrace = trace[:]
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 05/15] fuzz: double the IOs to remove for every loop
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (3 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 04/15] fuzz: accelerate non-crash detection Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 06/15] fuzz: split write operand using binary approach Thomas Huth
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

Instead of removing IO instructions one by one, we can try deleting multiple
instructions at once. According to the locality of reference, we double the
number of instructions to remove for the next round and recover it to one
once we fail.

This patch is usually significant for large input.

Test with quadrupled trace input at:
  https://bugs.launchpad.net/qemu/+bug/1890333/comments/1

Patched 1/6 version:
  real  0m45.904s
  user  0m16.874s
  sys   0m10.042s

Refined version:
  real  0m11.412s
  user  0m6.888s
  sys   0m3.325s

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB350280A67BB55C3FADF173E3FCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 33 +++++++++++++++---------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index a28913a2a7..cacabf2638 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -88,19 +88,28 @@ def minimize_trace(inpath, outpath):
 
     i = 0
     newtrace = trace[:]
-    # For each line
+    remove_step = 1
     while i < len(newtrace):
-        # 1.) Try to remove it completely and reproduce the crash. If it works,
-        # we're done.
-        prior = newtrace[i]
-        print("Trying to remove {}".format(newtrace[i]))
-        # Try to remove the line completely
-        newtrace[i] = ""
+        # 1.) Try to remove lines completely and reproduce the crash.
+        # If it works, we're done.
+        if (i+remove_step) >= len(newtrace):
+            remove_step = 1
+        prior = newtrace[i:i+remove_step]
+        for j in range(i, i+remove_step):
+            newtrace[j] = ""
+        print("Removing {lines} ...".format(lines=prior))
         if check_if_trace_crashes(newtrace, outpath):
-            i += 1
+            i += remove_step
+            # Double the number of lines to remove for next round
+            remove_step *= 2
             continue
-        newtrace[i] = prior
-
+        # Failed to remove multiple IOs, fast recovery
+        if remove_step > 1:
+            for j in range(i, i+remove_step):
+                newtrace[j] = prior[j-i]
+            remove_step = 1
+            continue
+        newtrace[i] = prior[0] # remove_step = 1
         # 2.) Try to replace write{bwlq} commands with a write addr, len
         # command. Since this can require swapping endianness, try both LE and
         # BE options. We do this, so we can "trim" the writes in (3)
@@ -121,7 +130,7 @@ def minimize_trace(inpath, outpath):
                 if(check_if_trace_crashes(newtrace, outpath)):
                     break
             else:
-                newtrace[i] = prior
+                newtrace[i] = prior[0]
 
         # 3.) If it is a qtest write command: write addr len data, try to split
         # it into two separate write commands. If splitting the write down the
@@ -154,7 +163,7 @@ def minimize_trace(inpath, outpath):
                 if check_if_trace_crashes(newtrace, outpath):
                     i -= 1
                 else:
-                    newtrace[i] = prior
+                    newtrace[i] = prior[0]
                     del newtrace[i+1]
         i += 1
     check_if_trace_crashes(newtrace, outpath)
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 06/15] fuzz: split write operand using binary approach
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (4 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 05/15] fuzz: double the IOs to remove for every loop Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 07/15] fuzz: remove IO commands iteratively Thomas Huth
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

Currently, we split the write commands' data from the middle. If it does not
work, try to move the pivot left by one byte and retry until there is no
space.

But, this method has two flaws:

1. It may fail to trim all unnecessary bytes on the right side.

For example, there is an IO write command:

  write addr uuxxxxuu

u is the unnecessary byte for the crash. Unlike ram write commands, in most
case, a split IO write won't trigger the same crash, So if we split from the
middle, we will get:

  write addr uu (will be removed in next round)
  write addr xxxxuu

For xxxxuu, since split it from the middle and retry to the leftmost byte
won't get the same crash, we will be stopped from removing the last two
bytes.

2. The algorithm complexity is O(n) since we move the pivot byte by byte.

To solve the first issue, we can try a symmetrical position on the right if
we fail on the left. As for the second issue, instead moving by one byte, we
can approach the boundary exponentially, achieving O(log(n)).

Give an example:

                   xxxxuu len=6
                        +
                        |
                        +
                 xxx,xuu 6/2=3 fail
                        +
         +--------------+-------------+
         |                            |
         +                            +
  xx,xxuu 6/2^2=1 fail         xxxxu,u 6-1=5 success
                                 +   +
         +------------------+----+   |
         |                  |        +-------------+ u removed
         +                  +
   xx,xxu 5/2=2 fail  xxxx,u 6-2=4 success
                           +
                           |
                           +-----------+ u removed

In some rare cases, this algorithm will fail to trim all unnecessary bytes:

  xxxxxxxxxuxxxxxx
  xxxxxxxx-xuxxxxxx Fail
  xxxx-xxxxxuxxxxxx Fail
  xxxxxxxxxuxx-xxxx Fail
  ...

I think the trade-off is worth it.

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB3502D26F1BEB680CBBC169E5FCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 29 ++++++++++++++++--------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index cacabf2638..af9767f7e4 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -97,7 +97,7 @@ def minimize_trace(inpath, outpath):
         prior = newtrace[i:i+remove_step]
         for j in range(i, i+remove_step):
             newtrace[j] = ""
-        print("Removing {lines} ...".format(lines=prior))
+        print("Removing {lines} ...\n".format(lines=prior))
         if check_if_trace_crashes(newtrace, outpath):
             i += remove_step
             # Double the number of lines to remove for next round
@@ -110,9 +110,11 @@ def minimize_trace(inpath, outpath):
             remove_step = 1
             continue
         newtrace[i] = prior[0] # remove_step = 1
+
         # 2.) Try to replace write{bwlq} commands with a write addr, len
         # command. Since this can require swapping endianness, try both LE and
         # BE options. We do this, so we can "trim" the writes in (3)
+
         if (newtrace[i].startswith("write") and not
             newtrace[i].startswith("write ")):
             suffix = newtrace[i].split()[0][-1]
@@ -133,11 +135,15 @@ def minimize_trace(inpath, outpath):
                 newtrace[i] = prior[0]
 
         # 3.) If it is a qtest write command: write addr len data, try to split
-        # it into two separate write commands. If splitting the write down the
-        # middle does not work, try to move the pivot "left" and retry, until
-        # there is no space left. The idea is to prune unneccessary bytes from
-        # long writes, while accommodating arbitrary MemoryRegion access sizes
-        # and alignments.
+        # it into two separate write commands. If splitting the data operand
+        # from length/2^n bytes to the left does not work, try to move the pivot
+        # to the right side, then add one to n, until length/2^n == 0. The idea
+        # is to prune unneccessary bytes from long writes, while accommodating
+        # arbitrary MemoryRegion access sizes and alignments.
+
+        # This algorithm will fail under some rare situations.
+        # e.g., xxxxxxxxxuxxxxxx (u is the unnecessary byte)
+
         if newtrace[i].startswith("write "):
             addr = int(newtrace[i].split()[1], 16)
             length = int(newtrace[i].split()[2], 16)
@@ -146,6 +152,7 @@ def minimize_trace(inpath, outpath):
                 leftlength = int(length/2)
                 rightlength = length - leftlength
                 newtrace.insert(i+1, "")
+                power = 1
                 while leftlength > 0:
                     newtrace[i] = "write {addr} {size} 0x{data}\n".format(
                             addr=hex(addr),
@@ -157,9 +164,13 @@ def minimize_trace(inpath, outpath):
                             data=data[leftlength*2:])
                     if check_if_trace_crashes(newtrace, outpath):
                         break
-                    else:
-                        leftlength -= 1
-                        rightlength += 1
+                    # move the pivot to right side
+                    if leftlength < rightlength:
+                        rightlength, leftlength = leftlength, rightlength
+                        continue
+                    power += 1
+                    leftlength = int(length/pow(2, power))
+                    rightlength = length - leftlength
                 if check_if_trace_crashes(newtrace, outpath):
                     i -= 1
                 else:
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 07/15] fuzz: remove IO commands iteratively
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (5 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 06/15] fuzz: split write operand using binary approach Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 08/15] fuzz: set bits in operand of write/out to zero Thomas Huth
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

Now we use a one-time scan and remove strategy in the minimizer,
which is not suitable for timing dependent instructions.

For example, instruction A will indicate an address where the config
chunk locates, and instruction B will make the configuration active.
If we have the following instruction sequence:

...
A1
B1
A2
B2
...

A2 and B2 are the actual instructions that trigger the bug.

If we scan from top to bottom, after we remove A1, the behavior of B1
might be unknowable, including not to crash the program. But we will
successfully remove B1 later cause A2 and B2 will crash the process
anyway:

...
A1
A2
B2
...

Now one more trimming will remove A1.

In the perfect case, we would need to be able to remove A and B (or C!) at
the same time. But for now, let's just add a loop around the minimizer.

Since we only remove instructions, this iterative algorithm is converging.

Tested with Bug 1908062.

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB350263004448040ACCB9A9F1FCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 41 +++++++++++++++---------
 1 file changed, 26 insertions(+), 15 deletions(-)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index af9767f7e4..59e91de7e2 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -74,21 +74,9 @@ def check_if_trace_crashes(trace, path):
     return False
 
 
-def minimize_trace(inpath, outpath):
-    global TIMEOUT
-    with open(inpath) as f:
-        trace = f.readlines()
-    start = time.time()
-    if not check_if_trace_crashes(trace, outpath):
-        sys.exit("The input qtest trace didn't cause a crash...")
-    end = time.time()
-    print("Crashed in {} seconds".format(end-start))
-    TIMEOUT = (end-start)*5
-    print("Setting the timeout for {} seconds".format(TIMEOUT))
-
-    i = 0
-    newtrace = trace[:]
+def remove_lines(newtrace, outpath):
     remove_step = 1
+    i = 0
     while i < len(newtrace):
         # 1.) Try to remove lines completely and reproduce the crash.
         # If it works, we're done.
@@ -177,7 +165,30 @@ def minimize_trace(inpath, outpath):
                     newtrace[i] = prior[0]
                     del newtrace[i+1]
         i += 1
-    check_if_trace_crashes(newtrace, outpath)
+
+
+def minimize_trace(inpath, outpath):
+    global TIMEOUT
+    with open(inpath) as f:
+        trace = f.readlines()
+    start = time.time()
+    if not check_if_trace_crashes(trace, outpath):
+        sys.exit("The input qtest trace didn't cause a crash...")
+    end = time.time()
+    print("Crashed in {} seconds".format(end-start))
+    TIMEOUT = (end-start)*5
+    print("Setting the timeout for {} seconds".format(TIMEOUT))
+
+    newtrace = trace[:]
+
+    # remove lines
+    old_len = len(newtrace) + 1
+    while(old_len > len(newtrace)):
+        old_len = len(newtrace)
+        remove_lines(newtrace, outpath)
+        newtrace = list(filter(lambda s: s != "", newtrace))
+
+    assert(check_if_trace_crashes(newtrace, outpath))
 
 
 if __name__ == '__main__':
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 08/15] fuzz: set bits in operand of write/out to zero
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (6 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 07/15] fuzz: remove IO commands iteratively Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 09/15] fuzz: add minimization options Thomas Huth
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

Simplifying the crash cases by opportunistically setting bits in operands of
out/write to zero may help to debug, since usually bit one means turn on or
trigger a function while zero is the default turn-off setting.

Tested bug https://bugs.launchpad.net/qemu/+bug/1908062

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB3502C84B6346A3E3DE708C7BFCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 39 ++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index 59e91de7e2..219858a9e3 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -167,6 +167,42 @@ def remove_lines(newtrace, outpath):
         i += 1
 
 
+def clear_bits(newtrace, outpath):
+    # try setting bits in operands of out/write to zero
+    i = 0
+    while i < len(newtrace):
+        if (not newtrace[i].startswith("write ") and not
+           newtrace[i].startswith("out")):
+           i += 1
+           continue
+        # write ADDR SIZE DATA
+        # outx ADDR VALUE
+        print("\nzero setting bits: {}".format(newtrace[i]))
+
+        prefix = " ".join(newtrace[i].split()[:-1])
+        data = newtrace[i].split()[-1]
+        data_bin = bin(int(data, 16))
+        data_bin_list = list(data_bin)
+
+        for j in range(2, len(data_bin_list)):
+            prior = newtrace[i]
+            if (data_bin_list[j] == '1'):
+                data_bin_list[j] = '0'
+                data_try = hex(int("".join(data_bin_list), 2))
+                # It seems qtest only accepts padded hex-values.
+                if len(data_try) % 2 == 1:
+                    data_try = data_try[:2] + "0" + data_try[2:-1]
+
+                newtrace[i] = "{prefix} {data_try}\n".format(
+                        prefix=prefix,
+                        data_try=data_try)
+
+                if not check_if_trace_crashes(newtrace, outpath):
+                    data_bin_list[j] = '1'
+                    newtrace[i] = prior
+        i += 1
+
+
 def minimize_trace(inpath, outpath):
     global TIMEOUT
     with open(inpath) as f:
@@ -187,7 +223,10 @@ def minimize_trace(inpath, outpath):
         old_len = len(newtrace)
         remove_lines(newtrace, outpath)
         newtrace = list(filter(lambda s: s != "", newtrace))
+    assert(check_if_trace_crashes(newtrace, outpath))
 
+    # set bits to zero
+    clear_bits(newtrace, outpath)
     assert(check_if_trace_crashes(newtrace, outpath))
 
 
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 09/15] fuzz: add minimization options
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (7 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 08/15] fuzz: set bits in operand of write/out to zero Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 10/15] fuzz: heuristic split write based on past IOs Thomas Huth
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

-M1: remove IO commands iteratively
-M2: try setting bits in operand of write/out to zero

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB350204C52E7A39E6B0EEC870FCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 30 ++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index 219858a9e3..0e59bdbb01 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -16,6 +16,10 @@ QEMU_PATH = None
 TIMEOUT = 5
 CRASH_TOKEN = None
 
+# Minimization levels
+M1 = False # try removing IO commands iteratively
+M2 = False # try setting bits in operand of write/out to zero
+
 write_suffix_lookup = {"b": (1, "B"),
                        "w": (2, "H"),
                        "l": (4, "L"),
@@ -23,10 +27,20 @@ write_suffix_lookup = {"b": (1, "B"),
 
 def usage():
     sys.exit("""\
-Usage: QEMU_PATH="/path/to/qemu" QEMU_ARGS="args" {} input_trace output_trace
+Usage:
+
+QEMU_PATH="/path/to/qemu" QEMU_ARGS="args" {} [Options] input_trace output_trace
+
 By default, will try to use the second-to-last line in the output to identify
 whether the crash occred. Optionally, manually set a string that idenitifes the
 crash by setting CRASH_TOKEN=
+
+Options:
+
+-M1: enable a loop around the remove minimizer, which may help decrease some
+     timing dependant instructions. Off by default.
+-M2: try setting bits in operand of write/out to zero. Off by default.
+
 """.format((sys.argv[0])))
 
 deduplication_note = """\n\
@@ -216,24 +230,32 @@ def minimize_trace(inpath, outpath):
     print("Setting the timeout for {} seconds".format(TIMEOUT))
 
     newtrace = trace[:]
+    global M1, M2
 
     # remove lines
     old_len = len(newtrace) + 1
     while(old_len > len(newtrace)):
         old_len = len(newtrace)
+        print("trace lenth = ", old_len)
         remove_lines(newtrace, outpath)
+        if not M1 and not M2:
+            break
         newtrace = list(filter(lambda s: s != "", newtrace))
     assert(check_if_trace_crashes(newtrace, outpath))
 
     # set bits to zero
-    clear_bits(newtrace, outpath)
+    if M2:
+        clear_bits(newtrace, outpath)
     assert(check_if_trace_crashes(newtrace, outpath))
 
 
 if __name__ == '__main__':
     if len(sys.argv) < 3:
         usage()
-
+    if "-M1" in sys.argv:
+        M1 = True
+    if "-M2" in sys.argv:
+        M2 = True
     QEMU_PATH = os.getenv("QEMU_PATH")
     QEMU_ARGS = os.getenv("QEMU_ARGS")
     if QEMU_PATH is None or QEMU_ARGS is None:
@@ -242,4 +264,4 @@ if __name__ == '__main__':
     #     QEMU_ARGS += " -accel qtest"
     CRASH_TOKEN = os.getenv("CRASH_TOKEN")
     QEMU_ARGS += " -qtest stdio -monitor none -serial none "
-    minimize_trace(sys.argv[1], sys.argv[2])
+    minimize_trace(sys.argv[-2], sys.argv[-1])
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 10/15] fuzz: heuristic split write based on past IOs
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (8 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 09/15] fuzz: add minimization options Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 11/15] bsd-user: regenerate FreeBSD's system call numbers Thomas Huth
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Qiuhao Li <Qiuhao.Li@outlook.com>

If previous write commands write the same length of data with the same step,
we view it as a hint.

Signed-off-by: Qiuhao Li <Qiuhao.Li@outlook.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <SYCPR01MB3502480AD07811A6A49B8FEAFCAB0@SYCPR01MB3502.ausprd01.prod.outlook.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 scripts/oss-fuzz/minimize_qtest_trace.py | 56 ++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/scripts/oss-fuzz/minimize_qtest_trace.py b/scripts/oss-fuzz/minimize_qtest_trace.py
index 0e59bdbb01..4cba96dee2 100755
--- a/scripts/oss-fuzz/minimize_qtest_trace.py
+++ b/scripts/oss-fuzz/minimize_qtest_trace.py
@@ -88,6 +88,43 @@ def check_if_trace_crashes(trace, path):
     return False
 
 
+# If previous write commands write the same length of data at the same
+# interval, we view it as a hint.
+def split_write_hint(newtrace, i):
+    HINT_LEN = 3 # > 2
+    if i <=(HINT_LEN-1):
+        return None
+
+    #find previous continuous write traces
+    k = 0
+    l = i-1
+    writes = []
+    while (k != HINT_LEN and l >= 0):
+        if newtrace[l].startswith("write "):
+            writes.append(newtrace[l])
+            k += 1
+            l -= 1
+        elif newtrace[l] == "":
+            l -= 1
+        else:
+            return None
+    if k != HINT_LEN:
+        return None
+
+    length = int(writes[0].split()[2], 16)
+    for j in range(1, HINT_LEN):
+        if length != int(writes[j].split()[2], 16):
+            return None
+
+    step = int(writes[0].split()[1], 16) - int(writes[1].split()[1], 16)
+    for j in range(1, HINT_LEN-1):
+        if step != int(writes[j].split()[1], 16) - \
+            int(writes[j+1].split()[1], 16):
+            return None
+
+    return (int(writes[0].split()[1], 16)+step, length)
+
+
 def remove_lines(newtrace, outpath):
     remove_step = 1
     i = 0
@@ -151,6 +188,25 @@ def remove_lines(newtrace, outpath):
             length = int(newtrace[i].split()[2], 16)
             data = newtrace[i].split()[3][2:]
             if length > 1:
+
+                # Can we get a hint from previous writes?
+                hint = split_write_hint(newtrace, i)
+                if hint is not None:
+                    hint_addr = hint[0]
+                    hint_len = hint[1]
+                    if hint_addr >= addr and hint_addr+hint_len <= addr+length:
+                        newtrace[i] = "write {addr} {size} 0x{data}\n".format(
+                            addr=hex(hint_addr),
+                            size=hex(hint_len),
+                            data=data[(hint_addr-addr)*2:\
+                                (hint_addr-addr)*2+hint_len*2])
+                        if check_if_trace_crashes(newtrace, outpath):
+                            # next round
+                            i += 1
+                            continue
+                        newtrace[i] = prior[0]
+
+                # Try splitting it using a binary approach
                 leftlength = int(length/2)
                 rightlength = length - leftlength
                 newtrace.insert(i+1, "")
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 11/15] bsd-user: regenerate FreeBSD's system call numbers
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (9 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 10/15] fuzz: heuristic split write based on past IOs Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 12/15] bsd-user: move strace OS/arch dependent code to host/arch dirs Thomas Huth
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Warner Losh <imp@freebsd.org>

Recreate the FreeBSD system call numbers from current sys/syscall.h. Since this
isn't guaranteed to be on all systems, continue the practice of generating it
with some variation on:
	sed -e s/SYS_/TARGET_NR_/ < $FREEBSD_SRC/sys/syscall.h > syscall_nr.h
until a more comprehensive system can be put in place.

Signed-off-by: Warner Losh <imp@FreeBSD.org>
Message-Id: <20201218205451.10559-2-imp@freebsd.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 bsd-user/freebsd/syscall_nr.h | 695 +++++++++++++++++++---------------
 1 file changed, 380 insertions(+), 315 deletions(-)

diff --git a/bsd-user/freebsd/syscall_nr.h b/bsd-user/freebsd/syscall_nr.h
index d849024792..7f73a6d0f1 100644
--- a/bsd-user/freebsd/syscall_nr.h
+++ b/bsd-user/freebsd/syscall_nr.h
@@ -1,11 +1,11 @@
 /*
  * System call numbers.
  *
- * created from FreeBSD: releng/9.1/sys/kern/syscalls.master 229723
- * 2012-01-06 19:29:16Z jhb
+ * DO NOT EDIT-- this file is automatically @generated.
+ * $FreeBSD$
  */
 
-#define TARGET_FREEBSD_NR_syscall   0
+#define TARGET_FREEBSD_NR_syscall       0
 #define TARGET_FREEBSD_NR_exit  1
 #define TARGET_FREEBSD_NR_fork  2
 #define TARGET_FREEBSD_NR_read  3
@@ -13,438 +13,503 @@
 #define TARGET_FREEBSD_NR_open  5
 #define TARGET_FREEBSD_NR_close 6
 #define TARGET_FREEBSD_NR_wait4 7
-                /* 8 is old creat */
+                                /* 8 is old creat */
 #define TARGET_FREEBSD_NR_link  9
-#define TARGET_FREEBSD_NR_unlink    10
-                /* 11 is obsolete execv */
+#define TARGET_FREEBSD_NR_unlink        10
+                                /* 11 is obsolete execv */
 #define TARGET_FREEBSD_NR_chdir 12
-#define TARGET_FREEBSD_NR_fchdir    13
-#define TARGET_FREEBSD_NR_mknod 14
+#define TARGET_FREEBSD_NR_fchdir        13
+#define TARGET_FREEBSD_NR_freebsd11_mknod       14
 #define TARGET_FREEBSD_NR_chmod 15
 #define TARGET_FREEBSD_NR_chown 16
 #define TARGET_FREEBSD_NR_break 17
-#define TARGET_FREEBSD_NR_freebsd4_getfsstat    18
-                /* 19 is old lseek */
-#define TARGET_FREEBSD_NR_getpid    20
+                                /* 18 is freebsd4 getfsstat */
+                                /* 19 is old lseek */
+#define TARGET_FREEBSD_NR_getpid        20
 #define TARGET_FREEBSD_NR_mount 21
-#define TARGET_FREEBSD_NR_unmount   22
-#define TARGET_FREEBSD_NR_setuid    23
-#define TARGET_FREEBSD_NR_getuid    24
-#define TARGET_FREEBSD_NR_geteuid   25
-#define TARGET_FREEBSD_NR_ptrace    26
-#define TARGET_FREEBSD_NR_recvmsg   27
-#define TARGET_FREEBSD_NR_sendmsg   28
-#define TARGET_FREEBSD_NR_recvfrom  29
-#define TARGET_FREEBSD_NR_accept    30
+#define TARGET_FREEBSD_NR_unmount       22
+#define TARGET_FREEBSD_NR_setuid        23
+#define TARGET_FREEBSD_NR_getuid        24
+#define TARGET_FREEBSD_NR_geteuid       25
+#define TARGET_FREEBSD_NR_ptrace        26
+#define TARGET_FREEBSD_NR_recvmsg       27
+#define TARGET_FREEBSD_NR_sendmsg       28
+#define TARGET_FREEBSD_NR_recvfrom      29
+#define TARGET_FREEBSD_NR_accept        30
 #define TARGET_FREEBSD_NR_getpeername   31
 #define TARGET_FREEBSD_NR_getsockname   32
-#define TARGET_FREEBSD_NR_access    33
-#define TARGET_FREEBSD_NR_chflags   34
-#define TARGET_FREEBSD_NR_fchflags  35
+#define TARGET_FREEBSD_NR_access        33
+#define TARGET_FREEBSD_NR_chflags       34
+#define TARGET_FREEBSD_NR_fchflags      35
 #define TARGET_FREEBSD_NR_sync  36
 #define TARGET_FREEBSD_NR_kill  37
-                /* 38 is old stat */
-#define TARGET_FREEBSD_NR_getppid   39
-                /* 40 is old lstat */
+                                /* 38 is old stat */
+#define TARGET_FREEBSD_NR_getppid       39
+                                /* 40 is old lstat */
 #define TARGET_FREEBSD_NR_dup   41
-#define TARGET_FREEBSD_NR_pipe  42
-#define TARGET_FREEBSD_NR_getegid   43
-#define TARGET_FREEBSD_NR_profil    44
-#define TARGET_FREEBSD_NR_ktrace    45
-                /* 46 is old sigaction */
-#define TARGET_FREEBSD_NR_getgid    47
-                /* 48 is old sigprocmask */
-#define TARGET_FREEBSD_NR_getlogin  49
-#define TARGET_FREEBSD_NR_setlogin  50
+#define TARGET_FREEBSD_NR_freebsd10_pipe        42
+#define TARGET_FREEBSD_NR_getegid       43
+#define TARGET_FREEBSD_NR_profil        44
+#define TARGET_FREEBSD_NR_ktrace        45
+                                /* 46 is old sigaction */
+#define TARGET_FREEBSD_NR_getgid        47
+                                /* 48 is old sigprocmask */
+#define TARGET_FREEBSD_NR_getlogin      49
+#define TARGET_FREEBSD_NR_setlogin      50
 #define TARGET_FREEBSD_NR_acct  51
-                /* 52 is old sigpending */
+                                /* 52 is old sigpending */
 #define TARGET_FREEBSD_NR_sigaltstack   53
 #define TARGET_FREEBSD_NR_ioctl 54
-#define TARGET_FREEBSD_NR_reboot    55
-#define TARGET_FREEBSD_NR_revoke    56
-#define TARGET_FREEBSD_NR_symlink   57
-#define TARGET_FREEBSD_NR_readlink  58
-#define TARGET_FREEBSD_NR_execve    59
+#define TARGET_FREEBSD_NR_reboot        55
+#define TARGET_FREEBSD_NR_revoke        56
+#define TARGET_FREEBSD_NR_symlink       57
+#define TARGET_FREEBSD_NR_readlink      58
+#define TARGET_FREEBSD_NR_execve        59
 #define TARGET_FREEBSD_NR_umask 60
-#define TARGET_FREEBSD_NR_chroot    61
-                /* 62 is old fstat */
-                /* 63 is old getkerninfo */
-                /* 64 is old getpagesize */
+#define TARGET_FREEBSD_NR_chroot        61
+                                /* 62 is old fstat */
+                                /* 63 is old getkerninfo */
+                                /* 64 is old getpagesize */
 #define TARGET_FREEBSD_NR_msync 65
 #define TARGET_FREEBSD_NR_vfork 66
-                /* 67 is obsolete vread */
-                /* 68 is obsolete vwrite */
+                                /* 67 is obsolete vread */
+                                /* 68 is obsolete vwrite */
 #define TARGET_FREEBSD_NR_sbrk  69
 #define TARGET_FREEBSD_NR_sstk  70
-                /* 71 is old mmap */
-#define TARGET_FREEBSD_NR_vadvise   72
-#define TARGET_FREEBSD_NR_munmap    73
-#define TARGET_FREEBSD_NR_mprotect  74
-#define TARGET_FREEBSD_NR_madvise   75
-                /* 76 is obsolete vhangup */
-                /* 77 is obsolete vlimit */
-#define TARGET_FREEBSD_NR_mincore   78
-#define TARGET_FREEBSD_NR_getgroups 79
-#define TARGET_FREEBSD_NR_setgroups 80
-#define TARGET_FREEBSD_NR_getpgrp   81
-#define TARGET_FREEBSD_NR_setpgid   82
-#define TARGET_FREEBSD_NR_setitimer 83
-                /* 84 is old wait */
-#define TARGET_FREEBSD_NR_swapon    85
-#define TARGET_FREEBSD_NR_getitimer 86
-                /* 87 is old gethostname */
-                /* 88 is old sethostname */
+                                /* 71 is old mmap */
+#define TARGET_FREEBSD_NR_freebsd11_vadvise     72
+#define TARGET_FREEBSD_NR_munmap        73
+#define TARGET_FREEBSD_NR_mprotect      74
+#define TARGET_FREEBSD_NR_madvise       75
+                                /* 76 is obsolete vhangup */
+                                /* 77 is obsolete vlimit */
+#define TARGET_FREEBSD_NR_mincore       78
+#define TARGET_FREEBSD_NR_getgroups     79
+#define TARGET_FREEBSD_NR_setgroups     80
+#define TARGET_FREEBSD_NR_getpgrp       81
+#define TARGET_FREEBSD_NR_setpgid       82
+#define TARGET_FREEBSD_NR_setitimer     83
+                                /* 84 is old wait */
+#define TARGET_FREEBSD_NR_swapon        85
+#define TARGET_FREEBSD_NR_getitimer     86
+                                /* 87 is old gethostname */
+                                /* 88 is old sethostname */
 #define TARGET_FREEBSD_NR_getdtablesize 89
 #define TARGET_FREEBSD_NR_dup2  90
 #define TARGET_FREEBSD_NR_fcntl 92
-#define TARGET_FREEBSD_NR_select    93
+#define TARGET_FREEBSD_NR_select        93
 #define TARGET_FREEBSD_NR_fsync 95
 #define TARGET_FREEBSD_NR_setpriority   96
-#define TARGET_FREEBSD_NR_socket    97
-#define TARGET_FREEBSD_NR_connect   98
-                /* 99 is old accept */
+#define TARGET_FREEBSD_NR_socket        97
+#define TARGET_FREEBSD_NR_connect       98
+                                /* 99 is old accept */
 #define TARGET_FREEBSD_NR_getpriority   100
-                /* 101 is old send */
-                /* 102 is old recv */
-                /* 103 is old sigreturn */
+                                /* 101 is old send */
+                                /* 102 is old recv */
+                                /* 103 is old sigreturn */
 #define TARGET_FREEBSD_NR_bind  104
 #define TARGET_FREEBSD_NR_setsockopt    105
-#define TARGET_FREEBSD_NR_listen    106
-                /* 107 is obsolete vtimes */
-                /* 108 is old sigvec */
-                /* 109 is old sigblock */
-                /* 110 is old sigsetmask */
-                /* 111 is old sigsuspend */
-                /* 112 is old sigstack */
-                /* 113 is old recvmsg */
-                /* 114 is old sendmsg */
-                /* 115 is obsolete vtrace */
+#define TARGET_FREEBSD_NR_listen        106
+                                /* 107 is obsolete vtimes */
+                                /* 108 is old sigvec */
+                                /* 109 is old sigblock */
+                                /* 110 is old sigsetmask */
+                                /* 111 is old sigsuspend */
+                                /* 112 is old sigstack */
+                                /* 113 is old recvmsg */
+                                /* 114 is old sendmsg */
+                                /* 115 is obsolete vtrace */
 #define TARGET_FREEBSD_NR_gettimeofday  116
-#define TARGET_FREEBSD_NR_getrusage 117
+#define TARGET_FREEBSD_NR_getrusage     117
 #define TARGET_FREEBSD_NR_getsockopt    118
 #define TARGET_FREEBSD_NR_readv 120
-#define TARGET_FREEBSD_NR_writev    121
+#define TARGET_FREEBSD_NR_writev        121
 #define TARGET_FREEBSD_NR_settimeofday  122
-#define TARGET_FREEBSD_NR_fchown    123
-#define TARGET_FREEBSD_NR_fchmod    124
-                /* 125 is old recvfrom */
-#define TARGET_FREEBSD_NR_setreuid  126
-#define TARGET_FREEBSD_NR_setregid  127
-#define TARGET_FREEBSD_NR_rename    128
-                /* 129 is old truncate */
-                /* 130 is old ftruncate */
+#define TARGET_FREEBSD_NR_fchown        123
+#define TARGET_FREEBSD_NR_fchmod        124
+                                /* 125 is old recvfrom */
+#define TARGET_FREEBSD_NR_setreuid      126
+#define TARGET_FREEBSD_NR_setregid      127
+#define TARGET_FREEBSD_NR_rename        128
+                                /* 129 is old truncate */
+                                /* 130 is old ftruncate */
 #define TARGET_FREEBSD_NR_flock 131
-#define TARGET_FREEBSD_NR_mkfifo    132
-#define TARGET_FREEBSD_NR_sendto    133
-#define TARGET_FREEBSD_NR_shutdown  134
+#define TARGET_FREEBSD_NR_mkfifo        132
+#define TARGET_FREEBSD_NR_sendto        133
+#define TARGET_FREEBSD_NR_shutdown      134
 #define TARGET_FREEBSD_NR_socketpair    135
 #define TARGET_FREEBSD_NR_mkdir 136
 #define TARGET_FREEBSD_NR_rmdir 137
-#define TARGET_FREEBSD_NR_utimes    138
-                /* 139 is obsolete 4.2 sigreturn */
-#define TARGET_FREEBSD_NR_adjtime   140
-                /* 141 is old getpeername */
-                /* 142 is old gethostid */
-                /* 143 is old sethostid */
-                /* 144 is old getrlimit */
-                /* 145 is old setrlimit */
-                /* 146 is old killpg */
-#define TARGET_FREEBSD_NR_killpg    146 /* COMPAT */
-#define TARGET_FREEBSD_NR_setsid    147
-#define TARGET_FREEBSD_NR_quotactl  148
-                /* 149 is old quota */
-                /* 150 is old getsockname */
+#define TARGET_FREEBSD_NR_utimes        138
+                                /* 139 is obsolete 4.2 sigreturn */
+#define TARGET_FREEBSD_NR_adjtime       140
+                                /* 141 is old getpeername */
+                                /* 142 is old gethostid */
+                                /* 143 is old sethostid */
+                                /* 144 is old getrlimit */
+                                /* 145 is old setrlimit */
+                                /* 146 is old killpg */
+#define TARGET_FREEBSD_NR_setsid        147
+#define TARGET_FREEBSD_NR_quotactl      148
+                                /* 149 is old quota */
+                                /* 150 is old getsockname */
 #define TARGET_FREEBSD_NR_nlm_syscall   154
-#define TARGET_FREEBSD_NR_nfssvc    155
-                /* 156 is old getdirentries */
-#define TARGET_FREEBSD_NR_freebsd4_statfs   157
-#define TARGET_FREEBSD_NR_freebsd4_fstatfs  158
-#define TARGET_FREEBSD_NR_lgetfh    160
+#define TARGET_FREEBSD_NR_nfssvc        155
+                                /* 156 is old getdirentries */
+                                /* 157 is freebsd4 statfs */
+                                /* 158 is freebsd4 fstatfs */
+#define TARGET_FREEBSD_NR_lgetfh        160
 #define TARGET_FREEBSD_NR_getfh 161
-#define TARGET_FREEBSD_NR_freebsd4_getdomainname    162
-#define TARGET_FREEBSD_NR_freebsd4_setdomainname    163
-#define TARGET_FREEBSD_NR_freebsd4_uname    164
-#define TARGET_FREEBSD_NR_sysarch   165
-#define TARGET_FREEBSD_NR_rtprio    166
-#define TARGET_FREEBSD_NR_semsys    169
-#define TARGET_FREEBSD_NR_msgsys    170
-#define TARGET_FREEBSD_NR_shmsys    171
-#define TARGET_FREEBSD_NR_freebsd6_pread    173
-#define TARGET_FREEBSD_NR_freebsd6_pwrite   174
-#define TARGET_FREEBSD_NR_setfib    175
+                                /* 162 is freebsd4 getdomainname */
+                                /* 163 is freebsd4 setdomainname */
+                                /* 164 is freebsd4 uname */
+#define TARGET_FREEBSD_NR_sysarch       165
+#define TARGET_FREEBSD_NR_rtprio        166
+#define TARGET_FREEBSD_NR_semsys        169
+#define TARGET_FREEBSD_NR_msgsys        170
+#define TARGET_FREEBSD_NR_shmsys        171
+                                /* 173 is freebsd6 pread */
+                                /* 174 is freebsd6 pwrite */
+#define TARGET_FREEBSD_NR_setfib        175
 #define TARGET_FREEBSD_NR_ntp_adjtime   176
-#define TARGET_FREEBSD_NR_setgid    181
-#define TARGET_FREEBSD_NR_setegid   182
-#define TARGET_FREEBSD_NR_seteuid   183
-#define TARGET_FREEBSD_NR_stat  188
-#define TARGET_FREEBSD_NR_fstat 189
-#define TARGET_FREEBSD_NR_lstat 190
-#define TARGET_FREEBSD_NR_pathconf  191
-#define TARGET_FREEBSD_NR_fpathconf 192
-#define TARGET_FREEBSD_NR_getrlimit 194
-#define TARGET_FREEBSD_NR_setrlimit 195
-#define TARGET_FREEBSD_NR_getdirentries 196
-#define TARGET_FREEBSD_NR_freebsd6_mmap 197
-#define TARGET_FREEBSD_NR___syscall 198
-#define TARGET_FREEBSD_NR_freebsd6_lseek    199
-#define TARGET_FREEBSD_NR_freebsd6_truncate 200
-#define TARGET_FREEBSD_NR_freebsd6_ftruncate    201
-#define TARGET_FREEBSD_NR___sysctl  202
+#define TARGET_FREEBSD_NR_setgid        181
+#define TARGET_FREEBSD_NR_setegid       182
+#define TARGET_FREEBSD_NR_seteuid       183
+                                /* 184 is obsolete lfs_bmapv */
+                                /* 185 is obsolete lfs_markv */
+                                /* 186 is obsolete lfs_segclean */
+                                /* 187 is obsolete lfs_segwait */
+#define TARGET_FREEBSD_NR_freebsd11_stat        188
+#define TARGET_FREEBSD_NR_freebsd11_fstat       189
+#define TARGET_FREEBSD_NR_freebsd11_lstat       190
+#define TARGET_FREEBSD_NR_pathconf      191
+#define TARGET_FREEBSD_NR_fpathconf     192
+#define TARGET_FREEBSD_NR_getrlimit     194
+#define TARGET_FREEBSD_NR_setrlimit     195
+#define TARGET_FREEBSD_NR_freebsd11_getdirentries       196
+                                /* 197 is freebsd6 mmap */
+#define TARGET_FREEBSD_NR___syscall     198
+                                /* 199 is freebsd6 lseek */
+                                /* 200 is freebsd6 truncate */
+                                /* 201 is freebsd6 ftruncate */
+#define TARGET_FREEBSD_NR___sysctl      202
 #define TARGET_FREEBSD_NR_mlock 203
-#define TARGET_FREEBSD_NR_munlock   204
-#define TARGET_FREEBSD_NR_undelete  205
-#define TARGET_FREEBSD_NR_futimes   206
-#define TARGET_FREEBSD_NR_getpgid   207
+#define TARGET_FREEBSD_NR_munlock       204
+#define TARGET_FREEBSD_NR_undelete      205
+#define TARGET_FREEBSD_NR_futimes       206
+#define TARGET_FREEBSD_NR_getpgid       207
 #define TARGET_FREEBSD_NR_poll  209
-#define TARGET_FREEBSD_NR_freebsd7___semctl 220
-#define TARGET_FREEBSD_NR_semget    221
+#define TARGET_FREEBSD_NR_freebsd7___semctl     220
+#define TARGET_FREEBSD_NR_semget        221
 #define TARGET_FREEBSD_NR_semop 222
-#define TARGET_FREEBSD_NR_freebsd7_msgctl   224
-#define TARGET_FREEBSD_NR_msgget    225
-#define TARGET_FREEBSD_NR_msgsnd    226
-#define TARGET_FREEBSD_NR_msgrcv    227
+                                /* 223 is obsolete semconfig */
+#define TARGET_FREEBSD_NR_freebsd7_msgctl       224
+#define TARGET_FREEBSD_NR_msgget        225
+#define TARGET_FREEBSD_NR_msgsnd        226
+#define TARGET_FREEBSD_NR_msgrcv        227
 #define TARGET_FREEBSD_NR_shmat 228
-#define TARGET_FREEBSD_NR_freebsd7_shmctl   229
+#define TARGET_FREEBSD_NR_freebsd7_shmctl       229
 #define TARGET_FREEBSD_NR_shmdt 230
-#define TARGET_FREEBSD_NR_shmget    231
+#define TARGET_FREEBSD_NR_shmget        231
 #define TARGET_FREEBSD_NR_clock_gettime 232
 #define TARGET_FREEBSD_NR_clock_settime 233
 #define TARGET_FREEBSD_NR_clock_getres  234
 #define TARGET_FREEBSD_NR_ktimer_create 235
 #define TARGET_FREEBSD_NR_ktimer_delete 236
-#define TARGET_FREEBSD_NR_ktimer_settime    237
-#define TARGET_FREEBSD_NR_ktimer_gettime    238
-#define TARGET_FREEBSD_NR_ktimer_getoverrun 239
-#define TARGET_FREEBSD_NR_nanosleep 240
+#define TARGET_FREEBSD_NR_ktimer_settime        237
+#define TARGET_FREEBSD_NR_ktimer_gettime        238
+#define TARGET_FREEBSD_NR_ktimer_getoverrun     239
+#define TARGET_FREEBSD_NR_nanosleep     240
+#define TARGET_FREEBSD_NR_ffclock_getcounter    241
+#define TARGET_FREEBSD_NR_ffclock_setestimate   242
+#define TARGET_FREEBSD_NR_ffclock_getestimate   243
+#define TARGET_FREEBSD_NR_clock_nanosleep       244
+#define TARGET_FREEBSD_NR_clock_getcpuclockid2  247
 #define TARGET_FREEBSD_NR_ntp_gettime   248
-#define TARGET_FREEBSD_NR_minherit  250
+#define TARGET_FREEBSD_NR_minherit      250
 #define TARGET_FREEBSD_NR_rfork 251
-#define TARGET_FREEBSD_NR_openbsd_poll  252
-#define TARGET_FREEBSD_NR_issetugid 253
-#define TARGET_FREEBSD_NR_lchown    254
-#define TARGET_FREEBSD_NR_aio_read  255
-#define TARGET_FREEBSD_NR_aio_write 256
+                                /* 252 is obsolete openbsd_poll */
+#define TARGET_FREEBSD_NR_issetugid     253
+#define TARGET_FREEBSD_NR_lchown        254
+#define TARGET_FREEBSD_NR_aio_read      255
+#define TARGET_FREEBSD_NR_aio_write     256
 #define TARGET_FREEBSD_NR_lio_listio    257
-#define TARGET_FREEBSD_NR_getdents  272
-#define TARGET_FREEBSD_NR_lchmod    274
-#define TARGET_FREEBSD_NR_netbsd_lchown 275
-#define TARGET_FREEBSD_NR_lutimes   276
-#define TARGET_FREEBSD_NR_netbsd_msync  277
-#define TARGET_FREEBSD_NR_nstat 278
-#define TARGET_FREEBSD_NR_nfstat    279
-#define TARGET_FREEBSD_NR_nlstat    280
-#define TARGET_FREEBSD_NR_preadv    289
-#define TARGET_FREEBSD_NR_pwritev   290
-#define TARGET_FREEBSD_NR_freebsd4_fhstatfs 297
-#define TARGET_FREEBSD_NR_fhopen    298
-#define TARGET_FREEBSD_NR_fhstat    299
-#define TARGET_FREEBSD_NR_modnext   300
-#define TARGET_FREEBSD_NR_modstat   301
-#define TARGET_FREEBSD_NR_modfnext  302
-#define TARGET_FREEBSD_NR_modfind   303
-#define TARGET_FREEBSD_NR_kldload   304
-#define TARGET_FREEBSD_NR_kldunload 305
-#define TARGET_FREEBSD_NR_kldfind   306
-#define TARGET_FREEBSD_NR_kldnext   307
-#define TARGET_FREEBSD_NR_kldstat   308
+#define TARGET_FREEBSD_NR_freebsd11_getdents    272
+#define TARGET_FREEBSD_NR_lchmod        274
+                                /* 275 is obsolete netbsd_lchown */
+#define TARGET_FREEBSD_NR_lutimes       276
+                                /* 277 is obsolete netbsd_msync */
+#define TARGET_FREEBSD_NR_freebsd11_nstat       278
+#define TARGET_FREEBSD_NR_freebsd11_nfstat      279
+#define TARGET_FREEBSD_NR_freebsd11_nlstat      280
+#define TARGET_FREEBSD_NR_preadv        289
+#define TARGET_FREEBSD_NR_pwritev       290
+                                /* 297 is freebsd4 fhstatfs */
+#define TARGET_FREEBSD_NR_fhopen        298
+#define TARGET_FREEBSD_NR_freebsd11_fhstat      299
+#define TARGET_FREEBSD_NR_modnext       300
+#define TARGET_FREEBSD_NR_modstat       301
+#define TARGET_FREEBSD_NR_modfnext      302
+#define TARGET_FREEBSD_NR_modfind       303
+#define TARGET_FREEBSD_NR_kldload       304
+#define TARGET_FREEBSD_NR_kldunload     305
+#define TARGET_FREEBSD_NR_kldfind       306
+#define TARGET_FREEBSD_NR_kldnext       307
+#define TARGET_FREEBSD_NR_kldstat       308
 #define TARGET_FREEBSD_NR_kldfirstmod   309
-#define TARGET_FREEBSD_NR_getsid    310
-#define TARGET_FREEBSD_NR_setresuid 311
-#define TARGET_FREEBSD_NR_setresgid 312
-                /* 313 is obsolete signanosleep */
+#define TARGET_FREEBSD_NR_getsid        310
+#define TARGET_FREEBSD_NR_setresuid     311
+#define TARGET_FREEBSD_NR_setresgid     312
+                                /* 313 is obsolete signanosleep */
 #define TARGET_FREEBSD_NR_aio_return    314
 #define TARGET_FREEBSD_NR_aio_suspend   315
 #define TARGET_FREEBSD_NR_aio_cancel    316
-#define TARGET_FREEBSD_NR_aio_error 317
-#define TARGET_FREEBSD_NR_oaio_read 318
-#define TARGET_FREEBSD_NR_oaio_write    319
-#define TARGET_FREEBSD_NR_olio_listio   320
+#define TARGET_FREEBSD_NR_aio_error     317
+                                /* 318 is freebsd6 aio_read */
+                                /* 319 is freebsd6 aio_write */
+                                /* 320 is freebsd6 lio_listio */
 #define TARGET_FREEBSD_NR_yield 321
-                /* 322 is obsolete thr_sleep */
-                /* 323 is obsolete thr_wakeup */
-#define TARGET_FREEBSD_NR_mlockall  324
+                                /* 322 is obsolete thr_sleep */
+                                /* 323 is obsolete thr_wakeup */
+#define TARGET_FREEBSD_NR_mlockall      324
 #define TARGET_FREEBSD_NR_munlockall    325
-#define TARGET_FREEBSD_NR___getcwd  326
-#define TARGET_FREEBSD_NR_sched_setparam    327
-#define TARGET_FREEBSD_NR_sched_getparam    328
+#define TARGET_FREEBSD_NR___getcwd      326
+#define TARGET_FREEBSD_NR_sched_setparam        327
+#define TARGET_FREEBSD_NR_sched_getparam        328
 #define TARGET_FREEBSD_NR_sched_setscheduler    329
 #define TARGET_FREEBSD_NR_sched_getscheduler    330
 #define TARGET_FREEBSD_NR_sched_yield   331
-#define TARGET_FREEBSD_NR_sched_get_priority_max    332
-#define TARGET_FREEBSD_NR_sched_get_priority_min    333
+#define TARGET_FREEBSD_NR_sched_get_priority_max        332
+#define TARGET_FREEBSD_NR_sched_get_priority_min        333
 #define TARGET_FREEBSD_NR_sched_rr_get_interval 334
-#define TARGET_FREEBSD_NR_utrace    335
-#define TARGET_FREEBSD_NR_freebsd4_sendfile 336
-#define TARGET_FREEBSD_NR_kldsym    337
+#define TARGET_FREEBSD_NR_utrace        335
+                                /* 336 is freebsd4 sendfile */
+#define TARGET_FREEBSD_NR_kldsym        337
 #define TARGET_FREEBSD_NR_jail  338
 #define TARGET_FREEBSD_NR_nnpfs_syscall 339
 #define TARGET_FREEBSD_NR_sigprocmask   340
 #define TARGET_FREEBSD_NR_sigsuspend    341
-#define TARGET_FREEBSD_NR_freebsd4_sigaction    342
+                                /* 342 is freebsd4 sigaction */
 #define TARGET_FREEBSD_NR_sigpending    343
-#define TARGET_FREEBSD_NR_freebsd4_sigreturn    344
+                                /* 344 is freebsd4 sigreturn */
 #define TARGET_FREEBSD_NR_sigtimedwait  345
 #define TARGET_FREEBSD_NR_sigwaitinfo   346
-#define TARGET_FREEBSD_NR___acl_get_file    347
-#define TARGET_FREEBSD_NR___acl_set_file    348
+#define TARGET_FREEBSD_NR___acl_get_file        347
+#define TARGET_FREEBSD_NR___acl_set_file        348
 #define TARGET_FREEBSD_NR___acl_get_fd  349
 #define TARGET_FREEBSD_NR___acl_set_fd  350
-#define TARGET_FREEBSD_NR___acl_delete_file 351
-#define TARGET_FREEBSD_NR___acl_delete_fd   352
+#define TARGET_FREEBSD_NR___acl_delete_file     351
+#define TARGET_FREEBSD_NR___acl_delete_fd       352
 #define TARGET_FREEBSD_NR___acl_aclcheck_file   353
-#define TARGET_FREEBSD_NR___acl_aclcheck_fd 354
+#define TARGET_FREEBSD_NR___acl_aclcheck_fd     354
 #define TARGET_FREEBSD_NR_extattrctl    355
-#define TARGET_FREEBSD_NR_extattr_set_file  356
-#define TARGET_FREEBSD_NR_extattr_get_file  357
+#define TARGET_FREEBSD_NR_extattr_set_file      356
+#define TARGET_FREEBSD_NR_extattr_get_file      357
 #define TARGET_FREEBSD_NR_extattr_delete_file   358
-#define TARGET_FREEBSD_NR_aio_waitcomplete  359
-#define TARGET_FREEBSD_NR_getresuid 360
-#define TARGET_FREEBSD_NR_getresgid 361
-#define TARGET_FREEBSD_NR_kqueue    362
-#define TARGET_FREEBSD_NR_kevent    363
-#define TARGET_FREEBSD_NR_extattr_set_fd    371
-#define TARGET_FREEBSD_NR_extattr_get_fd    372
-#define TARGET_FREEBSD_NR_extattr_delete_fd 373
-#define TARGET_FREEBSD_NR___setugid 374
-#define TARGET_FREEBSD_NR_eaccess   376
+#define TARGET_FREEBSD_NR_aio_waitcomplete      359
+#define TARGET_FREEBSD_NR_getresuid     360
+#define TARGET_FREEBSD_NR_getresgid     361
+#define TARGET_FREEBSD_NR_kqueue        362
+#define TARGET_FREEBSD_NR_freebsd11_kevent      363
+                                /* 364 is obsolete __cap_get_proc */
+                                /* 365 is obsolete __cap_set_proc */
+                                /* 366 is obsolete __cap_get_fd */
+                                /* 367 is obsolete __cap_get_file */
+                                /* 368 is obsolete __cap_set_fd */
+                                /* 369 is obsolete __cap_set_file */
+#define TARGET_FREEBSD_NR_extattr_set_fd        371
+#define TARGET_FREEBSD_NR_extattr_get_fd        372
+#define TARGET_FREEBSD_NR_extattr_delete_fd     373
+#define TARGET_FREEBSD_NR___setugid     374
+                                /* 375 is obsolete nfsclnt */
+#define TARGET_FREEBSD_NR_eaccess       376
 #define TARGET_FREEBSD_NR_afs3_syscall  377
-#define TARGET_FREEBSD_NR_nmount    378
-#define TARGET_FREEBSD_NR___mac_get_proc    384
-#define TARGET_FREEBSD_NR___mac_set_proc    385
+#define TARGET_FREEBSD_NR_nmount        378
+                                /* 379 is obsolete kse_exit */
+                                /* 380 is obsolete kse_wakeup */
+                                /* 381 is obsolete kse_create */
+                                /* 382 is obsolete kse_thr_interrupt */
+                                /* 383 is obsolete kse_release */
+#define TARGET_FREEBSD_NR___mac_get_proc        384
+#define TARGET_FREEBSD_NR___mac_set_proc        385
 #define TARGET_FREEBSD_NR___mac_get_fd  386
-#define TARGET_FREEBSD_NR___mac_get_file    387
+#define TARGET_FREEBSD_NR___mac_get_file        387
 #define TARGET_FREEBSD_NR___mac_set_fd  388
-#define TARGET_FREEBSD_NR___mac_set_file    389
+#define TARGET_FREEBSD_NR___mac_set_file        389
 #define TARGET_FREEBSD_NR_kenv  390
-#define TARGET_FREEBSD_NR_lchflags  391
-#define TARGET_FREEBSD_NR_uuidgen   392
-#define TARGET_FREEBSD_NR_sendfile  393
+#define TARGET_FREEBSD_NR_lchflags      391
+#define TARGET_FREEBSD_NR_uuidgen       392
+#define TARGET_FREEBSD_NR_sendfile      393
 #define TARGET_FREEBSD_NR_mac_syscall   394
-#define TARGET_FREEBSD_NR_getfsstat 395
-#define TARGET_FREEBSD_NR_statfs    396
-#define TARGET_FREEBSD_NR_fstatfs   397
-#define TARGET_FREEBSD_NR_fhstatfs  398
+#define TARGET_FREEBSD_NR_freebsd11_getfsstat   395
+#define TARGET_FREEBSD_NR_freebsd11_statfs      396
+#define TARGET_FREEBSD_NR_freebsd11_fstatfs     397
+#define TARGET_FREEBSD_NR_freebsd11_fhstatfs    398
 #define TARGET_FREEBSD_NR_ksem_close    400
-#define TARGET_FREEBSD_NR_ksem_post 401
-#define TARGET_FREEBSD_NR_ksem_wait 402
+#define TARGET_FREEBSD_NR_ksem_post     401
+#define TARGET_FREEBSD_NR_ksem_wait     402
 #define TARGET_FREEBSD_NR_ksem_trywait  403
-#define TARGET_FREEBSD_NR_ksem_init 404
-#define TARGET_FREEBSD_NR_ksem_open 405
+#define TARGET_FREEBSD_NR_ksem_init     404
+#define TARGET_FREEBSD_NR_ksem_open     405
 #define TARGET_FREEBSD_NR_ksem_unlink   406
 #define TARGET_FREEBSD_NR_ksem_getvalue 407
 #define TARGET_FREEBSD_NR_ksem_destroy  408
 #define TARGET_FREEBSD_NR___mac_get_pid 409
-#define TARGET_FREEBSD_NR___mac_get_link    410
-#define TARGET_FREEBSD_NR___mac_set_link    411
-#define TARGET_FREEBSD_NR_extattr_set_link  412
-#define TARGET_FREEBSD_NR_extattr_get_link  413
+#define TARGET_FREEBSD_NR___mac_get_link        410
+#define TARGET_FREEBSD_NR___mac_set_link        411
+#define TARGET_FREEBSD_NR_extattr_set_link      412
+#define TARGET_FREEBSD_NR_extattr_get_link      413
 #define TARGET_FREEBSD_NR_extattr_delete_link   414
 #define TARGET_FREEBSD_NR___mac_execve  415
-#define TARGET_FREEBSD_NR_sigaction 416
-#define TARGET_FREEBSD_NR_sigreturn 417
+#define TARGET_FREEBSD_NR_sigaction     416
+#define TARGET_FREEBSD_NR_sigreturn     417
 #define TARGET_FREEBSD_NR_getcontext    421
 #define TARGET_FREEBSD_NR_setcontext    422
 #define TARGET_FREEBSD_NR_swapcontext   423
-#define TARGET_FREEBSD_NR_swapoff   424
-#define TARGET_FREEBSD_NR___acl_get_link    425
-#define TARGET_FREEBSD_NR___acl_set_link    426
-#define TARGET_FREEBSD_NR___acl_delete_link 427
+#define TARGET_FREEBSD_NR_swapoff       424
+#define TARGET_FREEBSD_NR___acl_get_link        425
+#define TARGET_FREEBSD_NR___acl_set_link        426
+#define TARGET_FREEBSD_NR___acl_delete_link     427
 #define TARGET_FREEBSD_NR___acl_aclcheck_link   428
-#define TARGET_FREEBSD_NR_sigwait   429
+#define TARGET_FREEBSD_NR_sigwait       429
 #define TARGET_FREEBSD_NR_thr_create    430
-#define TARGET_FREEBSD_NR_thr_exit  431
-#define TARGET_FREEBSD_NR_thr_self  432
-#define TARGET_FREEBSD_NR_thr_kill  433
-#define TARGET_FREEBSD_NR__umtx_lock    434
-#define TARGET_FREEBSD_NR__umtx_unlock  435
+#define TARGET_FREEBSD_NR_thr_exit      431
+#define TARGET_FREEBSD_NR_thr_self      432
+#define TARGET_FREEBSD_NR_thr_kill      433
 #define TARGET_FREEBSD_NR_jail_attach   436
-#define TARGET_FREEBSD_NR_extattr_list_fd   437
-#define TARGET_FREEBSD_NR_extattr_list_file 438
-#define TARGET_FREEBSD_NR_extattr_list_link 439
-#define TARGET_FREEBSD_NR_ksem_timedwait    441
+#define TARGET_FREEBSD_NR_extattr_list_fd       437
+#define TARGET_FREEBSD_NR_extattr_list_file     438
+#define TARGET_FREEBSD_NR_extattr_list_link     439
+                                /* 440 is obsolete kse_switchin */
+#define TARGET_FREEBSD_NR_ksem_timedwait        441
 #define TARGET_FREEBSD_NR_thr_suspend   442
-#define TARGET_FREEBSD_NR_thr_wake  443
+#define TARGET_FREEBSD_NR_thr_wake      443
 #define TARGET_FREEBSD_NR_kldunloadf    444
 #define TARGET_FREEBSD_NR_audit 445
-#define TARGET_FREEBSD_NR_auditon   446
-#define TARGET_FREEBSD_NR_getauid   447
-#define TARGET_FREEBSD_NR_setauid   448
-#define TARGET_FREEBSD_NR_getaudit  449
-#define TARGET_FREEBSD_NR_setaudit  450
+#define TARGET_FREEBSD_NR_auditon       446
+#define TARGET_FREEBSD_NR_getauid       447
+#define TARGET_FREEBSD_NR_setauid       448
+#define TARGET_FREEBSD_NR_getaudit      449
+#define TARGET_FREEBSD_NR_setaudit      450
 #define TARGET_FREEBSD_NR_getaudit_addr 451
 #define TARGET_FREEBSD_NR_setaudit_addr 452
-#define TARGET_FREEBSD_NR_auditctl  453
-#define TARGET_FREEBSD_NR__umtx_op  454
-#define TARGET_FREEBSD_NR_thr_new   455
-#define TARGET_FREEBSD_NR_sigqueue  456
-#define TARGET_FREEBSD_NR_kmq_open  457
+#define TARGET_FREEBSD_NR_auditctl      453
+#define TARGET_FREEBSD_NR__umtx_op      454
+#define TARGET_FREEBSD_NR_thr_new       455
+#define TARGET_FREEBSD_NR_sigqueue      456
+#define TARGET_FREEBSD_NR_kmq_open      457
 #define TARGET_FREEBSD_NR_kmq_setattr   458
-#define TARGET_FREEBSD_NR_kmq_timedreceive  459
+#define TARGET_FREEBSD_NR_kmq_timedreceive      459
 #define TARGET_FREEBSD_NR_kmq_timedsend 460
 #define TARGET_FREEBSD_NR_kmq_notify    461
 #define TARGET_FREEBSD_NR_kmq_unlink    462
-#define TARGET_FREEBSD_NR_abort2    463
+#define TARGET_FREEBSD_NR_abort2        463
 #define TARGET_FREEBSD_NR_thr_set_name  464
-#define TARGET_FREEBSD_NR_aio_fsync 465
+#define TARGET_FREEBSD_NR_aio_fsync     465
 #define TARGET_FREEBSD_NR_rtprio_thread 466
 #define TARGET_FREEBSD_NR_sctp_peeloff  471
 #define TARGET_FREEBSD_NR_sctp_generic_sendmsg  472
-#define TARGET_FREEBSD_NR_sctp_generic_sendmsg_iov  473
+#define TARGET_FREEBSD_NR_sctp_generic_sendmsg_iov      473
 #define TARGET_FREEBSD_NR_sctp_generic_recvmsg  474
 #define TARGET_FREEBSD_NR_pread 475
-#define TARGET_FREEBSD_NR_pwrite    476
+#define TARGET_FREEBSD_NR_pwrite        476
 #define TARGET_FREEBSD_NR_mmap  477
 #define TARGET_FREEBSD_NR_lseek 478
-#define TARGET_FREEBSD_NR_truncate  479
-#define TARGET_FREEBSD_NR_ftruncate 480
-#define TARGET_FREEBSD_NR_thr_kill2 481
-#define TARGET_FREEBSD_NR_shm_open  482
+#define TARGET_FREEBSD_NR_truncate      479
+#define TARGET_FREEBSD_NR_ftruncate     480
+#define TARGET_FREEBSD_NR_thr_kill2     481
+#define TARGET_FREEBSD_NR_freebsd12_shm_open    482
 #define TARGET_FREEBSD_NR_shm_unlink    483
-#define TARGET_FREEBSD_NR_cpuset    484
+#define TARGET_FREEBSD_NR_cpuset        484
 #define TARGET_FREEBSD_NR_cpuset_setid  485
 #define TARGET_FREEBSD_NR_cpuset_getid  486
 #define TARGET_FREEBSD_NR_cpuset_getaffinity    487
 #define TARGET_FREEBSD_NR_cpuset_setaffinity    488
-#define TARGET_FREEBSD_NR_faccessat 489
-#define TARGET_FREEBSD_NR_fchmodat  490
-#define TARGET_FREEBSD_NR_fchownat  491
-#define TARGET_FREEBSD_NR_fexecve   492
-#define TARGET_FREEBSD_NR_fstatat   493
-#define TARGET_FREEBSD_NR_futimesat 494
-#define TARGET_FREEBSD_NR_linkat    495
-#define TARGET_FREEBSD_NR_mkdirat   496
-#define TARGET_FREEBSD_NR_mkfifoat  497
-#define TARGET_FREEBSD_NR_mknodat   498
-#define TARGET_FREEBSD_NR_openat    499
+#define TARGET_FREEBSD_NR_faccessat     489
+#define TARGET_FREEBSD_NR_fchmodat      490
+#define TARGET_FREEBSD_NR_fchownat      491
+#define TARGET_FREEBSD_NR_fexecve       492
+#define TARGET_FREEBSD_NR_freebsd11_fstatat     493
+#define TARGET_FREEBSD_NR_futimesat     494
+#define TARGET_FREEBSD_NR_linkat        495
+#define TARGET_FREEBSD_NR_mkdirat       496
+#define TARGET_FREEBSD_NR_mkfifoat      497
+#define TARGET_FREEBSD_NR_freebsd11_mknodat     498
+#define TARGET_FREEBSD_NR_openat        499
 #define TARGET_FREEBSD_NR_readlinkat    500
-#define TARGET_FREEBSD_NR_renameat  501
-#define TARGET_FREEBSD_NR_symlinkat 502
-#define TARGET_FREEBSD_NR_unlinkat  503
+#define TARGET_FREEBSD_NR_renameat      501
+#define TARGET_FREEBSD_NR_symlinkat     502
+#define TARGET_FREEBSD_NR_unlinkat      503
 #define TARGET_FREEBSD_NR_posix_openpt  504
 #define TARGET_FREEBSD_NR_gssd_syscall  505
-#define TARGET_FREEBSD_NR_jail_get  506
-#define TARGET_FREEBSD_NR_jail_set  507
+#define TARGET_FREEBSD_NR_jail_get      506
+#define TARGET_FREEBSD_NR_jail_set      507
 #define TARGET_FREEBSD_NR_jail_remove   508
-#define TARGET_FREEBSD_NR_closefrom 509
-#define TARGET_FREEBSD_NR___semctl  510
-#define TARGET_FREEBSD_NR_msgctl    511
-#define TARGET_FREEBSD_NR_shmctl    512
-#define TARGET_FREEBSD_NR_lpathconf 513
-#define TARGET_FREEBSD_NR_cap_new   514
-#define TARGET_FREEBSD_NR_cap_getrights 515
-#define TARGET_FREEBSD_NR_cap_enter 516
+#define TARGET_FREEBSD_NR_freebsd12_closefrom   509
+#define TARGET_FREEBSD_NR___semctl      510
+#define TARGET_FREEBSD_NR_msgctl        511
+#define TARGET_FREEBSD_NR_shmctl        512
+#define TARGET_FREEBSD_NR_lpathconf     513
+                                /* 514 is obsolete cap_new */
+#define TARGET_FREEBSD_NR___cap_rights_get      515
+#define TARGET_FREEBSD_NR_cap_enter     516
 #define TARGET_FREEBSD_NR_cap_getmode   517
-#define TARGET_FREEBSD_NR_pdfork    518
-#define TARGET_FREEBSD_NR_pdkill    519
-#define TARGET_FREEBSD_NR_pdgetpid  520
-#define TARGET_FREEBSD_NR_pselect   522
+#define TARGET_FREEBSD_NR_pdfork        518
+#define TARGET_FREEBSD_NR_pdkill        519
+#define TARGET_FREEBSD_NR_pdgetpid      520
+#define TARGET_FREEBSD_NR_pselect       522
 #define TARGET_FREEBSD_NR_getloginclass 523
 #define TARGET_FREEBSD_NR_setloginclass 524
-#define TARGET_FREEBSD_NR_rctl_get_racct    525
-#define TARGET_FREEBSD_NR_rctl_get_rules    526
-#define TARGET_FREEBSD_NR_rctl_get_limits   527
+#define TARGET_FREEBSD_NR_rctl_get_racct        525
+#define TARGET_FREEBSD_NR_rctl_get_rules        526
+#define TARGET_FREEBSD_NR_rctl_get_limits       527
 #define TARGET_FREEBSD_NR_rctl_add_rule 528
-#define TARGET_FREEBSD_NR_rctl_remove_rule  529
-#define TARGET_FREEBSD_NR_posix_fallocate   530
+#define TARGET_FREEBSD_NR_rctl_remove_rule      529
+#define TARGET_FREEBSD_NR_posix_fallocate       530
 #define TARGET_FREEBSD_NR_posix_fadvise 531
-#define TARGET_FREEBSD_NR_MAXSYSCALL    532
+#define TARGET_FREEBSD_NR_wait6 532
+#define TARGET_FREEBSD_NR_cap_rights_limit      533
+#define TARGET_FREEBSD_NR_cap_ioctls_limit      534
+#define TARGET_FREEBSD_NR_cap_ioctls_get        535
+#define TARGET_FREEBSD_NR_cap_fcntls_limit      536
+#define TARGET_FREEBSD_NR_cap_fcntls_get        537
+#define TARGET_FREEBSD_NR_bindat        538
+#define TARGET_FREEBSD_NR_connectat     539
+#define TARGET_FREEBSD_NR_chflagsat     540
+#define TARGET_FREEBSD_NR_accept4       541
+#define TARGET_FREEBSD_NR_pipe2 542
+#define TARGET_FREEBSD_NR_aio_mlock     543
+#define TARGET_FREEBSD_NR_procctl       544
+#define TARGET_FREEBSD_NR_ppoll 545
+#define TARGET_FREEBSD_NR_futimens      546
+#define TARGET_FREEBSD_NR_utimensat     547
+                                /* 548 is obsolete numa_getaffinity */
+                                /* 549 is obsolete numa_setaffinity */
+#define TARGET_FREEBSD_NR_fdatasync     550
+#define TARGET_FREEBSD_NR_fstat 551
+#define TARGET_FREEBSD_NR_fstatat       552
+#define TARGET_FREEBSD_NR_fhstat        553
+#define TARGET_FREEBSD_NR_getdirentries 554
+#define TARGET_FREEBSD_NR_statfs        555
+#define TARGET_FREEBSD_NR_fstatfs       556
+#define TARGET_FREEBSD_NR_getfsstat     557
+#define TARGET_FREEBSD_NR_fhstatfs      558
+#define TARGET_FREEBSD_NR_mknodat       559
+#define TARGET_FREEBSD_NR_kevent        560
+#define TARGET_FREEBSD_NR_cpuset_getdomain      561
+#define TARGET_FREEBSD_NR_cpuset_setdomain      562
+#define TARGET_FREEBSD_NR_getrandom     563
+#define TARGET_FREEBSD_NR_getfhat       564
+#define TARGET_FREEBSD_NR_fhlink        565
+#define TARGET_FREEBSD_NR_fhlinkat      566
+#define TARGET_FREEBSD_NR_fhreadlink    567
+#define TARGET_FREEBSD_NR_funlinkat     568
+#define TARGET_FREEBSD_NR_copy_file_range       569
+#define TARGET_FREEBSD_NR___sysctlbyname        570
+#define TARGET_FREEBSD_NR_shm_open2     571
+#define TARGET_FREEBSD_NR_shm_rename    572
+#define TARGET_FREEBSD_NR_sigfastblock  573
+#define TARGET_FREEBSD_NR___realpathat  574
+#define TARGET_FREEBSD_NR_close_range   575
+#define TARGET_FREEBSD_NR_rpctls_syscall        576
+#define TARGET_FREEBSD_NR_MAXSYSCALL    577
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 12/15] bsd-user: move strace OS/arch dependent code to host/arch dirs
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (10 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 11/15] bsd-user: regenerate FreeBSD's system call numbers Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 13/15] bsd-user: Update strace.list for FreeBSD's latest syscalls Thomas Huth
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Stacey Son <sson@FreeBSD.org>

This change moves host OS and arch dependent code for the sysarch
system call related to the -strace functionality into the
appropriate host OS and target arch directories.

Signed-off-by: Stacey Son <sson@FreeBSD.org>
Signed-off-by: Sean Bruno <sburno@FreeBSD.org>
[ imp integrated minor build fixes from sbruno ]
Signed-off-by: Warner Losh <imp@FreeBSD.org>
Message-Id: <20201218205451.10559-4-imp@freebsd.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 bsd-user/arm/target_arch_sysarch.h     | 78 ++++++++++++++++++++++++++
 bsd-user/arm/target_syscall.h          | 36 ++++++++++++
 bsd-user/freebsd/os-strace.h           | 29 ++++++++++
 bsd-user/freebsd/strace.list           |  3 +-
 bsd-user/i386/target_arch_sysarch.h    | 77 +++++++++++++++++++++++++
 bsd-user/i386/target_syscall.h         | 19 +++++++
 bsd-user/mips/target_arch_sysarch.h    | 69 +++++++++++++++++++++++
 bsd-user/mips/target_syscall.h         | 52 +++++++++++++++++
 bsd-user/mips64/target_arch_sysarch.h  | 69 +++++++++++++++++++++++
 bsd-user/mips64/target_syscall.h       | 53 +++++++++++++++++
 bsd-user/netbsd/os-strace.h            |  1 +
 bsd-user/openbsd/os-strace.h           |  1 +
 bsd-user/sparc/target_arch_sysarch.h   | 52 +++++++++++++++++
 bsd-user/sparc/target_syscall.h        | 24 +++++++-
 bsd-user/sparc64/target_arch_sysarch.h | 52 +++++++++++++++++
 bsd-user/sparc64/target_syscall.h      | 24 +++++++-
 bsd-user/strace.c                      | 11 ++++
 bsd-user/x86_64/target_arch_sysarch.h  | 76 +++++++++++++++++++++++++
 bsd-user/x86_64/target_syscall.h       | 21 ++++++-
 meson.build                            |  1 +
 20 files changed, 744 insertions(+), 4 deletions(-)
 create mode 100644 bsd-user/arm/target_arch_sysarch.h
 create mode 100644 bsd-user/arm/target_syscall.h
 create mode 100644 bsd-user/freebsd/os-strace.h
 create mode 100644 bsd-user/i386/target_arch_sysarch.h
 create mode 100644 bsd-user/mips/target_arch_sysarch.h
 create mode 100644 bsd-user/mips/target_syscall.h
 create mode 100644 bsd-user/mips64/target_arch_sysarch.h
 create mode 100644 bsd-user/mips64/target_syscall.h
 create mode 100644 bsd-user/netbsd/os-strace.h
 create mode 100644 bsd-user/openbsd/os-strace.h
 create mode 100644 bsd-user/sparc/target_arch_sysarch.h
 create mode 100644 bsd-user/sparc64/target_arch_sysarch.h
 create mode 100644 bsd-user/x86_64/target_arch_sysarch.h

diff --git a/bsd-user/arm/target_arch_sysarch.h b/bsd-user/arm/target_arch_sysarch.h
new file mode 100644
index 0000000000..632a5cd453
--- /dev/null
+++ b/bsd-user/arm/target_arch_sysarch.h
@@ -0,0 +1,78 @@
+/*
+ *  arm sysarch() system call emulation
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+#include "target_arch.h"
+
+static inline abi_long do_freebsd_arch_sysarch(CPUARMState *env, int op,
+        abi_ulong parms)
+{
+    int ret = 0;
+
+    switch (op) {
+    case TARGET_FREEBSD_ARM_SYNC_ICACHE:
+    case TARGET_FREEBSD_ARM_DRAIN_WRITEBUF:
+        break;
+
+    case TARGET_FREEBSD_ARM_SET_TP:
+        target_cpu_set_tls(env, parms);
+        break;
+
+    case TARGET_FREEBSD_ARM_GET_TP:
+        ret = target_cpu_get_tls(env);
+        break;
+
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    switch (arg1) {
+    case TARGET_FREEBSD_ARM_SYNC_ICACHE:
+        gemu_log("%s(ARM_SYNC_ICACHE, ...)", name->name);
+        break;
+
+    case TARGET_FREEBSD_ARM_DRAIN_WRITEBUF:
+        gemu_log("%s(ARM_DRAIN_WRITEBUF, ...)", name->name);
+        break;
+
+    case TARGET_FREEBSD_ARM_SET_TP:
+        gemu_log("%s(ARM_SET_TP, 0x" TARGET_ABI_FMT_lx ")", name->name, arg2);
+        break;
+
+    case TARGET_FREEBSD_ARM_GET_TP:
+        gemu_log("%s(ARM_GET_TP, 0x" TARGET_ABI_FMT_lx ")", name->name, arg2);
+        break;
+
+    default:
+        gemu_log("UNKNOWN OP: %d, " TARGET_ABI_FMT_lx ")", (int)arg1, arg2);
+    }
+}
+
+#endif /*!BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/arm/target_syscall.h b/bsd-user/arm/target_syscall.h
new file mode 100644
index 0000000000..ef4b37f017
--- /dev/null
+++ b/bsd-user/arm/target_syscall.h
@@ -0,0 +1,36 @@
+#ifndef BSD_USER_ARCH_SYSCALL_H_
+#define BSD_USER_ARCH_SYSCALL_H_
+
+struct target_pt_regs {
+    abi_long uregs[17];
+};
+
+#define ARM_cpsr    uregs[16]
+#define ARM_pc      uregs[15]
+#define ARM_lr      uregs[14]
+#define ARM_sp      uregs[13]
+#define ARM_ip      uregs[12]
+#define ARM_fp      uregs[11]
+#define ARM_r10     uregs[10]
+#define ARM_r9      uregs[9]
+#define ARM_r8      uregs[8]
+#define ARM_r7      uregs[7]
+#define ARM_r6      uregs[6]
+#define ARM_r5      uregs[5]
+#define ARM_r4      uregs[4]
+#define ARM_r3      uregs[3]
+#define ARM_r2      uregs[2]
+#define ARM_r1      uregs[1]
+#define ARM_r0      uregs[0]
+
+#define ARM_SYSCALL_BASE    0 /* XXX: FreeBSD only */
+
+#define TARGET_FREEBSD_ARM_SYNC_ICACHE      0
+#define TARGET_FREEBSD_ARM_DRAIN_WRITEBUF   1
+#define TARGET_FREEBSD_ARM_SET_TP       2
+#define TARGET_FREEBSD_ARM_GET_TP       3
+
+#define TARGET_HW_MACHINE       "arm"
+#define TARGET_HW_MACHINE_ARCH  "armv6"
+
+#endif /* !BSD_USER_ARCH_SYSCALL_H_ */
diff --git a/bsd-user/freebsd/os-strace.h b/bsd-user/freebsd/os-strace.h
new file mode 100644
index 0000000000..a222f093b5
--- /dev/null
+++ b/bsd-user/freebsd/os-strace.h
@@ -0,0 +1,29 @@
+/*
+ *  FreeBSD dependent strace print functions
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "target_arch_sysarch.h"    /* architecture dependent functions */
+
+
+static inline void do_os_print_sysarch(const struct syscallname *name,
+        abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4,
+        abi_long arg5, abi_long arg6)
+{
+    /* This is arch dependent */
+    do_freebsd_arch_print_sysarch(name, arg1, arg2, arg3, arg4, arg5, arg6);
+}
diff --git a/bsd-user/freebsd/strace.list b/bsd-user/freebsd/strace.list
index 2800a2d4eb..d8f2eb66a6 100644
--- a/bsd-user/freebsd/strace.list
+++ b/bsd-user/freebsd/strace.list
@@ -28,6 +28,7 @@
 { TARGET_FREEBSD_NR___acl_set_fd, "__acl_set_fd", "%s(%d, %d, %#x)", NULL, NULL },
 { TARGET_FREEBSD_NR___acl_set_file, "__acl_set_file", "%s(\"%s\", %d, %#x)", NULL, NULL },
 { TARGET_FREEBSD_NR___acl_set_link, "__acl_set_link", "%s(\"%s\", %d, %#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR___getcwd, "__getcwd", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR___semctl, "__semctl", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR___syscall, "__syscall", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR___sysctl, "__sysctl", NULL, print_sysctl, NULL },
@@ -209,7 +210,7 @@
 { TARGET_FREEBSD_NR_statfs, "statfs", "%s(\"%s\",%p)", NULL, NULL },
 { TARGET_FREEBSD_NR_symlink, "symlink", "%s(\"%s\",\"%s\")", NULL, NULL },
 { TARGET_FREEBSD_NR_sync, "sync", NULL, NULL, NULL },
-{ TARGET_FREEBSD_NR_sysarch, "sysarch", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_sysarch, "sysarch", NULL, print_sysarch, NULL },
 { TARGET_FREEBSD_NR_syscall, "syscall", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_thr_create, "thr_create", "%s(%#x, %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_thr_exit, "thr_exit", "%s(%#x)", NULL, NULL },
diff --git a/bsd-user/i386/target_arch_sysarch.h b/bsd-user/i386/target_arch_sysarch.h
new file mode 100644
index 0000000000..e9ab98ec32
--- /dev/null
+++ b/bsd-user/i386/target_arch_sysarch.h
@@ -0,0 +1,77 @@
+/*
+ *  i386 sysarch system call emulation
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+
+static inline abi_long do_freebsd_arch_sysarch(CPUX86State *env, int op,
+        abi_ulong parms)
+{
+    abi_long ret = 0;
+    abi_ulong val;
+    int idx;
+
+    switch (op) {
+    case TARGET_FREEBSD_I386_SET_GSBASE:
+    case TARGET_FREEBSD_I386_SET_FSBASE:
+        if (op == TARGET_FREEBSD_I386_SET_GSBASE) {
+            idx = R_GS;
+        } else {
+            idx = R_FS;
+        }
+        if (get_user(val, parms, abi_ulong)) {
+            return -TARGET_EFAULT;
+        }
+        cpu_x86_load_seg(env, idx, 0);
+        env->segs[idx].base = val;
+        break;
+
+    case TARGET_FREEBSD_I386_GET_GSBASE:
+    case TARGET_FREEBSD_I386_GET_FSBASE:
+        if (op == TARGET_FREEBSD_I386_GET_GSBASE) {
+            idx = R_GS;
+        } else {
+            idx = R_FS;
+        }
+        val = env->segs[idx].base;
+        if (put_user(val, parms, abi_ulong)) {
+            return -TARGET_EFAULT;
+        }
+        break;
+
+    /* XXX handle the others... */
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    gemu_log("%s(%d, " TARGET_ABI_FMT_lx ", " TARGET_ABI_FMT_lx ", "
+        TARGET_ABI_FMT_lx ")", name->name, (int)arg1, arg2, arg3, arg4);
+}
+
+#endif /* !BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/i386/target_syscall.h b/bsd-user/i386/target_syscall.h
index 8f201386af..940c687a52 100644
--- a/bsd-user/i386/target_syscall.h
+++ b/bsd-user/i386/target_syscall.h
@@ -1,3 +1,20 @@
+/*
+ *  i386 system call definitions
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
 #ifndef TARGET_SYSCALL_H
 #define TARGET_SYSCALL_H
 
@@ -161,5 +178,7 @@ struct target_vm86plus_struct {
 
 
 #define UNAME_MACHINE "i386"
+#define TARGET_HW_MACHINE UNAME_MACHINE
+#define TARGET_HW_MACHINE_ARCH UNAME_MACHINE
 
 #endif /* TARGET_SYSCALL_H */
diff --git a/bsd-user/mips/target_arch_sysarch.h b/bsd-user/mips/target_arch_sysarch.h
new file mode 100644
index 0000000000..6da803a408
--- /dev/null
+++ b/bsd-user/mips/target_arch_sysarch.h
@@ -0,0 +1,69 @@
+/*
+ *  mips sysarch() system call emulation
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+#include "target_arch.h"
+
+static inline abi_long do_freebsd_arch_sysarch(CPUMIPSState *env, int op,
+        abi_ulong parms)
+{
+    int ret = 0;
+
+    switch (op) {
+    case TARGET_MIPS_SET_TLS:
+        target_cpu_set_tls(env, parms);
+        break;
+
+    case TARGET_MIPS_GET_TLS:
+        if (put_user(target_cpu_get_tls(env), parms, abi_ulong)) {
+            ret = -TARGET_EFAULT;
+        }
+        break;
+
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    switch (arg1) {
+    case TARGET_MIPS_SET_TLS:
+        gemu_log("%s(SET_TLS, 0x" TARGET_ABI_FMT_lx ")", name->name, arg2);
+        break;
+
+    case TARGET_MIPS_GET_TLS:
+        gemu_log("%s(GET_TLS, 0x" TARGET_ABI_FMT_lx ")", name->name, arg2);
+        break;
+
+    default:
+        gemu_log("UNKNOWN OP: %d, " TARGET_ABI_FMT_lx ")", (int)arg1, arg2);
+    }
+}
+
+#endif /*!BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/mips/target_syscall.h b/bsd-user/mips/target_syscall.h
new file mode 100644
index 0000000000..aacc6ddf9f
--- /dev/null
+++ b/bsd-user/mips/target_syscall.h
@@ -0,0 +1,52 @@
+/*
+ *  mips system call definitions
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef _MIPS_SYSCALL_H_
+#define _MIPS_SYSCALL_H_
+
+/*
+ * struct target_pt_regs defines the way the registers are stored on the stack
+ * during a system call.
+ */
+
+struct target_pt_regs {
+    /* Saved main processor registers. */
+    abi_ulong regs[32];
+
+    /* Saved special registers. */
+    abi_ulong cp0_status;
+    abi_ulong lo;
+    abi_ulong hi;
+    abi_ulong cp0_badvaddr;
+    abi_ulong cp0_cause;
+    abi_ulong cp0_epc;
+};
+
+#if defined(TARGET_WORDS_BIGENDIAN)
+#define UNAME_MACHINE "mips"
+#else
+#define UNAME_MACHINE "mipsel"
+#endif
+
+#define TARGET_HW_MACHINE       "mips"
+#define TARGET_HW_MACHINE_ARCH   UNAME_MACHINE
+
+/* sysarch() commands */
+#define TARGET_MIPS_SET_TLS     1
+#define TARGET_MIPS_GET_TLS     2
+
+#endif /* !_MIPS_SYSCALL_H_ */
diff --git a/bsd-user/mips64/target_arch_sysarch.h b/bsd-user/mips64/target_arch_sysarch.h
new file mode 100644
index 0000000000..e6f9c00d5f
--- /dev/null
+++ b/bsd-user/mips64/target_arch_sysarch.h
@@ -0,0 +1,69 @@
+/*
+ *  mips64 sysarch() system call emulation
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+#include "target_arch.h"
+
+static inline abi_long do_freebsd_arch_sysarch(CPUMIPSState *env, int op,
+        abi_ulong parms)
+{
+    int ret = 0;
+
+    switch (op) {
+    case TARGET_MIPS_SET_TLS:
+        target_cpu_set_tls(env, parms);
+        break;
+
+    case TARGET_MIPS_GET_TLS:
+        if (put_user(target_cpu_get_tls(env), parms, abi_ulong)) {
+            ret = -TARGET_EFAULT;
+        }
+        break;
+
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    switch (arg1) {
+    case TARGET_MIPS_SET_TLS:
+        gemu_log("%s(SET_TLS, 0x" TARGET_ABI_FMT_lx ")", name->name, arg2);
+        break;
+
+    case TARGET_MIPS_GET_TLS:
+        gemu_log("%s(GET_TLS, 0x" TARGET_ABI_FMT_lx ")", name->name, arg2);
+        break;
+
+    default:
+        gemu_log("UNKNOWN OP: %d, " TARGET_ABI_FMT_lx ")", (int)arg1, arg2);
+    }
+}
+
+#endif /*!BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/mips64/target_syscall.h b/bsd-user/mips64/target_syscall.h
new file mode 100644
index 0000000000..bf4c598b13
--- /dev/null
+++ b/bsd-user/mips64/target_syscall.h
@@ -0,0 +1,53 @@
+/*
+ *  mips64 system call definitions
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef _MIPS64_SYSCALL_H_
+#define _MIPS64_SYSCALL_H_
+
+/*
+ * struct target_pt_regs defines the way the registers are stored on the stack
+ * during a system call.
+ */
+
+struct target_pt_regs {
+    /* Saved main processor registers. */
+    abi_ulong regs[32];
+
+    /* Saved special registers. */
+    abi_ulong cp0_status;
+    abi_ulong lo;
+    abi_ulong hi;
+    abi_ulong cp0_badvaddr;
+    abi_ulong cp0_cause;
+    abi_ulong cp0_epc;
+};
+
+
+#if defined(TARGET_WORDS_BIGENDIAN)
+#define UNAME_MACHINE "mips64"
+#else
+#define UNAME_MACHINE "mips64el"
+#endif
+
+#define TARGET_HW_MACHINE       "mips"
+#define TARGET_HW_MACHINE_ARCH  UNAME_MACHINE
+
+/* sysarch() commands */
+#define TARGET_MIPS_SET_TLS     1
+#define TARGET_MIPS_GET_TLS     2
+
+#endif /* !_MIPS64_SYSCALL_H_ */
diff --git a/bsd-user/netbsd/os-strace.h b/bsd-user/netbsd/os-strace.h
new file mode 100644
index 0000000000..70cf51d63a
--- /dev/null
+++ b/bsd-user/netbsd/os-strace.h
@@ -0,0 +1 @@
+/* XXX NetBSD dependent strace print functions */
diff --git a/bsd-user/openbsd/os-strace.h b/bsd-user/openbsd/os-strace.h
new file mode 100644
index 0000000000..9161390433
--- /dev/null
+++ b/bsd-user/openbsd/os-strace.h
@@ -0,0 +1 @@
+/* XXX OpenBSD dependent strace print functions */
diff --git a/bsd-user/sparc/target_arch_sysarch.h b/bsd-user/sparc/target_arch_sysarch.h
new file mode 100644
index 0000000000..d0b85ef6bb
--- /dev/null
+++ b/bsd-user/sparc/target_arch_sysarch.h
@@ -0,0 +1,52 @@
+/*
+ *  SPARC sysarch() system call emulation
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+
+static inline abi_long do_freebsd_arch_sysarch(void *env, int op,
+        abi_ulong parms)
+{
+    int ret = 0;
+
+    switch (op) {
+    case TARGET_SPARC_SIGTRAMP_INSTALL:
+        /* XXX not currently handled */
+    case TARGET_SPARC_UTRAP_INSTALL:
+        /* XXX not currently handled */
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    gemu_log("%s(%d, " TARGET_ABI_FMT_lx ", " TARGET_ABI_FMT_lx ", "
+        TARGET_ABI_FMT_lx ")", name->name, (int)arg1, arg2, arg3, arg4);
+}
+
+#endif /*!BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/sparc/target_syscall.h b/bsd-user/sparc/target_syscall.h
index dfdf9f82f5..151284754b 100644
--- a/bsd-user/sparc/target_syscall.h
+++ b/bsd-user/sparc/target_syscall.h
@@ -1,3 +1,20 @@
+/*
+ *  sparc dependent system call definitions
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
 #ifndef TARGET_SYSCALL_H
 #define TARGET_SYSCALL_H
 
@@ -9,6 +26,11 @@ struct target_pt_regs {
 	abi_ulong u_regs[16];
 };
 
-#define UNAME_MACHINE "sun4"
+#define UNAME_MACHINE           "sun4"
+#define TARGET_HW_MACHINE       "sparc"
+#define TARGET_HW_MACHINE_ARCH  "sparc"
+
+#define TARGET_SPARC_UTRAP_INSTALL      1
+#define TARGET_SPARC_SIGTRAMP_INSTALL   2
 
 #endif /* TARGET_SYSCALL_H */
diff --git a/bsd-user/sparc64/target_arch_sysarch.h b/bsd-user/sparc64/target_arch_sysarch.h
new file mode 100644
index 0000000000..e6f17c1504
--- /dev/null
+++ b/bsd-user/sparc64/target_arch_sysarch.h
@@ -0,0 +1,52 @@
+/*
+ *  SPARC64 sysarch() system call emulation
+ *
+ *  Copyright (c) 2013 Stacey D. Son
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+
+static inline abi_long do_freebsd_arch_sysarch(void *env, int op,
+        abi_ulong parms)
+{
+    int ret = 0;
+
+    switch (op) {
+    case TARGET_SPARC_SIGTRAMP_INSTALL:
+        /* XXX not currently handled */
+    case TARGET_SPARC_UTRAP_INSTALL:
+        /* XXX not currently handled */
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    gemu_log("%s(%d, " TARGET_ABI_FMT_lx ", " TARGET_ABI_FMT_lx ", "
+        TARGET_ABI_FMT_lx ")", name->name, (int)arg1, arg2, arg3, arg4);
+}
+
+#endif /*!BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/sparc64/target_syscall.h b/bsd-user/sparc64/target_syscall.h
index 3a9f4c2ef9..b7d986a76d 100644
--- a/bsd-user/sparc64/target_syscall.h
+++ b/bsd-user/sparc64/target_syscall.h
@@ -1,3 +1,20 @@
+/*
+ *  sparc64 dependent system call definitions
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
 #ifndef TARGET_SYSCALL_H
 #define TARGET_SYSCALL_H
 
@@ -10,6 +27,11 @@ struct target_pt_regs {
 	abi_ulong fprs;
 };
 
-#define UNAME_MACHINE "sun4u"
+#define UNAME_MACHINE           "sun4u"
+#define TARGET_HW_MACHINE       "sparc"
+#define TARGET_HW_MACHINE_ARCH  "sparc64"
+
+#define TARGET_SPARC_UTRAP_INSTALL      1
+#define TARGET_SPARC_SIGTRAMP_INSTALL   2
 
 #endif /* TARGET_SYSCALL_H */
diff --git a/bsd-user/strace.c b/bsd-user/strace.c
index fa66fe1ee2..2c3b59caf0 100644
--- a/bsd-user/strace.c
+++ b/bsd-user/strace.c
@@ -20,9 +20,12 @@
 #include <sys/select.h>
 #include <sys/syscall.h>
 #include <sys/ioccom.h>
+#include <ctype.h>
 
 #include "qemu.h"
 
+#include "os-strace.h"  /* OS dependent strace print functions */
+
 int do_strace;
 
 /*
@@ -104,6 +107,14 @@ static void print_ioctl(const struct syscallname *name,
             arg3);
 }
 
+static void print_sysarch(const struct syscallname *name, abi_long arg1,
+        abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5,
+        abi_long arg6)
+{
+    /* This is os dependent. */
+    do_os_print_sysarch(name, arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
 /*
  * Variants for the return value output function
  */
diff --git a/bsd-user/x86_64/target_arch_sysarch.h b/bsd-user/x86_64/target_arch_sysarch.h
new file mode 100644
index 0000000000..5c36fc0752
--- /dev/null
+++ b/bsd-user/x86_64/target_arch_sysarch.h
@@ -0,0 +1,76 @@
+/*
+ *  x86_64 sysarch() syscall emulation
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef BSD_USER_ARCH_SYSARCH_H_
+#define BSD_USER_ARCH_SYSARCH_H_
+
+#include "target_syscall.h"
+
+static inline abi_long do_freebsd_arch_sysarch(CPUX86State *env, int op,
+        abi_ulong parms)
+{
+    abi_long ret = 0;
+    abi_ulong val;
+    int idx;
+
+    switch (op) {
+    case TARGET_FREEBSD_AMD64_SET_GSBASE:
+    case TARGET_FREEBSD_AMD64_SET_FSBASE:
+        if (op == TARGET_FREEBSD_AMD64_SET_GSBASE) {
+            idx = R_GS;
+        } else {
+            idx = R_FS;
+        }
+        if (get_user(val, parms, abi_ulong)) {
+            return -TARGET_EFAULT;
+        }
+        cpu_x86_load_seg(env, idx, 0);
+        env->segs[idx].base = val;
+        break;
+
+    case TARGET_FREEBSD_AMD64_GET_GSBASE:
+    case TARGET_FREEBSD_AMD64_GET_FSBASE:
+        if (op == TARGET_FREEBSD_AMD64_GET_GSBASE) {
+            idx = R_GS;
+        } else {
+            idx = R_FS;
+        }
+        val = env->segs[idx].base;
+        if (put_user(val, parms, abi_ulong)) {
+            return -TARGET_EFAULT;
+        }
+        break;
+
+    /* XXX handle the others... */
+    default:
+        ret = -TARGET_EINVAL;
+        break;
+    }
+    return ret;
+}
+
+static inline void do_freebsd_arch_print_sysarch(
+        const struct syscallname *name, abi_long arg1, abi_long arg2,
+        abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6)
+{
+
+    gemu_log("%s(%d, " TARGET_ABI_FMT_lx ", " TARGET_ABI_FMT_lx ", "
+        TARGET_ABI_FMT_lx ")", name->name, (int)arg1, arg2, arg3, arg4);
+}
+
+#endif /*! BSD_USER_ARCH_SYSARCH_H_ */
diff --git a/bsd-user/x86_64/target_syscall.h b/bsd-user/x86_64/target_syscall.h
index a5d779884f..a8e6274b76 100644
--- a/bsd-user/x86_64/target_syscall.h
+++ b/bsd-user/x86_64/target_syscall.h
@@ -1,3 +1,20 @@
+/*
+ *  x86_64 system call definitions
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
 #ifndef TARGET_SYSCALL_H
 #define TARGET_SYSCALL_H
 
@@ -111,7 +128,9 @@ struct target_msqid64_ds {
 #define TARGET_FREEBSD_AMD64_SET_GSBASE	131
 
 
-#define UNAME_MACHINE "x86_64"
+#define UNAME_MACHINE           "x86_64"
+#define TARGET_HW_MACHINE       "amd64"
+#define TARGET_HW_MACHINE_ARCH  "amd64"
 
 #define TARGET_ARCH_SET_GS 0x1001
 #define TARGET_ARCH_SET_FS 0x1002
diff --git a/meson.build b/meson.build
index 563688d682..e4db67ccf2 100644
--- a/meson.build
+++ b/meson.build
@@ -2047,6 +2047,7 @@ foreach target : target_dirs
       target_inc += include_directories('linux-user/host/' / config_host['ARCH'])
     else
       base_dir = 'bsd-user'
+      target_inc += include_directories('bsd-user/freebsd')
     endif
     target_inc += include_directories(
       base_dir,
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 13/15] bsd-user: Update strace.list for FreeBSD's latest syscalls
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (11 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 12/15] bsd-user: move strace OS/arch dependent code to host/arch dirs Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 14/15] tests/acceptance: Fix race conditions in s390x tests & skip fedora on gitlab-CI Thomas Huth
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Warner Losh <imp@freebsd.org>

Update strace.list to include all of FreeBSD's syscalls up through svn
r331280.

Signed-off-by: Stacey Son <sson@FreeBSD.org>
Signed-off-by: Sean Bruno <sburno@FreeBSD.org>
Signed-off-by: Alexander Kabaev <kan@FreeBSD.org>
Signed-off-by: Jung-uk Kim <jkim@FreeBSD.org>
Author: Michal Meloun <mmel@FreeBSD.org>
Signed-off-by: Mikaël Urankar <mikael.urankar@gmail.com>
[imp moved this change to early in the sequence]
Signed-off-by: Warner Losh <imp@FreeBSD.org>
Message-Id: <20201218205451.10559-5-imp@freebsd.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 bsd-user/freebsd/strace.list | 62 ++++++++++++++++++++++++++++++++----
 1 file changed, 55 insertions(+), 7 deletions(-)

diff --git a/bsd-user/freebsd/strace.list b/bsd-user/freebsd/strace.list
index d8f2eb66a6..b01b5f36e8 100644
--- a/bsd-user/freebsd/strace.list
+++ b/bsd-user/freebsd/strace.list
@@ -33,14 +33,32 @@
 { TARGET_FREEBSD_NR___syscall, "__syscall", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR___sysctl, "__sysctl", NULL, print_sysctl, NULL },
 { TARGET_FREEBSD_NR__umtx_op, "_umtx_op", "%s(%#x, %d, %d, %#x, %#x)", NULL, NULL },
+#if defined(__FreeBSD_version) && __FreeBSD_version < 1000000
+{ TARGET_FREEBSD_NR__umtx_lock, "__umtx_lock", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR__umtx_unlock, "__umtx_unlock", NULL, NULL, NULL },
+#endif
 { TARGET_FREEBSD_NR_accept, "accept", "%s(%d,%#x,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_accept4, "accept4", "%s(%d,%d,%#x,%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_access, "access", "%s(\"%s\",%#o)", NULL, NULL },
 { TARGET_FREEBSD_NR_acct, "acct", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_adjtime, "adjtime", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_bind, "bind", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_bindat, "bindat", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_break, "break", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_enter, "cap_enter", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_fcntls_get, "cap_fcntls_get", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_fcntls_limit, "cap_fcntls_limit", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_getmode, "cap_getmode", NULL, NULL, NULL },
+#if defined(__FreeBSD_version) && __FreeBSD_version < 1000000
+{ TARGET_FREEBSD_NR_cap_getrights, "cap_getrights", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_new, "cap_new", NULL, NULL, NULL },
+#endif
+{ TARGET_FREEBSD_NR_cap_ioctls_get, "cap_ioctls_get", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_ioctls_limit, "cap_ioctls_limit", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cap_rights_limit, "cap_rights_limit", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_chdir, "chdir", "%s(\"%s\")", NULL, NULL },
 { TARGET_FREEBSD_NR_chflags, "chflags", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_chflagsat, "chflagsat", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_chmod, "chmod", "%s(\"%s\",%#o)", NULL, NULL },
 { TARGET_FREEBSD_NR_chown, "chown", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_chroot, "chroot", NULL, NULL, NULL },
@@ -49,6 +67,9 @@
 { TARGET_FREEBSD_NR_clock_settime, "clock_settime", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_close, "close", "%s(%d)", NULL, NULL },
 { TARGET_FREEBSD_NR_connect, "connect", "%s(%d,%#x,%d)", NULL, NULL },
+{ TARGET_FREEBSD_NR_connectat, "connectat", "%s(%d,%d,%#x,%d)", NULL, NULL },
+{ TARGET_FREEBSD_NR_cpuset_getdomain, "cpuset_getdomain", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_cpuset_setdomain, "cpuset_setdomain", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_dup, "dup", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_dup2, "dup2", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_eaccess, "eaccess", "%s(\"%s\",%#x)", NULL, NULL },
@@ -62,7 +83,7 @@
 { TARGET_FREEBSD_NR_extattr_get_file, "extattr_get_file", "%s(\"%s\", %d, \"%s\", %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_extattr_get_file, "extattr_get_link", "%s(\"%s\", %d, \"%s\", %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_extattr_list_fd, "extattr_list_fd", "%s(%d, %d, %#x, %d)", NULL, NULL },
-{ TARGET_FREEBSD_NR_extattr_list_file, "extattr_list_file", "%s(\"%s\", %d, %#x, %d)", NULL, NULL },
+{ TARGET_FREEBSD_NR_extattr_list_file, "extattr_list_file", "%s(\"%s\", %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_extattr_list_link, "extattr_list_link", "%s(\"%s\", %d, %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_extattr_set_fd, "extattr_set_fd", "%s(%d, %d, \"%s\", %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_extattr_set_file, "extattr_set_file", "%s(\"%s\", %d, \"%s\", %#x, %d)", NULL, NULL },
@@ -72,26 +93,34 @@
 { TARGET_FREEBSD_NR_fchmod, "fchmod", "%s(%d,%#o)", NULL, NULL },
 { TARGET_FREEBSD_NR_fchown, "fchown", "%s(%d,%d,%d)", NULL, NULL },
 { TARGET_FREEBSD_NR_fcntl, "fcntl", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_fdatasync, "fdatasync", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_fexecve, "fexecve", NULL, print_execve, NULL },
 { TARGET_FREEBSD_NR_fhopen, "fhopen", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_fhstat, "fhstat", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_fhstatfs, "fhstatfs", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_fhstat, "freebsd11_fhstat", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_fhstatfs, "freebsd11_fhstatfs", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_flock, "flock", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_fork, "fork", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_fpathconf, "fpathconf", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_fstat, "fstat", "%s(%d,%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_fstatat, "fstatat", "%s(%d,\"%s\", %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_fstatfs, "fstatfs", "%s(%d,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_fstat, "freebsd11_fstat", "%s(%d,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_fstatat, "freebsd11_fstatat", "%s(%d,\"%s\", %#x, %d)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_fstatfs, "freebsd11_fstatfs", "%s(%d,%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_fsync, "fsync", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_ftruncate, "ftruncate", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_futimens, "futimens", "%s(%d,%p)", NULL, NULL },
 { TARGET_FREEBSD_NR_futimes, "futimes", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getcontext, "getcontext", "%s(%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_getdirentries, "getdirentries", NULL, NULL, NULL },
-{ TARGET_FREEBSD_NR_freebsd6_mmap, "freebsd6_mmap", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_getdirentries, "freebsd11_getdirentries", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getegid, "getegid", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_geteuid, "geteuid", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_getfh, "getfh", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getfsstat, "getfsstat", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_getfsstat, "freebsd11_getfsstat", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getgid, "getgid", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_getgroups, "getgroups", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getitimer, "getitimer", NULL, NULL, NULL },
@@ -102,6 +131,7 @@
 { TARGET_FREEBSD_NR_getpid, "getpid", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_getppid, "getppid", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_getpriority, "getpriority", "%s(%#x,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_getrandom, "getrandom", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getresgid, "getresgid", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getresuid, "getresuid", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_getrlimit, "getrlimit", NULL, NULL, NULL },
@@ -113,8 +143,12 @@
 { TARGET_FREEBSD_NR_getuid, "getuid", "%s()", NULL, NULL },
 { TARGET_FREEBSD_NR_ioctl, "ioctl", NULL, print_ioctl, NULL },
 { TARGET_FREEBSD_NR_issetugid, "issetugid", "%s()", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_kevent, "freebsd11_kevent", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_kevent, "kevent", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_kill, "kill", NULL, NULL, NULL },
+#if defined(__FreeBSD_version) && __FreeBSD_version < 1000000
+{ TARGET_FREEBSD_NR_killpg, "killpg", NULL, NULL, NULL },
+#endif
 { TARGET_FREEBSD_NR_kqueue, "kqueue", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_ktrace, "ktrace", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_lchown, "lchown", NULL, NULL, NULL },
@@ -122,13 +156,15 @@
 { TARGET_FREEBSD_NR_listen, "listen", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_lpathconf, "lpathconf", "%s(\"%s\", %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_lseek, "lseek", NULL, NULL, NULL },
-{ TARGET_FREEBSD_NR_lstat, "lstat", "%s(\"%s\",%p)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_lstat, "freebsd11_lstat", "%s(\"%s\",%p)", NULL, NULL },
 { TARGET_FREEBSD_NR_madvise, "madvise", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_mincore, "mincore", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_minherit, "minherit", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_mkdir, "mkdir", "%s(\"%s\",%#o)", NULL, NULL },
 { TARGET_FREEBSD_NR_mkfifo, "mkfifo", NULL, NULL, NULL },
-{ TARGET_FREEBSD_NR_mknod, "mknod", "%s(\"%s\",%#o,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_mknodat, "mknodat", "%s(%d, \"%s\",%#o,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_mknod, "freebsd11_mknod", "%s(\"%s\",%#o,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_mknodat, "freebsd11_mknodat", "%s(%d, \"%s\",%#o,%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_mlock, "mlock", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_mlockall, "mlockall", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_mmap, "mmap", NULL, NULL, print_syscall_ret_addr },
@@ -147,8 +183,10 @@
 { TARGET_FREEBSD_NR_open, "open", "%s(\"%s\",%#x,%#o)", NULL, NULL },
 { TARGET_FREEBSD_NR_openat, "openat", "%s(%d, \"%s\",%#x,%#o)", NULL, NULL },
 { TARGET_FREEBSD_NR_pathconf, "pathconf", "%s(\"%s\", %d)", NULL, NULL },
-{ TARGET_FREEBSD_NR_pipe, "pipe", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd10_pipe, "freebsd10_pipe", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_pipe2, "pipe2", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_poll, "poll", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_posix_fallocate, "posix_fallocate", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_pread, "pread", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_preadv, "preadv", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_profil, "profil", NULL, NULL, NULL },
@@ -168,6 +206,8 @@
 { TARGET_FREEBSD_NR_rmdir, "rmdir", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_rtprio_thread, "rtprio_thread", "%s(%d, %d, %p)", NULL, NULL },
 { TARGET_FREEBSD_NR_sbrk, "sbrk", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_sched_get_priority_max, "sched_get_priority_max", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_sched_get_priority_min, "sched_get_priority_min", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_sched_yield, "sched_yield", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_select, "select", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_semget, "semget", NULL, NULL, NULL },
@@ -206,12 +246,17 @@
 { TARGET_FREEBSD_NR_socket, "socket", "%s(%d,%d,%d)", NULL, NULL },
 { TARGET_FREEBSD_NR_socketpair, "socketpair", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_sstk, "sstk", NULL, NULL, NULL },
-{ TARGET_FREEBSD_NR_stat, "stat", "%s(\"%s\",%p)", NULL, NULL },
-{ TARGET_FREEBSD_NR_statfs, "statfs", "%s(\"%s\",%p)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_stat, "freebsd11_stat", "%s(\"%s\",%p)", NULL, NULL },
+{ TARGET_FREEBSD_NR_freebsd11_statfs, "freebsd11_statfs", "%s(\"%s\",%p)", NULL, NULL },
 { TARGET_FREEBSD_NR_symlink, "symlink", "%s(\"%s\",\"%s\")", NULL, NULL },
 { TARGET_FREEBSD_NR_sync, "sync", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_sysarch, "sysarch", NULL, print_sysarch, NULL },
 { TARGET_FREEBSD_NR_syscall, "syscall", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_ktimer_create, "timer_create" , NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_ktimer_delete, "timer_delete" , NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_ktimer_settime, "timer_settime" , NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_ktimer_gettime, "timer_gettime" , NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_ktimer_getoverrun, "timer_getoverrun" , NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_thr_create, "thr_create", "%s(%#x, %#x, %d)", NULL, NULL },
 { TARGET_FREEBSD_NR_thr_exit, "thr_exit", "%s(%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_thr_kill, "thr_kill", "%s(%d, %#x)", NULL, NULL },
@@ -226,7 +271,10 @@
 { TARGET_FREEBSD_NR_unlink, "unlink", "%s(\"%s\")", NULL, NULL },
 { TARGET_FREEBSD_NR_unmount, "unmount", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_utimes, "utimes", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_utimensat, "utimensat", "%s(%d,%s,%p,%#x)", NULL, NULL },
 { TARGET_FREEBSD_NR_vfork, "vfork", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_wait4, "wait4", NULL, NULL, NULL },
+{ TARGET_FREEBSD_NR_wait6, "wait6", NULL, NULL, NULL },
 { TARGET_FREEBSD_NR_write, "write", "%s(%d,%#x,%d)", NULL, NULL },
 { TARGET_FREEBSD_NR_writev, "writev", "%s(%d,%p,%#x)", NULL, NULL },
+{ TARGET_FREEBSD_NR_posix_openpt, "posix_openpt", "%s(%d)", NULL, NULL },
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 14/15] tests/acceptance: Fix race conditions in s390x tests & skip fedora on gitlab-CI
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (12 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 13/15] bsd-user: Update strace.list for FreeBSD's latest syscalls Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:43 ` [PULL 15/15] fuzz: map all BARs and enable PCI devices Thomas Huth
  2021-01-11 13:46 ` [PULL 00/15] Testing, CI and bsd-user patches Peter Maydell
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

There was a race condition in the first test where there was already the
"crw" output in the dmesg, but the "0.0.4711" entry has not been created
in the /sys fs yet. Fix it by waiting until it is there.

The second test has even more problems on gitlab-CI. Even after adding some
more synchronization points (that wait for some messages in the "dmesg"
output to make sure that the modules got loaded correctly), there are still
occasionally some hangs in this test when it is running in the gitlab-CI.
So far I was unable to reproduce these hangs locally on my computer, so
this issue might take a while to debug. Thus disable the 2nd test in the
gitlab-CI until the problems are better understood and fixed.

Signed-off-by: Thomas Huth <thuth@redhat.com>
Tested-by: Willian Rampazzo <willianr@redhat.com>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
Message-Id: <20210108185645.86351-1-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 tests/acceptance/machine_s390_ccw_virtio.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/tests/acceptance/machine_s390_ccw_virtio.py b/tests/acceptance/machine_s390_ccw_virtio.py
index eccf26b262..4028c99afc 100644
--- a/tests/acceptance/machine_s390_ccw_virtio.py
+++ b/tests/acceptance/machine_s390_ccw_virtio.py
@@ -12,6 +12,7 @@
 import os
 import tempfile
 
+from avocado import skipIf
 from avocado_qemu import Test
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import wait_for_console_pattern
@@ -133,8 +134,10 @@ class S390CCWVirtioMachine(Test):
         self.vm.command('device_add', driver='virtio-net-ccw',
                         devno='fe.0.4711', id='net_4711')
         self.wait_for_crw_reports()
-        exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/',
-                                          '0.0.4711')
+        exec_command_and_wait_for_pattern(self, 'for i in 1 2 3 4 5 6 7 ; do '
+                    'if [ -e /sys/bus/ccw/devices/*4711 ]; then break; fi ;'
+                    'sleep 1 ; done ; ls /sys/bus/ccw/devices/',
+                    '0.0.4711')
         # and detach it again
         self.clear_guest_dmesg()
         self.vm.command('device_del', id='net_4711')
@@ -155,6 +158,7 @@ class S390CCWVirtioMachine(Test):
                                           'MemTotal:         115640 kB')
 
 
+    @skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab')
     def test_s390x_fedora(self):
 
         """
@@ -199,6 +203,9 @@ class S390CCWVirtioMachine(Test):
 
         # Some tests to see whether the CLI options have been considered:
         self.log.info("Test whether QEMU CLI options have been considered")
+        exec_command_and_wait_for_pattern(self,
+                        'while ! (dmesg | grep enP7p0s0) ; do sleep 1 ; done',
+                        'virtio_net virtio0 enP7p0s0: renamed')
         exec_command_and_wait_for_pattern(self, 'lspci',
                              '0007:00:00.0 Class 0200: Device 1af4:1000')
         exec_command_and_wait_for_pattern(self,
@@ -222,6 +229,9 @@ class S390CCWVirtioMachine(Test):
         # can simply read the written "magic bytes" back from the PPM file to
         # check whether the framebuffer is working as expected.
         self.log.info("Test screendump of virtio-gpu device")
+        exec_command_and_wait_for_pattern(self,
+                        'while ! (dmesg | grep gpudrmfb) ; do sleep 1 ; done',
+                        'virtio_gpudrmfb frame buffer device')
         exec_command_and_wait_for_pattern(self,
             'echo -e "\e[?25l" > /dev/tty0', ':/#')
         exec_command_and_wait_for_pattern(self, 'for ((i=0;i<250;i++)); do '
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PULL 15/15] fuzz: map all BARs and enable PCI devices
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (13 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 14/15] tests/acceptance: Fix race conditions in s390x tests & skip fedora on gitlab-CI Thomas Huth
@ 2021-01-11 13:43 ` Thomas Huth
  2021-01-11 13:46 ` [PULL 00/15] Testing, CI and bsd-user patches Peter Maydell
  15 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:43 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, Qiuhao Li

From: Alexander Bulekov <alxndr@bu.edu>

Prior to this patch, the fuzzer found inputs to map PCI device BARs and
enable the device. While it is nice that the fuzzer can do this, it
added significant overhead, since the fuzzer needs to map all the
BARs (regenerating the memory topology), at the start of each input.
With this patch, we do this once, before fuzzing, mitigating some of
this overhead.

Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201221181203.1853-1-alxndr@bu.edu>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 tests/qtest/fuzz/generic_fuzz.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c
index 07ad690683..be76d47d2d 100644
--- a/tests/qtest/fuzz/generic_fuzz.c
+++ b/tests/qtest/fuzz/generic_fuzz.c
@@ -16,6 +16,7 @@
 
 #include "hw/core/cpu.h"
 #include "tests/qtest/libqos/libqtest.h"
+#include "tests/qtest/libqos/pci-pc.h"
 #include "fuzz.h"
 #include "fork_fuzz.h"
 #include "exec/address-spaces.h"
@@ -762,10 +763,29 @@ static int locate_fuzz_objects(Object *child, void *opaque)
     return 0;
 }
 
+
+static void pci_enum(gpointer pcidev, gpointer bus)
+{
+    PCIDevice *dev = pcidev;
+    QPCIDevice *qdev;
+    int i;
+
+    qdev = qpci_device_find(bus, dev->devfn);
+    g_assert(qdev != NULL);
+    for (i = 0; i < 6; i++) {
+        if (dev->io_regions[i].size) {
+            qpci_iomap(qdev, i, NULL);
+        }
+    }
+    qpci_device_enable(qdev);
+    g_free(qdev);
+}
+
 static void generic_pre_fuzz(QTestState *s)
 {
     GHashTableIter iter;
     MemoryRegion *mr;
+    QPCIBus *pcibus;
     char **result;
 
     if (!getenv("QEMU_FUZZ_OBJECTS")) {
@@ -810,6 +830,10 @@ static void generic_pre_fuzz(QTestState *s)
         exit(1);
     }
 
+    pcibus = qpci_new_pc(s, NULL);
+    g_ptr_array_foreach(fuzzable_pci_devices, pci_enum, pcibus);
+    qpci_free_pc(pcibus);
+
     counter_shm_init();
 }
 
-- 
2.27.0



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PULL 00/15] Testing, CI and bsd-user patches
  2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
                   ` (14 preceding siblings ...)
  2021-01-11 13:43 ` [PULL 15/15] fuzz: map all BARs and enable PCI devices Thomas Huth
@ 2021-01-11 13:46 ` Peter Maydell
  2021-01-11 13:56   ` Thomas Huth
  15 siblings, 1 reply; 18+ messages in thread
From: Peter Maydell @ 2021-01-11 13:46 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Alexander Bulekov, Warner Losh, QEMU Developers, Qiuhao Li

On Mon, 11 Jan 2021 at 13:43, Thomas Huth <thuth@redhat.com> wrote:
>
>  Hi,
>
> the following changes since commit 7b09f127738ae3d0e71716cea086fc8f847a5686:
>
>   Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210108' into staging (2021-01-08 15:37:04 +0000)
>
> are available in the Git repository at:
>
>   https://gitlab.com/huth/qemu.git tags/pull-request-2021-01-11
>
> for you to fetch changes up to 2ee8a60bc51af853b2adfb581bf106b0db109dd9:
>
>   fuzz: map all BARs and enable PCI devices (2021-01-11 11:38:15 +0100)
>
> ----------------------------------------------------------------
> * Fuzzer improvements
> * Add OpenSUSE leap to the gitlab-CI
> * Some fixes to get our CI "green" again
> * Some initial patches to update bsd-user
> ----------------------------------------------------------------

My scripts report:

[staging f3ea435b40a] Merge remote-tracking branch
'remotes/huth-gitlab/tags/pull-request-2021-01-11' into staging
 Date: Mon Jan 11 13:45:40 2021 +0000
Cho, Yu-Chen via (1):
      gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD
ERROR: pull request includes commits attributed to list

Could you fix up the attribution in that commit and resend the pullreq,
please?

thanks
-- PMM


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PULL 00/15] Testing, CI and bsd-user patches
  2021-01-11 13:46 ` [PULL 00/15] Testing, CI and bsd-user patches Peter Maydell
@ 2021-01-11 13:56   ` Thomas Huth
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Huth @ 2021-01-11 13:56 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Alexander Bulekov, Warner Losh, QEMU Developers, Qiuhao Li

On 11/01/2021 14.46, Peter Maydell wrote:
> On Mon, 11 Jan 2021 at 13:43, Thomas Huth <thuth@redhat.com> wrote:
>>
>>   Hi,
>>
>> the following changes since commit 7b09f127738ae3d0e71716cea086fc8f847a5686:
>>
>>    Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210108' into staging (2021-01-08 15:37:04 +0000)
>>
>> are available in the Git repository at:
>>
>>    https://gitlab.com/huth/qemu.git tags/pull-request-2021-01-11
>>
>> for you to fetch changes up to 2ee8a60bc51af853b2adfb581bf106b0db109dd9:
>>
>>    fuzz: map all BARs and enable PCI devices (2021-01-11 11:38:15 +0100)
>>
>> ----------------------------------------------------------------
>> * Fuzzer improvements
>> * Add OpenSUSE leap to the gitlab-CI
>> * Some fixes to get our CI "green" again
>> * Some initial patches to update bsd-user
>> ----------------------------------------------------------------
> 
> My scripts report:
> 
> [staging f3ea435b40a] Merge remote-tracking branch
> 'remotes/huth-gitlab/tags/pull-request-2021-01-11' into staging
>   Date: Mon Jan 11 13:45:40 2021 +0000
> Cho, Yu-Chen via (1):
>        gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD
> ERROR: pull request includes commits attributed to list
> 
> Could you fix up the attribution in that commit and resend the pullreq,
> please?

Oops, sorry. I'll add a check to my pullreq script so that this does not 
happen again.

  Thanks,
   Thomas



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2021-01-11 14:02 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-11 13:43 [PULL 00/15] Testing, CI and bsd-user patches Thomas Huth
2021-01-11 13:43 ` [PULL 01/15] gitlab-ci.yml: Add openSUSE Leap 15.2 for gitlab CI/CD Thomas Huth
2021-01-11 13:43 ` [PULL 02/15] qtest/libqtest: fix heap-buffer-overflow in qtest_cb_for_every_machine() Thomas Huth
2021-01-11 13:43 ` [PULL 03/15] util/oslib-win32: Fix _aligned_malloc() arguments order Thomas Huth
2021-01-11 13:43 ` [PULL 04/15] fuzz: accelerate non-crash detection Thomas Huth
2021-01-11 13:43 ` [PULL 05/15] fuzz: double the IOs to remove for every loop Thomas Huth
2021-01-11 13:43 ` [PULL 06/15] fuzz: split write operand using binary approach Thomas Huth
2021-01-11 13:43 ` [PULL 07/15] fuzz: remove IO commands iteratively Thomas Huth
2021-01-11 13:43 ` [PULL 08/15] fuzz: set bits in operand of write/out to zero Thomas Huth
2021-01-11 13:43 ` [PULL 09/15] fuzz: add minimization options Thomas Huth
2021-01-11 13:43 ` [PULL 10/15] fuzz: heuristic split write based on past IOs Thomas Huth
2021-01-11 13:43 ` [PULL 11/15] bsd-user: regenerate FreeBSD's system call numbers Thomas Huth
2021-01-11 13:43 ` [PULL 12/15] bsd-user: move strace OS/arch dependent code to host/arch dirs Thomas Huth
2021-01-11 13:43 ` [PULL 13/15] bsd-user: Update strace.list for FreeBSD's latest syscalls Thomas Huth
2021-01-11 13:43 ` [PULL 14/15] tests/acceptance: Fix race conditions in s390x tests & skip fedora on gitlab-CI Thomas Huth
2021-01-11 13:43 ` [PULL 15/15] fuzz: map all BARs and enable PCI devices Thomas Huth
2021-01-11 13:46 ` [PULL 00/15] Testing, CI and bsd-user patches Peter Maydell
2021-01-11 13:56   ` Thomas Huth

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).