Running Alien on Windows

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Running Alien on Windows

Torsten Bergmann
 
David wrote in [1]
>I added Alien functions to VMMaker on SqueakSource:

Thanks for the integration. So what is the next logical step
to get Alien for Windows?
Does it just mean Andreas has to build a new VM version?

Thanks
Torsten

[1] http://lists.squeakfoundation.org/pipermail/vm-dev/2010-April/004382.html
--
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
Reply | Threaded
Open this post in threaded view
|

Re: Running Alien on Windows

David T. Lewis
 
On Mon, May 03, 2010 at 08:32:19PM +0200, Torsten Bergmann wrote:
>  
> David wrote in [1]
> >I added Alien functions to VMMaker on SqueakSource:
>
> Thanks for the integration. So what is the next logical step
> to get Alien for Windows?
> Does it just mean Andreas has to build a new VM version?

I did not try building on Windows, but IIUC the answer is yes. If any
intrepid VM builders with a Windows PC and a Pharo image can build the
plugin and confirm that it works, that would be helpful :)

I would note also that the plugin builds on Unix/Linux but it is not
clear if the resulting plugin actually works correctly. Confirmation
would be helpful (probably this needs a Pharo person to check).

Dave

Reply | Threaded
Open this post in threaded view
|

Re: Running Alien on Windows

Igor Stasenko
 
On 4 May 2010 03:46, David T. Lewis <[hidden email]> wrote:

>
> On Mon, May 03, 2010 at 08:32:19PM +0200, Torsten Bergmann wrote:
>>
>> David wrote in [1]
>> >I added Alien functions to VMMaker on SqueakSource:
>>
>> Thanks for the integration. So what is the next logical step
>> to get Alien for Windows?
>> Does it just mean Andreas has to build a new VM version?
>
> I did not try building on Windows, but IIUC the answer is yes. If any
> intrepid VM builders with a Windows PC and a Pharo image can build the
> plugin and confirm that it works, that would be helpful :)
>
> I would note also that the plugin builds on Unix/Linux but it is not
> clear if the resulting plugin actually works correctly. Confirmation
> would be helpful (probably this needs a Pharo person to check).
>

Just tried to build it with VMMaker.dtl.170
with SVN revision 2205

gcc -o ../.././obj/IA32ABI/ia32abicc.o -g -mpentium -mwindows
-fomit-frame-pointer -funroll-loops -fschedule-insns2 -O2 -I.
-Ic:/dx7sdk/include -I../.././src/vm -I../../../platforms/Win32/vm
-I../../../platforms/Cross/vm -I../.././src/IA32ABI
-I../../../platforms/Win32/plugins/IA32ABI
-I../../../platforms/Cross/plugins/IA32ABI -DVM_VERSION=\""3.10.6
(release)"\" -DWIN32_FILE_SUPPORT -DNO_SERVICE -DNO_STD_FILE_SUPPORT
-DNDEBUG -DLSB_FIRST -DVM_NAME=\"\" -DX86  -c
../../../platforms/Cross/plugins/IA32ABI/ia32abicc.c
../../../platforms/Cross/plugins/IA32ABI/ia32abicc.c: In function
`allocateExecutablePage':
../../../platforms/Cross/plugins/IA32ABI/ia32abicc.c:293:
`MEM_TOP_DOWN' undeclared (first use in this function)
../../../platforms/Cross/plugins/IA32ABI/ia32abicc.c:293: (Each
undeclared identifier is reported only once
../../../platforms/Cross/plugins/IA32ABI/ia32abicc.c:293: for each
function it appears in.)
make[1]: *** [ia32abicc.o] Error 1


MEM_TOP_DOWN
0x100000 Allocates memory at the highest possible address.
Windows Me/98/95:   This flag is not supported.

