[Vm-dev] [commit] r2203 - Update for Alien support. Set
VM_PROXY_MINOR to 8. Requires interpreter
Javier Pimás
elpochodelagente at gmail.com
Thu May 27 06:11:49 UTC 2010
Hi all,
I just checked out svn and tryied to compile in linux. Igor already
sent a mail about this, this commit added alien support but didn't change
platforms/unix/src, so in Unix you get a lot undefined reference errors.
Regenerating C from slang should be enough (I think), but, may I ask
why you didn't also commit the updated platform/unix/src? It won't compile
as it is now.
Regards,
Javier.
On Sun, Apr 25, 2010 at 4:53 PM, <commits at squeakvm.org> wrote:
>
> Author: lewis
> Date: 2010-04-25 12:53:47 -0700 (Sun, 25 Apr 2010)
> New Revision: 2203
>
> Modified:
> trunk/platforms/Cross/vm/sqVirtualMachine.c
> trunk/platforms/Cross/vm/sqVirtualMachine.h
> Log:
> Update for Alien support. Set VM_PROXY_MINOR to 8. Requires interpreter
> functions in SqueakSource/Alien Alien-VMMaker-Support package. These are
> now incorporated in SqueakSource/VMMaker VMMaker-dtl.170.
>
>
> Modified: trunk/platforms/Cross/vm/sqVirtualMachine.c
> ===================================================================
> --- trunk/platforms/Cross/vm/sqVirtualMachine.c 2010-04-13 18:55:21 UTC
> (rev 2202)
> +++ trunk/platforms/Cross/vm/sqVirtualMachine.c 2010-04-25 19:53:47 UTC
> (rev 2203)
> @@ -73,6 +73,8 @@
> sqInt isWordsOrBytes(sqInt oop);
> sqInt includesBehaviorThatOf(sqInt aClass, sqInt aSuperClass);
> sqInt isArray(sqInt oop);
> +sqInt internalIsMutable(sqInt oop);
> +sqInt internalIsImmutable(sqInt oop);
>
> /* InterpreterProxy methodsFor: 'converting' */
> sqInt booleanValueOf(sqInt obj);
> @@ -128,6 +130,7 @@
> sqInt fullGC(void);
> sqInt incrementalGC(void);
> sqInt primitiveFail(void);
> +sqInt primitiveFailFor(sqInt reasonCode);
> sqInt showDisplayBitsLeftTopRightBottom(sqInt aForm, sqInt l, sqInt t,
> sqInt r, sqInt b);
> sqInt signalSemaphoreWithIndex(sqInt semaIndex);
> sqInt success(sqInt aBoolean);
> @@ -144,17 +147,29 @@
> sqInt copyBitsFromtoat(sqInt leftX, sqInt rightX, sqInt yValue);
>
> /* InterpreterProxy methodsFor: 'FFI support' */
> -sqInt classExternalAddress(void);
> +sqInt classExternalAddress(void); /* Old Squeak FFI */
> sqInt classExternalData(void);
> sqInt classExternalFunction(void);
> sqInt classExternalLibrary(void);
> sqInt classExternalStructure(void);
> +sqInt classAlien(void); /* Newsqueak FFI */
> +sqInt classUnsafeAlien(void); /* Newsqueak FFI */
> +sqInt getStackPointer(void); /* Newsqueak FFI */
> +sqInt sendInvokeCallbackStackRegistersJmpbuf(sqInt thunkPtrAsInt, sqInt
> stackPtrAsInt, sqInt regsPtrAsInt, sqInt jmpBufPtrAsInt); /* Newsqueak FFI
> */
> +sqInt reestablishContextPriorToCallback(sqInt callbackContext); /*
> Newsqueak FFI */
> sqInt ioLoadModuleOfLength(sqInt moduleNameIndex, sqInt moduleNameLength);
> sqInt ioLoadSymbolOfLengthFromModule(sqInt functionNameIndex, sqInt
> functionNameLength, sqInt moduleHandle);
> sqInt isInMemory(sqInt address);
>
> void *ioLoadFunctionFrom(char *fnName, char *modName);
>
> +
> +/* Proxy declarations for v1.8 */
> +sqInt callbackEnter(sqInt *callbackID);
> +sqInt callbackLeave(sqInt callbackID);
> +sqInt addGCRoot(sqInt *varLoc);
> +sqInt removeGCRoot(sqInt *varLoc);
> +
> struct VirtualMachine *VM = NULL;
>
> static sqInt majorVersion(void) {
> @@ -325,16 +340,36 @@
> #endif
>
> #if VM_PROXY_MINOR > 5
> +
> VM->isArray = isArray;
> VM->forceInterruptCheck = forceInterruptCheck;
> +
> #endif
>
> #if VM_PROXY_MINOR > 6
> +
> VM->fetchLong32ofObject = fetchLong32ofObject;
> VM->getThisSessionID = getThisSessionID;
> VM->ioFilenamefromStringofLengthresolveAliases =
> ioFilenamefromStringofLengthresolveAliases;
> VM->vmEndianness = vmEndianness;
> +
> #endif
>
> +#if VM_PROXY_MINOR > 7
> +
> + VM->internalIsImmutable = internalIsImmutable;
> + VM->internalIsMutable = internalIsMutable;
> + VM->primitiveFailFor = primitiveFailFor;
> + VM->classAlien = classAlien;
> + VM->getStackPointer = (sqInt *(*)(void))getStackPointer;
> + VM->sendInvokeCallbackStackRegistersJmpbuf =
> sendInvokeCallbackStackRegistersJmpbuf;
> + VM->reestablishContextPriorToCallback =
> reestablishContextPriorToCallback;
> + VM->classUnsafeAlien = classUnsafeAlien;
> + VM->callbackEnter = callbackEnter;
> + VM->callbackLeave = callbackLeave;
> + VM->addGCRoot = addGCRoot;
> + VM->removeGCRoot = removeGCRoot;
> +
> +#endif
> return VM;
> }
>
> Modified: trunk/platforms/Cross/vm/sqVirtualMachine.h
> ===================================================================
> --- trunk/platforms/Cross/vm/sqVirtualMachine.h 2010-04-13 18:55:21 UTC
> (rev 2202)
> +++ trunk/platforms/Cross/vm/sqVirtualMachine.h 2010-04-25 19:53:47 UTC
> (rev 2203)
> @@ -9,11 +9,26 @@
> should work with older VMs. */
> #ifndef VM_PROXY_MINOR
> /* Increment the following number if you add functions at the end */
> -#define VM_PROXY_MINOR 7
> +#define VM_PROXY_MINOR 8
> #endif
>
> #include "sqMemoryAccess.h"
>
> +#if VM_PROXY_MINOR > 7
> +# define PrimErrNoErr 0
> +# define PrimErrGenericFailure 1
> +# define PrimErrBadReceiver 2
> +# define PrimErrBadArgument 3
> +# define PrimErrBadIndex 4
> +# define PrimErrBadNumArgs 5
> +# define PrimErrInappropriate 6
> +# define PrimErrUnsupported 7
> +# define PrimErrNoModification 8
> +# define PrimErrNoMemory 9
> +# define PrimErrNoCMemory 10
> +# define PrimErrNotFound 11
> +#endif
> +
> typedef sqInt (*CompilerHook)();
>
> struct VirtualMachine* sqGetInterpreterProxy(void);
> @@ -204,11 +219,52 @@
> #if VM_PROXY_MINOR > 6
> sqInt (*fetchLong32ofObject)(sqInt fieldFieldIndex, sqInt oop);
> sqInt (*getThisSessionID)(void);
> - sqInt (*ioFilenamefromStringofLengthresolveAliases)(char*
> aCharBuffer, char* filenameIndex, sqInt filenameLength, sqInt resolveFlag);
> + sqInt (*ioFilenamefromStringofLengthresolveAliases)(char*
> aCharBuffer, char* filenameIndex, sqInt filenameLength, sqInt resolveFlag);
> sqInt (*vmEndianness)(void);
> #endif
>
> +#if VM_PROXY_MINOR > 7
> + sqInt (*internalIsImmutable)(sqInt oop);
> + sqInt (*internalIsMutable)(sqInt oop);
> + sqInt (*primitiveFailFor)(sqInt code);
> + sqInt (*classAlien)(void);
> + sqInt *(*getStackPointer)(void);
> + sqInt (*sendInvokeCallbackStackRegistersJmpbuf)(sqInt
> thunkPtrAsInt, sqInt stackPtrAsInt, sqInt regsPtrAsInt, sqInt
> jmpBufPtrAsInt);
> + sqInt (*reestablishContextPriorToCallback)(sqInt callbackContext);
> + sqInt (*classUnsafeAlien)(void);
> + /* New methods for proxy version 1.8 */
> +
> + /* callbackEnter: Re-enter the interpreter loop for a callback.
> + Arguments:
> + callbackID: Pointer to a location receiving the callback ID
> + used in callbackLeave
> + Returns: True if successful, false otherwise */
> + sqInt (*callbackEnter)(sqInt *callbackID);
> +
> + /* callbackLeave: Leave the interpreter from a previous callback
> + Arguments:
> + callbackID: The ID of the callback received from callbackEnter()
> + Returns: True if succcessful, false otherwise. */
> + sqInt (*callbackLeave)(sqInt callbackID);
> +
> + /* addGCRoot: Add a variable location to the garbage collector.
> + The contents of the variable location will be updated accordingly.
> + Arguments:
> + varLoc: Pointer to the variable location
> + Returns: True if successful, false otherwise. */
> + sqInt (*addGCRoot)(sqInt *varLoc);
> +
> + /* removeGCRoot: Remove a variable location from the garbage
> collector.
> + Arguments:
> + varLoc: Pointer to the variable location
> + Returns: True if successful, false otherwise.
> + */
> + sqInt (*removeGCRoot)(sqInt *varLoc);
> +#endif
>
> +#if VM_PROXY_MINOR > 8
> +#endif
> +
> } VirtualMachine;
>
> #endif /* _SqueakVM_H */
>
>
--
Javier Pimás
Ciudad de Buenos Aires
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20100527/f9e0b95b/attachment.htm
More information about the Vm-dev
mailing list