I've installed OpenBSD 3.6 on a spare disc and found out the problem. It seems that OpenBSD generates a SIGSEGV when Poly writes to a read-only location whereas FreeBSD generates a SIGBUS. Around line 1531 in i386-dep.c there is a line that says something like
isAccess = sig == SIGBUS;
This needs to be changed to
isAccess = sig == SIGBUS || sig == SIGSEGV;
This seems to work. I will update the development sources to include this and a few other changes I made to get it to compile. I had to change floatingpoint.h to ieeefp.h (this works on FreeBSD 5.3) but I think the other changes are already in the development sources.
Regards, David.