aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2025-03-05 21:56:46 +0800
committerStefan Hajnoczi <stefanha@redhat.com>2025-03-05 21:56:46 +0800
commit9ee727802012ddb32e193d84052a44e382088277 (patch)
tree1f0b568403bff2387dcd63c38759a5ab66497292 /scripts
parentf5e6e13124440797308d2c044f44d9e655fcb74d (diff)
parent4db19d5b21e058e6eb3474b6be470d1184afaa9e (diff)
downloadqemu-9ee727802012ddb32e193d84052a44e382088277.zip
qemu-9ee727802012ddb32e193d84052a44e382088277.tar.gz
qemu-9ee727802012ddb32e193d84052a44e382088277.tar.bz2
Merge tag 'pull-riscv-to-apply-20250305-1' of https://github.com/alistair23/qemu into staging
Third RISC-V PR for 10.0 * CSR coverity fixes * Fix unexpected behavior of vector reduction instructions when vl is 0 * Fix incorrect vlen comparison in prop_vlen_set * Throw debug exception before page fault * Remove redundant "hart_idx" masking from APLIC * Add support for Control Transfer Records Ext * Remove redundant struct members from the IOMMU * Remove duplicate definitions from the IOMMU * Fix tick_offset migration for Goldfish RTC * Add serial alias in virt machine DTB * Remove Bin Meng from RISC-V maintainers * Add support for Control Transfer Records Ext * Log guest errors when reserved bits are set in PTEs * Add missing Sdtrig disas CSRs * Correct the hpmevent sscofpmf mask * Mask upper sscofpmf bits during validation * Remove warnings about Smdbltrp/Smrnmi being disabled * Respect mseccfg.RLB bit for TOR mode PMP entry * Update KVM support to Linux 6.14-rc3 * IOMMU HPM support * Support Sscofpmf/Svade/Svadu/Smnpm/Ssnpm extensions in KVM * Add --ignore-family option to binfmt * Refinement for AIA with KVM acceleration * Reset time changes for KVM # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEaukCtqfKh31tZZKWr3yVEwxTgBMFAmfHrkEACgkQr3yVEwxT # gBNGTA/+N9nBPZt5cv0E/0EDZMQS8RQrQvz1yHRgAXOq8RnOdcL72v8wovGAfnVu # l0BXDoVBvw4f2Xm9Q4ptlfH8HAefCeQ4E/K9j5Lwxr8OqZHFg6e+JQIyZOt6wBWI # hJbz1/laJIbXq3cGgwcE/l0aGfb2UAAsA4dsZVt/MnjAV8GS7BF9RCkgCPxD4FZA # 0PLiq9dF+4o4q7PxnxAbUVz/uhLzqmcnQemQFHbf9Wms3tZEDKmPSoKP/v+01Rkw # tm+cgy7OocpgygbMc0nykYG50P+raUBSesk/jFGeKj8cU4IeMuzDsVPWcd4rG+0X # Z+nENfOY7vOqMCXgaQCW2r4vEQx2Gj0yQG6xmVAemRWzFHJdz5W01/uUSHzJSB+L # +VbAH55HYKr6sbgecqInQ/rsHKyw6D5QFcj/guz+kvhsH9rJ5q60uywrWL5OEuaK # vKv7cSZghlf9bwy6soassXxk8z+j4psJ7WnnVpynNKMew9yFFDhayuIFbo9952gH # 3+NCm2cQrkTYJOXAJwkxBD+I4AXxNSuxNjaVANk9q80uqbT9JiHM7pcvbJI00Fji # OutJSPYtVXEin9Ev3sJ05YQHsIcZ/Noi3O5IdaRI0AMk/8gyGyhFCVgSpV52dH59 # HguPK05e5cW/xgElGUPHrU+UtzE05p18HnSoVPclF/B5rc8QXN0= # =dobk # -----END PGP SIGNATURE----- # gpg: Signature made Wed 05 Mar 2025 09:52:01 HKT # gpg: using RSA key 6AE902B6A7CA877D6D659296AF7C95130C538013 # gpg: Good signature from "Alistair Francis <alistair@alistair23.me>" [unknown] # 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: 6AE9 02B6 A7CA 877D 6D65 9296 AF7C 9513 0C53 8013 * tag 'pull-riscv-to-apply-20250305-1' of https://github.com/alistair23/qemu: (59 commits) target/riscv/kvm: add missing KVM CSRs target/riscv/kvm: add kvm_riscv_reset_regs_csr() target/riscv/cpu: remove unneeded !kvm_enabled() check hw/intc/aplic: refine kvm_msicfgaddr hw/intc/aplic: refine the APLIC realize hw/intc/imsic: refine the IMSIC realize binfmt: Add --ignore-family option binfmt: Normalize host CPU architecture binfmt: Shuffle things around target/riscv/kvm: Add some exts support docs/specs/riscv-iommu.rst: add HPM support info hw/riscv: add IOMMU HPM trace events hw/riscv/riscv-iommu.c: add RISCV_IOMMU_CAP_HPM cap hw/riscv/riscv-iommu: add hpm events mmio write hw/riscv/riscv-iommu: add IOHPMCYCLES mmio write hw/riscv/riscv-iommu: add IOCOUNTINH mmio writes hw/riscv/riscv-iommu: instantiate hpm_timer hw/riscv/riscv-iommu: add riscv_iommu_hpm_incr_ctr() hw/riscv/riscv-iommu: add riscv-iommu-hpm file hw/riscv/riscv-iommu-bits.h: HPM bits ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/qemu-binfmt-conf.sh78
1 files changed, 50 insertions, 28 deletions
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 6ef9f11..5fd462b 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -144,35 +144,35 @@ loongarch64_magic='\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x
loongarch64_mask='\xff\xff\xff\xff\xff\xff\xff\xfc\x00\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff'
loongarch64_family=loongarch
-qemu_get_family() {
- cpu=${HOST_ARCH:-$(uname -m)}
+# Converts the name of a host CPU architecture to the corresponding QEMU
+# target.
+#
+# FIXME: This can probably be simplified a lot by dropping most entries.
+# Remember that the script is only used on Linux, so we only need to
+# handle the strings Linux uses to report the host CPU architecture.
+qemu_normalize() {
+ cpu="$1"
case "$cpu" in
- amd64|i386|i486|i586|i686|i86pc|BePC|x86_64)
+ i[3-6]86)
echo "i386"
;;
- mips*)
- echo "mips"
+ amd64)
+ echo "x86_64"
;;
- "Power Macintosh"|ppc64|powerpc|ppc)
+ powerpc)
echo "ppc"
;;
- ppc64el|ppc64le)
- echo "ppcle"
+ ppc64el)
+ echo "ppc64le"
;;
- arm|armel|armhf|arm64|armv[4-9]*l|aarch64)
+ armel|armhf|armv[4-9]*l)
echo "arm"
;;
- armeb|armv[4-9]*b|aarch64_be)
+ armv[4-9]*b)
echo "armeb"
;;
- sparc*)
- echo "sparc"
- ;;
- riscv*)
- echo "riscv"
- ;;
- loongarch*)
- echo "loongarch"
+ arm64)
+ echo "aarch64"
;;
*)
echo "$cpu"
@@ -205,6 +205,9 @@ Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU]
--persistent: if yes, the interpreter is loaded when binfmt is
configured and remains in memory. All future uses
are cloned from the open file.
+ --ignore-family: if yes, it is assumed that the host CPU (e.g. riscv64)
+ can't natively run programs targeting a CPU that is
+ part of the same family (e.g. riscv32).
--preserve-argv0 preserve argv[0]
To import templates with update-binfmts, use :
@@ -309,7 +312,13 @@ EOF
qemu_set_binfmts() {
# probe cpu type
- host_family=$(qemu_get_family)
+ host_cpu=$(qemu_normalize ${HOST_ARCH:-$(uname -m)})
+ host_family=$(eval echo \$${host_cpu}_family)
+
+ if [ "$host_family" = "" ] ; then
+ echo "INTERNAL ERROR: unknown host cpu $host_cpu" 1>&2
+ exit 1
+ fi
# register the interpreter for each cpu except for the native one
@@ -318,20 +327,28 @@ qemu_set_binfmts() {
mask=$(eval echo \$${cpu}_mask)
family=$(eval echo \$${cpu}_family)
+ target="$cpu"
+ if [ "$cpu" = "i486" ] ; then
+ target="i386"
+ fi
+
+ qemu="$QEMU_PATH/qemu-$target$QEMU_SUFFIX"
+
if [ "$magic" = "" ] || [ "$mask" = "" ] || [ "$family" = "" ] ; then
echo "INTERNAL ERROR: unknown cpu $cpu" 1>&2
continue
fi
- qemu="$QEMU_PATH/qemu-$cpu"
- if [ "$cpu" = "i486" ] ; then
- qemu="$QEMU_PATH/qemu-i386"
+ if [ "$host_family" = "$family" ] ; then
+ # When --ignore-family is used, we have to generate rules even
+ # for targets that are in the same family as the host CPU. The
+ # only exception is of course when the CPU types exactly match
+ if [ "$target" = "$host_cpu" ] || [ "$IGNORE_FAMILY" = "no" ] ; then
+ continue
+ fi
fi
- qemu="$qemu$QEMU_SUFFIX"
- if [ "$host_family" != "$family" ] ; then
- $BINFMT_SET
- fi
+ $BINFMT_SET
done
}
@@ -346,10 +363,11 @@ CREDENTIAL=no
PERSISTENT=no
PRESERVE_ARG0=no
QEMU_SUFFIX=""
+IGNORE_FAMILY=no
_longopts="debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential:,\
-persistent:,preserve-argv0:"
-options=$(getopt -o ds:Q:S:e:hc:p:g:F: -l ${_longopts} -- "$@")
+persistent:,preserve-argv0:,ignore-family:"
+options=$(getopt -o ds:Q:S:e:hc:p:g:F:i: -l ${_longopts} -- "$@")
eval set -- "$options"
while true ; do
@@ -409,6 +427,10 @@ while true ; do
shift
PRESERVE_ARG0="$1"
;;
+ -i|--ignore-family)
+ shift
+ IGNORE_FAMILY="$1"
+ ;;
*)
break
;;