pass -z wxneeded or -Wl,-zwxneeded for linking on OpenBSD
authorKarel Gardas <karel.gardas@centrum.cz>
Sat, 13 Aug 2016 16:49:53 +0000 (18:49 +0200)
committerKarel Gardas <karel.gardas@centrum.cz>
Mon, 22 Aug 2016 14:13:52 +0000 (16:13 +0200)
Summary:
This patch fixes issue with abort in GHCi on OpenBSD current
as of Aug 12 2016. The OpenBSD is more and more strict about usage
of writable and executable memory. Programs/applications which
requires such functionality need to be linked with -z wxneeded linker
flag and need to be run from the file-system mounted with wxallowed
mount option. If either of those options in not met, then problematic
program/application usually fail on some mmap/mprotect call which fail.

Reviewers: bgamari, austin, hvr

Subscribers: thomie, erikd

Differential Revision: https://phabricator.haskell.org/D2454

aclocal.m4

index ce8944c..df9d420 100644 (file)
@@ -653,6 +653,13 @@ AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
         $5="$$5 -D_THREAD_SAFE"
         ;;
 
+    x86_64-*-openbsd*)
+        # We need -z wxneeded at least to link ghc-stage2 to workaround
+        # W^X issue in GHCi on OpenBSD current (as of Aug 2016)
+        $3="$$3 -Wl,-zwxneeded"
+        $4="$$4 -z wxneeded"
+        ;;
+
     esac
 
     # If gcc knows about the stack protector, turn it off.