Hi Frank,<br><br><div class="gmail_quote">On Thu, Jan 31, 2013 at 1:06 PM, Frank Shearar <span dir="ltr">&lt;<a href="mailto:frank.shearar@gmail.com" target="_blank">frank.shearar@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">
Hi Eliot,<br>
<br>
What can I do to help with this? Did making that custom sqUnixMemory.c<br>
give you enough info to solve the issue, or do you need me to write<br>
that test program?<br></blockquote><div><br></div><div>I already integrated the relevant change, moving pageSize and pageMask outside of HAVE_MMAP.  So you should be able to build from the Cog sources directly.  Apologies for not giving feedback.</div>
<div><br></div><div>cheers!</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
frank<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On 13 January 2013 13:25, Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt; wrote:<br>
&gt; Hi Eliot,<br>
&gt;<br>
&gt; Given that the custom sqUnixMemory.c compiled successfully on FreeBSD,<br>
&gt; do you have sufficient information to fix the issue, or do you still<br>
&gt; need me to write a test program for mprotect?<br>
&gt;<br>
&gt; frank<br>
&gt;<br>
&gt; On 11 January 2013 18:18, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Hi Frank,<br>
&gt;&gt;<br>
&gt;&gt;     from configure&#39;s output can you tell if does mprotect work?  If not,<br>
&gt;&gt; could you write a test program to test mprotect?  I expect something like<br>
&gt;&gt; the attached is appropriate.  Let me know.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Jan 11, 2013 at 3:29 AM, Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; OK, the -E version of the source looks like this:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; void<br>
&gt;&gt;&gt; sqMakeMemoryExecutableFromTo(unsigned long startAddr, unsigned long<br>
&gt;&gt;&gt; endAddr)<br>
&gt;&gt;&gt; {<br>
&gt;&gt;&gt;  unsigned long firstPage = ((startAddr)&amp;pageMask);<br>
&gt;&gt;&gt;  if (mprotect((void *)firstPage,<br>
&gt;&gt;&gt;      endAddr - firstPage + 1,<br>
&gt;&gt;&gt;      PROT_READ | PROT_WRITE | PROT_EXEC) &lt; 0)<br>
&gt;&gt;&gt;   perror(&quot;mprotect(x,y,PROT_READ | PROT_WRITE | PROT_EXEC)&quot;);<br>
&gt;&gt;&gt; }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; but now I see no definition for pageMask! grepping just shows this:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; $ grep pageMask foo.i<br>
&gt;&gt;&gt;  unsigned long firstPage = ((startAddr)&amp;pageMask);<br>
&gt;&gt;&gt;  unsigned long firstPage = ((startAddr)&amp;pageMask);<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; which is the problem. So I think I don&#39;t HAVE_MMAP defined. And if I<br>
&gt;&gt;&gt; look very carefully at configure&#39;s output, I see this:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; checking for working mmap... Segmentation fault<br>
&gt;&gt;&gt; no<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; frank<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 10 January 2013 23:59, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Hi Frank,<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;     preprocess it using -P or -E and see what you get.  i.e. run the<br>
&gt;&gt;&gt; &gt; compiler with all the same flags (except -c and/or -o) but suppling either<br>
&gt;&gt;&gt; &gt; -E or -P (if -P pipe the result into foo.i).  Then you can see what source<br>
&gt;&gt;&gt; &gt; the compiler is actually compiling.  Then grep for pageMask in the result.<br>
&gt;&gt;&gt; &gt; Let&#39;s see what mangling is actually happening.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; HTH<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; On Thu, Jan 10, 2013 at 2:21 PM, Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; I didn&#39;t express myself properly. pageMask occurs in a #define (line<br>
&gt;&gt;&gt; &gt;&gt; 293), but its definition is on line 100. But what confuses me is that<br>
&gt;&gt;&gt; &gt;&gt; since it&#39;s outside the function definition, it should surely be<br>
&gt;&gt;&gt; &gt;&gt; visible in the function. But the error I get says that on line 298,<br>
&gt;&gt;&gt; &gt;&gt; &quot;error: &#39;pageMask&#39; undeclared (first use in this function)&quot;.<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; frank<br>
&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; On 10 January 2013 21:43, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; Hi Frank,<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;     where&#39;s the #define of pageMask?  There shouldn&#39;t be one<br>
&gt;&gt;&gt; &gt;&gt; &gt; pageMask is an unsigned int.  i.e.<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; McStalker.oscogvm$ grep -n pageMask platforms/unix/vm/*<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:100:static unsigned int pageMask =<br>
&gt;&gt;&gt; &gt;&gt; &gt; 0;<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:102:#define valign(x)  ((x) &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; pageMask)<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:123:  pageMask= ~(pageSize - 1);<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:125:  DPRINTF((&quot;uxAllocateMemory:<br>
&gt;&gt;&gt; &gt;&gt; &gt; pageSize 0x%x (%d), mask 0x%x\n&quot;, pageSize, pageSize, pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:178:      assert(0 == (newDelta &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; ~pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:179:      assert(0 == (newSize  &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; ~pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:196:     assert(0 == (heapSize  &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; ~pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:213:      assert(0 == (newDelta &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; ~pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:214:      assert(0 == (newSize  &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; ~pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:231:     assert(0 == (heapSize  &amp;<br>
&gt;&gt;&gt; &gt;&gt; &gt; ~pageMask));<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:293:# define<br>
&gt;&gt;&gt; &gt;&gt; &gt; roundDownToPageBoundary(v) ((v)&amp;pageMask)<br>
&gt;&gt;&gt; &gt;&gt; &gt; platforms/unix/vm/sqUnixMemory.c:294:# define<br>
&gt;&gt;&gt; &gt;&gt; &gt; roundUpToPageBoundary(v) (((v)+pageSize-1)&amp;pageMask)<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; On Thu, Jan 10, 2013 at 1:40 PM, Frank Shearar<br>
&gt;&gt;&gt; &gt;&gt; &gt; &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; First, thanks Eliot for fixing up the UUID plugin.<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; With that fixed, the next error I get when compiling (32 bit) on<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; FreeBSD is this:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; sqUnixMemory.c<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; /usr/home/jenkins/workspace/CogVM-FreeBSD/target/Squeak-vm-unix-4.6.0-Cog-2664-unofficial-src/platforms/unix/vm/sqUnixMemory.c:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; In function &#39;sqMakeMemoryExecutableFromTo&#39;:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; /usr/home/jenkins/workspace/CogVM-FreeBSD/target/Squeak-vm-unix-4.6.0-Cog-2664-unofficial-src/platforms/unix/vm/sqUnixMemory.c:298:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; error: &#39;pageMask&#39; undeclared (first use in this function)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; The line number looks a bit wrong, because pageMask is in a #define<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; on<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; line 293. (Ah, it&#39;s because line 298 uses the #define.) At any rate,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; the relevant function + context looks like this:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; #if COGVM<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; # define roundDownToPageBoundary(v) ((v)&amp;pageMask)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; # define roundUpToPageBoundary(v) (((v)+pageSize-1)&amp;pageMask)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; void<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; sqMakeMemoryExecutableFromTo(unsigned long startAddr, unsigned long<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; endAddr)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; {<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;         unsigned long firstPage =<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; roundDownToPageBoundary(startAddr);<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;         if (mprotect((void *)firstPage,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;                                  endAddr - firstPage + 1,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;                                  PROT_READ | PROT_WRITE | PROT_EXEC)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; &lt; 0)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;                 perror(&quot;mprotect(x,y,PROT_READ | PROT_WRITE |<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; PROT_EXEC)&quot;);<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; }<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; void<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; sqMakeMemoryNotExecutableFromTo(unsigned long startAddr, unsigned<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; long endAddr)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; {<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;         unsigned long firstPage =<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; roundDownToPageBoundary(startAddr);<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;         if (mprotect((void *)firstPage,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;                                  endAddr - firstPage + 1,<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;                                  PROT_READ | PROT_WRITE) &lt; 0)<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;                 perror(&quot;mprotect(x,y,PROT_READ | PROT_WRITE)&quot;);<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; }<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; #endif /* COGVM */<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; A bit confusing, given that pageMask is declared on line 100, as<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; whatever C calls a top level form. A global?<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; What can I do to make things work?<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; The full ouput&#39;s viewable here:<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; <a href="http://squeakci.org/job/CogVM-FreeBSD/13/console" target="_blank">http://squeakci.org/job/CogVM-FreeBSD/13/console</a><br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;&gt; frank<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt;&gt; &gt;&gt; &gt; best,<br>
&gt;&gt;&gt; &gt;&gt; &gt; Eliot<br>
&gt;&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; --<br>
&gt;&gt;&gt; &gt; best,<br>
&gt;&gt;&gt; &gt; Eliot<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; best,<br>
&gt;&gt; Eliot<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div>