[PATCH] configure: Fix linux-user host detection for ppc64le

Joel Stanley posted 1 patch 9 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230807083950.29521-1-joel@jms.id.au
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, "Alex Bennée" <alex.bennee@linaro.org>, Thomas Huth <thuth@redhat.com>
configure | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
[PATCH] configure: Fix linux-user host detection for ppc64le
Posted by Joel Stanley 9 months ago
Revert the changes in the recent "Fix linux-user host detection for
riscv64" patch as it broke ppc64le. Instead add riscv to the switch
statement that performs normalisation of the host cpu name.

Fixes: 89e5b7935e92 ("configure: Fix linux-user host detection for riscv64")
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
Tested on a ppc64le host. Please check it works on riscv too.
---
 configure | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/configure b/configure
index 98dc78280e67..fd0efa69bc36 100755
--- a/configure
+++ b/configure
@@ -469,13 +469,6 @@ else
   echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
 fi
 
-case "$cpu" in
-  riscv*)
-    host_arch=riscv ;;
-  *)
-    host_arch="$cpu" ;;
-esac
-
 # Normalise host CPU name and set multilib cflags.  The canonicalization
 # isn't really necessary, because the architectures that we check for
 # should not hit the 'uname -m' case, but better safe than sorry.
@@ -508,6 +501,9 @@ case "$cpu" in
     cpu="ppc64"
     CPU_CFLAGS="-m64 -mlittle-endian" ;;
 
+  riscv*)
+    cpu="riscv" ;;
+
   s390)
     CPU_CFLAGS="-m31" ;;
   s390x)
@@ -810,7 +806,7 @@ default_target_list=""
 mak_wilds=""
 
 if [ "$linux_user" != no ]; then
-    if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$host_arch" ]; then
+    if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$cpu" ]; then
         linux_user=yes
     elif [ "$linux_user" = yes ]; then
         error_exit "linux-user not supported on this architecture"
-- 
2.40.1
Re: [PATCH] configure: Fix linux-user host detection for ppc64le
Posted by Paolo Bonzini 9 months ago
On 8/7/23 10:39, Joel Stanley wrote:
>   
> -case "$cpu" in
> -  riscv*)
> -    host_arch=riscv ;;
> -  *)
> -    host_arch="$cpu" ;;
> -esac
> -
>   # Normalise host CPU name and set multilib cflags.  The canonicalization
>   # isn't really necessary, because the architectures that we check for
>   # should not hit the 'uname -m' case, but better safe than sorry.
> @@ -508,6 +501,9 @@ case "$cpu" in
>       cpu="ppc64"
>       CPU_CFLAGS="-m64 -mlittle-endian" ;;
>   
> +  riscv*)
> +    cpu="riscv" ;;
> +

This is also wrong because it confuses riscv32 and riscv64, which 
matters both for tests/tcg, and when creating the Meson cross file[1]

Instead, the "case $cpu" that sets $host_arch must be placed after $cpu 
is canonicalized (and possibly just before $host_arch is used to find 
linux-user).

Even better, there is already a variable $linux_arch that has the same 
meaning.  I'll send a patch to unify the two.

Paolo

[1] https://mesonbuild.com/Reference-tables.html#cpu-families
>     s390)
>       CPU_CFLAGS="-m31" ;;
>     s390x)
> @@ -810,7 +806,7 @@ default_target_list=""
>   mak_wilds=""
>   
>   if [ "$linux_user" != no ]; then
> -    if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$host_arch" ]; then
> +    if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$cpu" ]; then
>           linux_user=yes
>       elif [ "$linux_user" = yes ]; then