On 5/12/21 1:53 PM, Philippe Mathieu-Daudé wrote: > On 5/10/21 9:35 AM, Thomas Huth wrote: >> Clang unfortunately does not support generating code for the z900 >> architecture level and starts with the z10 instead. Thus to be able >> to support compiling with Clang, we have to check for the supported >> compiler flags. The disadvantage is of course that the bios image >> will only run with z10 guest CPUs upwards (which is what most people >> use anyway), so just in case let's also emit a warning in that case >> (we will continue to ship firmware images that have been pre-built >> with GCC in future releases, so this should not impact normal users, >> too). >> >> Message-Id: <20210502174836.838816-5-th...@redhat.com> >> Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> >> Reviewed-by: Cornelia Huck <coh...@redhat.com> >> Signed-off-by: Thomas Huth <th...@redhat.com> >> --- >> configure | 9 ++++++++- >> pc-bios/s390-ccw/Makefile | 3 ++- >> 2 files changed, 10 insertions(+), 2 deletions(-) >> >> diff --git a/configure b/configure >> index 4f374b4889..5ebc937746 100755 >> --- a/configure >> +++ b/configure >> @@ -5417,9 +5417,16 @@ if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; >> } && \ >> fi >> >> # Only build s390-ccw bios if we're on s390x and the compiler has >> -march=z900 >> +# or -march=z10 (which is the lowest architecture level that Clang supports) >> if test "$cpu" = "s390x" ; then >> write_c_skeleton >> - if compile_prog "-march=z900" ""; then >> + compile_prog "-march=z900" "" >> + has_z900=$? >> + if [ $has_z900 = 0 ] || compile_prog "-march=z10" ""; then >> + if [ $has_z900 != 0 ]; then >> + echo "WARNING: Your compiler does not support the z900!" >> + echo " The s390-ccw bios will only work with guest CPUs >= >> z10." >> + fi >> roms="$roms s390-ccw" >> # SLOF is required for building the s390-ccw firmware on s390x, >> # since it is using the libnet code from SLOF for network booting. >> diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile >> index 83fb1afb73..cee9d2c63b 100644 >> --- a/pc-bios/s390-ccw/Makefile >> +++ b/pc-bios/s390-ccw/Makefile >> @@ -34,7 +34,8 @@ QEMU_CFLAGS += $(call cc-option,-Werror >> $(QEMU_CFLAGS),-Wno-stringop-overflow) >> QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common >> -fPIE >> QEMU_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables >> QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector) >> -QEMU_CFLAGS += -msoft-float -march=z900 >> +QEMU_CFLAGS += -msoft-float >> +QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS),-march=z900,-march=z10) >> QEMU_CFLAGS += -std=gnu99 >> LDFLAGS += -Wl,-pie -nostdlib > > This broke the travis-ci "[s390x] Clang (disable-tcg)" job: > https://travis-ci.org/github/qemu/qemu/jobs/770794417#L1776 > > Description: Ubuntu 18.04.4 LTS > Release: 18.04 > Codename: bionic > > $ clang --version > clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final) > Target: s390x-ibm-linux-gnu
Using clang-10: C compiler for the host machine: clang-10 (clang 10.0.0-4ubuntu1 "clang version 10.0.0-4ubuntu1~18.04.2 ") C linker for the host machine: clang-10 ld.bfd 2.30 C++ compiler for the host machine: clang++-10 (clang 10.0.0-4ubuntu1 "clang version 10.0.0-4ubuntu1~18.04.2 ") C++ linker for the host machine: clang++-10 ld.bfd 2.30 [...] Compilation host CPU: s390x host endianness: big C compiler: clang-10 Host C compiler: clang-10 C++ compiler: clang++-10 clang-10 -Wall -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables -fno-stack-protector -msoft-float -march=z10 -std=gnu99 -nostdinc -I/home/travis/build/philmd/qemu/roms/SLOF/lib/libc/include -I/home/travis/build/philmd/qemu/roms/SLOF/lib/libnet -MMD -MP -MT jump2ipl.o -MF ./jump2ipl.d -O2 -g -c -o jump2ipl.o /home/travis/build/philmd/qemu/pc-bios/s390-ccw/jump2ipl.c clang: warning: argument unused during compilation: '-msoft-float' [-Wunused-command-line-argument] /home/travis/build/philmd/qemu/pc-bios/s390-ccw/jump2ipl.c:67:18: error: invalid operand for instruction asm volatile("lghi 1,1\n\t" ^ <inline asm>:1:7: note: instantiated into assembly here lghi 1,1 ^ /home/travis/build/philmd/qemu/pc-bios/s390-ccw/jump2ipl.c:67:29: error: invalid operand for instruction asm volatile("lghi 1,1\n\t" ^ <inline asm>:2:7: note: instantiated into assembly here diag 1,1,0x308 ^ 2 errors generated. Makefile:20: recipe for target 'jump2ipl.o' failed make[1]: *** [jump2ipl.o] Error 1