From: Alistair Francis <alistair23@gmail.com>
To: Andrea Bolognani <abologna@redhat.com>
Cc: qemu-devel@nongnu.org, "Laurent Vivier" <laurent@vivier.eu>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"David Abdurachmanov" <davidlt@rivosinc.com>
Subject: Re: [PATCH v2 3/3] binfmt: Add --ignore-family option
Date: Fri, 28 Feb 2025 14:24:52 +1000 [thread overview]
Message-ID: <CAKmqyKN7HtWpihKAyAzzXGiB6-DBe-HExCY130YaVAV6Wpu+4w@mail.gmail.com> (raw)
In-Reply-To: <20250127182924.103510-4-abologna@redhat.com>
On Tue, Jan 28, 2025 at 4:29 AM Andrea Bolognani <abologna@redhat.com> wrote:
>
> Until now, the script has worked under the assumption that a
> host CPU can run binaries targeting any CPU in the same family.
> That's a fair enough assumption when it comes to running i386
> binaries on x86_64, but it doesn't quite apply in the general
> case.
>
> For example, while riscv64 CPUs could theoretically run riscv32
> applications natively, in practice there exist few (if any?)
> CPUs that implement the necessary silicon; moreover, even if you
> had one such CPU, your host OS would most likely not have
> enabled the necessary kernel bits.
>
> This new option gives distro packagers the ability to opt out of
> the assumption, likely on a per-architecture basis, and make
> things work out of the box for a larger fraction of their user
> base.
>
> As an interesting side effect, this makes it possible to enable
> execution of 64-bit binaries on 32-bit CPUs of the same family,
> which is a perfectly valid use case that apparently hadn't been
> considered until now.
>
> Link: https://src.fedoraproject.org/rpms/qemu/pull-request/72
> Thanks: David Abdurachmanov <davidlt@rivosinc.com>
> Thanks: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
> scripts/qemu-binfmt-conf.sh | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
> index 8d9136a29f..5fd462b1d1 100755
> --- a/scripts/qemu-binfmt-conf.sh
> +++ b/scripts/qemu-binfmt-conf.sh
> @@ -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 :
> @@ -337,7 +340,12 @@ qemu_set_binfmts() {
> fi
>
> if [ "$host_family" = "$family" ] ; then
> - continue
> + # 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
>
> $BINFMT_SET
> @@ -355,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
> @@ -418,6 +427,10 @@ while true ; do
> shift
> PRESERVE_ARG0="$1"
> ;;
> + -i|--ignore-family)
> + shift
> + IGNORE_FAMILY="$1"
> + ;;
> *)
> break
> ;;
> --
> 2.48.1
>
next prev parent reply other threads:[~2025-02-28 4:26 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-27 18:29 [PATCH v2 0/3] binfmt: Add --ignore-family option Andrea Bolognani
2025-01-27 18:29 ` [PATCH v2 1/3] binfmt: Shuffle things around Andrea Bolognani
2025-02-20 10:46 ` Laurent Vivier
2025-02-24 1:36 ` Alistair Francis
2025-01-27 18:29 ` [PATCH v2 2/3] binfmt: Normalize host CPU architecture Andrea Bolognani
2025-02-20 11:05 ` Laurent Vivier
2025-02-24 1:39 ` Alistair Francis
2025-02-26 21:09 ` Andrea Bolognani
2025-01-27 18:29 ` [PATCH v2 3/3] binfmt: Add --ignore-family option Andrea Bolognani
2025-02-20 11:06 ` Laurent Vivier
2025-02-28 4:24 ` Alistair Francis [this message]
2025-02-11 15:59 ` [PATCH v2 0/3] " Andrea Bolognani
2025-02-28 4:33 ` Alistair Francis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAKmqyKN7HtWpihKAyAzzXGiB6-DBe-HExCY130YaVAV6Wpu+4w@mail.gmail.com \
--to=alistair23@gmail.com \
--cc=abologna@redhat.com \
--cc=berrange@redhat.com \
--cc=davidlt@rivosinc.com \
--cc=laurent@vivier.eu \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).