On Tue, Jan 28, 2025 at 4:29 AM Andrea Bolognani <abolo...@redhat.com> wrote: > > Right now information regarding the family each CPU type belongs > to is recorded in two places: the large data table at the top of > the script, and the qemu_host_family() function. > > We can make things better by mapping host CPU architecture to > QEMU target in the few cases where the two don't already match > and then using the data table to look up the family, same as > we're already doing for the guest CPU architecture. > > Being able to reason in terms of QEMU target regardless of > whether we're looking at the host or guest CPU architecture will > come in handy to implement upcoming changes. > > A couple of entries are dropped in the process: BePC and Power > Macintosh. I'm quite certain neither of those have ever been > reported as CPU architectures by Linux. I believe many more of > the entries that are carried forward could be dropped as well, > but I don't have the same level of confidence there so I > decided to play it safe just in case. > > Signed-off-by: Andrea Bolognani <abolo...@redhat.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > scripts/qemu-binfmt-conf.sh | 44 +++++++++++++++++++++---------------- > 1 file changed, 25 insertions(+), 19 deletions(-) > > diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh > index 426f075e31..8d9136a29f 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" > @@ -309,7 +309,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 > > -- > 2.48.1 >