Retrieved from: https://src.fedoraproject.org/rpms/squeak-vm/raw/rawhide/f/squeak-vm-4.10.2-gcc-14-fix.patch

diff --git a/Cross/vm/sqVirtualMachine.c b/Cross/vm/sqVirtualMachine.c
index 59b6a6e..d367251 100644
--- a/Cross/vm/sqVirtualMachine.c
+++ b/Cross/vm/sqVirtualMachine.c
@@ -4,6 +4,7 @@
 #include <string.h>
 #include <time.h>
 #include <setjmp.h>
+#include <unistd.h>
 
 #include "sqVirtualMachine.h"
 
diff --git a/unix/plugins/AsynchFilePlugin/sqUnixAsynchFile.c b/unix/plugins/AsynchFilePlugin/sqUnixAsynchFile.c
index 788287f..b916c86 100644
--- a/unix/plugins/AsynchFilePlugin/sqUnixAsynchFile.c
+++ b/unix/plugins/AsynchFilePlugin/sqUnixAsynchFile.c
@@ -142,7 +142,7 @@ INLINE static FilePtr newFileRec(int fd, int sema)
   return fp;
 }
 
-INLINE static allocateBuffer(struct FileBuf *buf, int size)
+INLINE static int allocateBuffer(struct FileBuf *buf, int size)
 {
   if (buf->capacity >= size)
     return 1;
diff --git a/unix/plugins/CameraPlugin/sqCamera-linux.c b/unix/plugins/CameraPlugin/sqCamera-linux.c
index 218322f..c5a6815 100644
--- a/unix/plugins/CameraPlugin/sqCamera-linux.c
+++ b/unix/plugins/CameraPlugin/sqCamera-linux.c
@@ -181,7 +181,7 @@ libCon(void)
 	vd_dup = dup;
 	vd_ioctl = ioctl;
 	vd_read = read;
-	vd_mmap = mmap;
+	vd_mmap = (void * (*)(void *, size_t,  int,  int,  int,  int64_t))mmap;
 	vd_munmap = munmap;
 
 	/* Use libv4l2: use if available... */
diff --git a/unix/plugins/HostWindowPlugin/sqUnixHostWindowPlugin.c b/unix/plugins/HostWindowPlugin/sqUnixHostWindowPlugin.c
index c963f53..4788120 100644
--- a/unix/plugins/HostWindowPlugin/sqUnixHostWindowPlugin.c
+++ b/unix/plugins/HostWindowPlugin/sqUnixHostWindowPlugin.c
@@ -78,7 +78,7 @@ sqInt ioShowDisplayOnWindow(
     return 0;
   else
     return dpy->hostWindowShowDisplay(
-      dispBitsIndex, width, height, depth, affectedL, affectedR, affectedT, affectedB, windowIndex);
+      (unsigned int *)dispBitsIndex, width, height, depth, affectedL, affectedR, affectedT, affectedB, windowIndex);
 }
 
 
diff --git a/unix/plugins/MIDIPlugin/sqUnixMIDIALSA.inc b/unix/plugins/MIDIPlugin/sqUnixMIDIALSA.inc
index cc4bbad..1d451da 100644
--- a/unix/plugins/MIDIPlugin/sqUnixMIDIALSA.inc
+++ b/unix/plugins/MIDIPlugin/sqUnixMIDIALSA.inc
@@ -333,7 +333,7 @@ int sqMIDIParameter(int whichParameter, int modify, int newValue)
 	  {
 	    snd_seq_queue_tempo_t *tempo= 0;
 	    snd_seq_queue_tempo_alloca(&tempo);
-	    snd_seq_get_queue_tempo(seq, queue, &tempo);
+	    snd_seq_get_queue_tempo(seq, queue, (snd_seq_queue_tempo_t *)&tempo);
 	    return snd_seq_queue_tempo_get_tempo(tempo) / 1000.0;
 	  }
 	  break;
