[Vm-dev] Compiling Cog on FreeBSD

Eliot Miranda eliot.miranda at gmail.com
Thu Jan 10 21:43:19 UTC 2013


Hi Frank,

    where's the #define of pageMask?  There shouldn't be one  pageMask is
an unsigned int.  i.e.

McStalker.oscogvm$ grep -n pageMask platforms/unix/vm/*
platforms/unix/vm/sqUnixMemory.c:100:static unsigned int pageMask = 0;
platforms/unix/vm/sqUnixMemory.c:102:#define valign(x)  ((x) & pageMask)
platforms/unix/vm/sqUnixMemory.c:123:  pageMask= ~(pageSize - 1);
platforms/unix/vm/sqUnixMemory.c:125:  DPRINTF(("uxAllocateMemory: pageSize
0x%x (%d), mask 0x%x\n", pageSize, pageSize, pageMask));
platforms/unix/vm/sqUnixMemory.c:178:      assert(0 == (newDelta &
~pageMask));
platforms/unix/vm/sqUnixMemory.c:179:      assert(0 == (newSize  &
~pageMask));
platforms/unix/vm/sqUnixMemory.c:196:     assert(0 == (heapSize  &
~pageMask));
platforms/unix/vm/sqUnixMemory.c:213:      assert(0 == (newDelta &
~pageMask));
platforms/unix/vm/sqUnixMemory.c:214:      assert(0 == (newSize  &
~pageMask));
platforms/unix/vm/sqUnixMemory.c:231:     assert(0 == (heapSize  &
~pageMask));
platforms/unix/vm/sqUnixMemory.c:293:# define roundDownToPageBoundary(v)
((v)&pageMask)
platforms/unix/vm/sqUnixMemory.c:294:# define roundUpToPageBoundary(v)
(((v)+pageSize-1)&pageMask)


On Thu, Jan 10, 2013 at 1:40 PM, Frank Shearar <frank.shearar at gmail.com>wrote:

>
> First, thanks Eliot for fixing up the UUID plugin.
>
> With that fixed, the next error I get when compiling (32 bit) on
> FreeBSD is this:
>
> sqUnixMemory.c
>
> /usr/home/jenkins/workspace/CogVM-FreeBSD/target/Squeak-vm-unix-4.6.0-Cog-2664-unofficial-src/platforms/unix/vm/sqUnixMemory.c:
> In function 'sqMakeMemoryExecutableFromTo':
>
> /usr/home/jenkins/workspace/CogVM-FreeBSD/target/Squeak-vm-unix-4.6.0-Cog-2664-unofficial-src/platforms/unix/vm/sqUnixMemory.c:298:
> error: 'pageMask' undeclared (first use in this function)
>
> The line number looks a bit wrong, because pageMask is in a #define on
> line 293. (Ah, it's because line 298 uses the #define.) At any rate,
> the relevant function + context looks like this:
>
> #if COGVM
> # define roundDownToPageBoundary(v) ((v)&pageMask)
> # define roundUpToPageBoundary(v) (((v)+pageSize-1)&pageMask)
> void
> sqMakeMemoryExecutableFromTo(unsigned long startAddr, unsigned long
> endAddr)
> {
>         unsigned long firstPage = roundDownToPageBoundary(startAddr);
>         if (mprotect((void *)firstPage,
>                                  endAddr - firstPage + 1,
>                                  PROT_READ | PROT_WRITE | PROT_EXEC) < 0)
>                 perror("mprotect(x,y,PROT_READ | PROT_WRITE | PROT_EXEC)");
> }
>
> void
> sqMakeMemoryNotExecutableFromTo(unsigned long startAddr, unsigned long
> endAddr)
> {
>         unsigned long firstPage = roundDownToPageBoundary(startAddr);
>         if (mprotect((void *)firstPage,
>                                  endAddr - firstPage + 1,
>                                  PROT_READ | PROT_WRITE) < 0)
>                 perror("mprotect(x,y,PROT_READ | PROT_WRITE)");
> }
> #endif /* COGVM */
>
> A bit confusing, given that pageMask is declared on line 100, as
> whatever C calls a top level form. A global?
>
> What can I do to make things work?
>
> The full ouput's viewable here:
> http://squeakci.org/job/CogVM-FreeBSD/13/console
>
> frank
>



-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20130110/ca69990e/attachment.htm


More information about the Vm-dev mailing list