From: Mike Thomas
Subject: GNU Common Lisp - Mingw32 build - NULL_OR_ON_C_STACK
Date: 
Message-ID: <zTO28.55$QN5.4594@nsw.nnrp.telstra.net>
Hi there.

Building GCL version 2.3.6 as Cygwin hosted mingw:

    ./configure --enable-machine=mingw

 I get to the place where it starts raw_gcl.exe:

-----------------------------------------------------------------
../unixport/raw_gcl.exe ../unixport/ -libdir
c:/lang/source/mingw32/gcl-2.3.8/ <
 foo
GCL (GNU Common Lisp)  April 1994  32768 pages

Unrecoverable error: NULL_OR_ON_C_STACK macro invalid.

abnormal program termination
-----------------------------------------------------------------

This macro is defined as:

-----------------------------------------------------------------
/* on most machines this will test in one instruction
   if the pointe/r is on the C stack or the 0 pointer
   in winnt our heap starts at DBEGIN
   */
#define NULL_OR_ON_C_STACK(y)\
    (((unsigned int)(y)) == 0 ||  \
     (((unsigned int)(y)) < DBEGIN && ((unsigned int)(y)) &0xf000000))

-----------------------------------------------------------------

and is used in main.c like:

-----------------------------------------------------------------
initlisp()
{
 int j;

 if (NULL_OR_ON_C_STACK(&j) == 0
     || NULL_OR_ON_C_STACK(Cnil) != 0
     || (((unsigned long )core_end) !=0
         && NULL_OR_ON_C_STACK(core_end) != 0))
   { /* check person has correct definition of above */
     error("NULL_OR_ON_C_STACK macro invalid");
   }

............


-----------------------------------------------------------------

I found the description of this macro cryptic.  Can anyone explain what is
going on here?

Also, does anyone know why "unexnt.h" does not appear in the CVS repository
for GCL 2.4?

Cheers

Mike Thomas.

From: Mike Thomas
Subject: Re: GNU Common Lisp - Mingw32 build - NULL_OR_ON_C_STACK - MORE INFO HERE
Date: 
Message-ID: <PhP28.1$xY5.272@nsw.nnrp.telstra.net>
Incidentally, I forgot to include some debugging out put from main.c just
before the test:

 addr j = 22ff3c, DBEGIN = 10000000, Cnil = 500cc0, core_end = 100c8000

(all numbers are hexadecimal).

What is the significance of the apparently arbitrary use of 0xf000000 in the
macro and the definition of DBEGIN as 0x10000000?

My computer has 392M of RAM, if that is relevant.
From: Mike Thomas
Subject: Re: GNU Common Lisp - Mingw32 build - NULL_OR_ON_C_STACK
Date: 
Message-ID: <2EP28.4$xY5.631@nsw.nnrp.telstra.net>
Even more interesting - commenting out the tests in main .c results in a
version of saved_gcl.exe which appears to work.