Testing, semihosting and doc fixes:

- update to latest libvirt-ci
   - echo testlog.txt on failed cirrus runs
   - drop containers-layer2 stage
   - update handling of symlinks on windows builds
   - return 0 for failure of semihosting console write
   - don't copy unused buffer after semihost operation
   - check for errors in semihosting args
   - fix buffer handling for semihosting TMPNAM
   - add qapi exit-failure PanicAction
   - add lowcore unaligned access test to s390x
   - fix documentation of OBJECT_DECLARE_SIMPLE_TYPE
   - expand documentation on booting code
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmLjoIQACgkQ+9DbCVqe
 KkSLyAf7Byt1jeIHCYYYqOPj8+Zx+kJXgWr59wMRSDFLwd0wWeFkgQhxriSlSUAl
 oVOTP8fkczeaMKPhp7CJnqpcQuZzD6iaK9hg/hNzKy0gTQbJgFRtTSP7c0E0iak5
 ZfDX5h+BRSAoeDo3I+ulj/bLKlj+KbxRWGf+y4K9rRGHKcTJUbcpkZ7aQlK5J6UD
 nqjkrvgnNWslxhdRSI6+2KPzkYaOmbiyPIVGOiBvmyv0N+NuazPvFMp2mFGH25kB
 XGsU5zxmm8IskxLGHHFvlwIM19SwB/2vArLtyaTVEPbLDhvdENePrPSL1Lr2BA/A
 yStVAvAnyy7Cdr8YmRCAGm3qnY61dg==
 =57ZK
 -----END PGP SIGNATURE-----

Merge tag 'pull-testing-next-290722-1' of https://github.com/stsquad/qemu into staging

Testing, semihosting and doc fixes:

  - update to latest libvirt-ci
  - echo testlog.txt on failed cirrus runs
  - drop containers-layer2 stage
  - update handling of symlinks on windows builds
  - return 0 for failure of semihosting console write
  - don't copy unused buffer after semihost operation
  - check for errors in semihosting args
  - fix buffer handling for semihosting TMPNAM
  - add qapi exit-failure PanicAction
  - add lowcore unaligned access test to s390x
  - fix documentation of OBJECT_DECLARE_SIMPLE_TYPE
  - expand documentation on booting code

# -----BEGIN PGP SIGNATURE-----
#
# iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmLjoIQACgkQ+9DbCVqe
# KkSLyAf7Byt1jeIHCYYYqOPj8+Zx+kJXgWr59wMRSDFLwd0wWeFkgQhxriSlSUAl
# oVOTP8fkczeaMKPhp7CJnqpcQuZzD6iaK9hg/hNzKy0gTQbJgFRtTSP7c0E0iak5
# ZfDX5h+BRSAoeDo3I+ulj/bLKlj+KbxRWGf+y4K9rRGHKcTJUbcpkZ7aQlK5J6UD
# nqjkrvgnNWslxhdRSI6+2KPzkYaOmbiyPIVGOiBvmyv0N+NuazPvFMp2mFGH25kB
# XGsU5zxmm8IskxLGHHFvlwIM19SwB/2vArLtyaTVEPbLDhvdENePrPSL1Lr2BA/A
# yStVAvAnyy7Cdr8YmRCAGm3qnY61dg==
# =57ZK
# -----END PGP SIGNATURE-----
# gpg: Signature made Fri 29 Jul 2022 01:55:32 AM PDT
# gpg:                using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44
# gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [undefined]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 6685 AE99 E751 67BC AFC8  DF35 FBD0 DB09 5A9E 2A44

* tag 'pull-testing-next-290722-1' of https://github.com/stsquad/qemu:
  qemu-options: bring the kernel and image options together
  docs/devel: fix description of OBJECT_DECLARE_SIMPLE_TYPE
  tests/tcg/s390x: Test unaligned accesses to lowcore
  qapi: Add exit-failure PanicAction
  semihosting: Fix handling of buffer in TARGET_SYS_TMPNAM
  semihosting: Check for errors on SET_ARG()
  semihosting: Don't copy buffer after console_write()
  semihosting: Don't return negative values on qemu_semihosting_console_write() failure
  .gitlab-ci.d/windows.yml: Enable native Windows symlink
  .cirrus.yml: Change winsymlinks to 'native'
  gitlab: drop 'containers-layer2' stage
  gitlab: show testlog.txt contents when cirrus/custom-runner jobs fail
  tests: refresh to latest libvirt-ci module

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-07-29 05:13:59 -07:00
commit 0279d0e6b5
39 changed files with 243 additions and 70 deletions

