qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] build fix for clang 3.4
@ 2016-07-08  4:56 Richard Henderson
  2016-07-08  4:56 ` [Qemu-devel] [PATCH 1/2] linux-user: Fix i386 safe-syscall.S Richard Henderson
  2016-07-08  4:56 ` [Qemu-devel] [PATCH 2/2] build: Use $(AS) for optionrom explicitly Richard Henderson
  0 siblings, 2 replies; 4+ messages in thread
From: Richard Henderson @ 2016-07-08  4:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: alex.bennee, peter.maydell, riku.voipio

Alex pointed out that my last attempt to get things all working
falls afoul of old clang, in use by our Travis CI.

This is tested with clang 3.7, but with examination of the build
logs to see that the system assembler is used for the optionroms.


r~


Richard Henderson (2):
  linux-user: Fix i386 safe-syscall.S
  build: Use $(AS) for optionrom explicitly

 configure                               | 10 +++-------
 linux-user/host/i386/safe-syscall.inc.S | 24 ++++++------------------
 pc-bios/optionrom/Makefile              |  3 +++
 rules.mak                               |  2 +-
 4 files changed, 13 insertions(+), 26 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Qemu-devel] [PATCH 1/2] linux-user: Fix i386 safe-syscall.S
  2016-07-08  4:56 [Qemu-devel] [PATCH 0/2] build fix for clang 3.4 Richard Henderson
@ 2016-07-08  4:56 ` Richard Henderson
  2016-07-08  4:56 ` [Qemu-devel] [PATCH 2/2] build: Use $(AS) for optionrom explicitly Richard Henderson
  1 sibling, 0 replies; 4+ messages in thread
From: Richard Henderson @ 2016-07-08  4:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: alex.bennee, peter.maydell, riku.voipio

Clang insists that "cmp" is ambiguous with a memory destination,
requiring an explicit size suffix.

There was a true error in the use of .cfi_def_cfa_offset in the
epilogue, but changing to use the proper .cfi_adjust_cfa_offset
runs afoul of a clang bug wrt .cfi_restore_state.  Better to
fold the two epilogues so that we don't trigger the bug.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 linux-user/host/i386/safe-syscall.inc.S | 24 ++++++------------------
 1 file changed, 6 insertions(+), 18 deletions(-)

diff --git a/linux-user/host/i386/safe-syscall.inc.S b/linux-user/host/i386/safe-syscall.inc.S
index 766d0de..9e58fc6 100644
--- a/linux-user/host/i386/safe-syscall.inc.S
+++ b/linux-user/host/i386/safe-syscall.inc.S
@@ -69,7 +69,7 @@ safe_syscall_base:
 safe_syscall_start:
 	/* if signal_pending is non-zero, don't do the call */
 	mov	4+16(%esp), %eax	/* signal_pending */
-	cmp	$0, (%eax)
+	cmpl	$0, (%eax)
 	jnz	1f
 	mov	8+16(%esp), %eax	/* syscall number */
 	int	$0x80
@@ -77,16 +77,16 @@ safe_syscall_end:
 	/* code path for having successfully executed the syscall */
 	pop	%ebx
 	.cfi_remember_state
-	.cfi_def_cfa_offset -4
+	.cfi_adjust_cfa_offset -4
 	.cfi_restore ebx
 	pop	%edi
-	.cfi_def_cfa_offset -4
+	.cfi_adjust_cfa_offset -4
 	.cfi_restore edi
 	pop	%esi
-	.cfi_def_cfa_offset -4
+	.cfi_adjust_cfa_offset -4
 	.cfi_restore esi
 	pop	%ebp
-	.cfi_def_cfa_offset -4
+	.cfi_adjust_cfa_offset -4
 	.cfi_restore ebp
 	ret
 
@@ -94,19 +94,7 @@ safe_syscall_end:
 	/* code path when we didn't execute the syscall */
 	.cfi_restore_state
 	mov	$-TARGET_ERESTARTSYS, %eax
