On 1/23/2015 8:48 AM, Ken Brown wrote:
My guess is correct.  lisp.exe uses bit 31 (counting from the LSB) as a marker
during garbage collection, and this is incompatible with Cygwin's use of high
memory for the heap.  I think I know how to fix this (by defining
LINUX_NOEXEC_HEAPCODES in the Cygwin build), but I haven't finished testing it 
yet.

I've now built clisp-2.48 with this change (32-bit only), and I've tested it as well as I can, given that I'm not a clisp user. The build passes all but a handful of about 12,000 tests, so I think it's probably OK. (None of the test failures involved crashes.)

I'm attaching the patches that I applied (on top of Reini's patches) in order to make the build succeed. I also had to use libdb4.5 instead of libdb4.8.
Reini, if you're still lurking, maybe you could take a look at the patches.

Ken
--- origsrc/clisp-2.48/src/unix.d       2009-06-17 10:26:40.000000000 -0400
+++ src/clisp-2.48/src/unix.d   2015-01-26 12:11:27.111212000 -0500
@@ -716,7 +716,10 @@ extern int wait2 (PID_T pid); /* see uni
 /* Interpretation of FILETIME structure: */
 #ifdef UNIX_CYGWIN32
   #define WIN32_LEAN_AND_MEAN
+  #pragma push_macro ("Handle")
+  #undef Handle
   #include <windows.h>
+  #pragma pop_macro ("Handle")
   #undef WIN32
   extern long time_t_from_filetime (const FILETIME * ptr);
   extern void time_t_to_filetime (time_t time_in, FILETIME * out);
--- origsrc/clisp-2.48/src/lispbibl.d   2009-07-28 09:58:03.000000000 -0400
+++ src/clisp-2.48/src/lispbibl.d       2015-01-26 12:14:01.822061000 -0500
@@ -2603,7 +2603,7 @@ Long-Float, Ratio and Complex (only if S
      malloc results (and hence also of shared libraries) are randomized;
      only the code address is fixed around 0x1C000000 and the stack address
      is around 0xCF000000. In this case, we also use LINUX_NOEXEC_HEAPCODES. */
-    #if (defined(I80386) && defined(UNIX_LINUX)) || (defined(I80386) && 
defined(UNIX_OPENBSD) && defined(ADDRESS_RANGE_RANDOMIZED))
+    #if (defined(I80386) && defined(UNIX_LINUX)) || (defined(I80386) && 
defined(UNIX_OPENBSD) && defined(ADDRESS_RANGE_RANDOMIZED)) || (defined(I80386) 
&& defined(UNIX_CYGWIN32))
       #define LINUX_NOEXEC_HEAPCODES
     #else
       #define STANDARD_HEAPCODES
--- origsrc/clisp-2.48/modules/syscalls/calls.c 2009-07-22 21:12:31.000000000 
-0400
+++ src/clisp-2.48/modules/syscalls/calls.c     2015-01-26 12:28:34.091951900 
-0500
@@ -3302,6 +3302,7 @@ DEFUN(POSIX::DUPLICATE-HANDLE, old &opti
 
 #if defined(WIN32_NATIVE) || defined(UNIX_CYGWIN32)
 #include <shlobj.h>
+#include <shlguid.h>
 DEFCHECKER(check_file_attributes, type=DWORD, reverse=uint32_to_I,      \
            default=, prefix=FILE_ATTRIBUTE, bitmasks=both,              \
            ARCHIVE COMPRESSED :DEVICE :DIRECTORY ENCRYPTED HIDDEN :NORMAL \
--- origsrc/clisp-2.48/modules/syscalls/configure       2009-07-28 
12:33:13.000000000 -0400
+++ src/clisp-2.48/modules/syscalls/configure   2015-01-26 12:09:16.528743100 
-0500
@@ -4085,7 +4085,7 @@ fi
 done
 
 if test "$ac_cv_header_shlobj_h" = yes ; then
-   LIBS=${LIBS}' -luser32 -lole32 -loleaut32 -luuid';
+   LIBS=${LIBS}' -luser32 -lole32 -loleaut32 -L/usr/lib/w32api -luuid';
 fi
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects

Reply via email to