View File

@ -10,7 +10,7 @@ windows_msys2_task:
memory: 8G
env:
CIRRUS_SHELL: powershell
MSYS: winsymlinks:nativestrict
MSYS: winsymlinks:native
MSYSTEM: MINGW64
MSYS2_URL: https://github.com/msys2/msys2-installer/releases/download/2022-05-03/msys2-base-x86_64-20220503.sfx.exe
MSYS2_FINGERPRINT: 0

View File

@ -32,5 +32,6 @@ build_task:
- $MAKE -j$(sysctl -n hw.ncpu)
- for TARGET in $TEST_TARGETS ;
do
$MAKE -j$(sysctl -n hw.ncpu) $TARGET V=1 ;
$MAKE -j$(sysctl -n hw.ncpu) $TARGET V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
done

View File

@ -1,5 +1,4 @@
# THIS FILE WAS AUTO-GENERATED
# ... and then edited to fix py39, pending proper lcitool update.
#
# $ lcitool variables freebsd-12 qemu
#
@ -12,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='pkg'
PIP3='/usr/local/bin/pip-3.8'
PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv perl5 pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-virtualenv py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage cmocka ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv perl5 pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
PYPI_PKGS=''
PYTHON='/usr/local/bin/python3'

View File

@ -1,5 +1,4 @@
# THIS FILE WAS AUTO-GENERATED
# ... and then edited to fix py39, pending proper lcitool update.
#
# $ lcitool variables freebsd-13 qemu
#
@ -12,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='pkg'
PIP3='/usr/local/bin/pip-3.8'
PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv perl5 pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-virtualenv py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage cmocka ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv perl5 pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
PYPI_PKGS=''
PYTHON='/usr/local/bin/python3'

View File

@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='brew'
PIP3='/usr/local/bin/pip3'
PKGS='bash bc bzip2 capstone ccache ctags curl dbus diffutils dtc gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson ncurses nettle ninja perl pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy sparse spice-protocol tesseract texinfo usbredir vde vte3 zlib zstd'
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme virtualenv'
PKGS='bash bc bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson ncurses nettle ninja perl pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy sparse spice-protocol tesseract texinfo usbredir vde vte3 zlib zstd'
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme'
PYTHON='/usr/local/bin/python3'

View File

@ -1,20 +1,20 @@
alpha-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-alpha-cross
amd64-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-amd64-cross
amd64-debian-user-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-all-test-cross
@ -65,21 +65,21 @@ hexagon-cross-container:
hppa-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-hppa-cross
m68k-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-m68k-cross
mips64-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-mips64-cross
@ -92,7 +92,7 @@ mips64el-debian-cross-container:
mips-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-mips-cross
@ -105,7 +105,7 @@ mipsel-debian-cross-container:
powerpc-test-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian11-container']
variables:
NAME: debian-powerpc-test-cross
@ -127,7 +127,7 @@ riscv64-debian-cross-container:
# we can however build TCG tests using a non-sid base
riscv64-debian-test-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian11-container']
variables:
NAME: debian-riscv64-test-cross
@ -140,21 +140,21 @@ s390x-debian-cross-container:
sh4-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-sh4-cross
sparc64-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-sparc64-cross
tricore-debian-cross-container:
extends: .container_job_template
stage: containers-layer2
stage: containers
needs: ['amd64-debian10-container']
variables:
NAME: debian-tricore-cross

View File

@ -23,6 +23,8 @@ centos-stream-8-x86_64:
- mkdir build
- cd build
- ../scripts/ci/org.centos/stream/8/x86_64/configure
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make -j"$JOBS"
- make NINJA=":" check
|| { cat meson-logs/testlog.txt; exit 1; } ;
- ../scripts/ci/org.centos/stream/8/x86_64/test-avocado

View File

