2001-02-27 Benjamin Kosnik <bkoz@redhat.com>
[official-gcc.git] / boehm-gc / README.win32
blobd78816b555d5dfb73f62b5d7c1382c44c29f08b6
1 The collector has only been compiled under Windows NT, with the
2 original Microsoft SDK, with Visual C++ 2.0 and later, with
3 the GNU win32 environment, with Borland 4.5, and recently with
4 Watcom C.
6 It runs under both win32s and win32, but with different semantics.
7 Under win32, all writable pages outside of the heaps and stack are
8 scanned for roots.  Thus the collector sees pointers in DLL data
9 segments.  Under win32s, only the main data segment is scanned.
10 (The main data segment should always be scanned.  Under some
11 versions of win32s, other regions may also be scanned.)
12 Thus all accessible objects should be accessible from local variables
13 or variables in the main data segment.  Alternatively, other data
14 segments (e.g. in DLLs) may be registered with the collector by
15 calling GC_init() and then GC_register_root_section(a), where
16 a is the address of some variable inside the data segment.  (Duplicate
17 registrations are ignored, but not terribly quickly.)
19 (There are two reasons for this.  We didn't want to see many 16:16
20 pointers.  And the VirtualQuery call has different semantics under
21 the two systems, and under different versions of win32s.)
23 The collector test program "gctest" is linked as a GUI application,
24 but does not open any windows.  Its output appears in the file
25 "gc.log".  It may be started from the file manager.  The hour glass
26 cursor will appear as long as it's running.  If it is started from the
27 command line, it will usually run in the background.  Wait a few
28 minutes (a few seconds on a modern machine) before you check the output.
29 You should see either a failure indication or a "Collector appears to
30 work" message.
32 The cord test program has not been ported (but should port
33 easily).  A toy editor (cord/de.exe) based on cords (heavyweight
34 strings represented as trees) has been ported and is included.
35 It runs fine under either win32 or win32S.  It serves as an example
36 of a true Windows application, except that it was written by a
37 nonexpert Windows programmer.  (There are some peculiarities
38 in the way files are displayed.  The <cr> is displayed explicitly
39 for standard DOS text files.  As in the UNIX version, control
40 characters are displayed explicitly, but in this case as red text.
41 This may be suboptimal for some tastes and/or sets of default
42 window colors.)
44 For Microsoft development tools, rename NT_MAKEFILE as
45 MAKEFILE.  (Make sure that the CPU environment variable is defined
46 to be i386.)
48 For GNU-win32, use the regular makefile, possibly after uncommenting
49 the line "include Makefile.DLLs".  The latter should be necessary only
50 if you want to package the collector as a DLL.  The GNU-win32 port is
51 believed to work only for b18, not b19, probably dues to linker changes
52 in b19.  This is probably fixable with a different definition of
53 DATASTART and DATAEND in gcconfig.h.
55 For Borland tools, use BCC_MAKEFILE.  Note that
56 Borland's compiler defaults to 1 byte alignment in structures (-a1),
57 whereas Visual C++ appears to default to 8 byte alignment (/Zp8).
58 The garbage collector in its default configuration EXPECTS AT
59 LEAST 4 BYTE ALIGNMENT.  Thus the BORLAND DEFAULT MUST
60 BE OVERRIDDEN.  (In my opinion, it should usually be anyway.
61 I expect that -a1 introduces major performance penalties on a
62 486 or Pentium.)  Note that this changes structure layouts.  (As a last
63 resort, gcconfig.h can be changed to allow 1 byte alignment.  But
64 this has significant negative performance implications.)
65 The Makefile is set up to assume Borland 4.5.  If you have another
66 version, change the line near the top.  By default, it does not
67 require the assembler.  If you do have the assembler, I recommend
68 removing the -DUSE_GENERIC.
70 Incremental collection support was recently added.  This is
71 currently pretty simpleminded.  Pages are protected.  Protection
72 faults are caught by a handler installed at the bottom of the handler
73 stack.  This is both slow and interacts poorly with a debugger.
74 Whenever possible, I recommend adding a call to
75 GC_enable_incremental at the last possible moment, after most
76 debugging is complete.  Unlike the UNIX versions, no system
77 calls are wrapped by the collector itself.  It may be necessary
78 to wrap ReadFile calls that use a buffer in the heap, so that the
79 call does not encounter a protection fault while it's running.
80 (As usual, none of this is an issue unless GC_enable_incremental
81 is called.)
83 Note that incremental collection is disabled with -DSMALL_CONFIG,
84 which is the default for win32.  If you need incremental collection,
85 undefine SMALL_CONFIG.
87 Incremental collection is not supported under win32s, and it may not
88 be possible to do so.  However, win32 applications that attempt to use
89 incremental collection should continue to run, since the
90 collector detects if it's running under win32s and turns calls to
91 GC_enable_incremental() into noops.
93 James Clark has contributed the necessary code to support win32 threads.
94 This code is known to exhibit some problems with incremental collection
95 enabled.  Use NT_THREADS_MAKEFILE (a.k.a gc.mak) instead of NT_MAKEFILE
96 to build this version.  Note that this requires some files whose names
97 are more than 8 + 3 characters long.  Thus you should unpack the tar file
98 so that long file names are preserved.  To build the garbage collector
99 test with VC++ from the command line, use
101 nmake /F ".\gc.mak" CFG="gctest - Win32 Release"
103 This requires that the subdirectory gctest\Release exist.
104 The test program and DLL will reside in the Release directory.
106 This version relies on the collector residing in a dll.
108 This version currently supports incremental collection only if it is
109 enabled before any additional threads are created.
110 Version 4.13 attempts to fix some of the earlier problems, but there
111 may be other issues.  If you need solid support for win32 threads, you
112 might check with Geodesic Systems.  Their collector must be licensed,
113 but they have invested far more time in win32-specific issues.
115 Hans
117 Ivan V. Demakov's README for the Watcom port:
119 The collector has been compiled with Watcom C 10.6 and 11.0.
120 It runs under win32, win32s, and even under msdos with dos4gw
121 dos-extender. It should also run under OS/2, though this isn't
122 tested. Under win32 the collector can be built either as dll
123 or as static library.
125 Note that all compilations were done under Windows 95 or NT.
126 For unknown reason compiling under Windows 3.11 for NT (one
127 attempt has been made) leads to broken executables.
129 Incremental collection is not supported.
131 cord is not ported.
133 Before compiling you may need to edit WCC_MAKEFILE to set target
134 platform, library type (dynamic or static), calling conventions, and
135 optimization options.
137 To compile the collector and testing programs use the command:
138     wmake -f WCC_MAKEFILE
140 All programs using gc should be compiled with 4-byte alignment.
141 For further explanations on this see comments about Borland.
143 If gc compiled as dll, the macro ``GC_DLL'' should be defined before
144 including "gc.h" (for example, with -DGC_DLL compiler option). It's
145 important, otherwise resulting programs will not run.
147 Ivan Demakov (email: ivan@tgrad.nsk.su)