-	pop	%ebx
-	.cfi_def_cfa_offset -4
-	.cfi_restore ebx
-	pop	%edi
-	.cfi_def_cfa_offset -4
-	.cfi_restore edi
-	pop	%esi
-	.cfi_def_cfa_offset -4
-	.cfi_restore esi
-	pop	%ebp
-	.cfi_def_cfa_offset -4
-	.cfi_restore ebp
-	ret
+	jmp	safe_syscall_end
 	.cfi_endproc
 
 	.size	safe_syscall_base, .-safe_syscall_base
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Qemu-devel] [PATCH 2/2] build: Use $(AS) for optionrom explicitly
  2016-07-08  4:56 [Qemu-devel] [PATCH 0/2] build fix for clang 3.4 Richard Henderson
  2016-07-08  4:56 ` [Qemu-devel] [PATCH 1/2] linux-user: Fix i386 safe-syscall.S Richard Henderson
@ 2016-07-08  4:56 ` Richard Henderson
  2016-07-09  6:54   ` Alex Bennée
  1 sibling, 1 reply; 4+ messages in thread
From: Richard Henderson @ 2016-07-08  4:56 UTC (permalink / raw)
  To: qemu-devel; +Cc: alex.bennee, peter.maydell, riku.voipio

For clang before 3.5, -fno-integrated-as does not exist,
so the workaround in 5f6f0e27fb24 fails to build.

Use clang's default assembler for linux-user/safe-syscall.S,
and explicitly change to use the system assembler for the
option roms.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 configure                  | 10 +++-------
 pc-bios/optionrom/Makefile |  3 +++
 rules.mak                  |  2 +-
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/configure b/configure
index e9090a0..5ada56d 100755
--- a/configure
+++ b/configure
@@ -368,6 +368,7 @@ else
 fi
 
 ar="${AR-${cross_prefix}ar}"
+as="${AS-${cross_prefix}as}"
 ccas="${CCAS-$cc}"
 cpp="${CPP-$cc -E}"
 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
@@ -4490,13 +4491,6 @@ if test "$fortify_source" != "no"; then
   fi
 fi
 
-#################################################
-# clang does not support the 16-bit assembly for roms
-
-if echo | $ccas -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
-  ccas="$ccas -fno-integrated-as"
-fi
-
 ##########################################
 # check if struct fsxattr is available via linux/fs.h
 
@@ -5515,6 +5509,7 @@ echo "CXX=$cxx" >> $config_host_mak
 echo "OBJCC=$objcc" >> $config_host_mak
 echo "AR=$ar" >> $config_host_mak
 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
+echo "AS=$as" >> $config_host_mak
 echo "CCAS=$ccas" >> $config_host_mak
 echo "CPP=$cpp" >> $config_host_mak
 echo "OBJCOPY=$objcopy" >> $config_host_mak
@@ -5988,6 +5983,7 @@ for rom in seabios vgabios ; do
     config_mak=roms/$rom/config.mak
     echo "# Automatically generated by configure - do not modify" > $config_mak
     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
+    echo "AS=$as" >> $config_mak
     echo "CCAS=$ccas" >> $config_mak
     echo "CC=$cc" >> $config_mak
     echo "BCC=bcc" >> $config_mak
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index ce4852a..2cdda87 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -20,6 +20,9 @@ build-all: multiboot.bin linuxboot.bin kvmvapic.bin
 # suppress auto-removal of intermediate files
 .SECONDARY:
 
+%.o: %.S
+	$(call quiet-command,$(CPP) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o - $< | $(AS) $(ASFLAGS) -o $@,"  AS    $(TARGET_DIR)$@")
+
 %.img: %.o
 	$(call quiet-command,$(LD) $(LDFLAGS_NOPIE) -Ttext 0 -e _start -s -o $@ $<,"  Building $(TARGET_DIR)$@")
 
diff --git a/rules.mak b/rules.mak
index 7d7d83b..ed8e482 100644
--- a/rules.mak
+++ b/rules.mak
@@ -69,7 +69,7 @@ LINK = $(call quiet-command, $(LINKPROG) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o
        $(version-obj-y) $(call extract-libs,$1) $(LIBS),"  LINK  $(TARGET_DIR)$@")
 
 %.o: %.S
-	$(call quiet-command,$(CCAS) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  AS    $(TARGET_DIR)$@")
+	$(call quiet-command,$(CCAS) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  CCAS  $(TARGET_DIR)$@")
 
 %.o: %.cc
 	$(call quiet-command,$(CXX) $(QEMU_INCLUDES) $(QEMU_CXXFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) -c -o $@ $<,"  CXX   $(TARGET_DIR)$@")
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] build: Use $(AS) for optionrom explicitly
  2016-07-08  4:56 ` [Qemu-devel] [PATCH 2/2] build: Use $(AS) for optionrom explicitly Richard Henderson