@ -19,5 +19,7 @@ ubuntu-20.04-aarch32-all:
- mkdir build
- cd build
- ../configure --cross-prefix=arm-linux-gnueabihf-
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc --ignore=40`
- make --output-sync -j`nproc --ignore=40` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;

View File

@ -17,9 +17,12 @@ ubuntu-20.04-aarch64-all-linux-static:
- mkdir build
- cd build
- ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc --ignore=40`
- make --output-sync -j`nproc --ignore=40` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
- make --output-sync -j`nproc --ignore=40` check-tcg V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-aarch64-all:
needs: []
@ -38,8 +41,10 @@ ubuntu-20.04-aarch64-all:
- mkdir build
- cd build
- ../configure --disable-libssh
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc --ignore=40`
- make --output-sync -j`nproc --ignore=40` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-aarch64-alldbg:
needs: []
@ -54,9 +59,11 @@ ubuntu-20.04-aarch64-alldbg:
- mkdir build
- cd build
- ../configure --enable-debug --disable-libssh
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make clean
- make --output-sync -j`nproc --ignore=40`
- make --output-sync -j`nproc --ignore=40` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-aarch64-clang:
needs: []
@ -75,8 +82,10 @@ ubuntu-20.04-aarch64-clang:
- mkdir build
- cd build
- ../configure --disable-libssh --cc=clang-10 --cxx=clang++-10 --enable-sanitizers
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc --ignore=40`
- make --output-sync -j`nproc --ignore=40` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-aarch64-tci:
needs: []
@ -95,6 +104,7 @@ ubuntu-20.04-aarch64-tci:
- mkdir build
- cd build
- ../configure --disable-libssh --enable-tcg-interpreter
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc --ignore=40`
ubuntu-20.04-aarch64-notcg:
@ -114,5 +124,7 @@ ubuntu-20.04-aarch64-notcg:
- mkdir build
- cd build
- ../configure --disable-libssh --disable-tcg
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc --ignore=40`
- make --output-sync -j`nproc --ignore=40` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;

View File