diff --git a/unix/plugins/SerialPlugin/sqUnixSerial.c b/unix/plugins/SerialPlugin/sqUnixSerial.c
index 2e61099..f3bc6b1 100644
--- a/unix/plugins/SerialPlugin/sqUnixSerial.c
+++ b/unix/plugins/SerialPlugin/sqUnixSerial.c
@@ -157,21 +157,6 @@ void make_portname_from_portnum(char *serialPortName, const int portNum)
 /*** Public Functions ***/
 
 /* return value ignored */
-int serialPortClose(int portNum)
-{
-  char serialPortName[PORT_NAME_SIZE];
-
-  if (portNum < 0 || portNum >= MAX_SERIAL_PORTS)
-    {
-      success(false);
-      return 0;
-    }
-	
-  make_portname_from_portnum(serialPortName, portNum);
-        
-  return serialPortCloseByName(serialPortName);
-}
-
 int serialPortCloseByName(const char *portName)
 {
   serial_port_type * sp= find_stored_serialport(portName);
@@ -205,16 +190,19 @@ int serialPortCloseByName(const char *portName)
   return 0;
 }
 
-/* Open the given serial port using the given port number.
- * "/dev/ttySxx" port name are assumed. */
-int serialPortOpen(int portNum, int dataRate, int stopBitsType, int parityType, int dataBits,
-		   int inFlowCtrl, int outFlowCtrl, int xOnChar, int xOffChar)
-{	
+int serialPortClose(int portNum)
+{
   char serialPortName[PORT_NAME_SIZE];
+
+  if (portNum < 0 || portNum >= MAX_SERIAL_PORTS)
+    {
+      success(false);
+      return 0;
+    }
+	
   make_portname_from_portnum(serialPortName, portNum);
-      
-  return serialPortOpenByName(serialPortName, dataRate, stopBitsType, parityType, dataBits,
-			      inFlowCtrl, outFlowCtrl, xOnChar, xOffChar);
+        
+  return serialPortCloseByName(serialPortName);
 }
 
 /* If anything goes wrong during opening make sure the file descriptor
@@ -356,6 +344,18 @@ int serialPortOpenByName(char *portName, int dataRate, int stopBitsType, int par
   return 0;
 }
 
+/* Open the given serial port using the given port number.
+ * "/dev/ttySxx" port name are assumed. */
+int serialPortOpen(int portNum, int dataRate, int stopBitsType, int parityType, int dataBits,
+		   int inFlowCtrl, int outFlowCtrl, int xOnChar, int xOffChar)
+{	
+  char serialPortName[PORT_NAME_SIZE];
+  make_portname_from_portnum(serialPortName, portNum);
+      
+  return serialPortOpenByName(serialPortName, dataRate, stopBitsType, parityType, dataBits,
+			      inFlowCtrl, outFlowCtrl, xOnChar, xOffChar);
+}
+
 /* Read up to count bytes from the given serial port into the given
    byte array.  Read only up to the number of bytes in the port's
    input buffer; if fewer bytes than count have been received, do not
diff --git a/unix/plugins/WeDoPlugin/WeDoLinux.c b/unix/plugins/WeDoPlugin/WeDoLinux.c
index 973c2d3..1dc4de1 100644
--- a/unix/plugins/WeDoPlugin/WeDoLinux.c
+++ b/unix/plugins/WeDoPlugin/WeDoLinux.c
@@ -38,6 +38,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <linux/hiddev.h>
+#include <unistd.h>
 
 
 #define true 1
diff --git a/unix/src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c b/unix/src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c
index 4c71420..7f54955 100644
--- a/unix/src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c
+++ b/unix/src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c
@@ -75,6 +75,8 @@ static sqInt halt(void) {
 	;
 }
 
+extern void sqPasteboardPutItemFlavordatalengthformatTypeformatLength(sqInt, char*, int, char*, int);
+
 EXPORT(sqInt) ioAddClipboardData(void) {
 	sqInt clipboardAddress;
 	sqInt formatLength;
@@ -102,6 +104,8 @@ EXPORT(sqInt) ioAddClipboardData(void) {
 	return null;
 }
 
+extern void sqPasteboardClear(sqInt);
+
 EXPORT(sqInt) ioClearClipboard(void) {
 	sqInt clipboardAddress;
 	sqInt clipboard;
@@ -119,6 +123,8 @@ EXPORT(sqInt) ioClearClipboard(void) {
 	return null;
 }
 
+sqInt sqCreateClipboard(void);
+
 EXPORT(sqInt) ioCreateClipboard(void) {
 	sqInt clipboardAddress;
 
@@ -130,6 +136,10 @@ EXPORT(sqInt) ioCreateClipboard(void) {
 	return null;
 }
 
+extern int sqPasteboardGetItemCount(sqInt);
+extern int sqPasteboardCopyItemFlavorsitemNumber (sqInt, int);
+extern int sqPasteboardCopyItemFlavorDataformatformatLength (sqInt, char*, int);
+
 EXPORT(sqInt) ioGetClipboardFormat(void) {
 	sqInt clipboardAddress;
 	sqInt itemCount;
diff --git a/unix/src/plugins/DBusPlugin/DBusPlugin.c b/unix/src/plugins/DBusPlugin/DBusPlugin.c
index b3b8027..11bc22e 100644
--- a/unix/src/plugins/DBusPlugin/DBusPlugin.c
+++ b/unix/src/plugins/DBusPlugin/DBusPlugin.c
@@ -474,7 +474,7 @@ static sqInt halt(void) {
 }
 
 static sqInt handleflag(int fd, int flag) {
-	aioHandle(fd, handleReadForFDwithDataandFlag , flag);
+	aioHandle(fd, (void (*)(int,  void *, int)) handleReadForFDwithDataandFlag , flag);
 }
 
 
@@ -1796,8 +1796,8 @@ static dbus_bool_t sqDBusPluginAddWatchwithData(DBusWatch*watch, void*data) {
 	fd = dbus_watch_get_fd(watch);
 	((sqDBusData*)data)->watch = watch;
 	if (flag & DBUS_WATCH_READABLE) {
-		aioEnable(fd, data, NULL);
-							aioHandle(fd, handleReadForFDwithDataandFlag , 1<<0 | 1<<1 | 1<<3);
+		aioEnable(fd, data, 0);
+							aioHandle(fd, (void (*)(int,  void *, int)) handleReadForFDwithDataandFlag , 1<<0 | 1<<1 | 1<<3);
 	}
 	return 1;
 }
@@ -1830,7 +1830,7 @@ static void sqDBusPluginToggleWatchwithData(DBusWatch*watch, void*data) {
 	fd = dbus_watch_get_fd(watch);
 	if (enable) {
 		((sqDBusData*)data)->watch = watch;
-		aioEnable(fd, data, NULL);
+		aioEnable(fd, data, 0);
 	} else {
 		aioDisable(fd);
 	}
diff --git a/unix/src/plugins/FileCopyPlugin/FileCopyPlugin.c b/unix/src/plugins/FileCopyPlugin/FileCopyPlugin.c
index e2f1b5a..16a3066 100644
--- a/unix/src/plugins/FileCopyPlugin/FileCopyPlugin.c
+++ b/unix/src/plugins/FileCopyPlugin/FileCopyPlugin.c
@@ -18,6 +18,7 @@
 #include "sqConfig.h"
 /* Platform specific definitions */
 #include "sqPlatformSpecific.h"
+#include "FileCopyPlugin.h"
 
 #define true 1
 #define false 0
diff --git a/unix/src/plugins/HostWindowPlugin/HostWindowPlugin.c b/unix/src/plugins/HostWindowPlugin/HostWindowPlugin.c
index ea5c0d7..54bb88b 100644
--- a/unix/src/plugins/HostWindowPlugin/HostWindowPlugin.c
+++ b/unix/src/plugins/HostWindowPlugin/HostWindowPlugin.c
@@ -312,7 +312,7 @@ EXPORT(sqInt) primitiveShowHostWindowRect(void) {
 	if (interpreterProxy->failed()) {
 		return null;
 	}
-	ok = ioShowDisplayOnWindow(dispBits, w, h, d, left, right, top,
+	ok = ioShowDisplayOnWindow((unsigned char *)dispBits, w, h, d, left, right, top,
 bottom, windowIndex);
 	if (!(ok)) {
 		interpreterProxy->primitiveFail();
diff --git a/unix/src/plugins/MIDIPlugin/MIDIPlugin.c b/unix/src/plugins/MIDIPlugin/MIDIPlugin.c
index a3fae58..8ec2eaa 100644
--- a/unix/src/plugins/MIDIPlugin/MIDIPlugin.c
+++ b/unix/src/plugins/MIDIPlugin/MIDIPlugin.c
@@ -161,7 +161,7 @@ EXPORT(sqInt) primitiveMIDIGetPortName(void) {
 	if (interpreterProxy->failed()) {
 		return null;
 	}
-	sz = sqMIDIGetPortName(portNum, &portName, 255);
+	sz = sqMIDIGetPortName(portNum, (int)&portName, 255);
 	nameObj = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), sz);
 	if (interpreterProxy->failed()) {
 		return null;
diff --git a/unix/src/plugins/RomePlugin/RomePlugin.c b/unix/src/plugins/RomePlugin/RomePlugin.c
index aed0e19..f9ff990 100644
--- a/unix/src/plugins/RomePlugin/RomePlugin.c
+++ b/unix/src/plugins/RomePlugin/RomePlugin.c
@@ -49,6 +49,7 @@
 
 
 #include "sqMemoryAccess.h"
+#include "sq.h"
 
 
 /*** Constants ***/
diff --git a/unix/src/plugins/Squeak3D/Squeak3D.c b/unix/src/plugins/Squeak3D/Squeak3D.c
index 3732e62..2127bb3 100644
--- a/unix/src/plugins/Squeak3D/Squeak3D.c
+++ b/unix/src/plugins/Squeak3D/Squeak3D.c
@@ -1657,8 +1657,8 @@ static sqInt halt(void) {
 }
 
 EXPORT(sqInt) initialiseModule(void) {
-	loadBBFn = interpreterProxy->ioLoadFunctionFrom("loadBitBltFrom", bbPluginName);
-	copyBitsFn = interpreterProxy->ioLoadFunctionFrom("copyBitsFromtoat", bbPluginName);
+	loadBBFn = (sqInt) interpreterProxy->ioLoadFunctionFrom("loadBitBltFrom", bbPluginName);
+	copyBitsFn = (sqInt) interpreterProxy->ioLoadFunctionFrom("copyBitsFromtoat", bbPluginName);
 	return (loadBBFn != 0) && (copyBitsFn != 0);
 }
 
diff --git a/unix/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c b/unix/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c
index 24601e4..07e4714 100644
--- a/unix/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c
+++ b/unix/src/plugins/SqueakFFIPrims/SqueakFFIPrims.c
@@ -1215,6 +1215,8 @@ static sqInt halt(void) {
 	;
 }
 
+extern void initSurfacePluginFunctionPointers();
+
 EXPORT(sqInt) initialiseModule(void) {
 	initSurfacePluginFunctionPointers();
 }
diff --git a/unix/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c b/unix/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
index 1a53f09..ed3a446 100644
--- a/unix/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
+++ b/unix/src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
@@ -132,6 +132,10 @@ EXPORT(sqInt) primitiveCanConnectToDisplay(void) {
 	}
 }
 
+extern void forgetXDisplay(void);
+extern void synchronizeXDisplay(void);
+extern void openXDisplay(void);
+extern int disconnectXDisplay(void);
 
 /*	Call an internal function which will disconnect the X display session. The actual
 	Squeak window on the X server is not effected, but this instance of Squeak will
diff --git a/unix/src/vm/interp.c b/unix/src/vm/interp.c
index 85f416d..c179a34 100644
--- a/unix/src/vm/interp.c
+++ b/unix/src/vm/interp.c
@@ -15665,6 +15665,9 @@ sqInt primitiveAtPut(void) {
 }
 
 
+extern sqInt ioSetCursorARGB(sqInt, sqInt, sqInt, sqInt, sqInt);
+
+
 /*	Set the cursor to the given shape. The Mac only supports 16x16 pixel cursors. Cursor offsets are handled by Smalltalk. */
 
 sqInt primitiveBeCursor(void) {
diff --git a/unix/src/vm/intplugins/AsynchFilePlugin/AsynchFilePlugin.c b/unix/src/vm/intplugins/AsynchFilePlugin/AsynchFilePlugin.c
index f0b72e7..f53d7f3 100644
--- a/unix/src/vm/intplugins/AsynchFilePlugin/AsynchFilePlugin.c
+++ b/unix/src/vm/intplugins/AsynchFilePlugin/AsynchFilePlugin.c
@@ -162,7 +162,7 @@ EXPORT(sqInt) primitiveAsyncFileOpen(void) {
 	fOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), sizeof(AsyncFile));
 	f = asyncFileValueOf(fOop);
 	if (!(interpreterProxy->failed())) {
-		asyncFileOpen(f, fileName, fileNameSize, writeFlag, semaIndex);
+		asyncFileOpen(f, (int) fileName, fileNameSize, writeFlag, semaIndex);
 	}
 	if (interpreterProxy->failed()) {
 		return null;
@@ -209,7 +209,7 @@ EXPORT(sqInt) primitiveAsyncFileReadResult(void) {
 	interpreterProxy->success((startIndex >= 1) && (((startIndex + count) - 1) <= bufferSize));
 	bufferPtr = (((pointerForOop(buffer)) + (BASE_HEADER_SIZE)) + startIndex) - 1;
 	if (!(interpreterProxy->failed())) {
-		r = asyncFileReadResult(f, bufferPtr, count);
+		r = asyncFileReadResult(f, (int) bufferPtr, count);
 	}
 	_return_value = interpreterProxy->integerObjectOf(r);
 	if (interpreterProxy->failed()) {
@@ -301,7 +301,7 @@ EXPORT(sqInt) primitiveAsyncFileWriteStart(void) {
 	interpreterProxy->success((startIndex >= 1) && (((startIndex + count) - 1) <= bufferSize));
 	bufferPtr = (((pointerForOop(buffer)) + (BASE_HEADER_SIZE)) + startIndex) - 1;
 	if (!(interpreterProxy->failed())) {
-		asyncFileWriteStart(f, fPosition, bufferPtr, count);
+		asyncFileWriteStart(f, fPosition, (int) bufferPtr, count);
 	}
 	if (interpreterProxy->failed()) {
 		return null;
diff --git a/unix/src/vm/intplugins/CroquetPlugin/CroquetPlugin.c b/unix/src/vm/intplugins/CroquetPlugin/CroquetPlugin.c
index ae84066..c27ac3c 100644
--- a/unix/src/vm/intplugins/CroquetPlugin/CroquetPlugin.c
+++ b/unix/src/vm/intplugins/CroquetPlugin/CroquetPlugin.c
@@ -512,6 +512,8 @@ EXPORT(sqInt) primitiveTransposeMatrix(void) {
 
 /*	Primitive. Answer whether an AABB intersects with a given triangle */
 
+extern sqInt triBoxOverlap(float*, float*, float*, float*, float*);
+
 EXPORT(sqInt) primitiveTriBoxIntersects(void) {
     float*maxCorner;
     float*minCorner;
diff --git a/unix/src/vm/intplugins/FilePlugin/FilePlugin.c b/unix/src/vm/intplugins/FilePlugin/FilePlugin.c
index 0495a0f..baf618c 100644
--- a/unix/src/vm/intplugins/FilePlugin/FilePlugin.c
+++ b/unix/src/vm/intplugins/FilePlugin/FilePlugin.c
@@ -734,7 +734,7 @@ EXPORT(sqInt) primitiveFileStdioHandles(void) {
 			return interpreterProxy->primitiveFail();
 		}
 	}
-	validMask = sqFileStdioHandlesInto((&fileRecords));
+	validMask = sqFileStdioHandlesInto((SQFile*)(&fileRecords));
 	if (validMask == 0) {
 		return interpreterProxy->primitiveFail();
 	}
diff --git a/unix/src/vm/intplugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c b/unix/src/vm/intplugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c
index 501077a..53767a4 100644
--- a/unix/src/vm/intplugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c
+++ b/unix/src/vm/intplugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c
@@ -101,6 +101,10 @@ static sqInt halt(void) {
 }
 
 
+sqInt _isBytes(sqInt oop) {
+	return ((oop & 1) == 0) && (((((usqInt) (longAt(oop))) >> 8) & 15) >= 8);
+}
+
 /*	Return 1, 2 or 3, if string1 is <, =, or > string2, with the collating order of characters given by the order array. */
 
 EXPORT(sqInt) primitiveCompareString(void) {
@@ -115,17 +119,17 @@ EXPORT(sqInt) primitiveCompareString(void) {
     sqInt len2;
 
 	rcvr = stackValue(3);
-	if (!(isBytes(stackValue(2)))) {
+	if (!(_isBytes(stackValue(2)))) {
 		return primitiveFail();
 	}
 	string1 = arrayValueOf(stackValue(2));
 	string1 -= 1;
-	if (!(isBytes(stackValue(1)))) {
+	if (!(_isBytes(stackValue(1)))) {
 		return primitiveFail();
 	}
 	string2 = arrayValueOf(stackValue(1));
 	string2 -= 1;
-	if (!(isBytes(stackValue(0)))) {
+	if (!(_isBytes(stackValue(0)))) {
 		return primitiveFail();
 	}
 	order = arrayValueOf(stackValue(0));
@@ -225,7 +229,7 @@ EXPORT(sqInt) primitiveCompressToByteArray(void) {
 	rcvr = stackValue(2);
 	bm = arrayValueOf(stackValue(1));
 	bm -= 1;
-	if (!(isBytes(stackValue(0)))) {
+	if (!(_isBytes(stackValue(0)))) {
 		return primitiveFail();
 	}
 	ba = arrayValueOf(stackValue(0));
@@ -393,7 +397,7 @@ EXPORT(sqInt) primitiveConvert8BitSigned(void) {
     sqInt s;
 
 	rcvr = stackValue(2);
-	if (!(isBytes(stackValue(1)))) {
+	if (!(_isBytes(stackValue(1)))) {
 		return primitiveFail();
 	}
 	aByteArray = arrayValueOf(stackValue(1));
@@ -453,7 +457,7 @@ EXPORT(sqInt) primitiveDecompressFromByteArray(void) {
 	rcvr = stackValue(3);
 	bm = arrayValueOf(stackValue(2));
 	bm -= 1;
-	if (!(isBytes(stackValue(1)))) {
+	if (!(_isBytes(stackValue(1)))) {
 		return primitiveFail();
 	}
 	ba = arrayValueOf(stackValue(1));
@@ -556,12 +560,12 @@ EXPORT(sqInt) primitiveFindFirstInString(void) {
     sqInt stringSize;
 
 	rcvr = stackValue(3);
-	if (!(isBytes(stackValue(2)))) {
+	if (!(_isBytes(stackValue(2)))) {
 		return primitiveFail();
 	}
 	aString = arrayValueOf(stackValue(2));
 	aString -= 1;
-	if (!(isBytes(stackValue(1)))) {
+	if (!(_isBytes(stackValue(1)))) {
 		return primitiveFail();
 	}
 	inclusionMap = arrayValueOf(stackValue(1));
@@ -614,18 +618,18 @@ EXPORT(sqInt) primitiveFindSubstring(void) {
     sqInt startIndex;
 
 	rcvr = stackValue(4);
-	if (!(isBytes(stackValue(3)))) {
+	if (!(_isBytes(stackValue(3)))) {
 		return primitiveFail();
 	}
 	key = arrayValueOf(stackValue(3));
 	key -= 1;
-	if (!(isBytes(stackValue(2)))) {
+	if (!(_isBytes(stackValue(2)))) {
 		return primitiveFail();
 	}
 	body = arrayValueOf(stackValue(2));
 	body -= 1;
 	start = stackIntegerValue(1);
-	if (!(isBytes(stackValue(0)))) {
+	if (!(_isBytes(stackValue(0)))) {
 		return primitiveFail();
 	}
 	matchTable = arrayValueOf(stackValue(0));
@@ -673,7 +677,7 @@ EXPORT(sqInt) primitiveIndexOfAsciiInString(void) {
 
 	rcvr = stackValue(3);
 	anInteger = stackIntegerValue(2);
-	if (!(isBytes(stackValue(1)))) {
+	if (!(_isBytes(stackValue(1)))) {
 		return primitiveFail();
 	}
 	aString = arrayValueOf(stackValue(1));
@@ -719,7 +723,7 @@ EXPORT(sqInt) primitiveStringHash(void) {
     sqInt pos;
 
 	rcvr = stackValue(2);
-	if (!(isBytes(stackValue(1)))) {
+	if (!(_isBytes(stackValue(1)))) {
 		return primitiveFail();
 	}
 	aByteArray = arrayValueOf(stackValue(1));
@@ -758,14 +762,14 @@ EXPORT(sqInt) primitiveTranslateStringWithTable(void) {
     sqInt i;
 
 	rcvr = stackValue(4);
-	if (!(isBytes(stackValue(3)))) {
+	if (!(_isBytes(stackValue(3)))) {
 		return primitiveFail();
 	}
 	aString = arrayValueOf(stackValue(3));
 	aString -= 1;
 	start = stackIntegerValue(2);
 	stop = stackIntegerValue(1);
-	if (!(isBytes(stackValue(0)))) {
+	if (!(_isBytes(stackValue(0)))) {
 		return primitiveFail();
 	}
 	table = arrayValueOf(stackValue(0));
diff --git a/unix/src/vm/intplugins/RePlugin/RePlugin.c b/unix/src/vm/intplugins/RePlugin/RePlugin.c
index 97a99c9..4f09246 100644
--- a/unix/src/vm/intplugins/RePlugin/RePlugin.c
+++ b/unix/src/vm/intplugins/RePlugin/RePlugin.c
@@ -252,7 +252,7 @@ EXPORT(sqInt) primPCREExec(void) {
 	/* begin rcvrExtraPtr */
 	extraObj = interpreterProxy->fetchPointerofObject(3, rcvr);
 	if (extraObj == (interpreterProxy->nilObject())) {
-		extraPtr =  NULL;
+		extraPtr = 0;
 		goto l1;
 	}
 	extraPtr = ((int) (interpreterProxy->arrayValueOf(extraObj)));
@@ -317,7 +317,7 @@ EXPORT(sqInt) primPCREExecfromto(void) {
 	/* begin rcvrExtraPtr */
 	extraObj = interpreterProxy->fetchPointerofObject(3, rcvr);
 	if (extraObj == (interpreterProxy->nilObject())) {
-		extraPtr =  NULL;
+		extraPtr = 0;
 		goto l1;
 	}
 	extraPtr = ((int) (interpreterProxy->arrayValueOf(extraObj)));
diff --git a/unix/src/vm/intplugins/SerialPlugin/SerialPlugin.c b/unix/src/vm/intplugins/SerialPlugin/SerialPlugin.c
index a40a64d..ecc29f5 100644
--- a/unix/src/vm/intplugins/SerialPlugin/SerialPlugin.c
+++ b/unix/src/vm/intplugins/SerialPlugin/SerialPlugin.c
@@ -100,6 +100,9 @@ EXPORT(sqInt) primitiveSerialPortClose(void) {
 	return null;
 }
 
+extern sqInt serialPortCloseByName(const char*);
+extern sqInt serialPortOpenByName(char*, int, int, int, int, int, int, int, int);
+
 EXPORT(sqInt) primitiveSerialPortCloseByName(void) {
 	char * cString;
 	char *deviceName;
diff --git a/unix/src/vm/intplugins/SlangTestSupportPlugin/SlangTestSupportPlugin.c b/unix/src/vm/intplugins/SlangTestSupportPlugin/SlangTestSupportPlugin.c
index 72f9def..46280d9 100644
--- a/unix/src/vm/intplugins/SlangTestSupportPlugin/SlangTestSupportPlugin.c
+++ b/unix/src/vm/intplugins/SlangTestSupportPlugin/SlangTestSupportPlugin.c
@@ -147,7 +147,7 @@ static sqInt inlineByMethod(void) {
     sqInt bar;
     sqInt foo;
 
-	foo = "foo";
+	foo = (sqInt) "foo";
 	bar = methodThatShouldNotBeInlinedByMethod();
 }
 
@@ -159,24 +159,24 @@ static sqInt inlineByPragma(void) {
     sqInt bar;
     sqInt foo;
 
-	foo = "foo";
+	foo = (sqInt) "foo";
 	bar = methodThatShouldNotBeInlinedByPragma();
 }
 
 static sqInt methodThatShouldBeInlinedByMethod(void) {
-	return "foo";
+	return (sqInt) "foo";
 }
 
 static sqInt methodThatShouldBeInlinedByPragma(void) {
-	return "foo";
+	return (sqInt) "foo";
 }
 
 static sqInt methodThatShouldNotBeInlinedByMethod(void) {
-	return "bar";
+	return (sqInt) "bar";
 }
 
 static sqInt methodThatShouldNotBeInlinedByPragma(void) {
-	return "bar";
+	return (sqInt) "bar";
 }
 
 
diff --git a/unix/vm-sound-pulse/sqUnixSoundPulseAudio.c b/unix/vm-sound-pulse/sqUnixSoundPulseAudio.c
index 18d0f7f..8b0f35d 100644
--- a/unix/vm-sound-pulse/sqUnixSoundPulseAudio.c
+++ b/unix/vm-sound-pulse/sqUnixSoundPulseAudio.c
@@ -995,10 +995,10 @@ DBGMSG("<sound_StartRecording()");
 static sqInt sound_StopRecording(void) {
 DBGMSG(">sound_StopRecording()");
 
-	if (!audioIn.open) return;
+	if (!audioIn.open) return 0;
 	audioIn.open = false;
 	
-	if (NULL == audioIn.pa_conn) return;
+	if (NULL == audioIn.pa_conn) return 0;
 	
 	ioThreadStall(&audioIn);
 
diff --git a/unix/vm/SqSound.h b/unix/vm/SqSound.h
index bddbf24..973db1b 100644
--- a/unix/vm/SqSound.h
+++ b/unix/vm/SqSound.h
@@ -47,7 +47,7 @@ static struct SqSound sound_##NAME##_itf= {	\
   sound_RecordSamplesIntoAtLength,		\
   sound_Volume,					\
   sound_SetVolume,				\
-  sound_SetRecordLevel,				\
+  (void (*)(sqInt))sound_SetRecordLevel,	\
   sound_GetSwitch,				\
   sound_SetSwitch,				\
   sound_SetDevice				\
diff --git a/unix/vm/aio.c b/unix/vm/aio.c
index 57e054e..f133c8e 100644
--- a/unix/vm/aio.c
+++ b/unix/vm/aio.c
@@ -31,6 +31,7 @@
  */
 
 #include "sqaio.h"
+#include "sq.h"
 
 #ifdef HAVE_CONFIG_H
 
diff --git a/unix/vm/sqUnixMain.c b/unix/vm/sqUnixMain.c
index 98ea3bc..76391f7 100644
--- a/unix/vm/sqUnixMain.c
+++ b/unix/vm/sqUnixMain.c
@@ -34,6 +34,7 @@
 #include "sqMemoryAccess.h"
 #include "sqaio.h"
 #include "sqUnixCharConv.h"
+#include "sqUnixGlobals.h"
 #include "debug.h"
 
 #ifdef ioMSecs
@@ -42,6 +43,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <ctype.h>
 #include <string.h>
 #include <time.h>
 #include <sys/time.h>
@@ -511,6 +513,8 @@ sqInt ioRelinquishProcessorForMicroseconds(sqInt us)
 
 sqInt ioBeep(void)				 { return dpy->ioBeep(); }
 
+extern sqInt printCallStack(void);
+
 #if defined(IMAGE_DUMP)
 
 static void emergencyDump(int quit)
