Title | Bogus assertion iswrite == 0 || iswrite == 1 on Windows |
Status | closed |
Priority | essential |
Assigned user | Richard Brooksby |
Organization | Ravenbrook |
Description | An assertion occurs in protw3.c when a barrier hit occurs. |
Analysis | The 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 found | customer |
Evidence | http://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 in | 1.110.0 |
Created by | Richard Brooksby |
Created on | 2012-09-21 21:30:11 |
Last modified by | Gareth Rees |
Last modified on | 2014-03-07 10:10:15 |
History | 2012-09-12 RB Created after observing a workaround in CVM and observing it being used during a debugging session. |
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. |