<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Tony,<BR>Looking at the disassembly of /usr/lib/libc.so and /usr/lib/sparcv9/libc.so, both longjmps contain ta  3.<BR>
So how about:<BR>
void *RTStack__SaveRegsInStack(void)<BR>{<BR>  jmp_buf jb;<BR>  if (setjmp(jb))<BR>  {<BR>    longjmp(jb, 1); /* contains ta 3 */<BR>    abort(); /* unreachable */<BR>  }<BR>  else<BR>  {<BR>    return &jb;<BR>  }<BR>}<BR>
 <BR>
Too wasteful?<BR>
 <BR>
 - Jay<BR><BR><BR> <BR>
<HR id=stopSpelling>
From: jay.krell@cornell.edu<BR>To: hosking@cs.purdue.edu<BR>Date: Sun, 22 Nov 2009 00:12:44 +0000<BR>CC: m3devel@elegosoft.com<BR>Subject: Re: [M3devel] SaveRegsInStack<BR><BR>
<STYLE>
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Verdana;}
</STYLE>
SOLsun doesn't like the current source:<BR> <BR>C compiler failed compiling: ../src/runtime/SOLsun/RTStackC.c<BR>new source -> compiling ThreadPThreadC.c<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 310: asm statement illegal outside function<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 316: asm statement illegal outside function<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 317: asm statement illegal outside function<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 325: asm statement illegal outside function<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 326: asm statement illegal outside function<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 327: asm statement illegal outside function<BR>"../src/thread/PTHREAD/ThreadPThreadC.c", line 349: cannot recover from previous<BR><BR> - Jay<BR> <BR>
<HR id=ecxstopSpelling>
From: jay.krell@cornell.edu<BR>To: hosking@cs.purdue.edu<BR>CC: m3devel@elegosoft.com<BR>Subject: RE: [M3devel] SaveRegsInStack<BR>Date: Sat, 21 Nov 2009 23:45:42 +0000<BR><BR>
<STYLE>
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Verdana;}
</STYLE>
(or RTMachineC.c)<BR> <BR> - Jay<BR> <BR>
<HR id=ecxecxstopSpelling>
From: jay.krell@cornell.edu<BR>To: hosking@cs.purdue.edu<BR>Date: Sat, 21 Nov 2009 23:40:03 +0000<BR>CC: m3devel@elegosoft.com<BR>Subject: Re: [M3devel] SaveRegsInStack<BR><BR>
<STYLE>
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Verdana;}
</STYLE>

<DIV> > No, those don't have the desired effect on SPARC.</DIV> <BR>ok. I was somewhat guessing.<BR> <BR> > Why wouldn't SPARC* all have stack walkers?<BR> <BR>Because I'm lazy and doubt anyone cares much about SPARC{32,64}_{LINUX,FREEBSD,NETBSD}, SPARC64_SOLARIS.<BR>? But I can maybe try it at some point.<BR> <BR>I also expect the way to go is use libunwind for nearly all targets, even probably SPARC*.<BR> <BR> > It would be good to have it in one place for *all* SPARC targets.  Where to put it<BR> <BR>How about a new src/runtime/common/RTStackC.c, compiled on all platforms but with #ifdefs (the same #ifdefs as are currently used, but revisiting them at some point, the NETBSD and such seem suspicious).<BR>I think I'll do that shortly.<BR> <BR>There is also TARGET_ARCH defined in the config files.<BR>We could do<BR>if exist(TARGET_ARCH/m3makefile)<BR>  include_dir(TARGET_ARCH)<BR>end<BR> <BR>(similarly there is TARGET_OS).<BR> <BR> - Jay<BR> <BR>
<HR id=ecxecxecxstopSpelling>
From: hosking@cs.purdue.edu<BR>Date: Sat, 21 Nov 2009 17:02:23 -0500<BR>To: jay.krell@cornell.edu<BR>CC: m3devel@elegosoft.com<BR>Subject: Re: [M3devel] SaveRegsInStack<BR><BR>
<DIV><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span>
<DIV style="WORD-WRAP: break-word"><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 12px Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span>
<DIV><SPAN style="FONT-SIZE: medium" class=ecxecxecxecxApple-style-span>On 21 Nov 2009, at 15:38, Jay K wrote:</SPAN></DIV></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></DIV></SPAN></SPAN></DIV>
<DIV><BR class=ecxecxecxecxApple-interchange-newline>
<BLOCKQUOTE><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span>
<DIV style="FONT-FAMILY: Verdana; FONT-SIZE: 10pt" class=ecxecxecxecxhmmessage>Tony, it bugs me that we have three copies of this code.<BR>Would it be reasonable and not very inefficient<BR>and maybe somewhat portable to replace it with<BR>setjmp or getcontext or alloca(1)?<BR></DIV></SPAN></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>No, those don't have the desired effect on SPARC.</DIV><BR>
<BLOCKQUOTE><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span>
<DIV style="FONT-FAMILY: Verdana; FONT-SIZE: 10pt" class=ecxecxecxecxhmmessage> Or can we go back to having RTStack call RTMachine?<BR>(Imagine if SPARC* all had stack walkers, though I<BR>doubt that will happen, other than via libunwind.)<BR></DIV></SPAN></BLOCKQUOTE>
<DIV><BR></DIV>
<DIV>Why wouldn't SPARC* all have stack walkers?  Their stack frames are trivial to unwind.</DIV>
<DIV>I agree that it is annoying to have multiple copies of this code.  It would be good to have it in one place for *all* SPARC targets.  Where to put it?</DIV><BR>
<BLOCKQUOTE><SPAN style="TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Helvetica; WHITE-SPACE: normal; LETTER-SPACING: normal; WORD-SPACING: 0px" class=ecxecxecxecxApple-style-span>
<DIV style="FONT-FAMILY: Verdana; FONT-SIZE: 10pt" class=ecxecxecxecxhmmessage> <BR><BR> - Jay<BR><BR></DIV></SPAN></BLOCKQUOTE></DIV><BR>                                        </body>
</html>