i defined this flag (using #ifndef)
and got to the linking stage.
First, i had to remove
platforms/Cross/plugins/IA32ABI/sqVirtualMachince.c
platforms/Cross/plugins/IA32ABI/sqVirtualMachince.h

otherwise they interfere with ones, which lying in Cross/vm directory.

And so, there is only one undefined reference left:

//F/projects/squeak/!trunk/src/winbuild/obj/IA32ABI/../../../platforms/Cross/plugins/IA32ABI/ia32abicc.c:213:
undefined reference to `inIoProcessEvents'

Which seems like should be defined externally by win32 platform-specific files:

extern int inIoProcessEvents;
# define noteEnterCallback() (++inIoProcessEvents)
# define noteExitCallback()  do { if (inIoProcessEvents)
--inIoProcessEvents; } while (0)


This cames from newspeak sources:

/* - Vassili, May 2008:
 *
 * The following is significantly revised compared to the original
Squeak implementation.
 * The ioProcessEvent() function called from inside the interpreter
loop is now guarded
 * with a lock called inIoProcessEvents. When the lock is > 0 the
function is effectively
 * disabled. The lock is incremented on entering a callback and
decremented on returning
 * from a callback. The lock is also accessible at the image level,
and Smalltalk code
 * in the image can turn off this asynchronous event delivery. In that
case it should
 * make its own arrangements to pick up and deliver events. For that,
an unguarded version
 * of the same function is provided called primDrainEventQueue() which
is accessible
 * as a primitive from inside the image.
 */

/* This counter prevents reentering the ioProcessEvents message pump.  It is
 * also incremented in the callback machinery (in thunkEntry) since the image
 * may be running its own message pump for the native GUI.
 */
int inIoProcessEvents = 0;

int ioProcessEvents(void)
{
  int result;

  if (inIoProcessEvents)
    return 1;
  if (fRunService && !fWindows95)
    return 1;

  ++inIoProcessEvents;
  result = primDrainEventQueue();
  if (inIoProcessEvents > 0)
    --inIoProcessEvents;

  return result;
}
> Dave
>
>

So, since it may require more patching in order to support this flag, i just
 commented its use by alien plugin and finally were able to
successfully build it.

I am not sure if it in working state or not.
For those who wanna test it, you can get it here:
http://nativeboost.googlecode.com/files/IA32ABI.dll
(i placed it there temporarily, so please, pick it up  because i will
remove it in a few days)

--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Running Alien on Windows

Igor Stasenko

Btw, i am still insist that making interpret() reentrant and calling
ioProcessEvents() outside of it, so it won't interfere with interpreter's
state/temps/stack etc . would be much better and safer.

> This cames from newspeak sources:
>
> /* - Vassili, May 2008:
>  *
>  * The following is significantly revised compared to the original
> Squeak implementation.
>  * The ioProcessEvent() function called from inside the interpreter
> loop is now guarded
>  * with a lock called inIoProcessEvents. When the lock is > 0 the
> function is effectively
>  * disabled. The lock is incremented on entering a callback and
> decremented on returning
>  * from a callback. The lock is also accessible at the image level,
> and Smalltalk code
>  * in the image can turn off this asynchronous event delivery. In that
> case it should
>  * make its own arrangements to pick up and deliver events. For that,
> an unguarded version
>  * of the same function is provided called primDrainEventQueue() which
> is accessible
>  * as a primitive from inside the image.
>  */
>
> /* This counter prevents reentering the ioProcessEvents message pump.  It is
>  * also incremented in the callback machinery (in thunkEntry) since the image
>  * may be running its own message pump for the native GUI.
>  */
> int inIoProcessEvents = 0;
>
> int ioProcessEvents(void)
> {
>  int result;
>
>  if (inIoProcessEvents)
>    return 1;
>  if (fRunService && !fWindows95)
>    return 1;
>
>  ++inIoProcessEvents;
>  result = primDrainEventQueue();
>  if (inIoProcessEvents > 0)
>    --inIoProcessEvents;
>
>  return result;
> }
>> Dave
>>
>>
>
> So, since it may require more patching in order to support this flag, i just
>  commented its use by alien plugin and finally were able to
> successfully build it.
>
> I am not sure if it in working state or not.
> For those who wanna test it, you can get it here:
> http://nativeboost.googlecode.com/files/IA32ABI.dll
> (i placed it there temporarily, so please, pick it up  because i will
> remove it in a few days)
>
> --
> Best regards,
> Igor Stasenko AKA sig.
>



--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: Running Alien on Windows

Andreas.Raab
 
Hi Igor -

Thanks for trying and feedback. Looks like there's a bit more work to
do. I agree that we should make interpret() reentrant and use an
approach like on Android. And we'll get there; it's just a matter of
finding time to work through the corner cases.

Cheers,
   - Andreas

On 5/3/2010 6:51 PM, Igor Stasenko wrote:

>
> Btw, i am still insist that making interpret() reentrant and calling
> ioProcessEvents() outside of it, so it won't interfere with interpreter's
> state/temps/stack etc . would be much better and safer.
>
>> This cames from newspeak sources:
>>
>> /* - Vassili, May 2008:
>>   *
>>   * The following is significantly revised compared to the original
>> Squeak implementation.
>>   * The ioProcessEvent() function called from inside the interpreter
>> loop is now guarded
>>   * with a lock called inIoProcessEvents. When the lock is>  0 the
>> function is effectively
>>   * disabled. The lock is incremented on entering a callback and
>> decremented on returning
>>   * from a callback. The lock is also accessible at the image level,
>> and Smalltalk code
>>   * in the image can turn off this asynchronous event delivery. In that
>> case it should
>>   * make its own arrangements to pick up and deliver events. For that,
>> an unguarded version
>>   * of the same function is provided called primDrainEventQueue() which
>> is accessible
>>   * as a primitive from inside the image.
>>   */
>>
>> /* This counter prevents reentering the ioProcessEvents message pump.  It is
>>   * also incremented in the callback machinery (in thunkEntry) since the image
>>   * may be running its own message pump for the native GUI.
>>   */
>> int inIoProcessEvents = 0;
>>
>> int ioProcessEvents(void)
>> {
>>   int result;
>>
>>   if (inIoProcessEvents)
>>     return 1;
>>   if (fRunService&&  !fWindows95)
>>     return 1;
>>
>>   ++inIoProcessEvents;
>>   result = primDrainEventQueue();
>>   if (inIoProcessEvents>  0)
>>     --inIoProcessEvents;
>>
>>   return result;
>> }
>>> Dave
>>>
>>>
>>
>> So, since it may require more patching in order to support this flag, i just
>>   commented its use by alien plugin and finally were able to
>> successfully build it.
>>
>> I am not sure if it in working state or not.
>> For those who wanna test it, you can get it here:
>> http://nativeboost.googlecode.com/files/IA32ABI.dll
>> (i placed it there temporarily, so please, pick it up  because i will
>> remove it in a few days)
>>
>> --
>> Best regards,
>> Igor Stasenko AKA sig.
>>
>
>
>