[commit] r2484 - Move dialect-independence macros to sq.h and use them on Mac OS.

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

[commit] r2484 - Move dialect-independence macros to sq.h and use them on Mac OS.

commits-3
 
Author: eliot
Date: 2011-08-01 14:36:19 -0700 (Mon, 01 Aug 2011)
New Revision: 2484

Modified:
   branches/Cog/nscogbuild/unixbuild/HowToBuild
   branches/Cog/platforms/Cross/vm/sq.h
   branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
   branches/Cog/platforms/Mac OS/vm/sqMacMain.c
   branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c
   branches/Cog/platforms/unix/vm/sqUnixExternalPrims.c
   branches/Cog/platforms/unix/vm/sqUnixMain.c
   branches/Cog/unixbuild/HowToBuild
Log:
Move dialect-independence macros to sq.h and use them on Mac OS.
Format platforms/unix/vm/sqUnixExternalPrims.c so I can make sense of it and
hence avoid calling tryLoading with a null plugin.  Update unix HowToBuilds
with info on avoiding gcc 3.4.x and -O2.


Modified: branches/Cog/nscogbuild/unixbuild/HowToBuild
===================================================================
--- branches/Cog/nscogbuild/unixbuild/HowToBuild 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/nscogbuild/unixbuild/HowToBuild 2011-08-01 21:36:19 UTC (rev 2484)
@@ -5,6 +5,8 @@
  - How to build the Newspeak Cog VM on Unix
  - Testing an external plugin has completely linked
  - Compiling in 32-bit mode on a 64-bit linux
+ - Testing an external plugin has completely linked
+ - N.B. Please read: Optimization level and gcc version
 
 How to build the Newspeak VM on Unix
 -------------------------------
@@ -59,3 +61,13 @@
 symbols, remake the plugin, capturing the link step and then supply
  -Wl,--warn-unresolved-symbols -Wl,--no-allow-shlib-undefined
 when manually repeating the link command
+
+
+Optimization level and gcc version
+----------------------------------
+There appear to be issues with 3.4.x gcc version on RedHat.  In particular
+compiling the Newspeak VM with either of
+ gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)
+ gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)
+using -O2 results in a VM that segfaults early in startup.  For these compilers
+it is probably wise to use -O1, even though -O3 seems to work.

Modified: branches/Cog/platforms/Cross/vm/sq.h
===================================================================
--- branches/Cog/platforms/Cross/vm/sq.h 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/platforms/Cross/vm/sq.h 2011-08-01 21:36:19 UTC (rev 2484)
@@ -23,6 +23,18 @@
 #define false 0
 #define null 0  /* using "null" because nil is predefined in Think C */
 
+#if !defined(IMAGE_DIALECT_NAME)
+# if NewspeakVM
+# define IMAGE_DIALECT_NAME "Newspeak"
+# define DEFAULT_IMAGE_NAME "newspeak.image"
+# define IMAGE_ENV_NAME "NEWSPEAK_IMAGE"
+# else
+# define IMAGE_DIALECT_NAME "Squeak"
+# define DEFAULT_IMAGE_NAME "squeak.image"
+# define IMAGE_ENV_NAME "SQUEAK_IMAGE"
+# endif
+#endif
+
 /* Pluggable primitives macros. */
 
 /* Note: All pluggable primitives are defined as


Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
   - Sun Jul 31 15:48:22 PDT 2011
   + Mon Aug  1 14:33:26 PDT 2011

Modified: branches/Cog/platforms/Mac OS/vm/sqMacMain.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacMain.c 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/platforms/Mac OS/vm/sqMacMain.c 2011-08-01 21:36:19 UTC (rev 2484)
@@ -130,7 +130,7 @@
  gSqueakUIFlushSecondaryCleanupDelayMilliseconds=20,
  gSqueakUIFlushSecondaryCheckForPossibleNeedEveryNMilliseconds=16,
  gSqueakDebug=0;
-char            gSqueakImageName[PATH_MAX] = "Squeak.image";
+char            gSqueakImageName[PATH_MAX] = DEFAULT_IMAGE_NAME;
 char            gSqueakUntrustedDirectoryName[PATH_MAX] = "/foobar/tooBar/forSqueak/bogus/";
 char            gSqueakTrustedDirectoryName[PATH_MAX] = "/foobar/tooBar/forSqueak/bogus/";
 CFStringRef gSqueakImageNameStringRef;

Modified: branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c
===================================================================
--- branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/platforms/Mac OS/vm/sqMacUnixCommandLineInterface.c 2011-08-01 21:36:19 UTC (rev 2484)
@@ -250,7 +250,7 @@
   printf("       %s [<option>...] -- [<argument>...]\n", argVec[0]);
   printUsage();
   printf("\nNotes:\n");
-  printf("  <imageName> defaults to `Squeak.image'.\n");
+  printf("  <imageName> defaults to `" DEFAULT_IMAGE_NAME "'.\n");
   printUsageNotes();
   exit(1);
 }
@@ -282,8 +282,8 @@
 static void printUsageNotes(void)
 {
   printf("  If `-memory' is not specified then the heap will grow dynamically.\n");
-  printf("  <argument>s are ignored, but are processed by the Squeak image.\n");
-  printf("  The first <argument> normally names a Squeak `script' to execute.\n");
+  printf("  <argument>s are ignored, but are processed by the " IMAGE_DIALECT_NAME " image.\n");
+  printf("  The first <argument> normally names a " IMAGE_DIALECT_NAME " `script' to execute.\n");
   printf("  Precede <arguments> by `--' to use default image.\n");
 }
 
@@ -311,10 +311,12 @@
 
 static void parseEnvironment(void)
 {
-  char *ev= 0;
+ char *ev;
 
-  if ((ev= getenv("SQUEAK_IMAGE")))
- resolveWhatTheImageNameIs(ev);
-  if ((ev= getenv("SQUEAK_MEMORY"))) gMaxHeapSize= strtobkm(ev);
-  if ((ev= getenv("SQUEAK_PATHENC"))) setEncodingType(ev);
+ if ((ev= getenv(IMAGE_ENV_NAME)))
+ resolveWhatTheImageNameIs(ev);
+ if ((ev= getenv("SQUEAK_MEMORY")))
+ gMaxHeapSize= strtobkm(ev);
+ if ((ev= getenv("SQUEAK_PATHENC")))
+ setEncodingType(ev);
 }

Modified: branches/Cog/platforms/unix/vm/sqUnixExternalPrims.c
===================================================================
--- branches/Cog/platforms/unix/vm/sqUnixExternalPrims.c 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/platforms/unix/vm/sqUnixExternalPrims.c 2011-08-01 21:36:19 UTC (rev 2484)
@@ -35,6 +35,7 @@
 #endif
 
 #include "sq.h" /* sqUnixConfig.h */
