MPS issue job003301

TitleBogus assertion iswrite == 0 || iswrite == 1 on Windows
Statusclosed
Priorityessential
Assigned userRichard Brooksby
OrganizationRavenbrook
DescriptionAn assertion occurs in protw3.c when a barrier hit occurs.
AnalysisThe assertion is checking the expected values for the kind of exception that's happened: read, or write. In this case it seems to be an execute exception. There's some evidence that this behaviour changed in Windows at some point (see "Never had any problems before"). Configura worked around it by ignoring that particular assertion, but we need to investigate it and correct our assumptions about the exception types we receive. Or perhaps we're setting the protections incorrectly.

We should count execution as hitting the read barrier, because there are some object formats that mix instructions and fixable pointers (as part of load instructions). Therefore executing the code is reading these pointers into registers.
How foundcustomer
Evidencehttp://info.ravenbrook.com/mail/2010/12/20/14-46-59/0/ et seq.
http://info.ravenbrook.com/mail/2010/12/20/17-02-15/0/
http://info.ravenbrook.com/mail/2010/12/28/10-04-09/0/ "Never had any problems before"
http://info.ravenbrook.com/mail/2011/05/03/09-23-41/0/ "disabled the assertion"
Observed in1.110.0
Created byRichard Brooksby
Created on2012-09-21 21:30:11
Last modified byGareth Rees
Last modified on2014-03-07 10:10:15
History2012-09-12 RB Created after observing a workaround in CVM and observing it being used during a debugging session.

Fixes

Change Effect Date User Description
179620 closed 2012-09-21 23:13:27 Richard Brooksby Handling execution exception as a read barrier hit on Windows.