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 CC pc-bios/s390-ccw/main.o clang: warning: optimization flag '-fno-delete-null-pointer-checks' is not supported [-Wignored-optimization-argument] clang: warning: argument unused during compilation: '-msoft-float' [-Wunused-command-line-argument] /home/travis/build/qemu/qemu/pc-bios/s390-ccw/main.c:284:5: warning: no previous prototype for function 'main' [-Wmissing-prototypes] int main(void) ^ 1 warning generated. clang: warning: optimization flag '-fno-delete-null-pointer-checks' is not supported [-Wignored-optimization-argument] CC pc-bios/s390-ccw/jump2ipl.o /home/travis/build/qemu/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/qemu/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