Hi Igor,<br><br><div class="gmail_quote">On Thu, Jun 30, 2011 at 11:05 AM, Igor Stasenko <span dir="ltr">&lt;<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
 <br>There are two undefined symbols:<br>
<br>
<br>
Linking C executable results/StackVM.exe<br>
Creating library file: results/libStackVM.dll.a<br>
CMakeFiles/StackVM.dir/objects.a(gcc3x-interp.c.obj): In function `returnAsThrou<br>
ghCallbackContext&#39;:<br>
c:/hudson/workspace/StackWin32/cog/src/vm/gcc3x-interp.c:34699: undefined refere<br>
nce to `siglongjmp&#39;<br>
CMakeFiles/StackVM.dir/objects.a(sqWin32Prefs.c.obj): In function `CreatePrefsMe<br>
nu&#39;:<br>
c:/hudson/workspace/StackWin32/cog/platforms/win32/vm/sqWin32Prefs.c:374: undefi<br>
ned reference to `recordPrimTraceFunc&#39;<br></blockquote><div><br></div><div>You need to generate the following defines at the start of interpreter C file. See e.g. gcc3x-cointerp.c.</div><div><br></div><div>/*</div><div>
 * Define sigsetjmp and siglongjmp to be the most minimal setjmp/longjmp available on the platform.</div><div> */</div><div>#if WIN32</div><div># define sigsetjmp(jb,ssmf) setjmp(jb)</div><div># define siglongjmp(jb,v) longjmp(jb,v)</div>
<div>#else</div><div># define sigsetjmp(jb,ssmf) _setjmp(jb)</div><div># define siglongjmp(jb,v) _longjmp(jb,v)</div><div>#endif </div><div><br></div><div><br></div><div>In Cog setjmp is used a lot to jump form machine code back into the interpreter, so choosing the most minimal setjmp/longjmp is important.  Alas both Win32 and Unix have their own different ideas as to what a minimal setjmp/longjmp is (see sigsetjmp(3) on unix).  In my VMMaker the defines are generated in CoInterpreter class&gt;&gt;preambleCCode and NewspeakInterpreter class&gt;preambleCCode.  Looks like the CoInterpreter one needs moving up to StackInterpreter right?</div>
<div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
<br>
 - siglongjmp<br>
(it is found however in cointerp.c so JIT-flavored VMs don&#39;t have this<br>
problem, but not stack ones)<br>
<br>
<br>
The recordPrimTraceFunc() are used like following:<br>
<br>
#if STACKVM<br>
extern sqInt recordPrimTraceFunc();<br>
#endif<br>
...<br>
#if STACKVM<br>
    if (recordPrimTraceFunc())<br>
      AppendMenu(hMenu, MF_STRING | MF_UNCHECKED, ID_DUMPPRIMLOG,<br>
               TEXT(&quot;Dump recent primitives&quot;));<br>
#endif<br>
<br>
<br>
again, it is defined in cogit.h/.c but obviously not in stack<br>
interpreter, since stack not using cogit.<br>
<br>
Maybe you meant<br>
#if !STACKVM<br>
?<br>
Then it makes sense.<br>
<br>
--<br>
Best regards,<br>
Igor Stasenko AKA sig.<br>
<br></blockquote></div><br><br clear="all"><br>-- <br>best,<div>Eliot</div><br>