+#include "sqAssert.h"
 
 #if (DEBUG)
 # define DPRINTF(ARGS) fprintf ARGS
@@ -216,7 +217,8 @@
  *  moduleName and suffix.  Answer the new module entry, or 0 if the shared
  *  library could not be loaded.
  */
-static void *tryLoading(char *dirName, char *moduleName)
+static void *
+tryLoading(char *dirName, char *moduleName)
 {
   static char *prefixes[]= { "", "lib", 0 };
   static char *suffixes[]= { "", ".so", ".dylib", 0 };
@@ -224,33 +226,32 @@
   char     **prefix= 0, **suffix= 0;
 
   for (prefix= prefixes;  *prefix;  ++prefix)
-    for (suffix= suffixes;  *suffix;  ++suffix)
-      {
- char        libName[NAME_MAX + 32]; /* headroom for prefix/suffix */
- struct stat buf;
- int         err;
- sprintf(libName, "%s%s%s%s", dirName, *prefix, moduleName, *suffix);
- if ((!(err= stat(libName, &buf))) && S_ISDIR(buf.st_mode))
-  DPRINTF((stderr, "ignoring directory: %s\n", libName));
- else
-  {
-    DPRINTF((stderr, "tryLoading %s\n", libName));
-    handle= dlopen(libName, RTLD_NOW | RTLD_GLOBAL);
-    if (handle == 0)
-      {
- if ((!err) && !(sqIgnorePluginErrors))
-  fprintf(stderr, "ioLoadModule(%s):\n  %s\n", libName, dlerror());
-      }
-    else
-      {
-#       if DEBUG
- printf("%s: loaded plugin `%s'\n", exeName, libName);
-#       endif
- return handle;
-      }
-  }
-      }
-  return 0;
+ for (suffix= suffixes;  *suffix;  ++suffix) {
+ char        libName[NAME_MAX + 32]; /* headroom for prefix/suffix */
+ struct stat buf;
+ int         n;
+ n = sprintf(libName,"%s%s%s%s",dirName,*prefix,moduleName,*suffix);
+ assert(n >= 0 && n < NAME_MAX + 32);
+ if (!stat(libName, &buf)) {
+ if (S_ISDIR(buf.st_mode))
+ DPRINTF((stderr, "ignoring directory: %s\n", libName));
+ else {
+ DPRINTF((stderr, "tryLoading %s\n", libName));
+ handle= dlopen(libName, RTLD_NOW | RTLD_GLOBAL);
+ if (handle == 0) {
+ if (!sqIgnorePluginErrors)
+ fprintf(stderr, "ioLoadModule(%s):\n  %s\n", libName, dlerror());
+ }
+ else {
+# if DEBUG
+ printf("%s: loaded plugin `%s'\n", exeName, libName);
+# endif
+ return handle;
+ }
+ }
+ }
+ }
+ return 0;
 }
 
 
@@ -283,49 +284,44 @@
 /*  Find and load the named module.  Answer 0 if not found (do NOT fail
  *  the primitive!).
  */
