Subject: Re: port-mac68k/36848: c++ programs get stalled after a fork
To: None <port-mac68k-maintainer@netbsd.org, gnats-admin@netbsd.org,>
From: Michael L. Hitch <mhitch@lightning.msu.montana.edu>
List: netbsd-bugs
Date: 08/30/2007 20:25:02
The following reply was made to PR port-mac68k/36848; it has been noted by GNATS.
From: "Michael L. Hitch" <mhitch@lightning.msu.montana.edu>
To: gnats-bugs@NetBSD.org
Cc: jmmv@NetBSD.org
Subject: Re: port-mac68k/36848: c++ programs get stalled after a fork
Date: Thu, 30 Aug 2007 13:16:12 -0600 (MDT)
On Wed, 29 Aug 2007, Michael L. Hitch wrote:
>
> It does happen on my amiga, so it would appear to be m68k-specific.
It would also appear to be m68040 specific as well.
With the help of some trap debug code I'm still running with on my amiga,
it appears that a write fault during a casl instruction has the read bit
set in the fault status work, so the m68k trap routines were treating the
fault access as a read.
This is what appears to be happening:
The program forks a child process. The child's process has read-only data
pages until a write access does a COW. The c++ library is now doing a
casl operation somewhere in an ios routine on exit(), and it's trying to
update the value. The trap routine sees it as a read access and leaves
the access to that page as read-only and retries the operation - which
just traps the same way again.
I changed the amiga trap routine to treat the fault on a locked memory
cycle (used by the cas instruction) as a write access, and now the test
program runs on my amiga.
As soon as I can verify my changes to the other m68k trap routines
compiles, and get verification that the change works on another machine,
I'll commit the fixes and request a pullup to 4.0.
--
Michael L. Hitch mhitch@montana.edu
Computer Consultant
Information Technology Center
Montana State University Bozeman, MT USA