[M3devel] pthreads on FreeBSD, was: endless exception loop on FreeBSD

Tony Hosking hosking at cs.purdue.edu
Sun Dec 23 16:57:29 CET 2007


Ah!  Lights turning on in my head...

It is probably the case that you have neglected to tell the compiler  
to avoid using global exception information.  You need to set  
Global_handler_stack FALSE in m3middle/src/Target.m3 for the pthreads- 
based targets.

On Dec 23, 2007, at 10:36 AM, Olaf Wagner wrote:

>>> On Dec 21, 2007, at 7:22 AM, Olaf Wagner wrote:
>>>
>>>> I'm trying to add pthread support to the FreeBSD4 platform.
>>>> My first tentative additions now lead to endless exception loops
>>>> once any error is encountered until the stack overflows.
>>>>
>>>> Does anybody know what's wrong here? I'm not aware that I have
>>>> changed anything in this area.
>>>
>> I seems that I have been linking against a non-reentrant libc. I can
>> now get a little
>> farther:
>>
>> % ./m3-sys/cm3/FreeBSD4/cm3 -help @M3debugthreads
>> Stopping from act=0x8a93500
>> Stopping act=0x8a93b80
>> Stopped act=0x8a93b80
>> Stopped from act=0x8a93500
>> Processing act=0x8a93500
>> Processing act=0x8a93b80
>> Starting from act=0x8a93500
>> Starting act=0x8a93b80
>> Started act=0x8a93b80
>> Started from act=0x8a93500
>> Stopping from act=0x8a93500
>> Stopping act=0x8a93b80
>> Stopped act=0x8a93b80
>> Stopped from act=0x8a93500
>> Processing act=0x8a93500
>> Processing act=0x8a93b80
>> Starting from act=0x8a93500
>> Starting act=0x8a93b80
>> Started act=0x8a93b80
>> Started from act=0x8a93500
>> CStatus failed with errno 2
>>
>>
>> ***
>> *** runtime error:
>> ***    Unhandled exception: OSError.E
>> ***    file "../src/os/POSIX/OSErrorPosix.m3", line 50
>> ***
>>
>> Abort trap (core dumped)
>>
>> This is the compiler trying to locate cm3.cfg at different locations.
>> It doesn't find it and an OSError.E is raised, which should get  
>> caught
>> in M3File.IsReadable, but isn't. So it seems exception handling is
>> broken as soon as I use system threads. Any ideas on this one?
>
> Some additional information:
>
> It is really only the PTHREAD setting in m3core/src/thread/m3makefile
> which makes exceptions fail. If I change it and compile everything  
> again,
> I get this output from cm3:
>
> % ./m3-sys/cm3/FreeBSD4/cm3 -help @M3debugthreads
> DetermineContext: oldSP = 0xbfbfe74c
> modelSP:    0xbfbfe70c
> oldSP:      0xbfbfe74c
> frame size: 64
> CStatus failed with errno 2
> CStatus failed with errno 2
> CStatus failed with errno 2
> CStatus failed with errno 2
> CStatus failed with errno 2
> CStatus failed with errno 2
> Critical Mass Modula-3 version d5.5.0
>   last updated: 2007-12-17
>   configuration: /usr/local/cm3/bin/cm3.cfg
> [...]
>
> So all OSError.E exceptions for stat failures are caught, and there
> are no thread switches at the start of the compiler; it only sets
> up the model frame for userlevel threads.
> In contrast, system level pthreads show much activity at the start
> (why?), and the first exception terminates the compiler.
>
> I still haven't got a good explanation for this. Unfortunately,
> the FreeBSD gdb debugger does not really seem to cope well with  
> threaded
> programs... All interesting information always is unrecoverable.
>
> Olaf
> -- 
> Olaf Wagner -- elego Software Solutions GmbH
>                Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin,  
> Germany
> phone: +49 30 23 45 86 96  mobile: +49 177 2345 869  fax: +49 30 23  
> 45 86 95
>    http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz:  
> Berlin
> Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr:  
> DE163214194
>




More information about the M3devel mailing list