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@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 */