@ 2016-07-09  6:54   ` Alex Bennée
  0 siblings, 0 replies; 4+ messages in thread
From: Alex Bennée @ 2016-07-09  6:54 UTC (permalink / raw)
  To: Richard Henderson; +Cc: qemu-devel, peter.maydell, riku.voipio


Richard Henderson <rth@twiddle.net> writes:

> For clang before 3.5, -fno-integrated-as does not exist,
> so the workaround in 5f6f0e27fb24 fails to build.
>
> Use clang's default assembler for linux-user/safe-syscall.S,
> and explicitly change to use the system assembler for the
> option roms.
>
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
>  configure                  | 10 +++-------
>  pc-bios/optionrom/Makefile |  3 +++
>  rules.mak                  |  2 +-
>  3 files changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/configure b/configure
> index e9090a0..5ada56d 100755
> --- a/configure
> +++ b/configure
> @@ -368,6 +368,7 @@ else
>  fi
>  
>  ar="${AR-${cross_prefix}ar}"
> +as="${AS-${cross_prefix}as}"
>  ccas="${CCAS-$cc}"
>  cpp="${CPP-$cc -E}"
>  objcopy="${OBJCOPY-${cross_prefix}objcopy}"
> @@ -4490,13 +4491,6 @@ if test "$fortify_source" != "no"; then
>    fi
>  fi
>  
> -#################################################
> -# clang does not support the 16-bit assembly for roms
> -
> -if echo | $ccas -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
> -  ccas="$ccas -fno-integrated-as"
> -fi
> -
>  ##########################################
>  # check if struct fsxattr is available via linux/fs.h
>  
> @@ -5515,6 +5509,7 @@ echo "CXX=$cxx" >> $config_host_mak
>  echo "OBJCC=$objcc" >> $config_host_mak
>  echo "AR=$ar" >> $config_host_mak
>  echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
> +echo "AS=$as" >> $config_host_mak
>  echo "CCAS=$ccas" >> $config_host_mak
>  echo "CPP=$cpp" >> $config_host_mak
>  echo "OBJCOPY=$objcopy" >> $config_host_mak
> @@ -5988,6 +5983,7 @@ for rom in seabios vgabios ; do
>      config_mak=roms/$rom/config.mak
>      echo "# Automatically generated by configure - do not modify" > $config_mak
>      echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
> +    echo "AS=$as" >> $config_mak
>      echo "CCAS=$ccas" >> $config_mak
>      echo "CC=$cc" >> $config_mak
>      echo "BCC=bcc" >> $config_mak
> diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
> index ce4852a..2cdda87 100644
> --- a/pc-bios/optionrom/Makefile
> +++ b/pc-bios/optionrom/Makefile
> @@ -20,6 +20,9 @@ build-all: multiboot.bin linuxboot.bin kvmvapic.bin
>  # suppress auto-removal of intermediate files
>  .SECONDARY:
>  
> +%.o: %.S
> +	$(call quiet-command,$(CPP) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o - $< | $(AS) $(ASFLAGS) -o $@,"  AS    $(TARGET_DIR)$@")
> +
>  %.img: %.o
>  	$(call quiet-command,$(LD) $(LDFLAGS_NOPIE) -Ttext 0 -e _start -s -o $@ $<,"  Building $(TARGET_DIR)$@")
>  
> diff --git a/rules.mak b/rules.mak
> index 7d7d83b..ed8e482 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -69,7 +69,7 @@ LINK = $(call quiet-command, $(LINKPROG) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o
>         $(version-obj-y) $(call extract-libs,$1) $(LIBS),"  LINK  $(TARGET_DIR)$@")
>  
>  %.o: %.S
> -	$(call quiet-command,$(CCAS) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  AS    $(TARGET_DIR)$@")
> +	$(call quiet-command,$(CCAS) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  CCAS  $(TARGET_DIR)$@")
>  
>  %.o: %.cc
>  	$(call quiet-command,$(CXX) $(QEMU_INCLUDES) $(QEMU_CXXFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) -c -o $@ $<,"  CXX   $(TARGET_DIR)$@")

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>

-- 
Alex Bennée

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-07-09  6:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-08  4:56 [Qemu-devel] [PATCH 0/2] build fix for clang 3.4 Richard Henderson
2016-07-08  4:56 ` [Qemu-devel] [PATCH 1/2] linux-user: Fix i386 safe-syscall.S Richard Henderson
2016-07-08  4:56 ` [Qemu-devel] [PATCH 2/2] build: Use $(AS) for optionrom explicitly Richard Henderson
2016-07-09  6:54   ` Alex Bennée

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).