Re: [Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD

2019-03-07 Thread Thomas Huth
On 07/03/2019 15.28, Philippe Mathieu-Daudé wrote:
> Since OpenBSD 6.0 [1], W^X is enforced by default [2].
> TCG requires WX access. Disable W^X if it is available.
> This fixes:
> 
>   # lm32-softmmu/qemu-system-lm32
>   Could not allocate dynamic translator buffer
> 
>   # sysctl kern.wxabort=1
>   kern.wxabort: 0 -> 1
>   # lm32-softmmu/qemu-system-lm32
>   mmap: Not supported
>   Abort trap (core dumped)
>   # gdb -q lm32-softmmu/qemu-system-lm32 qemu-system-lm32.core
>   (gdb) bt
>   #0  0x17e3c156c50a in _thread_sys___syscall () at {standard input}:5
>   #1  0x17e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not 
> available.) at /usr/src/lib/libc/sys/mmap.c:47
>   #2  0x17e17d9abc8b in alloc_code_gen_buffer () at 
> /usr/src/qemu/accel/tcg/translate-all.c:1064
>   #3  0x17e17d9abd04 in code_gen_alloc (tb_size=0) at 
> /usr/src/qemu/accel/tcg/translate-all.c:1112
>   #4  0x17e17d9abe81 in tcg_exec_init (tb_size=0) at 
> /usr/src/qemu/accel/tcg/translate-all.c:1149
>   #5  0x17e17d9897e9 in tcg_init (ms=0x17e45e456800) at 
> /usr/src/qemu/accel/tcg/tcg-all.c:66
>   #6  0x17e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, 
> ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63
>   #7  0x17e17d989312 in configure_accelerator (ms=0x17e45e456800, 
> progname=0x7f7f07b0 "lm32-softmmu/qemu-system-lm32") at 
> /usr/src/qemu/accel/accel.c:111
>   #8  0x17e17d9d8616 in main (argc=1, argv=0x7f7f06b8, 
> envp=0x7f7f06c8) at vl.c:4325
> 
> [1] https://www.openbsd.org/faq/upgrade60.html
> [2] https://undeadly.org/cgi?action=article=20160527203200
> 
> Signed-off-by: Philippe Mathieu-Daudé 
> ---
>  configure | 11 +++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/configure b/configure
> index cefeb8fcce..abfd60923a 100755
> --- a/configure
> +++ b/configure
> @@ -5835,6 +5835,17 @@ if test "$mingw32" = "yes" ; then
>  done
>  fi
>  
> +# Disable OpenBSD W^X if available
> +if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
> +cat > $TMPC < +int main(void) { return 0; }
> +EOF

You can use write_c_skeleton for this instead.

 Thomas




[Qemu-devel] [PATCH v3 2/2] configure: Disable W^X on OpenBSD

2019-03-07 Thread Philippe Mathieu-Daudé
Since OpenBSD 6.0 [1], W^X is enforced by default [2].
TCG requires WX access. Disable W^X if it is available.
This fixes:

  # lm32-softmmu/qemu-system-lm32
  Could not allocate dynamic translator buffer

  # sysctl kern.wxabort=1
  kern.wxabort: 0 -> 1
  # lm32-softmmu/qemu-system-lm32
  mmap: Not supported
  Abort trap (core dumped)
  # gdb -q lm32-softmmu/qemu-system-lm32 qemu-system-lm32.core
  (gdb) bt
  #0  0x17e3c156c50a in _thread_sys___syscall () at {standard input}:5
  #1  0x17e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not 
available.) at /usr/src/lib/libc/sys/mmap.c:47
  #2  0x17e17d9abc8b in alloc_code_gen_buffer () at 
/usr/src/qemu/accel/tcg/translate-all.c:1064
  #3  0x17e17d9abd04 in code_gen_alloc (tb_size=0) at 
/usr/src/qemu/accel/tcg/translate-all.c:1112
  #4  0x17e17d9abe81 in tcg_exec_init (tb_size=0) at 
/usr/src/qemu/accel/tcg/translate-all.c:1149
  #5  0x17e17d9897e9 in tcg_init (ms=0x17e45e456800) at 
/usr/src/qemu/accel/tcg/tcg-all.c:66
  #6  0x17e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, 
ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63
  #7  0x17e17d989312 in configure_accelerator (ms=0x17e45e456800, 
progname=0x7f7f07b0 "lm32-softmmu/qemu-system-lm32") at 
/usr/src/qemu/accel/accel.c:111
  #8  0x17e17d9d8616 in main (argc=1, argv=0x7f7f06b8, 
envp=0x7f7f06c8) at vl.c:4325

[1] https://www.openbsd.org/faq/upgrade60.html
[2] https://undeadly.org/cgi?action=article=20160527203200

Signed-off-by: Philippe Mathieu-Daudé 
---
 configure | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/configure b/configure
index cefeb8fcce..abfd60923a 100755
--- a/configure
+++ b/configure
@@ -5835,6 +5835,17 @@ if test "$mingw32" = "yes" ; then
 done
 fi
 
+# Disable OpenBSD W^X if available
+if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
+cat > $TMPC <