[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

SA_RETART and linux 68k

Greetings!  GCL and its dependent programs (maxima, acl2, axiom) makes
use of a more efficient garbage collection algorithm via mprotecting
pages read only, trapping SIGSEGV on write, reprotecting and marking
the page, and then restarting.  This has been working on m68k for a
long time.  

About a year ago, I noticed however that when the SIGSEGV occurred in
fread, the restart failed, even when (of course) the signal handlers
were setup with SA_RESTART.  memset/memcpy would restart, so I put in
a workaround to zero out the memory before fread, safely triggering
any SIGSEGV if necessary, and this enabled the m68k acl2 build.

I've just updated the package, and the acl2 problem has reappeared.
I'm only guessing at present that the cause is the same.  I'm
investigating on crest.  (kullervo has a lower load, but the disks
with space are not mounted under the unstable dchroot.  Can this be
fixed?) Presuming it is the same or similar, I can put into the GCL
m68k configure headers a cpp redefine of the offending system call or
calls to a stub that will zero out the memory in question first.  I'd
like to do this in a comprehensive way if possible.  I don't know why
fread won't restart after a signal (on m68k only, apparently), or
whether this is a bug or by design, but I'd be most grateful if
someone could provide a comprehensive list of such system calls so I
can fix this once and for all.

Take care,

Camm Maguire			     			camm@enhanced.com
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply to: