I forgot to add that these changes have been obtained from NetBSD.
> CVSROOT: /cvs
> Module name: src
> Changes by: m...@cvs.openbsd.org 2014/01/06 13:27:44
>
> Modified files:
> sys/arch/alpha/alpha: pmap.c trap.c
> sys/arch/alpha/include: pte.h
>
> Log message:
> Put PG_EXEC and PG_FOE into the PG_PROT mask, and make sure the default
> pte protection masks, as initialized in alpha_protection_init(), set PG_FOE
> by default when VM_PROT_EXECUTE is not set.
>
> Also, change pmap_emulate_reference() to only clear PG_FOE if the affected
> pte has executable permission.
>
> This allows various pmap_pte_exec() checks (added to explicitely set PG_FOE)
> to be removed.
>
> All tests of regress/sys/kern/noexec now reliably pass on EV5. EV6 systems
> still see spurious (but no longer 100% reproduceable) failures of the `catch
> a signal' tests, which is likely caused by the effect of mprotect() removing
> execute permission not taking effect correctly, despite PAL IMB being issued
> (and no, this is not caused by the previous pmap_changebit() change), to be
> investigated.