1 The collector uses a large amount of conditional compilation in order to
2 deal with platform dependencies. This violates a number of known coding
3 standards. On the other hand, it seems to be the only practical way to
4 support this many platforms without excessive code duplication.
6 A few guidelines have mostly been followed in order to keep this manageable:
8 1) #if and #ifdef directives are properly indented whenever easily possible.
9 All known C compilers allow whitespace between the "#" and the "if" to make
10 this possible. ANSI C also allows white space before the "#", though we
11 avoid that. It has the known disadvantages that it differs from the normal
12 GNU conventions, and that it makes patches larger than otherwise necessary.
13 In my opinion, it's still well worth it, for the same reason that we indent
14 ordinary "if" statements.
16 2) Whenever possible, tests are performed on the macros defined in gcconfig.h
17 instead of directly testing platform-specific predefined macros. This makes
18 it relatively easy to adapt to new compilers with a different set of
19 predefined macros. Currently these macros generally identify platforms
20 instead of features. In many cases, this is a mistake.
22 Many of the tested configuration macros are at least somewhat defined in
23 either include/private/gcconfig.h or in Makefile.direct. Here is an attempt
24 at documenting these macros: (Thanks to Walter Bright for suggesting
25 this. This is a work in progress)
30 GC_DEBUG Tested by gc.h. Causes all-upper-case macros to
31 expand to calls to debug versions of collector routines.
33 GC_NAMESPACE Tested by gc_cpp.h. Causes gc_cpp symbols to be defined
34 in "boehmgc" namespace.
36 GC_DEBUG_REPLACEMENT Tested by gc.h. Causes GC_MALLOC/REALLOC() to be
37 defined as GC_debug_malloc/realloc_replacement().
39 GC_NO_THREAD_REDIRECTS Tested by gc.h. Prevents redirection of thread
40 creation routines etc. to GC_ versions. Requires the
41 programmer to explicitly handle thread registration.
43 GC_NO_THREAD_DECLS Tested by gc.h. MS Windows only. Do not declare
44 Windows thread creation routines and do not include windows.h.
46 GC_UNDERSCORE_STDCALL Tested by gc.h. Explicitly prefix exported/imported
47 WINAPI (__stdcall) symbols with '_' (underscore). Could be
48 used with MinGW (for x86) compiler (in conjunction with
49 GC_DLL) to follow MS conventions for __stdcall symbols naming.
52 #define'd by the Digital Mars C++ compiler when
53 operator new[] and delete[] are separately
54 overloadable. Used in gc_cpp.h.
56 _DLL Tested by gc_config_macros.h. Defined by Visual C++ if runtime
57 dynamic libraries are in use. Used (only if none of GC_DLL,
58 GC_NOT_DLL, __GNUC__ are defined) to test whether
59 __declspec(dllimport) needs to be added to declarations
60 to support the case in which the collector is in a DLL.
62 GC_DLL Defined by user if dynamic libraries are being built
63 or used. Also set by gc.h if _DLL is defined (except for
64 mingw) while GC_NOT_DLL and __GNUC__ are both undefined.
65 This is the macro that is tested internally to determine
66 whether the GC is in its own dynamic library. May need
67 to be set by clients before including gc.h. Note that
68 inside the GC implementation it indicates that the
69 collector is in its own dynamic library, should export
70 its symbols, etc. But in clients it indicates that the
71 GC resides in a different DLL, its entry points should
72 be referenced accordingly, and precautions may need to
73 be taken to properly deal with statically allocated
74 variables in the main program. Used for MS Windows.
75 Also used by GCC v4+ (only when the dynamic shared library
76 is being built) to hide internally used symbols.
78 GC_NOT_DLL User-settable macro that overrides _DLL, e.g. if runtime
79 dynamic libraries are used, but the collector is in a static
80 library. Tested by gc_config_macros.h.
82 GC_REQUIRE_WCSDUP Force GC to export GC_wcsdup() (the Unicode version
83 of GC_strdup); could be useful in the leak-finding mode.
86 These define arguments influence the collector configuration:
88 FIND_LEAK Causes GC_find_leak to be initially set. This causes the
89 collector to assume that all inaccessible objects should have been
90 explicitly deallocated, and reports exceptions. Finalization and the test
91 program are not usable in this mode.
93 GC_FINDLEAK_DELAY_FREE Turns on deferred freeing of objects in the
94 leak-finding mode letting the collector to detect alter-object-after-free
95 errors as well as detect leaked objects sooner (instead of only when program
96 terminates). Has no effect if SHORT_DBG_HDRS.
98 GC_ABORT_ON_LEAK Causes the application to be terminated once leaked or
99 smashed (corrupted on use-after-free) objects are found (after printing the
100 information about that objects).
102 SUNOS5SIGS Solaris-like signal handling. This is probably misnamed,
103 since it really doesn't guarantee much more than POSIX. Currently set only
104 for Solaris2.X, HPUX, and DRSNX. Should probably be set for some other
107 PCR Set if the collector is being built as part of the Xerox Portable
110 USE_COMPILER_TLS Assume the existence of __thread-style thread-local storage.
111 Set automatically for thread-local allocation with the HP/UX vendor
112 compiler. Usable with gcc on sufficiently up-to-date ELF platforms.
114 IMPORTANT: Any of the _THREADS options must normally also be defined in
115 the client before including gc.h. This redefines thread primitives to
116 invoke the GC_ versions instead. Alternatively, linker-based symbol
117 interception can be used on a few platforms.
119 GC_THREADS Should set the appropriate one of the below macros,
120 except GC_WIN32_PTHREADS, which must be set explicitly. Tested by gc.h.
122 GC_SOLARIS_THREADS Enables support for Solaris pthreads.
123 Must also define _REENTRANT.
125 GC_IRIX_THREADS Enables support for Irix pthreads. See README.sgi.
127 GC_HPUX_THREADS Enables support for HP/UX 11 pthreads.
128 Also requires _REENTRANT or _POSIX_C_SOURCE=199506L. See README.hp.
130 GC_LINUX_THREADS Enables support for Xavier Leroy's Linux threads
131 or NPTL threads. See README.linux. _REENTRANT may also be required.
133 GC_OSF1_THREADS Enables support for Tru64 pthreads.
135 GC_FREEBSD_THREADS Enables support for FreeBSD pthreads.
136 Appeared to run into some underlying thread problems.
138 GC_NETBSD_THREADS Enables support for NetBSD pthreads.
140 GC_OPENBSD_THREADS Enables support for OpenBSD pthreads.
142 GC_DARWIN_THREADS Enables support for Mac OS X pthreads.
144 GC_AIX_THREADS Enables support for IBM AIX threads.
146 GC_DGUX386_THREADS Enables support for DB/UX on I386 threads.
147 See README.DGUX386. (Probably has not been tested recently.)
149 GC_WIN32_THREADS Enables support for Win32 threads. That makes sense
150 for this Makefile only under Cygwin.
152 GC_WIN32_PTHREADS Enables support for Ming32 pthreads. This cannot be
153 enabled automatically by GC_THREADS, which would assume Win32 native
156 PTW32_STATIC_LIB Causes the static version of the Mingw pthreads
157 library to be used. Requires GC_WIN32_PTHREADS.
159 GC_PTHREADS_PARAMARK Causes pthread-based parallel mark implementation
160 to be used even if GC_WIN32_PTHREADS is undefined. (Useful for WinCE.)
162 ALL_INTERIOR_POINTERS Allows all pointers to the interior of objects to be
163 recognized. (See gc_priv.h for consequences.) Alternatively,
164 GC_all_interior_pointers can be set at process initialization time.
166 SMALL_CONFIG Tries to tune the collector for small heap sizes,
167 usually causing it to use less space in such situations. Incremental
168 collection no longer works in this case. Also, removes some
169 statistic-printing code. Turns off some optimization algorithms (like data
170 prefetching in the mark routine).
172 GC_DISABLE_INCREMENTAL Turn off the incremental collection support.
174 NO_INCREMENTAL Causes the gctest program to not invoke the incremental
175 collector. This has no impact on the generated library, only on the test
176 program. (This is often useful for debugging failures unrelated to
179 LARGE_CONFIG Tunes the collector for unusually large heaps.
180 Necessary for heaps larger than about 4 GiB on most (64-bit) machines.
181 Recommended for heaps larger than about 500 MiB. Not recommended for
182 embedded systems. Could be used in conjunction with SMALL_CONFIG to
183 generate smaller code (by disabling incremental collection support,
184 statistic printing and some optimization algorithms).
186 DONT_ADD_BYTE_AT_END Meaningful only with ALL_INTERIOR_POINTERS or
187 GC_all_interior_pointers = 1. Normally ALL_INTERIOR_POINTERS
188 causes all objects to be padded so that pointers just past the end of
189 an object can be recognized. This can be expensive. (The padding
190 is normally more than one byte due to alignment constraints.)
191 DONT_ADD_BYTE_AT_END disables the padding.
193 NO_EXECUTE_PERMISSION May cause some or all of the heap to not
194 have execute permission, i.e. it may be impossible to execute
195 code from the heap. Currently this only affects the incremental
196 collector on UNIX machines. It may greatly improve its performance,
197 since this may avoid some expensive cache synchronization. Alternatively,
198 GC_set_pages_executable can be called at the process initialization time.
200 GC_NO_OPERATOR_NEW_ARRAY Declares that the C++ compiler does not
201 support the new syntax "operator new[]" for allocating and deleting arrays.
202 See gc_cpp.h for details. No effect on the C part of the collector.
203 This is defined implicitly in a few environments. Must also be defined
204 by clients that use gc_cpp.h.
206 REDIRECT_MALLOC=<X> Causes malloc to be defined as alias for X.
207 Unless the following macros are defined, realloc is also redirected
208 to GC_realloc, and free is redirected to GC_free.
209 Calloc and str[n]dup are redefined in terms of the new malloc. X should
210 be either GC_malloc or GC_malloc_uncollectable, or
211 GC_debug_malloc_replacement. (The latter invokes GC_debug_malloc
212 with dummy source location information, but still results in
213 properly remembered call stacks on Linux/X86 and Solaris/SPARC.
214 It requires that the following two macros also be used.)
215 The former is occasionally useful for working around leaks in code
216 you don't want to (or can't) look at. It may not work for
217 existing code, but it often does. Neither works on all platforms,
218 since some ports use malloc or calloc to obtain system memory.
219 (Probably works for UNIX, and Win32.) If you build with DBG_HDRS_ALL,
220 you should only use GC_debug_malloc_replacement as a malloc
223 REDIRECT_REALLOC=<X> Causes GC_realloc to be redirected to X.
224 The canonical use is REDIRECT_REALLOC=GC_debug_realloc_replacement,
225 together with REDIRECT_MALLOC=GC_debug_malloc_replacement to
226 generate leak reports with call stacks for both malloc and realloc.
227 This also requires REDIRECT_FREE.
229 REDIRECT_FREE=<X> Causes free to be redirected to X. The canonical use
230 is REDIRECT_FREE=GC_debug_free.
232 IGNORE_FREE Turns calls to free into a no-op. Only useful with
235 NO_DEBUGGING Removes GC_dump and the debugging routines it calls.
236 Reduces code size slightly at the expense of debuggability.
238 DEBUG_THREADS Turn on printing additional thread-support debugging
241 GC_COLLECT_AT_MALLOC=<n> Force garbage collection at every
242 GC_malloc_* call with the size greater than the specified value.
243 (Might be useful for application debugging or in find-leak mode.)
245 JAVA_FINALIZATION Makes it somewhat safer to finalize objects out of
246 order by specifying a nonstandard finalization mark procedure (see
247 finalize.c). Objects reachable from finalizable objects will be marked
248 in a separate post-pass, and hence their memory won't be reclaimed.
249 Not recommended unless you are implementing a language that specifies
250 these semantics. Since 5.0, determines only the initial value
251 of GC_java_finalization variable.
253 FINALIZE_ON_DEMAND Causes finalizers to be run only in response
254 to explicit GC_invoke_finalizers() calls.
255 In 5.0 this became runtime adjustable, and this only determines the
256 initial value of GC_finalize_on_demand.
258 GC_NO_FINALIZATION Exclude finalization support (for smaller code size)
260 ATOMIC_UNCOLLECTABLE Includes code for GC_malloc_atomic_uncollectable.
261 This is useful if either the vendor malloc implementation is poor,
262 or if REDIRECT_MALLOC is used.
264 MARK_BIT_PER_GRANULE Requests that a mark bit (or often byte)
265 be allocated for each allocation granule, as opposed to each object.
266 This often improves speed, possibly at some cost in space and/or
267 cache footprint. Normally it is best to let this decision be
268 made automatically depending on platform.
270 MARK_BIT_PER_OBJ Requests that a mark bit be allocated for each
271 object instead of allocation granule. The opposite of
272 MARK_BIT_PER_GRANULE.
274 HBLKSIZE=<ddd> Explicitly sets the heap block size (where ddd is a power of
275 2 between 512 and 16384). Each heap block is devoted to a single size and
276 kind of object. For the incremental collector it makes sense to match
277 the most likely page size. Otherwise large values result in more
278 fragmentation, but generally better performance for large heaps.
280 USE_MMAP Use MMAP instead of sbrk to get new memory.
281 Works for Linux, FreeBSD, Cygwin, Solaris and Irix.
283 USE_MUNMAP Causes memory to be returned to the OS under the right
284 circumstances. This currently disables VM-based incremental collection
285 (except for Win32 with GetWriteWatch() available).
286 Works under some Unix, Linux and Windows versions.
287 Requires USE_MMAP except for Windows.
289 USE_WINALLOC (Cygwin only) Use Win32 VirtualAlloc (instead of sbrk or mmap)
290 to get new memory. Useful if memory unmapping (USE_MUNMAP) is enabled.
292 MUNMAP_THRESHOLD=<value> Set the desired memory blocks unmapping
293 threshold (the number of sequential garbage collections for which
294 a candidate block for unmapping should remain free).
296 GC_FORCE_UNMAP_ON_GCOLLECT Set "unmap as much as possible on explicit GC"
297 mode on by default. The mode could be changed at run-time. Has no effect
298 unless unmapping is turned on. Has no effect on implicitly-initiated
301 PRINT_BLACK_LIST Whenever a black list entry is added, i.e. whenever
302 the garbage collector detects a value that looks almost, but not quite,
303 like a pointer, print both the address containing the value, and the
304 value of the near-bogus-pointer. Can be used to identify regions of
305 memory that are likely to contribute misidentified pointers.
307 KEEP_BACK_PTRS Add code to save back pointers in debugging headers
308 for objects allocated with the debugging allocator. If all objects
309 through GC_MALLOC with GC_DEBUG defined, this allows the client
310 to determine how particular or randomly chosen objects are reachable
311 for debugging/profiling purposes. The gc_backptr.h interface is
312 implemented only if this is defined.
314 GC_ASSERTIONS Enable some internal GC assertion checking. Currently
315 this facility is only used in a few places. It is intended primarily
316 for debugging of the garbage collector itself, but could also...
318 DBG_HDRS_ALL Make sure that all objects have debug headers. Increases
319 the reliability (from 99.9999% to 100% mod. bugs) of some of the debugging
320 code (especially KEEP_BACK_PTRS). Makes SHORT_DBG_HDRS possible.
321 Assumes that all client allocation is done through debugging allocators.
323 SHORT_DBG_HDRS Assume that all objects have debug headers. Shorten
324 the headers to minimize object size, at the expense of checking for
325 writes past the end of an object. This is intended for environments
326 in which most client code is written in a "safe" language, such as
327 Scheme or Java. Assumes that all client allocation is done using
328 the GC_debug_ functions, or through the macros that expand to these,
329 or by redirecting malloc to GC_debug_malloc_replacement.
330 (Also eliminates the field for the requested object size.)
331 Occasionally could be useful for debugging of client code. Slows down the
332 collector somewhat, but not drastically.
334 SAVE_CALL_COUNT=<n> Set the number of call frames saved with objects
335 allocated through the debugging interface. Affects the amount of
336 information generated in leak reports. Only matters on platforms
337 on which we can quickly generate call stacks, currently Linux/(X86 & SPARC)
338 and Solaris/SPARC and platforms that provide execinfo.h.
339 Default is zero. On X86, client
340 code should NOT be compiled with -fomit-frame-pointer.
342 SAVE_CALL_NARGS=<n> Set the number of functions arguments to be saved
343 with each call frame. Default is zero. Ignored if we don't know how to
344 retrieve arguments on the platform.
346 CHECKSUMS Reports on erroneously clear dirty bits, and unexpectedly
347 altered stubborn objects, at substantial performance cost. Use only for
348 debugging of the incremental collector. Not compatible with USE_MUNMAP
351 GC_GCJ_SUPPORT Includes support for gcj (and possibly other systems
352 that include a pointer to a type descriptor in each allocated object).
353 Building this way requires an ANSI C compiler.
355 USE_I686_PREFETCH Causes the collector to issue Pentium III style
356 prefetch instructions. No effect except on X86 Linux platforms.
357 Assumes a very recent gcc-compatible compiler and assembler.
358 (Gas prefetcht0 support was added around May 1999.)
359 Empirically the code appears to still run correctly on Pentium II
360 processors, though with no performance benefit. May not run on other
361 X86 processors? In some cases this improves performance by
364 USE_3DNOW_PREFETCH Causes the collector to issue AMD 3DNow style
365 prefetch instructions. Same restrictions as USE_I686_PREFETCH.
366 Minimally tested. Didn't appear to be an obvious win on a K6-2/500.
368 USE_PPC_PREFETCH Causes the collector to issue PowerPC style
369 prefetch instructions. No effect except on PowerPC OS X platforms.
370 Performance impact untested.
372 GC_USE_LD_WRAP In combination with the old flags listed in README.linux
373 causes the collector some system and pthread calls in a more transparent
374 fashion than the usual macro-based approach. Requires GNU ld, and
375 currently probably works only with Linux.
377 GC_USE_DLOPEN_WRAP Causes the collector to redefine malloc and
378 intercepted pthread routines with their real names, and causes it to use
379 dlopen and dlsym to refer to the original versions. This makes it possible
380 to build an LD_PRELOADable malloc replacement library.
382 THREAD_LOCAL_ALLOC Defines GC_malloc(), GC_malloc_atomic() and
383 GC_gcj_malloc() to use a per-thread set of free-lists. These then allocate
384 in a way that usually does not involve acquisition of a global lock.
385 Recommended for multiprocessors. Requires explicit GC_INIT() call, unless
386 REDIRECT_MALLOC is defined and GC_malloc is used first.
388 USE_COMPILER_TLS Causes thread local allocation to use
389 the compiler-supported "__thread" thread-local variables. This is the
390 default in HP/UX. It may help performance on recent Linux installations.
391 (It failed for me on RedHat 8, but appears to work on RedHat 9.)
393 PARALLEL_MARK Allows the marker to run in multiple threads. Recommended
396 DONT_USE_SIGNALANDWAIT (Win32 only) Use an alternate implementation for
397 marker threads (if PARALLEL_MARK defined) synchronization routines based
398 on InterlockedExchange() (instead of AO_fetch_and_add()) and on multiple
399 event objects (one per each marker instead of that based on Win32
400 SignalObjectAndWait() using a single event object). This is the default
403 GC_WINMAIN_REDIRECT (Win32 only) Redirect (rename) an application
404 WinMain to GC_WinMain; implement the "real" WinMain which starts a new
405 thread to call GC_WinMain after initializing the GC. Useful for WinCE.
406 Incompatible with GC_DLL.
408 GC_REGISTER_MEM_PRIVATE (Win32 only) Force to register MEM_PRIVATE R/W
409 sections as data roots. Might be needed for some WinCE 6.0+ custom builds.
410 (May result in numerous "Data Abort" messages logged to WinCE debugging
411 console.) Incompatible with GCC toolchains for WinCE.
413 NO_GETENV Prevents the collector from looking at environment variables.
414 These may otherwise alter its configuration, or turn off GC altogether.
415 I don't know of a reason to disable this, except possibly if the resulting
416 process runs as a privileged user. (This is on by default for WinCE.)
418 EMPTY_GETENV_RESULTS Define to workaround a reputed Wine bug in getenv
419 (getenv() may return an empty string instead of NULL for a missing entry).
421 GC_READ_ENV_FILE (Win32 only) Read environment variables from the GC "env"
422 file (named as the program name plus ".gc.env" extension). Useful for WinCE
423 targets (which have no getenv()). In the file, every variable is specified
424 in a separate line and the format is as "<name>=<value>" (without spaces).
425 A comment line may start with any character except for the Latin letters,
426 the digits and the underscore ('_'). The file encoding is Latin-1.
428 USE_GLOBAL_ALLOC (Win32 only) Use GlobalAlloc() instead of VirtualAlloc()
429 to allocate the heap. May be needed to work around a Windows NT/2000 issue.
430 Incompatible with USE_MUNMAP. See README.win32 for details.
432 MAKE_BACK_GRAPH Enable GC_PRINT_BACK_HEIGHT environment variable.
433 See README.environment for details. Experimental. Limited platform
434 support. Implies DBG_HDRS_ALL. All allocation should be done using
437 GC_PRINT_BACK_HEIGHT Permanently turn on back-height printing mode
438 (useful when NO_GETENV). See the similar environment variable description
439 in README.environment. Requires MAKE_BACK_GRAPH defined.
441 STUBBORN_ALLOC Allows allocation of "hard to change" objects, and thus
442 makes incremental collection easier. Was enabled by default until 6.0.
443 Rarely used, to my knowledge.
445 HANDLE_FORK (Unix and Cygwin only) Attempt by default to make GC_malloc()
446 work in a child process fork()'ed from a multi-threaded parent. Not fully
447 POSIX-compliant and could be disabled at runtime (before GC_INIT).
449 TEST_WITH_SYSTEM_MALLOC Causes gctest to allocate (and leak) large
450 chunks of memory with the standard system malloc. This will cause the root
451 set and collected heap to grow significantly if malloc'ed memory is somehow
452 getting traced by the collector. This has no impact on the generated
453 library; it only affects the test.
455 POINTER_MASK=<0x...> Causes candidate pointers to be AND'ed with the given
456 mask before being considered. If either this or the following macro is
457 defined, it will be assumed that all pointers stored in the heap need to be
458 processed this way. Stack and register pointers will be considered both
459 with and without processing. These macros are normally needed only to
460 support systems that use high-order pointer tags. EXPERIMENTAL.
462 POINTER_SHIFT=<n> Causes the collector to left shift candidate pointers
463 by the indicated amount before trying to interpret them. Applied after
464 POINTER_MASK. EXPERIMENTAL. See also the preceding macro.
466 ENABLE_TRACE Enables the GC_TRACE=addr environment setting to do its job.
467 By default this is not supported in order to keep the marker as fast as
470 DARWIN_DONT_PARSE_STACK Causes the Darwin port to discover thread
471 stack bounds in the same way as other pthread ports, without trying to
472 walk the frames on the stack. This is recommended only as a fall-back for
473 applications that don't support proper stack unwinding.
475 GC_NO_THREADS_DISCOVERY (Darwin and Win32+DLL only) Exclude DllMain-based
476 (on Windows) and task-threads-based (on Darwin) thread registration support.
478 GC_INSIDE_DLL (Win32 only) Enable DllMain-based approach of threads
479 registering even in case GC_DLL is not defined.
481 GC_DISCOVER_TASK_THREADS (Darwin and Win32+DLL only) Compile the collector
482 with the implicitly turned on task-threads-based (on Darwin) or
483 DllMain-based (on Windows) approach of threads registering. Only for
484 compatibility and for the case when it is not possible to call
485 GC_use_threads_discovery() early (before other GC calls).
487 USE_PROC_FOR_LIBRARIES Causes the Linux collector to treat writable
488 memory mappings (as reported by /proc) as roots, if it doesn't have
489 other information about them. It no longer traverses dynamic loader
490 data structures to find dynamic library static data. This may be
491 required for applications that store pointers in mmapped segments without
492 informing the collector. But it typically performs poorly, especially
493 since it will scan inactive but cached NPTL thread stacks completely.
495 IGNORE_DYNAMIC_LOADING Don't define DYNAMIC_LOADING even if supported by the
496 platform (that is, build the collector with disabled tracing of dynamic
499 NO_PROC_STAT Causes the collector to avoid relying on Linux
502 NO_GETCONTEXT Causes the collector to not assume the existence of the
503 getcontext() function on linux-like platforms. This currently happens
504 implicitly on Darwin, Hurd, or ARM or MIPS hardware. It is explicitly
505 needed for some old versions of FreeBSD.
507 STATIC=static Causes various GC_ symbols that could logically be declared
508 static to be declared (this is the default if NO_DEBUGGING is specified).
509 Reduces the number of visible symbols (letting the optimizer do its work
510 better), which is probably cleaner, but may make some kinds of debugging
511 and profiling harder.
513 GC_DLL Build dynamic-link library (or dynamic shared object). For Unix this
514 causes the exported symbols to have 'default' visibility (ignored unless
515 GCC v4+) and the internal ones to have 'hidden' visibility.
517 DONT_USE_USER32_DLL (Win32 only) Don't use "user32" DLL import library
518 (containing MessageBox() entry); useful for a static GC library.
520 GC_PREFER_MPROTECT_VDB Choose MPROTECT_VDB manually in case of multiple
521 virtual dirty bit strategies are implemented (at present useful on Win32 and
522 Solaris to force MPROTECT_VDB strategy instead of the default GWW_VDB or
525 GC_IGNORE_GCJ_INFO Disable GCJ-style type information (useful for
528 GC_PRINT_VERBOSE_STATS Permanently turn on verbose logging (useful for
529 debugging and profiling on WinCE).
531 GC_ONLY_LOG_TO_FILE Don't redirect GC stdout and stderr to the log file
532 specified by GC_LOG_FILE environment variable. Has effect only when the
533 variable is set (to anything other than "0").
535 GC_ANDROID_LOG (Android only) Output error/debug information to Android log.
537 GC_DONT_EXPAND Don't expand the heap unless explicitly requested or forced to.
539 GC_USE_ENTIRE_HEAP Causes the non-incremental collector to use the
540 entire heap before collecting. This sometimes results in more large block
541 fragmentation, since very large blocks will tend to get broken up during
542 each GC cycle. It is likely to result in a larger working set, but lower
543 collection frequencies, and hence fewer instructions executed in the
544 collector. This macro controls only the default GC_use_entire_heap value.
546 GC_INITIAL_HEAP_SIZE=<value> Set the desired default initial heap size
549 GC_FREE_SPACE_DIVISOR=<value> Set alternate default GC_free_space_divisor
552 GC_TIME_LIMIT=<milliseconds> Set alternate default GC_time_limit value
553 (setting this to GC_TIME_UNLIMITED will essentially disable incremental
554 collection while leaving generational collection enabled).
556 GC_FULL_FREQ=<value> Set alternate default number of partial collections
557 between full collections (matters only if incremental collection is on).
559 NO_CANCEL_SAFE (Posix platforms with threads only) Don't bother trying
560 to make the collector safe for thread cancellation; cancellation is not
561 used. (Note that if cancellation is used anyway, threads may end up
562 getting cancelled in unexpected places.) Even without this option,
563 PTHREAD_CANCEL_ASYNCHRONOUS is never safe with the collector. (We could
564 argue about its safety without the collector.)
566 UNICODE (Win32 only) Use the Unicode variant ('W') of the Win32 API instead
567 of ANSI/ASCII one ('A'). Useful for WinCE.
569 PLATFORM_ANDROID (or __ANDROID__) Compile for Android NDK platform.
571 SN_TARGET_PS3 Compile for Sony PS/3.
573 USE_GET_STACKBASE_FOR_MAIN (Linux only) Use pthread_attr_getstack() instead
574 of __libc_stack_end (or instead of any hard-coded value) for getting the
575 primordial thread stack base (useful if the client modifies the program's