@ -17,9 +17,12 @@ ubuntu-20.04-s390x-all-linux-static:
- mkdir build
- cd build
- ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
- make --output-sync -j`nproc` check-tcg V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-s390x-all:
needs: []
@ -35,8 +38,10 @@ ubuntu-20.04-s390x-all:
- mkdir build
- cd build
- ../configure --disable-libssh
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-s390x-alldbg:
needs: []
@ -55,9 +60,11 @@ ubuntu-20.04-s390x-alldbg:
- mkdir build
- cd build
- ../configure --enable-debug --disable-libssh
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make clean
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-s390x-clang:
needs: []
@ -76,8 +83,10 @@ ubuntu-20.04-s390x-clang:
- mkdir build
- cd build
- ../configure --disable-libssh --cc=clang --cxx=clang++ --enable-sanitizers
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;
ubuntu-20.04-s390x-tci:
needs: []
@ -96,6 +105,7 @@ ubuntu-20.04-s390x-tci:
- mkdir build
- cd build
- ../configure --disable-libssh --enable-tcg-interpreter
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc`
ubuntu-20.04-s390x-notcg:
@ -115,5 +125,7 @@ ubuntu-20.04-s390x-notcg:
- mkdir build
- cd build
- ../configure --disable-libssh --disable-tcg
|| { cat config.log meson-logs/meson-log.txt; exit 1; }
- make --output-sync -j`nproc`
- make --output-sync -j`nproc` check V=1
|| { cat meson-logs/testlog.txt; exit 1; } ;

View File

@ -3,6 +3,5 @@
# - test (for test stages, using build artefacts from a build stage)
stages:
- containers
- containers-layer2
- build
- test

View File

@ -57,6 +57,7 @@ msys2-64bit:
mingw-w64-x86_64-zstd "
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
- $env:MSYSTEM = 'MINGW64' # Start a 64 bit Mingw environment
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
- .\msys64\usr\bin\bash -lc './configure --target-list=x86_64-softmmu
--enable-capstone --without-default-devices'
- .\msys64\usr\bin\bash -lc "sed -i '/^ROMS=/d' build/config-host.mak"
@ -89,6 +90,7 @@ msys2-32bit:
mingw-w64-i686-usbredir "
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
- $env:MSYSTEM = 'MINGW32' # Start a 32-bit MinG environment
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
- mkdir output
- cd output
- ..\msys64\usr\bin\bash -lc "../configure --target-list=ppc64-softmmu"

View File

@ -292,8 +292,7 @@ in the header file:
.. code-block:: c
:caption: Declaring a simple type
OBJECT_DECLARE_SIMPLE_TYPE(MyDevice, my_device,
MY_DEVICE, DEVICE)
OBJECT_DECLARE_SIMPLE_TYPE(MyDevice, MY_DEVICE)
This is equivalent to the following:

View File

@ -103,7 +103,7 @@ void qemu_boot_set(const char *boot_order, Error **errp);
bool defaults_enabled(void);
void qemu_init(int argc, char **argv, char **envp);
void qemu_main_loop(void);
int qemu_main_loop(void);
void qemu_cleanup(void);
extern QemuOptsList qemu_legacy_drive_opts;

View File

@ -364,10 +364,13 @@
#
# @shutdown: Shutdown the VM and exit, according to the shutdown action
#
# @exit-failure: Shutdown the VM and exit with nonzero status
# (since 7.1)
#
# Since: 6.0
##
{ 'enum': 'PanicAction',
'data': [ 'pause', 'shutdown', 'none' ] }
'data': [ 'pause', 'shutdown', 'exit-failure', 'none' ] }
##
# @watchdog-set-action:

View File

@ -1585,13 +1585,6 @@ SRST
Use file as SecureDigital card image.
ERST
DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
"-pflash file use 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
SRST
``-pflash file``
Use file as a parallel flash image.
ERST
DEF("snapshot", 0, QEMU_OPTION_snapshot,
"-snapshot write to temporary files instead of disk image files\n",
QEMU_ARCH_ALL)
@ -3684,12 +3677,67 @@ DEFHEADING()
#endif
DEFHEADING(Linux/Multiboot boot specific:)
DEFHEADING(Boot Image or Kernel specific:)
SRST
When using these options, you can use a given Linux or Multiboot kernel
without installing it in the disk image. It can be useful for easier
testing of various kernels.
There are broadly 4 ways you can boot a system with QEMU.
- specify a firmware and let it control finding a kernel
- specify a firmware and pass a hint to the kernel to boot
- direct kernel image boot
- manually load files into the guest's address space
The third method is useful for quickly testing kernels but as there is
no firmware to pass configuration information to the kernel the
hardware must either be probeable, the kernel built for the exact
configuration or passed some configuration data (e.g. a DTB blob)
which tells the kernel what drivers it needs. This exact details are
often hardware specific.
The final method is the most generic way of loading images into the
guest address space and used mostly for ``bare metal`` type
development where the reset vectors of the processor are taken into
account.
ERST
SRST
For x86 machines and some other architectures ``-bios`` will generally
do the right thing with whatever it is given. For other machines the
more strict ``-pflash`` option needs an image that is sized for the
flash device for the given machine type.
Please see the :ref:`system-targets-ref` section of the manual for
more detailed documentation.
ERST
DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
"-bios file set the filename for the BIOS\n", QEMU_ARCH_ALL)
SRST
``-bios file``
Set the filename for the BIOS.
ERST
DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
"-pflash file use 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
SRST
``-pflash file``
Use file as a parallel flash image.
ERST
SRST
The kernel options were designed to work with Linux kernels although
other things (like hypervisors) can be packaged up as a kernel
executable image. The exact format of a executable image is usually
architecture specific.
The way in which the kernel is started (what address it is loaded at,
what if any information is passed to it via CPU registers, the state
of the hardware when it is started, and so on) is also architecture
specific. Typically it follows the specification laid down by the
Linux kernel for how kernels for that architecture must be started.
ERST
@ -3729,6 +3777,25 @@ SRST
kernel on boot.
ERST
SRST
Finally you can also manually load images directly into the address
space of the guest. This is most useful for developers who already
know the layout of their guest and take care to ensure something sane
will happen when the reset vector executes.
The generic loader can be invoked by using the loader device:
``-device loader,addr=<addr>,data=<data>,data-len=<data-len>[,data-be=<data-be>][,cpu-num=<cpu-num>]``
there is also the guest loader which operates in a similar way but
tweaks the DTB so a hypervisor loaded via ``-kernel`` can find where
the guest image is:
``-device guest-loader,addr=<addr>[,kernel=<path>,[bootargs=<arguments>]][,initrd=<path>]``
ERST
DEFHEADING()
DEFHEADING(Debug/Expert options:)
@ -4179,13 +4246,6 @@ SRST
To list all the data directories, use ``-L help``.
ERST
DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
"-bios file set the filename for the BIOS\n", QEMU_ARCH_ALL)
SRST
``-bios file``
Set the filename for the BIOS.
ERST
DEF("enable-kvm", 0, QEMU_OPTION_enable_kvm, \
"-enable-kvm enable KVM full virtualization support\n",
QEMU_ARCH_ARM | QEMU_ARCH_I386 | QEMU_ARCH_MIPS | QEMU_ARCH_PPC |
@ -4239,7 +4299,7 @@ DEF("action", HAS_ARG, QEMU_OPTION_action,
" action when guest reboots [default=reset]\n"
"-action shutdown=poweroff|pause\n"
" action when guest shuts down [default=poweroff]\n"
"-action panic=pause|shutdown|none\n"
"-action panic=pause|shutdown|exit-failure|none\n"
" action when guest panics [default=shutdown]\n"
"-action watchdog=reset|shutdown|poweroff|inject-nmi|pause|debug|none\n"
" action when watchdog fires [default=reset]\n",

View File

@ -171,6 +171,12 @@ static LayoutInfo common_semi_find_bases(CPUState *cs)
* Read the input value from the argument block; fail the semihosting
* call if the memory read fails. Eventually we could use a generic
* CPUState helper function here.
* Note that GET_ARG() handles memory access errors by jumping to
* do_fault, so must be used as the first thing done in handling a
* semihosting call, to avoid accidentally leaking allocated resources.
* SET_ARG(), since it unavoidably happens late, instead returns an
* error indication (0 on success, non-0 for error) which the caller
* should check.
*/
#define GET_ARG(n) do { \
@ -498,16 +504,25 @@ void do_common_semihosting(CPUState *cs)
GET_ARG(1);
GET_ARG(2);
len = asprintf(&s, "/tmp/qemu-%x%02x", getpid(), (int)arg1 & 0xff);
if (len < 0) {
common_semi_set_ret(cs, -1);
break;
}
/* Allow for trailing NUL */
len++;
/* Make sure there's enough space in the buffer */
if (len < 0 || len >= arg2) {
if (len > arg2) {
free(s);
common_semi_set_ret(cs, -1);
break;
}
p = lock_user(VERIFY_WRITE, arg0, len, 0);
if (!p) {
free(s);
goto do_fault;
}
memcpy(p, s, len + 1);
memcpy(p, s, len);
unlock_user(p, arg0, len);
free(s);
common_semi_set_ret(cs, 0);
@ -739,10 +754,14 @@ void do_common_semihosting(CPUState *cs)
case TARGET_SYS_ELAPSED:
elapsed = get_clock() - clock_start;
if (sizeof(target_ulong) == 8) {
SET_ARG(0, elapsed);
if (SET_ARG(0, elapsed)) {
goto do_fault;
}
} else {
SET_ARG(0, (uint32_t) elapsed);
SET_ARG(1, (uint32_t) (elapsed >> 32));
if (SET_ARG(0, (uint32_t) elapsed) ||
SET_ARG(1, (uint32_t) (elapsed >> 32))) {
goto do_fault;
}
}
common_semi_set_ret(cs, 0);
break;

View File

@ -111,7 +111,8 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len)
int qemu_semihosting_console_write(void *buf, int len)
{
if (console.chr) {
return qemu_chr_write_all(console.chr, (uint8_t *)buf, len);
int r = qemu_chr_write_all(console.chr, (uint8_t *)buf, len);
return r < 0 ? 0 : r;
} else {
return fwrite(buf, 1, len, stderr);
}

View File

@ -627,7 +627,7 @@ static void console_write(CPUState *cs, gdb_syscall_complete_cb complete,
}
ret = qemu_semihosting_console_write(ptr, len);
complete(cs, ret ? ret : -1, ret ? 0 : EIO);
unlock_user(ptr, buf, ret);
unlock_user(ptr, buf, 0);
}
static void console_fstat(CPUState *cs, gdb_syscall_complete_cb complete,

View File

@ -32,11 +32,13 @@
int qemu_main(int argc, char **argv, char **envp)
{
int status;
qemu_init(argc, argv, envp);
qemu_main_loop();
status = qemu_main_loop();
qemu_cleanup();
return 0;
return status;
}
#ifndef CONFIG_COCOA

View File

@ -482,7 +482,8 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
!!info, info);
vm_stop(RUN_STATE_GUEST_PANICKED);
} else if (panic_action == PANIC_ACTION_SHUTDOWN) {
} else if (panic_action == PANIC_ACTION_SHUTDOWN ||
panic_action == PANIC_ACTION_EXIT_FAILURE) {
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
!!info, info);
vm_stop(RUN_STATE_GUEST_PANICKED);
@ -662,7 +663,7 @@ void qemu_system_debug_request(void)
qemu_notify_event();
}
static bool main_loop_should_exit(void)
static bool main_loop_should_exit(int *status)
{
RunState r;
ShutdownCause request;
@ -680,6 +681,10 @@ static bool main_loop_should_exit(void)
if (shutdown_action == SHUTDOWN_ACTION_PAUSE) {
vm_stop(RUN_STATE_SHUTDOWN);
} else {
if (request == SHUTDOWN_CAUSE_GUEST_PANIC &&
panic_action == PANIC_ACTION_EXIT_FAILURE) {
*status = EXIT_FAILURE;
}
return true;
}
}
@ -715,12 +720,14 @@ static bool main_loop_should_exit(void)
return false;
}
void qemu_main_loop(void)
int qemu_main_loop(void)
{
int status = EXIT_SUCCESS;
#ifdef CONFIG_PROFILER
int64_t ti;
#endif
while (!main_loop_should_exit()) {
while (!main_loop_should_exit(&status)) {
#ifdef CONFIG_PROFILER
ti = profile_getclock();
#endif
@ -729,6 +736,8 @@ void qemu_main_loop(void)
dev_time += profile_getclock() - ti;
#endif
}
return status;
}
void qemu_add_exit_notifier(Notifier *notify)

View File

@ -21,6 +21,7 @@ RUN apk update && \
cdrkit \
ceph-dev \
clang \
cmocka-dev \
ctags \
curl-dev \
cyrus-sasl-dev \
@ -39,6 +40,7 @@ RUN apk update && \
glib-static \
gnutls-dev \
gtk+3.0-dev \
json-c-dev \
libaio-dev \
libbpf-dev \
libcap-ng-dev \
@ -64,6 +66,7 @@ RUN apk update && \
mesa-dev \
meson \
multipath-tools \
musl-dev \
ncurses-dev \
ndctl-dev \
net-tools \
@ -81,7 +84,6 @@ RUN apk update && \
py3-pip \
py3-sphinx \
py3-sphinx_rtd_theme \
py3-virtualenv \
py3-yaml \
python3 \
rpm2cpio \

View File

@ -6,11 +6,12 @@
FROM quay.io/centos/centos:stream8
RUN dnf update -y && \
RUN dnf distro-sync -y && \
dnf install 'dnf-command(config-manager)' -y && \
dnf config-manager --set-enabled -y powertools && \
dnf install -y centos-release-advanced-virtualization && \
dnf install -y epel-release && \
dnf install -y epel-next-release && \
dnf install -y \
SDL2-devel \
alsa-lib-devel \
@ -45,6 +46,7 @@ RUN dnf update -y && \
gtk3-devel \
hostname \
jemalloc-devel \
json-c-devel \
libaio-devel \
libasan \
libattr-devel \
@ -60,7 +62,6 @@ RUN dnf update -y && \
libgcrypt-devel \
libiscsi-devel \
libjpeg-devel \
json-c-devel \
libnfs-devel \
libpmem-devel \
libpng-devel \
@ -99,7 +100,6 @@ RUN dnf update -y && \
python3-pip \
python3-sphinx \
python3-sphinx_rtd_theme \
python3-virtualenv \
rdma-core-devel \
rpm \
sed \

View File

@ -41,6 +41,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev \
libcap-ng-dev \
libcapstone-dev \
libcmocka-dev \
libcurl4-gnutls-dev \
libdaxctl-dev \
libdrm-dev \
@ -59,6 +60,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev \
libjemalloc-dev \
libjpeg62-turbo-dev \
libjson-c-dev \
liblttng-ust-dev \
liblzo2-dev \
libncursesw5-dev \

View File

@ -84,6 +84,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:arm64 \
libcap-ng-dev:arm64 \
libcapstone-dev:arm64 \
libcmocka-dev:arm64 \
libcurl4-gnutls-dev:arm64 \
libdaxctl-dev:arm64 \
libdrm-dev:arm64 \
@ -102,6 +103,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:arm64 \
libjemalloc-dev:arm64 \
libjpeg62-turbo-dev:arm64 \
libjson-c-dev:arm64 \
liblttng-ust-dev:arm64 \
liblzo2-dev:arm64 \
libncursesw5-dev:arm64 \

View File

@ -84,6 +84,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:armel \
libcap-ng-dev:armel \
libcapstone-dev:armel \
libcmocka-dev:armel \
libcurl4-gnutls-dev:armel \
libdaxctl-dev:armel \
libdrm-dev:armel \
@ -102,6 +103,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:armel \
libjemalloc-dev:armel \
libjpeg62-turbo-dev:armel \
libjson-c-dev:armel \
liblttng-ust-dev:armel \
liblzo2-dev:armel \
libncursesw5-dev:armel \

View File

@ -84,6 +84,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:armhf \
libcap-ng-dev:armhf \
libcapstone-dev:armhf \
libcmocka-dev:armhf \
libcurl4-gnutls-dev:armhf \
libdaxctl-dev:armhf \
libdrm-dev:armhf \
@ -102,6 +103,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:armhf \
libjemalloc-dev:armhf \
libjpeg62-turbo-dev:armhf \
libjson-c-dev:armhf \
liblttng-ust-dev:armhf \
liblzo2-dev:armhf \
libncursesw5-dev:armhf \

View File

@ -83,6 +83,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:mips64el \
libcap-ng-dev:mips64el \
libcapstone-dev:mips64el \
libcmocka-dev:mips64el \
libcurl4-gnutls-dev:mips64el \
libdaxctl-dev:mips64el \
libdrm-dev:mips64el \
@ -101,6 +102,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:mips64el \
libjemalloc-dev:mips64el \
libjpeg62-turbo-dev:mips64el \
libjson-c-dev:mips64el \
liblttng-ust-dev:mips64el \
liblzo2-dev:mips64el \
libncursesw5-dev:mips64el \

View File

@ -83,6 +83,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:mipsel \
libcap-ng-dev:mipsel \
libcapstone-dev:mipsel \
libcmocka-dev:mipsel \
libcurl4-gnutls-dev:mipsel \
libdaxctl-dev:mipsel \
libdrm-dev:mipsel \
@ -101,6 +102,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:mipsel \
libjemalloc-dev:mipsel \
libjpeg62-turbo-dev:mipsel \
libjson-c-dev:mipsel \
liblttng-ust-dev:mipsel \
liblzo2-dev:mipsel \
libncursesw5-dev:mipsel \

View File

@ -84,6 +84,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:ppc64el \
libcap-ng-dev:ppc64el \
libcapstone-dev:ppc64el \
libcmocka-dev:ppc64el \
libcurl4-gnutls-dev:ppc64el \
libdaxctl-dev:ppc64el \
libdrm-dev:ppc64el \
@ -102,6 +103,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:ppc64el \
libjemalloc-dev:ppc64el \
libjpeg62-turbo-dev:ppc64el \
libjson-c-dev:ppc64el \
liblttng-ust-dev:ppc64el \
liblzo2-dev:ppc64el \
libncursesw5-dev:ppc64el \

View File

@ -84,6 +84,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev:s390x \
libcap-ng-dev:s390x \
libcapstone-dev:s390x \
libcmocka-dev:s390x \
libcurl4-gnutls-dev:s390x \
libdaxctl-dev:s390x \
libdrm-dev:s390x \
@ -102,6 +103,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev:s390x \
libjemalloc-dev:s390x \
libjpeg62-turbo-dev:s390x \
libjson-c-dev:s390x \
liblttng-ust-dev:s390x \
liblzo2-dev:s390x \
libncursesw5-dev:s390x \

View File

@ -53,12 +53,14 @@ exec "$@"' > /usr/bin/nosync && \
gtk3-devel \
hostname \
jemalloc-devel \
json-c-devel \
libaio-devel \
libasan \
libattr-devel \
libbpf-devel \
libcacard-devel \
libcap-ng-devel \
libcmocka-devel \
libcurl-devel \
libdrm-devel \
libepoxy-devel \
@ -106,7 +108,6 @@ exec "$@"' > /usr/bin/nosync && \
python3-pip \
python3-sphinx \
python3-sphinx_rtd_theme \
python3-virtualenv \
rdma-core-devel \
rpm \
sed \

View File

@ -1,10 +1,10 @@
# THIS FILE WAS AUTO-GENERATED
#
# $ lcitool dockerfile --layers all opensuse-leap-152 qemu
# $ lcitool dockerfile --layers all opensuse-leap-153 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
FROM registry.opensuse.org/opensuse/leap:15.2
FROM registry.opensuse.org/opensuse/leap:15.3
RUN zypper update -y && \
zypper install -y \
@ -44,6 +44,7 @@ RUN zypper update -y && \
libbz2-devel \
libcacard-devel \
libcap-ng-devel \
libcmocka-devel \
libcurl-devel \
libdrm-devel \
libepoxy-devel \
@ -53,6 +54,7 @@ RUN zypper update -y && \
libgnutls-devel \
libiscsi-devel \
libjpeg8-devel \
libjson-c-devel \
libndctl-devel \
libnettle-devel \
libnfs-devel \
@ -94,7 +96,6 @@ RUN zypper update -y && \
python3-pip \
python3-setuptools \
python3-sphinx_rtd_theme \
python3-virtualenv \
python3-wheel \
rdma-core-devel \
rpm \

View File

@ -40,6 +40,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libcacard-dev \
libcap-ng-dev \
libcapstone-dev \
libcmocka-dev \
libcurl4-gnutls-dev \
libdaxctl-dev \
libdrm-dev \
@ -58,6 +59,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libiscsi-dev \
libjemalloc-dev \
libjpeg-turbo8-dev \
libjson-c-dev \
liblttng-ust-dev \
liblzo2-dev \
libncursesw5-dev \

@ -1 +1 @@
Subproject commit f83b916d5efa4bd33fbf4b7ea41bf6d535cc63fb
Subproject commit 324355cf62e86fb551408575afb123bac989ac37

View File

@ -9,6 +9,7 @@ packages:
- capstone
- ccache
- clang
- cmocka
- column
- ctags
- cyrus-sasl
@ -26,15 +27,16 @@ packages:
- genisoimage
- glib2
- glib2-static
- glibc-static
- glusterfs
- gnutls
- gtk3
- hostname
- json-c
- libaio
- libattr
- libasan
- libbpf
- libc-static
- libcacard
- libcap-ng
- libcurl
@ -90,7 +92,7 @@ packages:
- python3-pip
- python3-sphinx
- python3-sphinx-rtd-theme
- python3-virtualenv
- python3-venv
- rpm2cpio
- sdl2
- sdl2-image

View File

@ -25,7 +25,7 @@ self_dir = Path(__file__).parent
src_dir = self_dir.parent.parent
dockerfiles_dir = Path(src_dir, "tests", "docker", "dockerfiles")
lcitool_path = Path(self_dir, "libvirt-ci", "lcitool")
lcitool_path = Path(self_dir, "libvirt-ci", "bin", "lcitool")
lcitool_cmd = [lcitool_path, "--data-dir", self_dir]
@ -112,7 +112,7 @@ try:
generate_dockerfile("debian-amd64", "debian-11",
trailer="".join(debian11_extras))
generate_dockerfile("fedora", "fedora-35")
generate_dockerfile("opensuse-leap", "opensuse-leap-152")
generate_dockerfile("opensuse-leap", "opensuse-leap-153")
generate_dockerfile("ubuntu2004", "ubuntu-2004",
trailer="".join(ubuntu2004_tsanhack))

View File

@ -0,0 +1,9 @@
S390X_SRC=$(SRC_PATH)/tests/tcg/s390x
VPATH+=$(S390X_SRC)
QEMU_OPTS=-action panic=exit-failure -kernel
%: %.S
$(CC) -march=z13 -m64 -nostartfiles -static -Wl,-Ttext=0 \
-Wl,--build-id=none $< -o $@
TESTS += unaligned-lowcore

View File

@ -0,0 +1,19 @@
.org 0x1D0 /* program new PSW */
.quad 0x2000000000000,0 /* disabled wait */
.org 0x200 /* lowcore padding */
.globl _start
_start:
lctlg %c0,%c0,_c0
vst %v0,_unaligned
lpswe quiesce_psw
.align 8
quiesce_psw:
.quad 0x2000000000000,0xfff /* see is_special_wait_psw() */
_c0:
.quad 0x10060000 /* lowcore protection, AFP, VX */
.byte 0
_unaligned:
.octa 0