-void *ioLoadModule(char *pluginName)
+void *
+ioLoadModule(char *pluginName)
 {
-  void *handle= 0;
+ void *handle= 0;
 
-  if ((pluginName == 0) || (pluginName[0] == '\0'))
-    {
-      handle= dlopen(0, RTLD_NOW | RTLD_GLOBAL);
-      if (handle == 0)
- fprintf(stderr, "ioLoadModule(<intrinsic>): %s\n", dlerror());
-      else
- {
-  DPRINTF((stderr, "loaded: <intrinsic>\n"));
-  return handle;
+ if (!pluginName || !*pluginName) {
+ if (!(handle= dlopen(0, RTLD_NOW | RTLD_GLOBAL))) {
+ fprintf(stderr, "ioLoadModule(<intrinsic>): %s\n", dlerror());
+ return 0;
+ }
+ DPRINTF((stderr, "loaded: <intrinsic>\n"));
+ return handle;
  }
-    }
 
-  if (squeakPlugins)
-      {
- char path[NAME_MAX];
- char c, *in= squeakPlugins, *out= path;
- while ((c= *in++))
-  {
-    if (c == '%' && ((*in == 'n') || (*in == 'N')))
-      {
- ++in;
- strcpy(out, pluginName);
- out+= strlen(pluginName);
-      }
-    else
-      *out++= c;
-  }
- *out= '\0';
- DPRINTF((stderr, "ioLoadModule plugins = %s\n                path = %s\n",
- squeakPlugins, path));
- if ((handle= tryLoading("", path)))
-  return handle;
- if (!(out > path && *(out - 1) == '/')) {
-  *out++= '/';
-  *out= '\0';
+ if (squeakPlugins) {
+ char path[NAME_MAX];
+ char c, *in= squeakPlugins, *out= path;
+ while ((c= *in++)) {
+ if (c == '%' && ((*in == 'n') || (*in == 'N'))) {
+ ++in;
+ strcpy(out, pluginName);
+ out+= strlen(pluginName);
+ }
+ else
+ *out++= c;
+ }
+ *out= '\0';
+ DPRINTF((stderr, "ioLoadModule plugins = %s\n                path = %s\n",
+ squeakPlugins, path));
+ if ((handle= tryLoading("", path)))
+ return handle;
+ if (!(out > path && *(out - 1) == '/')) {
+ *out++= '/';
+ *out= '\0';
+ }
+ if ((handle= tryLoading(path, pluginName)))
+ return handle;
  }
- if ((handle= tryLoading(path, pluginName)))
-  return handle;
-      }
 
   if ((   handle= tryLoading(    "./", pluginName))
       || (handle= tryLoadingPath("SQUEAK_PLUGIN_PATH", pluginName))
@@ -390,7 +386,6 @@
 #endif
   return 0;
 }
-
 #endif /* USE_SIMPLIFIED_PLUGIN_LOGIC */
 
 /*  Find a function in a loaded module.  Answer 0 if not found (do NOT

Modified: branches/Cog/platforms/unix/vm/sqUnixMain.c
===================================================================
--- branches/Cog/platforms/unix/vm/sqUnixMain.c 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/platforms/unix/vm/sqUnixMain.c 2011-08-01 21:36:19 UTC (rev 2484)
@@ -1182,15 +1182,6 @@
 
   if (documentName)
     strcpy(shortImageName, documentName);
-#if NewspeakVM
-# define IMAGE_ENV_NAME "NEWSPEAK_IMAGE"
-# define IMAGE_DIALECT_NAME "Newspeak"
-# define DEFAULT_IMAGE_NAME "newspeak.image"
-#else
-# define IMAGE_ENV_NAME "SQUEAK_IMAGE"
-# define IMAGE_DIALECT_NAME "Squeak"
-# define DEFAULT_IMAGE_NAME "squeak.image"
-#endif
   else if ((ev= getenv(IMAGE_ENV_NAME)))
     strcpy(shortImageName, ev);
   else

Modified: branches/Cog/unixbuild/HowToBuild
===================================================================
--- branches/Cog/unixbuild/HowToBuild 2011-07-31 22:48:45 UTC (rev 2483)
+++ branches/Cog/unixbuild/HowToBuild 2011-08-01 21:36:19 UTC (rev 2484)
@@ -6,6 +6,8 @@
  - How to build the Cog Croquet VM on Unix
  - Testing an external plugin has completely linked
  - Compiling in 32-bit mode on a 64-bit linux
+ - Testing an external plugin has completely linked
+ - N.B. Please read: Optimization level and gcc version
 
 
 Checking out sources
@@ -99,3 +101,13 @@
 symbols, remake the plugin, capturing the link step and then supply
  -Wl,--warn-unresolved-symbols -Wl,--no-allow-shlib-undefined
 when manually repeating the link command
+
+
+Optimization level and gcc version
+----------------------------------
+There appear to be issues with 3.4.x gcc version on RedHat.  In particular
+compiling the Newspeak VM with either of
+ gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)
+ gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)
+using -O2 results in a VM that segfaults early in startup.  For these compilers
+it is probably wise to use -O1, even though -O3 seems to work.