These operations were included before the unsigned module was
incorporated directly into system.nim and subsequently caused
compilation errors with --gc:go due to duplicate definitions.
In order to be able to scan thread stacks, the Boehm GC needs to know
about newly created threads. We establish the end of the stack by using
GC_call_with_stack_base (this works properly also with the dual-stack
Itanium architecture) and then GC_register_my_thread() to register a
thrad and GC_unregister_my_thread() to unregister it again.
This patch also includes a modification for the refc and markandsweep
collectors to set the stack bottom for thread stacks correctly even if
an optimizer aggressively inlines and optimizes procedures (this is
already being done for the stack of the main thread).
Finally, we use the {.noconv.} pragma for the Boehm GC, as the Boehm
API uses no specific calling convention.
Motivation
----------
Some linuxes (like Fedora) actually multiarch. And it means that
libgc.so.1 not always installed into /usr/lib. It is better to entrust
this job to ld and system configuration for it.
Modification
------------
Use relative path for Boehm GC on 'other' OS (and linux in particular)
Result
------
It is possible now to build nim with --gc:boehm on linux
The Boehm GC interface did not define the getXXXSharedMem() functions
that were needed for compilation with --threads:on. It also used
`ppointer` instead of `PPointer`, so it failed to compile with
--cs:partial.
This revision is intended as comparison point between the old and the new GC
The used GC can be switched in mmdisp and various statistics will be gathered during
execution (these will be removed/disabled in later revisions)