[M3commit] CVS Update: cm3

Tony Hosking hosking at cs.purdue.edu
Sun May 9 01:27:11 CEST 2010


I think we can argue that a programmer should program around this using TRY...FINALLY (i.e., even if they used FloatMode).

So, I think we are safe with jmpbuf instead of sigjmpbuf.

Antony Hosking | Associate Professor | Computer Science | Purdue University
305 N. University Street | West Lafayette | IN 47907 | USA
Office +1 765 494 6001 | Mobile +1 765 427 5484




On 8 May 2010, at 18:56, Jay K wrote:

> 
> Is "proper" saving/restoring as much as we can think of, or is it fast, or is it matching Ada and C++, or .. ?
> Ada and C++ (gnat and g++) have often/historically used setjmp/longjmp.
>   configure -enable-sjlj-exceptions
> It might be interesting to see if they try to avoid the signal mask versions when they use setjmp/longjmp.
> Lately they use table-based unwinding on platforms that they can -- which is to say, I *really* doubt
> they save/restore the signal mask, but they might.
> 
> 
>  - Jay
> 
> ----------------------------------------
>> Subject: Re: [M3commit] CVS Update: cm3
>> From: hosking at cs.purdue.edu
>> Date: Sat, 8 May 2010 18:51:18 -0400
>> CC: jkrell at elego.de; m3commit at elegosoft.com
>> To: jay.krell at cornell.edu
>> 
>> 
>> 
>> On 8 May 2010, at 18:38, Jay K wrote:
>> 
>>> Or, understood, you really think we might throw around a signal mask change?
>> 
>> It's possible.
>> 
>>> Realize also that sigsetjmp or setjmp, whichever we use, is called incredibly often, and sigsetjmp is likely
>>> much much slower. Also notice..this I'll have to check...have we ever called sigsetjmp?
>>> Well, no, I doubt it. But maybe setjmp vs. _setjmp.
>>> Again though, this can be significantly slow.
>>> 
>>> 
>>> Ultimately as well...see..I started this email without a firm opinion, but now I'm "firming" toward the change I made.
>>> Consider C++ exceptions. Consider libunwind. Consider the SPARC stack walker (which I have to look at).
>>> Do they save/restore signal masks? I doubt it. Maybe. We can look into it. But I doubt it.
>> 
>> We should confirm.
>> 
>>> Raising an exception can indeed by slow. But entering a function with finally (or destructors) should not be overly so.
>> 
>> Ultimately, we should use proper stack unwinding wherever possible.
>> 
>>> 
>>> 
>>> - Jay
>>> 
>>> ----------------------------------------
>>>> From: hosking at cs.purdue.edu
>>>> Date: Sat, 8 May 2010 18:28:36 -0400
>>>> To: jkrell at elego.de
>>>> CC: m3commit at elegosoft.com
>>>> Subject: Re: [M3commit] CVS Update: cm3
>>>> 
>>>> Ah, now I remember. sigjmpbuf is important for unwinding on exception to make sure that if we unwind through a frame where the programmer changed the signal mask that we also restore the signal mask of the caller. I think you also probably break things like FloatMode by not restoring the signal mask properly.
>>>> 
>>>> On 9 May 2010, at 00:09, Jay Krell wrote:
>>>> 
>>>>> CVSROOT: /usr/cvs
>>>>> Changes by: jkrell at birch. 10/05/09 00:09:58
>>>>> 
>>>>> Modified files:
>>>>> cm3/m3-sys/m3middle/src/: Target.i3 Target.m3
>>>>> 
>>>>> Log message:
>>>>> add SPARC32_SOLARIS
>>>>> 
>>>>> correct jmpbuf sizes for I386_SOLARIS, AMD64_SOLARIS
>>>>> notice again that jmpbuf is much much smaller than sigjmpbuf,
>>>>> and this is jmpbuf; specifically:
>>>>> I386_SOLARIS jmpbuf 40 bytes with 4 align
>>>>> AMD64_SOLARIS jmpbuf 64 bytes with 8 align
>>>>> I386_SOLARIS sigjmpbuf 512 bytes with 4 align
>>>>> AMD64_SOLARIS sigjmpbuf 1024 bytes with 8 align
>>>>> 
>>>>> remove some level of heap allocation of calling conventions
>>>>> 
>>>>> accept all calling conventions for all targets
>>>>> Only NT386 has calling conventions, and it *highly* likely
>>>>> the only target ever to have them, therefore the mechanism
>>>>> does not need to be further generalized. (MIPS32 has two
>>>>> ABIs, but those will probably be two targets)
>>>>> This might let us save some unnecessary forking of *.i3 files.
>>>>> The initialization here can be further streamlined.
>>>>> 
>>>>> shrink SOLgnu/SOLsun from sigjmpbuf to jmpbuf
>>>>> I'm not sure we use this though since we have a stack walker.
>>>>> fix SPARC64_SOLARIS too to be smaller
>>>>> 
>>>>> SPARC32_SOLARIS
>>>>> jmpbuf size: 48
>>>>> sigjmpbuf size: 76
>>>>> alignment: 4 4
>>>>> 
>>>>> SPARC64_SOLARIS
>>>>> jmpbuf size: 96
>>>>> sigjmpbuf size: 152
>>>>> alignment: 8 8
>>>> 
>>> 
>> 
> 		 	   		  

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3commit/attachments/20100508/9df8c30a/attachment-0002.html>


More information about the M3commit mailing list