[Gc] Problems with Emscripten

Bruce A Henderson <[email protected]> Tue, 29 Sep 2015 18:52:10 +0100
Newsgroups gmane.comp.programming.garbage-collection.boehmgc
Message-ID <[email protected]>
Hi,

I have created a C-language generator ( https://github.com/bmx-ng ) for 
the programming language BlitzMax ( http://www.blitzmax.com ) in order 
to support more platforms.
It successfully uses the Boehm GC on all currently targeted platforms 
and architectures (OSX, iOS, Android, Windows, Linux, Pi), except that 
is for Emscripten, where everything falls apart.

It appears, given the nature of the errors, that all of my global 
variables are being collected. For example, one object pushes output to 
stdout, and is working early in the run. However on the next call, it 
simply doesn't exist any more.

The variable is declared extern in the header, and like this in the .c :

struct brl_stream_TStream_obj* brl_standardio_StandardIOStream;

This particular object is created with GC_MALLOC_ATOMIC(), and is 
assigned a finalizer with GC_REGISTER_FINALIZER().

The modular project consists of many linked archives/static libs, which 
produce the final binary.

I am not setting any roots, letting the GC take care of that, as this 
works on all the other platforms.

Is there anything specific I should be doing (compile flags, definitions 
) for emscripten in order to hang on to my global variable references?


Thanks,

Bruce