Message ID | 20190125192719.15339-2-philmd@redhat.com |
---|---|
State | New |
Headers | show |
Series | OpenBSD fixes | expand |
On 2019-01-25 20:27, 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 0x000017e3c156c50a in _thread_sys___syscall () at {standard input}:5 > #1 0x000017e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not available.) at /usr/src/lib/libc/sys/mmap.c:47 > #2 0x000017e17d9abc8b in alloc_code_gen_buffer () at /usr/src/qemu/accel/tcg/translate-all.c:1064 > #3 0x000017e17d9abd04 in code_gen_alloc (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1112 > #4 0x000017e17d9abe81 in tcg_exec_init (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1149 > #5 0x000017e17d9897e9 in tcg_init (ms=0x17e45e456800) at /usr/src/qemu/accel/tcg/tcg-all.c:66 > #6 0x000017e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63 > #7 0x000017e17d989312 in configure_accelerator (ms=0x17e45e456800, progname=0x7f7fffff07b0 "lm32-softmmu/qemu-system-lm32") at /usr/src/qemu/accel/accel.c:111 > #8 0x000017e17d9d8616 in main (argc=1, argv=0x7f7fffff06b8, envp=0x7f7fffff06c8) at vl.c:4325 > > [1] https://www.openbsd.org/faq/upgrade60.html > [2] https://undeadly.org/cgi?action=article&sid=20160527203200 > > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > configure | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/configure b/configure > index b18281c61f..f6acc028a7 100755 > --- a/configure > +++ b/configure > @@ -5795,6 +5795,17 @@ if test "$mingw32" = "yes" ; then > done > fi > > +# Disable W^X if available I'd like to suggest to mention OpenBSD in the comment. > +if test "$tcg" = "yes" -a "$targetos" = "OpenBSD"; then > + cat > $TMPC <<EOF > + int main(void) { return 0; } > +EOF > + wx_ldflags="-Wl,-z,wxneeded" > + if compile_prog "" "$wx_ldflags"; then > + QEMU_LDFLAGS="$QEMU_LDFLAGS -Wl,-z,wxneeded" Why do you introduce the wx_ldflags variable above, just to use it one time? I'd suggest to either use it in the QEMU_LDFLAGS line, too, or to get rid of the variable completely and always use -Wl,-z,wxneeded directly. Thomas > + fi > +fi > + > qemu_confdir=$sysconfdir$confsuffix > qemu_moddir=$libdir$confsuffix > qemu_datadir=$datadir$confsuffix
On 1/28/19 9:43 AM, Thomas Huth wrote: > On 2019-01-25 20:27, 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 0x000017e3c156c50a in _thread_sys___syscall () at {standard input}:5 >> #1 0x000017e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not available.) at /usr/src/lib/libc/sys/mmap.c:47 >> #2 0x000017e17d9abc8b in alloc_code_gen_buffer () at /usr/src/qemu/accel/tcg/translate-all.c:1064 >> #3 0x000017e17d9abd04 in code_gen_alloc (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1112 >> #4 0x000017e17d9abe81 in tcg_exec_init (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1149 >> #5 0x000017e17d9897e9 in tcg_init (ms=0x17e45e456800) at /usr/src/qemu/accel/tcg/tcg-all.c:66 >> #6 0x000017e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63 >> #7 0x000017e17d989312 in configure_accelerator (ms=0x17e45e456800, progname=0x7f7fffff07b0 "lm32-softmmu/qemu-system-lm32") at /usr/src/qemu/accel/accel.c:111 >> #8 0x000017e17d9d8616 in main (argc=1, argv=0x7f7fffff06b8, envp=0x7f7fffff06c8) at vl.c:4325 >> >> [1] https://www.openbsd.org/faq/upgrade60.html >> [2] https://undeadly.org/cgi?action=article&sid=20160527203200 >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> --- >> configure | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/configure b/configure >> index b18281c61f..f6acc028a7 100755 >> --- a/configure >> +++ b/configure >> @@ -5795,6 +5795,17 @@ if test "$mingw32" = "yes" ; then >> done >> fi >> >> +# Disable W^X if available > > I'd like to suggest to mention OpenBSD in the comment. Good idea. >> +if test "$tcg" = "yes" -a "$targetos" = "OpenBSD"; then >> + cat > $TMPC <<EOF >> + int main(void) { return 0; } >> +EOF >> + wx_ldflags="-Wl,-z,wxneeded" >> + if compile_prog "" "$wx_ldflags"; then >> + QEMU_LDFLAGS="$QEMU_LDFLAGS -Wl,-z,wxneeded" > > Why do you introduce the wx_ldflags variable above, just to use it one > time? I'd suggest to either use it in the QEMU_LDFLAGS line, too, or to > get rid of the variable completely and always use -Wl,-z,wxneeded directly. I did not notice :) I'll remove the variable to avoid creating variables used once. Thanks! Phil. > > Thomas > >> + fi >> +fi >> + >> qemu_confdir=$sysconfdir$confsuffix >> qemu_moddir=$libdir$confsuffix >> qemu_datadir=$datadir$confsuffix
diff --git a/configure b/configure index b18281c61f..f6acc028a7 100755 --- a/configure +++ b/configure @@ -5795,6 +5795,17 @@ if test "$mingw32" = "yes" ; then done fi +# Disable W^X if available +if test "$tcg" = "yes" -a "$targetos" = "OpenBSD"; then + cat > $TMPC <<EOF + int main(void) { return 0; } +EOF + wx_ldflags="-Wl,-z,wxneeded" + if compile_prog "" "$wx_ldflags"; then + QEMU_LDFLAGS="$QEMU_LDFLAGS -Wl,-z,wxneeded" + fi +fi + qemu_confdir=$sysconfdir$confsuffix qemu_moddir=$libdir$confsuffix qemu_datadir=$datadir$confsuffix
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 0x000017e3c156c50a in _thread_sys___syscall () at {standard input}:5 #1 0x000017e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not available.) at /usr/src/lib/libc/sys/mmap.c:47 #2 0x000017e17d9abc8b in alloc_code_gen_buffer () at /usr/src/qemu/accel/tcg/translate-all.c:1064 #3 0x000017e17d9abd04 in code_gen_alloc (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1112 #4 0x000017e17d9abe81 in tcg_exec_init (tb_size=0) at /usr/src/qemu/accel/tcg/translate-all.c:1149 #5 0x000017e17d9897e9 in tcg_init (ms=0x17e45e456800) at /usr/src/qemu/accel/tcg/tcg-all.c:66 #6 0x000017e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800, ms=0x17e45e456800) at /usr/src/qemu/accel/accel.c:63 #7 0x000017e17d989312 in configure_accelerator (ms=0x17e45e456800, progname=0x7f7fffff07b0 "lm32-softmmu/qemu-system-lm32") at /usr/src/qemu/accel/accel.c:111 #8 0x000017e17d9d8616 in main (argc=1, argv=0x7f7fffff06b8, envp=0x7f7fffff06c8) at vl.c:4325 [1] https://www.openbsd.org/faq/upgrade60.html [2] https://undeadly.org/cgi?action=article&sid=20160527203200 Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- configure | 11 +++++++++++ 1 file changed, 11 insertions(+)