From: Matthias Kilian Subject: Re: lang/polyml: fix (stupid because needless) W^X violation To: Daniel Dickman Cc: ports@openbsd.org Date: Wed, 16 Jul 2025 20:23:09 +0200 Hi, On Tue, Jul 15, 2025 at 10:35:19PM -0400, Daniel Dickman wrote: > On Wed, 16 Jul 2025, Stuart Henderson wrote: > > > fwiw, we '#if 0'-out the similar test in libffi. Maybe others too. > > Then this would be my proposed diff. > > Now actually tested and seemed to work here. Much nicer than my diff. ok kili@ > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/lang/polyml/Makefile,v > diff -u -p -u -r1.1.1.1 Makefile > --- Makefile 12 Jun 2025 11:09:28 -0000 1.1.1.1 > +++ Makefile 16 Jul 2025 02:32:37 -0000 > @@ -6,6 +6,7 @@ COMMENT = Poly/ML implementation of stan > GH_ACCOUNT = polyml > GH_PROJECT = polyml > GH_TAGNAME = v5.9.1 > +REVISION = 0 > > USE_NOEXECONLY = Yes > USE_NOBTCFI = Yes > Index: patches/patch-libpolyml_osmemunix_cpp > =================================================================== > RCS file: patches/patch-libpolyml_osmemunix_cpp > diff -N patches/patch-libpolyml_osmemunix_cpp > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-libpolyml_osmemunix_cpp 16 Jul 2025 02:32:37 -0000 > @@ -0,0 +1,33 @@ > +Hard code the W^X code path on OpenBSD since actually > +selecting this at run-time isn't so straightforward. > + > +Index: libpolyml/osmemunix.cpp > +--- libpolyml/osmemunix.cpp.orig > ++++ libpolyml/osmemunix.cpp > +@@ -159,6 +159,9 @@ bool OSMem::Initialise(enum _MemUsage usage) > + { > + memUsage = usage; > + pageSize = getpagesize(); > ++#ifdef __OpenBSD__ > ++ wxFix = WXFixDualArea; > ++#else > + if (usage != UsageExecutableCode) > + wxFix = WXFixNone; > + else > +@@ -177,7 +180,7 @@ bool OSMem::Initialise(enum _MemUsage usage) > + #endif > + if (test == MAP_FAILED) > + { > +- if (errno != ENOTSUP && errno != EACCES) // Fails with ENOTSUPP on OpenBSD and EACCES in SELinux. > ++ if (errno != ENOTSUP && errno != EACCES) // Fails with ENOTSUP on OpenBSD and EACCES in SELinux. > + return false; > + // Check that read-write works. > + test = mmap(0, pageSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); > +@@ -188,6 +191,7 @@ bool OSMem::Initialise(enum _MemUsage usage) > + if (test != MAP_FAILED) > + munmap(FIXTYPE test, pageSize); > + } > ++#endif > + > + if (wxFix == WXFixDualArea) > + {