implemented Setup.hs to build boehm cpp libs and install them;
[hs-boehmgc.git] / gc-7.2 / doc / README.changes
1 This is a rough history of garbage collector bugs and versions.
2
3 This has been maintained with varying diligence over the years.
4
5 I made an attempt to include recent contributors here.  I apologize for any
6 omissions.
7
8 RECENT UPDATES ARE RECORDED IN ../ChangeLog FILE INSTEAD TO CONFORM TO
9 MORE COMMON CONVENTIONS.
10
11 -------------------------
12
13   Version 1.3 and immediately preceding versions contained spurious
14 assembly language assignments to TMP_SP.  Only the assignment in the PC/RT
15 code is necessary.  On other machines, with certain compiler options,
16 the assignments can lead to an unsaved register being overwritten.
17 Known to cause problems under SunOS 3.5 WITHOUT the -O option.  (With
18 -O the compiler recognizes it as dead code.  It probably shouldn't,
19 but that's another story.)
20
21   Version 1.4 and earlier versions used compile time determined values
22 for the stack base.  This no longer works on Sun 3s, since Sun 3/80s use
23 a different stack base.  We now use a straightforward heuristic on all
24 machines on which it is known to work (incl. Sun 3s) and compile-time
25 determined values for the rest.  There should really be library calls
26 to determine such values.
27
28   Version 1.5 and earlier did not ensure 8 byte alignment for objects
29 allocated on a sparc based machine.
30
31   Version 1.8 added ULTRIX support in gc_private.h.
32   
33   Version 1.9 fixed a major bug in gc_realloc.
34   
35   Version 2.0 introduced a consistent naming convention for collector
36 routines and added support for registering dynamic library data segments
37 in the standard mark_roots.c.  Most of the data structures were revamped.
38 The treatment of interior pointers was completely changed.  Finalization
39 was added.  Support for locking was added.  Object kinds were added.
40 We added a black listing facility to avoid allocating at addresses known
41 to occur as integers somewhere in the address space.  Much of this
42 was accomplished by adapting ideas and code from the PCR collector.
43 The test program was changed and expanded.
44
45   Version 2.1 was the first stable version since 1.9, and added support
46 for PPCR.
47
48   Version 2.2 added debugging allocation, and fixed various bugs.  Among them:
49 - GC_realloc could fail to extend the size of the object for certain large object sizes.
50 - A blatant subscript range error in GC_printf, which unfortunately
51   wasn't exercised on machines with sufficient stack alignment constraints.
52 - GC_register_displacement did the wrong thing if it was called after
53   any allocation had taken place.
54 - The leak finding code would eventually break after 2048 byte
55   byte objects leaked.
56 - interface.c didn't compile.
57 - The heap size remained much too small for large stacks.
58 - The stack clearing code behaved badly for large stacks, and perhaps
59   on HP/PA machines.
60
61   Version 2.3 added ALL_INTERIOR_POINTERS and fixed the following bugs:
62 - Missing declaration of etext in the A/UX version.
63 - Some PCR root-finding problems.
64 - Blacklisting was not 100% effective, because the plausible future
65   heap bounds were being miscalculated.
66 - GC_realloc didn't handle out-of-memory correctly.
67 - GC_base could return a nonzero value for addresses inside free blocks.
68 - test.c wasn't really thread safe, and could erroneously report failure
69   in a multithreaded environment.  (The locking primitives need to be
70   replaced for other threads packages.)
71 - GC_CONS was thoroughly broken.
72 - On a SPARC with dynamic linking, signals stayed diabled while the
73   client code was running.
74   (Thanks to Manuel Serrano at INRIA for reporting the last two.)
75   
76   Version 2.4 added GC_free_space_divisor as a tuning knob, added
77   support for OS/2 and linux, and fixed the following bugs:
78 - On machines with unaligned pointers (e.g. Sun 3), every 128th word could
79   fail to be considered for marking.
80 - Dynamic_load.c erroneously added 4 bytes to the length of the data and
81   bss sections of the dynamic library.  This could result in a bad memory
82   reference if the actual length was a multiple of a page.  (Observed on
83   Sun 3.  Can probably also happen on a Sun 4.)
84   (Thanks to Robert Brazile for pointing out that the Sun 3 version
85   was broken.  Dynamic library handling is still broken on Sun 3s
86   under 4.1.1U1, but apparently not 4.1.1.  If you have such a machine,
87   use -Bstatic.)
88   
89   Version 2.5 fixed the following bugs:
90 - Removed an explicit call to exit(1)
91 - Fixed calls to GC_printf and GC_err_printf, so the correct number of
92   arguments are always supplied.  The OS/2 C compiler gets confused if
93   the number of actuals and the number of formals differ.  (ANSI C
94   doesn't require this to work.  The ANSI sanctioned way of doing things
95   causes too many compatibility problems.)
96   
97   Version 3.0  added generational/incremental collection and stubborn
98   objects.
99
100   Version 3.1 added the following features:
101 - A workaround for a SunOS 4.X SPARC C compiler
102   misfeature that caused problems when the collector was turned into
103   a dynamic library.  
104 - A fix for a bug in GC_base that could result in a memory fault.
105 - A fix for a performance bug (and several other misfeatures) pointed
106   out by Dave Detlefs and Al Dosser.
107 - Use of dirty bit information for static data under Solaris 2.X.
108 - DEC Alpha/OSF1 support (thanks to Al Dosser).
109 - Incremental collection on more platforms.
110 - A more refined heap expansion policy.  Less space usage by default.
111 - Various minor enhancements to reduce space usage, and to reduce
112   the amount of memory scanned by the collector.
113 - Uncollectable allocation without per object overhead.
114 - More conscientious handling of out-of-memory conditions.
115 - Fixed a bug in debugging stubborn allocation.
116 - Fixed a bug that resulted in occasional erroneous reporting of smashed
117   objects with debugging allocation.
118 - Fixed bogus leak reports of size 4096 blocks with FIND_LEAK.
119
120   Version 3.2 fixed a serious and not entirely repeatable bug in
121   the incremental collector.  It appeared only when dirty bit info
122   on the roots was available, which is normally only under Solaris.
123   It also added GC_general_register_disappearing_link, and some
124   testing code.  Interface.c disappeared.
125
126   Version 3.3 fixes several bugs and adds new ports:
127 - PCR-specific bugs.
128 - Missing locking in GC_free, redundant FASTUNLOCK
129   in GC_malloc_stubborn, and 2 bugs in
130   GC_unregister_disappearing_link.
131   All of the above were pointed out by Neil Sharman
132   (neil@cs.mu.oz.au).
133 - Common symbols allocated by the SunOS4.X dynamic loader
134   were not included in the root set.
135 - Bug in GC_finalize (reported by Brian Beuning and Al Dosser)
136 - Merged Amiga port from Jesper Peterson (untested)
137 - Merged NeXT port from Thomas Funke (significantly
138   modified and untested)
139
140   Version 3.4:
141 - Fixed a performance bug in GC_realloc.
142 - Updated the amiga port.
143 - Added NetBSD and 386BSD ports.
144 - Added cord library.
145 - Added trivial performance enhancement for
146   ALL_INTERIOR_POINTERS.  (Don't scan last word.)
147   
148   Version 3.5
149 - Minor collections now mark from roots only once, if that
150   doesn't cause an excessive pause.
151 - The stack clearing heuristic was refined to prevent anomalies
152   with very heavily recursive programs and sparse stacks.
153 - Fixed a bug that prevented mark stack growth in some cases.
154   GC_objects_are_marked should be set to TRUE after a call
155   to GC_push_roots and as part of GC_push_marked, since
156   both can now set mark bits.  I think this is only a performance
157   bug, but I wouldn't bet on it.  It's certainly very hard to argue
158   that the old version was correct.
159 - Fixed an incremental collection bug that prevented it from
160   working at all when HBLKSIZE != getpagesize()
161 - Changed dynamic_loading.c to include gc_priv.h before testing
162   DYNAMIC_LOADING.  SunOS dynamic library scanning
163   must have been broken in 3.4.
164 - Object size rounding now adapts to program behavior.
165 - Added a workaround (provided by Manuel Serrano and
166   colleagues) to a long-standing SunOS 4.X (and 3.X?) ld bug
167   that I had incorrectly assumed to have been squished.
168   The collector was broken if the text segment size was within
169   32 bytes of a multiple of 8K bytes, and if the beginning of
170   the data segment contained interesting roots.  The workaround
171   assumes a demand-loadable executable.  The original may have
172   have "worked" in some other cases.
173 - Added dynamic library support under IRIX5.
174 - Added support for EMX under OS/2 (thanks to Ari Huttunen).
175   
176 Version 3.6:
177 - fixed a bug in the mark stack growth code that was introduced
178   in 3.4.
179 - fixed Makefile to work around DEC AXP compiler tail recursion
180   bug.
181
182 Version 3.7:
183 - Added a workaround for an HP/UX compiler bug.
184 - Fixed another stack clearing performance bug.  Reworked
185   that code once more.
186   
187 Version 4.0:
188 - Added support for Solaris threads (which was possible
189   only by reimplementing some fraction of Solaris threads,
190   since Sun doesn't currently make the thread debugging
191   interface available).
192 - Added non-threads win32 and win32S support.
193 - (Grudgingly, with suitable muttering of obscenities) renamed
194   files so that the collector distribution could live on a FAT
195   file system.  Files that are guaranteed to be useless on
196   a PC still have long names.  Gc_inline.h and gc_private.h
197   still exist, but now just include  gc_inl.h and gc_priv.h.
198 - Fixed a really obscure bug in finalization that could cause
199   undetected mark stack overflows.  (I would be surprised if
200   any real code ever tickled this one.)
201 - Changed finalization code to dynamically resize the hash
202   tables it maintains.  (This probably does not matter for well-
203   -written code.  It no doubt does for C++ code that overuses
204   destructors.)
205 - Added typed allocation primitives.  Rewrote the marker to
206   accommodate them with more reasonable efficiency.  This
207   change should also speed up marking for GC_malloc allocated
208   objects a little.  See gc_typed.h for new primitives.
209 - Improved debugging facilities slightly.  Allocation time
210   stack traces are now kept by default on SPARC/SUNOS4.
211   (Thanks to Scott Schwartz.)
212 - Added better support for small heap applications.
213 - Significantly extended cord package.  Fixed a bug in the
214   implementation of lazily read files.  Printf and friends now
215   have cord variants.  Cord traversals are a bit faster.
216 - Made ALL_INTERIOR_POINTERS recognition the default.
217 - Fixed de so that it can run in constant space, independent
218   of file size.  Added simple string searching to cords and de.
219 - Added the Hull-Ellis C++ interface.
220 - Added dynamic library support for OSF/1.
221   (Thanks to Al Dosser and Tim Bingham at DEC.)
222 - Changed argument to GC_expand_hp to be expressed
223   in units of bytes instead of heap blocks.  (Necessary
224   since the heap block size now varies depending on
225   configuration.  The old version was never very clean.)
226 - Added GC_get_heap_size().  The previous "equivalent"
227   was broken.
228 - Restructured the Makefile a bit.  
229
230 Since version 4.0:
231 - Changed finalization implementation to guarantee that
232   finalization procedures are called outside of the allocation
233   lock, making direct use of the interface a little less dangerous.
234   MAY BREAK EXISTING CLIENTS that assume finalizers
235   are protected by a lock.  Since there seem to be few multithreaded
236   clients that use finalization, this is hopefully not much of
237   a problem.
238 - Fixed a gross bug in CORD_prev.
239 - Fixed a bug in blacklst.c that could result in unbounded
240   heap growth during startup on machines that do not clear
241   memory obtained from the OS (e.g. win32S).
242 - Ported de editor to win32/win32S.  (This is now the only
243   version with a mouse-sensitive UI.)
244 - Added GC_malloc_ignore_off_page to allocate large arrays
245   in the presence of ALL_INTERIOR_POINTERS.
246 - Changed GC_call_with_alloc_lock to not disable signals in
247   the single-threaded case.
248 - Reduced retry count in GC_collect_or_expand for garbage
249   collecting when out of memory.
250 - Made uncollectable allocations bypass black-listing, as they
251   should.
252 - Fixed a bug in typed_test in test.c that could cause (legitimate)
253   GC crashes.
254 - Fixed some potential synchronization problems in finalize.c
255 - Fixed a real locking problem in typd_mlc.c.
256 - Worked around an AIX 3.2 compiler feature that results in
257   out of bounds memory references.
258 - Partially worked around an IRIX5.2 beta problem (which may
259   or may not persist to the final release).
260 - Fixed a bug in the heap integrity checking code that could
261   result in explicitly deallocated objects being identified as
262   smashed.  Fixed a bug in the dbg_mlc stack saving code
263   that caused old argument pointers to be considered live.
264 - Fixed a bug in CORD_ncmp (and hence CORD_str).
265 - Repaired the OS2 port, which had suffered from bit rot
266   in 4.0.  Worked around what appears to be CSet/2 V1.0
267   optimizer bug.
268 - Fixed a Makefile bug for target "c++".
269
270 Since version 4.1:
271 - Multiple bug fixes/workarounds in the Solaris threads version.
272   (It occasionally failed to locate some register contents for
273   marking.  It also turns out that thr_suspend and friends are
274   unreliable in Solaris 2.3.  Dirty bit reads appear
275   to be unreliable under some weird 
276   circumstances.  My stack marking code
277   contained a serious performance bug.  The new code is
278   extremely defensive, and has not failed in several cpu
279   hours of testing.  But  no guarantees ...)
280 - Added MacOS support (thanks to Patrick Beard.)
281 - Fixed several syntactic bugs in gc_c++.h and friends.  (These
282   didn't bother g++, but did bother most other compilers.)
283   Fixed gc_c++.h finalization interface.  (It didn't.)
284 - 64 bit alignment for allocated objects was not guaranteed in a
285   few cases in which it should have been.
286 - Added GC_malloc_atomic_ignore_off_page.
287 - Added GC_collect_a_little.
288 - Added some prototypes to gc.h.
289 - Some other minor bug fixes (notably in Makefile).
290 - Fixed OS/2 / EMX port (thanks to Ari Huttunen).
291 - Fixed AmigaDOS port. (thanks to Michel Schinz).
292 - Fixed the DATASTART definition under Solaris.  There
293   was a 1 in 16K chance of the collector missing the first
294   64K of static data (and thus crashing).
295 - Fixed some blatant anachronisms in the README file.
296 - Fixed PCR-Makefile for upcoming PPCR release.
297
298 Since version 4.2:
299 - Fixed SPARC alignment problem with GC_DEBUG.
300 - Fixed Solaris threads /proc workaround.  The real
301   problem was an interaction with mprotect.
302 - Incorporated fix from Patrick Beard for gc_c++.h (now gc_cpp.h).
303 - Slightly improved allocator space utilization by
304   fixing the GC_size_map mechanism.
305 - Integrated some Sony News and MIPS RISCos 4.51
306   patches.  (Thanks to Nobuyuki Hikichi of
307   Software Research Associates, Inc. Japan)
308 - Fixed HP_PA alignment problem.  (Thanks to
309   xjam@cork.cs.berkeley.edu.)
310 - Added GC_same_obj and friends.  Changed GC_base
311   to return 0 for pointers past the end of large objects.
312   Improved GC_base performance with ALL_INTERIOR_POINTERS
313   on machines with a slow integer mod operation.
314   Added GC_PTR_ADD, GC_PTR_STORE, etc. to prepare
315   for preprocessor.
316 - changed the default on most UNIX machines to be that
317   signals are not disabled during critical GC operations.
318   This is still ANSI-conforming, though somewhat dangerous
319   in the presence of signal handlers. But the performance
320   cost of the alternative is sometimes problematic.
321   Can be changed back with a minor Makefile edit.
322 - renamed IS_STRING in gc.h, to CORD_IS_STRING, thus
323   following my own naming convention.  Added the function
324   CORD_to_const_char_star.
325 - Fixed a gross bug in GC_finalize.  Symptom: occasional
326   address faults in that function.  (Thanks to Anselm
327   Baird-Smith (Anselm.BairdSmith@inria.fr)
328 - Added port to ICL DRS6000 running DRS/NX.  Restructured
329   things a bit to factor out common code, and remove obsolete
330   code.  Collector should now run under SUNOS5 with either
331   mprotect or /proc dirty bits.  (Thanks to Douglas Steel
332   (doug@wg.icl.co.uk)).
333 - More bug fixes and workarounds for Solaris 2.X.  (These were
334   mostly related to putting the collector in a dynamic library,
335   which didn't really work before.  Also SOLARIS_THREADS
336   didn't interact well with dl_open.)  Thanks to btlewis@eng.sun.com.
337 - Fixed a serious performance bug on the DEC Alpha.  The text
338   segment was getting registered as part of the root set.
339   (Amazingly, the result was still fast enough that the bug
340   was not conspicuous.) The fix works on OSF/1, version 1.3.
341   Hopefully it also works on other versions of OSF/1 ...
342 - Fixed a bug in GC_clear_roots.
343 - Fixed a bug in GC_generic_malloc_words_small that broke
344   gc_inl.h.  (Reported by Antoine de Maricourt.  I broke it
345   in trying to tweak the Mac port.) 
346 - Fixed some problems with cord/de under Linux.
347 - Fixed some cord problems, notably with CORD_riter4.
348 - Added DG/UX port.
349   Thanks to Ben A. Mesander (ben@piglet.cr.usgs.gov)
350 - Added finalization registration routines with weaker ordering
351   constraints.  (This is necessary for C++ finalization with
352   multiple inheritance, since the compiler often adds self-cycles.)
353 - Filled the holes in the SCO port. (Thanks to Michael Arnoldus
354   <chime@proinf.dk>.)
355 - John Ellis' additions to the C++ support:  From John:
356
357 * I completely rewrote the documentation in the interface gc_c++.h
358 (later renamed gc_cpp.h).  I've tried to make it both clearer and more
359 precise.
360
361 * The definition of accessibility now ignores pointers from an
362 finalizable object (an object with a clean-up function) to itself.
363 This allows objects with virtual base classes to be finalizable by the
364 collector.  Compilers typically implement virtual base classes using
365 pointers from an object to itself, which under the old definition of
366 accessibility prevented objects with virtual base classes from ever
367 being collected or finalized.
368
369 * gc_cleanup now includes gc as a virtual base.  This was enabled by
370 the change in the definition of accessibility.
371
372 * I added support for operator new[].  Since most (all?) compilers
373 don't yet support operator new[], it is conditionalized on
374 -DOPERATOR_NEW_ARRAY.  The code is untested, but its trivial and looks
375 correct.
376
377 * The test program test_gc_c++ (later renamed test_cpp.cc)
378 tries to test for the C++-specific functionality not tested by the
379 other programs.
380 - Added <unistd.h> include to misc.c.  (Needed for ppcr.)
381 - Added PowerMac port. (Thanks to Patrick Beard again.)
382 - Fixed "srcdir"-related Makefile problems.  Changed things so
383   that all externally visible include files always appear in the
384   include subdirectory of the source.  Made gc.h directly
385   includable from C++ code.  (These were at Per
386   Bothner's suggestion.)
387 - Changed Intel code to also mark from ebp (Kevin Warne's
388   suggestion).
389 - Renamed C++ related files so they could live in a FAT
390   file system. (Charles Fiterman's suggestion.)
391 - Changed Windows NT Makefile to include C++ support in
392   gc.lib.  Added C++ test as Makefile target.
393   
394 Since version 4.3:
395  - ASM_CLEAR_CODE was erroneously defined for HP
396    PA machines, resulting in a compile error.
397  - Fixed OS/2 Makefile to create a library.  (Thanks to
398    Mark Boulter (mboulter@vnet.ibm.com)).
399  - Gc_cleanup objects didn't work if they were created on
400    the stack.  Fixed.
401  - One copy of Gc_cpp.h in the distribution was out of 
402    synch, and failed to document some known compiler
403    problems with explicit destructor invocation.  Partially
404    fixed.  There are probably other compilers on which
405    gc_cleanup is miscompiled.
406  - Fixed Makefile to pass C compiler flags to C++ compiler.
407  - Added Mac fixes.
408  - Fixed os_dep.c to work around what appears to be
409    a new and different VirtualQuery bug under newer
410    versions of win32S.
411  - GC_non_gc_bytes was not correctly maintained by
412    GC_free.  Fixed.  Thanks to James Clark (jjc@jclark.com).
413  - Added GC_set_max_heap_size.
414  - Changed allocation code to ignore blacklisting if it is preventing
415    use of a very large block of memory.  This has the advantage
416    that naive code allocating very large objects is much more
417    likely to work.  The downside is you might no
418    longer find out that such code should really use
419    GC_malloc_ignore_off_page.
420  - Changed GC_printf under win32 to close and reopen the file
421    between calls.  FAT file systems otherwise make the log file
422    useless for debugging.
423  - Added GC_try_to_collect and GC_get_bytes_since_gc.  These
424    allow starting an abortable collection during idle times. 
425    This facility does not require special OS support.  (Thanks to
426    Michael Spertus of Geodesic Systems for suggesting this.  It was
427    actually an easy addition.  Kumar Srikantan previously added a similar
428    facility to a now ancient version of the collector.  At the time
429    this was much harder, and the result was less convincing.)
430  - Added some support for the Borland development environment.  (Thanks
431    to John Ellis and Michael Spertus.)
432  - Removed a misfeature from checksums.c that caused unexpected 
433    heap growth.  (Thanks to Scott Schwartz.)
434  - Changed finalize.c to call WARN if it encounters a finalization cycle.
435    WARN is defined in gc_priv.h to write a message, usually to stdout.
436    In many environments, this may be inappropriate.
437  - Renamed NO_PARAMS in gc.h to GC_NO_PARAMS, thus adhering to my own
438    naming convention.
439  - Added GC_set_warn_proc to intercept warnings.
440  - Fixed Amiga port. (Thanks to Michel Schinz (schinz@alphanet.ch).)
441  - Fixed a bug in mark.c that could result in an access to unmapped
442    memory from GC_mark_from_mark_stack on machines with unaligned
443    pointers.
444  - Fixed a win32 specific performance bug that could result in scanning of
445    objects allocated with the system malloc.
446  - Added REDIRECT_MALLOC.
447
448 Since version 4.4:
449  - Fixed many minor and one major README bugs. (Thanks to Franklin Chen
450    (chen@adi.com) for pointing out many of them.)
451  - Fixed ALPHA/OSF/1 dynamic library support. (Thanks to Jonathan Bachrach
452    (jonathan@harlequin.com)).
453  - Added incremental GC support (MPROTECT_VDB) for Linux (with some
454    help from Bruno Haible).
455  - Altered SPARC recognition tests in gc.h and config.h (mostly as
456    suggested by Fergus Henderson).
457  - Added basic incremental GC support for win32, as implemented by
458    Windows NT and Windows 95.  GC_enable_incremental is a noop
459    under win32s, which doesn't implement enough of the VM interface.
460  - Added -DLARGE_CONFIG.
461  - Fixed GC_..._ignore_off_page to also function without
462    -DALL_INTERIOR_POINTERS.
463  - (Hopefully) fixed RS/6000 port.  (Only the test was broken.)
464  - Fixed a performance bug in the nonincremental collector running
465    on machines supporting incremental collection with MPROTECT_VDB
466    (e.g. SunOS 4, DEC AXP).  This turned into a correctness bug under
467    win32s with win32 incremental collection.  (Not all memory protection
468    was disabled.)
469  - Fixed some ppcr related bit rot.
470  - Caused dynamic libraries to be unregistered before reregistering.
471    The old way turned out to be a performance bug on some machines.
472  - GC_root_size was not properly maintained under MSWIN32.
473  - Added -DNO_DEBUGGING and GC_dump.
474  - Fixed a couple of bugs arising with SOLARIS_THREADS +
475    REDIRECT_MALLOC.
476  - Added NetBSD/M68K port.  (Thanks to Peter Seebach
477    <seebs@taniemarie.solon.com>.)
478  - Fixed a serious realloc bug.  For certain object sizes, the collector
479    wouldn't scan the expanded part of the object.  (Thanks to Clay Spence
480    (cds@peanut.sarnoff.com) for noticing the problem, and helping me to
481    track it down.)
482    
483 Since version 4.5:
484  - Added Linux ELF support.  (Thanks to Arrigo Triulzi <arrigo@ic.ac.uk>.)
485  - GC_base crashed if it was called before any other GC_ routines.
486    This could happen if a gc_cleanup object was allocated outside the heap
487    before any heap allocation.
488  - The heap expansion heuristic was not stable if all objects had finalization
489    enabled.  Fixed finalize.c to count memory in finalization queue and
490    avoid explicit deallocation.  Changed alloc.c to also consider this count.
491    (This is still not recommended.  It's expensive if nothing else.)  Thanks
492    to John Ellis for pointing this out.
493  - GC_malloc_uncollectable(0) was broken.  Thanks to Phong Vo for pointing
494    this out.
495  - The collector didn't compile under Linux 1.3.X.  (Thanks to Fred Gilham for
496    pointing this out.)  The current workaround is ugly, but expected to be
497    temporary.
498  - Fixed a formatting problem for SPARC stack traces.
499  - Fixed some '=='s in os_dep.c that should have been assignments.
500    Fortunately these were in code that should never be executed anyway.
501    (Thanks to Fergus Henderson.)
502  - Fixed the heap block allocator to only drop blacklisted blocks in small
503    chunks.  Made BL_LIMIT self adjusting.  (Both of these were in response
504    to heap growth observed by Paul Graham.)
505  - Fixed the Metrowerks/68K Mac code to also mark from a6.  (Thanks
506    to Patrick Beard.)
507  - Significantly updated README.debugging.
508  - Fixed some problems with longjmps out of signal handlers, especially under
509    Solaris.  Added a workaround for the fact that siglongjmp doesn't appear to
510    do the right thing with -lthread under Solaris.
511  - Added MSDOS/djgpp port.  (Thanks to Mitch Harris  (maharri@uiuc.edu).)
512  - Added "make reserved_namespace" and "make user_namespace".  The
513    first renames ALL "GC_xxx" identifiers as "_GC_xxx".  The second is the
514    inverse transformation.  Note that doing this is guaranteed to break all
515    clients written for the other names.
516  - descriptor field for kind NORMAL in GC_obj_kinds with ADD_BYTE_AT_END
517    defined should be -ALIGNMENT not WORDS_TO_BYTES(-1).  This is
518    a serious bug on machines with pointer alignment of less than a word.
519  - GC_ignore_self_finalize_mark_proc didn't handle pointers to very near the
520    end of the object correctly.  Caused failures of the C++ test on a DEC Alpha
521    with g++.
522  - gc_inl.h still had problems.  Partially fixed.  Added warnings at the
523    beginning to hopefully specify the remaining dangers.
524  - Added DATAEND definition to config.h.
525  - Fixed some of the .h file organization.  Fixed "make floppy".
526  
527 Since version 4.6:
528  - Fixed some compilation problems with -DCHECKSUMS (thanks to Ian Searle)
529  - Updated some Mac specific files to synchronize with Patrick Beard.
530  - Fixed a serious bug for machines with non-word-aligned pointers.
531    (Thanks to Patrick Beard for pointing out the problem.  The collector
532    should fail almost any conceivable test immediately on such machines.)
533
534 Since version 4.7:
535  - Changed a "comment" in a MacOS specific part of mach-dep.c that caused
536    gcc to fail on other platforms.
537
538 Since version 4.8
539  - More README.debugging fixes.
540  - Objects ready for finalization, but not finalized in the same GC
541    cycle, could be prematurely collected.  This occasionally happened
542    in test_cpp.
543  - Too little memory was obtained from the system for very large
544    objects.  That could cause a heap explosion if these objects were
545    not contiguous (e.g. under PCR), and too much of them was blacklisted.
546  - Due to an improper initialization, the collector was too hesitant to
547    allocate blacklisted objects immediately after system startup.
548  - Moved GC_arrays from the data into the bss segment by not explicitly
549    initializing it to zero.  This significantly
550    reduces the size of executables, and probably avoids some disk accesses
551    on program startup.  It's conceivable that it might break a port that I
552    didn't test.
553  - Fixed EMX_MAKEFILE to reflect the gc_c++.h to gc_cpp.h renaming which
554    occurred a while ago.
555
556 Since 4.9:
557  - Fixed a typo around a call to GC_collect_or_expand in alloc.c.  It broke
558    handling of out of memory.  (Thanks to Patrick Beard for noticing.)
559
560 Since 4.10:
561  - Rationalized (hopefully) GC_try_to_collect in an incremental collection
562    environment.  It appeared to not handle a call while a collection was in
563    progress, and was otherwise too conservative.
564  - Merged GC_reclaim_or_delete_all into GC_reclaim_all to get rid of some
565    code.
566  - Added Patrick Beard's Mac fixes, with substantial completely untested
567    modifications.
568  - Fixed the MPROTECT_VDB code to deal with large pages and imprecise
569    fault addresses (as on an UltraSPARC running Solaris 2.5).  Note that this
570    was not a problem in the default configuration, which uses PROC_VDB.
571  - The DEC Alpha assembly code needed to restore $gp between calls.
572    Thanks to Fergus Henderson for tracking this down and supplying a
573    patch.
574  - The write command for "de" was completely broken for large files.
575    I used the easiest portable fix, which involved changing the semantics
576    so that f.new is written instead of overwriting f.  That's safer anyway.
577  - Added README.solaris2 with a discussion of the possible problems of
578    mixing the collector's sbrk allocation with malloc/realloc.
579  - Changed the data segment starting address for SGI machines.  The
580    old code failed under IRIX6.
581  - Required double word alignment for MIPS.
582  - Various minor fixes to remove warnings.
583  - Attempted to fix some Solaris threads problems reported by Zhiying Chen.
584    In particular, the collector could try to fork a thread with the
585    world stopped as part of GC_thr_init.  It also failed to deal with
586    the case in which the original thread terminated before the whole
587    process did.
588  - Added -DNO_EXECUTE_PERMISSION.  This has a major performance impact
589    on the incremental collector under Irix, and perhaps under other
590    operating systems.
591  - Added some code to support allocating the heap with mmap.  This may
592    be preferable under some circumstances.
593  - Integrated dynamic library support for HP.
594    (Thanks to Knut Tvedten <knuttv@ifi.uio.no>.)
595  - Integrated James Clark's win32 threads support, and made a number
596    of changes to it, many of which were suggested by Pontus Rydin.
597    This is still not 100% solid.
598  - Integrated Alistair Crooks' support for UTS4 running on an Amdahl
599    370-class machine.
600  - Fixed a serious bug in explicitly typed allocation.  Objects requiring
601    large descriptors where handled in a way that usually resulted in
602    a segmentation fault in the marker.  (Thanks to Jeremy Fitzhardinge
603    for helping to track this down.)
604  - Added partial support for GNU win32 development.  (Thanks to Fergus
605    Henderson.)
606  - Added optional support for Java-style finalization semantics.  (Thanks
607    to Patrick Bridges.)  This is recommended only for Java implementations.
608  - GC_malloc_uncollectable faulted instead of returning 0 when out of
609    memory.  (Thanks to dan@math.uiuc.edu for noticing.)
610  - Calls to GC_base before the collector was initialized failed on a
611    DEC Alpha.  (Thanks to Matthew Flatt.)
612  - Added base pointer checking to GC_REGISTER_FINALIZER in debugging
613    mode, at the suggestion of Jeremy Fitzhardinge.
614  - GC_debug_realloc failed for uncollectable objects.  (Thanks to
615    Jeremy Fitzhardinge.)
616  - Explicitly typed allocation could crash if it ran out of memory.
617    (Thanks to Jeremy Fitzhardinge.)
618  - Added minimal support for a DEC Alpha running Linux.
619  - Fixed a problem with allocation of objects whose size overflowed
620    ptrdiff_t.  (This now fails unconditionally, as it should.)
621  - Added the beginning of Irix pthread support.
622  - Integrated Xiaokun Zhu's fixes for djgpp 2.01.
623  - Added SGI-style STL allocator support (gc_alloc.h).
624  - Fixed a serious bug in README.solaris2.  Multithreaded programs must include
625    gc.h with SOLARIS_THREADS defined.
626  - Changed GC_free so it actually deallocates uncollectable objects.
627    (Thanks to Peter Chubb for pointing out the problem.)
628  - Added Linux ELF support for dynamic libararies.  (Thanks again to
629    Patrick Bridges.)
630  - Changed the Borland cc configuration so that the assembler is not
631    required.
632  - Fixed a bug in the C++ test that caused it to fail in 64-bit
633    environments.
634
635 Since 4.11:
636  - Fixed ElfW definition in dyn_load.c. (Thanks to Fergus Henderson.)
637    This prevented the dynamic library support from compiling on some
638    older ELF Linux systems.
639  - Fixed UTS4 port (which I apparently mangled during the integration)
640    (Thanks to again to Alistair Crooks.)
641  - "Make C++" failed on Suns with SC4.0, due to a problem with "bool".
642    Fixed in gc_priv.h.
643  - Added more pieces for GNU win32.  (Thanks to Timothy N. Newsham.)
644    The current state of things should suffice for at least some
645    applications.
646  - Changed the out of memory retry count handling as suggested by
647    Kenjiro Taura.  (This matters only if GC_max_retries > 0, which
648    is no longer the default.)
649  - If a /proc read failed repeatedly, GC_written_pages was not updated
650    correctly.  (Thanks to Peter Chubb for diagnosing this.)
651  - Under unlikely circumstances, the allocator could infinite loop in
652    an out of memory situation.  (Thanks again to Kenjiro Taura for
653    identifying the problem and supplying a fix.)
654  - Fixed a syntactic error in the DJGPP code.  (Thanks to Fergus
655    Henderson for finding this by inspection.)  Also fixed a test program
656    problem with DJGPP (Thanks to Peter Monks.)
657  - Atomic uncollectable objects were not treated correctly by the
658    incremental collector.  This resulted in weird log statistics and
659    occasional performance problems.  (Thanks to Peter Chubb for pointing
660    this out.)
661  - Fixed some problems resulting from compilers that dont define
662    __STDC__.  In this case void * and char * were used inconsistently
663    in some cases.  (Void * should not have been used at all.  If
664    you have an ANSI superset compiler that does not define __STDC__,
665    please compile with -D__STDC__=0. Thanks to Manuel Serrano and others
666    for pointing out the problem.)
667  - Fixed a compilation problem on Irix with -n32 and -DIRIX_THREADS.
668    Also fixed some other IRIX_THREADS problems which may or may not have
669    had observable symptoms.
670  - Fixed an HP PA compilation problem in dyn_load.c.  (Thanks to
671    Philippe Queinnec.)
672  - SEGV fault handlers sometimes did not get reset correctly.  (Thanks
673    to David Pickens.)
674  - Added a fix for SOLARIS_THREADS on Intel.  (Thanks again to David
675    Pickens.)  This probably needs more work to become functional.
676  - Fixed struct sigcontext_struct in os_dep.c for compilation under
677    Linux 2.1.X. (Thanks to Fergus Henderson.)
678  - Changed the DJGPP STACKBOTTOM and DATASTART values to those suggested
679    by Kristian Kristensen.  These may still not be right, but it is
680    it is likely to work more often than what was there before.  They may
681    even be exactly right.
682  - Added a #include <string.h> to test_cpp.cc.  This appears to help
683    with HP/UX and gcc.  (Thanks to assar@sics.se.)
684  - Version 4.11 failed to run in incremental mode on recent 64-bit Irix
685    kernels.  This was a problem related to page unaligned heap segments.
686    Changed the code to page align heap sections on all platforms.
687    (I had mistakenly identified this as a kernel problem earlier.
688    It was not.)
689  - Version 4.11 did not make allocated storage executable, except on
690    one or two platforms, due to a bug in a #if test.  (Thanks to Dave
691    Grove for pointing this out.)
692  - Added sparc_sunos4_mach_dep.s to support Sun's compilers under SunOS4.
693  - Added GC_exclude_static_roots.
694  - Fixed the object size mapping algorithm.  This shouldn't matter,
695    but the old code was ugly.
696  - Heap checking code could die if one of the allocated objects was
697    larger than its base address.  (Unsigned underflow problem.  Thanks
698    to Clay Spence for isolating the problem.)
699  - Added RS6000 (AIX) dynamic library support and fixed STACK_BOTTOM.
700    (Thanks to Fred Stearns.)
701  - Added Fergus Henderson's patches for improved robustness with large
702    heaps and lots of blacklisting.
703  - Added Peter Chubb's changes to support Solaris Pthreads, to support
704    MMAP allocation in Solaris, to allow Solaris to find dynamic libraries
705    through /proc, to add malloc_typed_ignore_off_page, and a few other
706    minor features and bug fixes.
707  - The Solaris 2 port should not use sbrk.  I received confirmation from
708    Sun that the use of sbrk and malloc in the same program is not
709    supported.  The collector now defines USE_MMAP by default on Solaris.
710  - Replaced the djgpp makefile with Gary Leavens' version.
711  - Fixed MSWIN32 detection test.
712  - Added Fergus Henderson's patches to allow putting the collector into
713    a DLL under GNU win32.
714  - Added Ivan V. Demakov's port to Watcom C on X86.
715  - Added Ian Piumarta's Linux/PowerPC port.
716  - On Brian Burton's suggestion added PointerFreeGC to the placement
717    options in gc_cpp.h.  This is of course unsafe, and may be controversial.
718    On the other hand, it seems to be needed often enough that it's worth
719    adding as a standard facility.
720
721 Since 4.12:
722  - Fixed a crucial bug in the Watcom port.  There was a redundant decl
723    of GC_push_one in gc_priv.h.
724  - Added FINALIZE_ON_DEMAND.
725  - Fixed some pre-ANSI cc problems in test.c.
726  - Removed getpagesize() use for Solaris.  It seems to be missing in one
727    or two versions.
728  - Fixed bool handling for SPARCCompiler version 4.2.
729  - Fixed some files in include that had gotten unlinked from the main
730    copy.
731  - Some RS/6000 fixes (missing casts).  Thanks to Toralf Foerster.
732  - Fixed several problems in GC_debug_realloc, affecting mostly the
733    FIND_LEAK case.
734  - GC_exclude_static_roots contained a buggy unsigned comparison to
735    terminate a loop.  (Thanks to Wilson Ho.)
736  - CORD_str failed if the substring occurred at the last possible position.
737    (Only affects cord users.)
738  - Fixed Linux code to deal with RedHat 5.0 and integrated Peter Bigot's
739    os_dep.c code for dealing with various Linux versions.
740  - Added workaround for Irix pthreads sigaction bug and possible signal
741    misdirection problems.
742 Since alpha1:
743  - Changed RS6000 STACKBOTTOM.
744  - Integrated Patrick Beard's Mac changes.
745  - Alpha1 didn't compile on Irix m.n, m < 6.
746  - Replaced Makefile.dj with a new one from Gary Leavens.
747  - Added Andrew Stitcher's changes to support SCO OpenServer.
748  - Added PRINT_BLACK_LIST, to allow debugging of high densities of false
749    pointers.
750  - Added code to debug allocator to keep track of return address
751    in GC_malloc caller, thus giving a bit more context.
752  - Changed default behavior of large block allocator to more
753    aggressively avoid fragmentation.  This is likely to slow down the
754    collector when it succeeds at reducing space cost.
755  - Integrated Fergus Henderson's CYGWIN32 changes.  They are untested,
756    but needed for newer versions.
757  - USE_MMAP had some serious bugs.  This caused the collector to fail
758    consistently on Solaris with -DSMALL_CONFIG.
759  - Added Linux threads support, thanks largely to Fergus Henderson.
760 Since alpha2:
761  - Fixed more Linux threads problems.
762  - Changed default GC_free_space_divisor to 3 with new large block allocation.
763    (Thanks to Matthew Flatt for some measurements that suggest the old
764    value sometimes favors space too much over time.)
765  - More CYGWIN32 fixes.
766  - Integrated Tyson-Dowd's Linux-M68K port.
767  - Minor HP PA and DEC UNIX fixes from Fergus Henderson.
768  - Integrated Christoffe Raffali's Linux-SPARC changes.
769  - Allowed for one more GC fixup iteration after a full GC in incremental
770    mode.  Some quick measurements suggested that this significantly
771    reduces pause times even with smaller GC_RATE values.
772  - Moved some more GC data structures into GC_arrays.  This decreases
773    pause times and GC overhead, but makes debugging slightly less convenient.
774  - Fixed namespace pollution problem ("excl_table").
775  - Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking
776    that slightly.
777  - Added some win32 threads fixes.
778  - Integrated Ivan Demakov and David Stes' Watcom fixes.
779  - Various other minor fixes contributed by many people.
780  - Renamed config.h to gcconfig.h, since config.h tends to be used for
781    many other things.
782  - Integrated Matthew Flatt's support for 68K MacOS "far globals".
783  - Fixed up some of the dynamic library Makefile targets for consistency
784    across platforms.
785  - Fixed a USE_MMAP typo that caused out-of-memory handling to fail
786    on Solaris.
787  - Added code to test.c to test thread creation a bit more.
788  - Integrated GC_win32_free_heap, as suggested by Ivan Demakov.
789  - Fixed Solaris 2.7 stack base finding problem.  (This may actually
790    have been done in an earlier alpha release.)
791 Since alpha3:
792  - Fixed MSWIN32 recognition test, which interfered with cygwin.
793  - Removed unnecessary gc_watcom.asm from distribution.  Removed
794    some obsolete README.win32 text.
795  - Added Alpha Linux incremental GC support.  (Thanks to Philipp Tomsich
796    for code for retrieving the fault address in a signal handler.)
797    Changed Linux signal handler context argument to be a pointer.
798  - Took care of some new warnings generated by the 7.3 SGI compiler.
799  - Integrated Phillip Musumeci's FreeBSD/ELF fixes.
800  - -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h>
801
802 Since 4.13:
803  - Fixed GC_print_source_ptr to not use a prototype.
804  - generalized CYGWIN test.
805  - gc::new did the wrong thing with PointerFreeGC placement.
806    (Thanks to Rauli Ruohonen.)
807  - In the ALL_INTERIOR_POINTERS (default) case, some callee-save register
808    values could fail to be scanned if the register was saved and
809    reused in a GC frame.  This showed up in verbose mode with gctest
810    compiled with an unreleased SGI compiler.  I vaguely recall an old
811    bug report that may have been related.  The bug was probably quite old.
812    (The problem was that the stack scanning could be deferred until
813    after the relevant frame was overwritten, and the new save location
814    might be outside the scanned area.  Fixed by more eager stack scanning.)
815  - PRINT_BLACK_LIST had some problems.  A few source addresses were garbage.
816  - Replaced Makefile.dj and added -I flags to cord make targets.
817    (Thanks to Gary Leavens.)
818  - GC_try_to_collect was broken with the nonincremental collector.
819  - gc_cleanup destructors could pass the wrong address to
820    GC_register_finalizer_ignore_self in the presence of multiple
821    inheritance.  (Thanks to Darrell Schiebel.)
822  - Changed PowerPC Linux stack finding code.
823
824 Since 4.14alpha1
825  - -DSMALL_CONFIG did not work reliably with large (> 4K) pages.
826    Recycling the mark stack during expansion could result in a size
827    zero heap segment, which confused things.  (This was probably also an
828    issue with the normal config and huge pages.)
829  - Did more work to make sure that callee-save registers were scanned
830    completely, even with the setjmp-based code.  Added USE_GENERIC_PUSH_REGS
831    macro to facilitate testing on machines I have access to.
832  - Added code to explicitly push register contents for win32 threads.
833    This seems to be necessary.  (Thanks to Pierre de Rop.)
834
835 Since 4.14alpha2
836  - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea).
837  
838 Since 4.14
839  - Reworked large block allocator.  Now uses multiple doubly linked free
840    lists to approximate best fit.
841  - Changed heap expansion heuristic.  Entirely free blocks are no longer
842    counted towards the heap size.  This seems to have a major impact on
843    heap size stability; the old version could expand the heap way too
844    much in the presence of large block fragmentation.
845  - added -DGC_ASSERTIONS and some simple assertions inside the collector.
846    This is mainlyt for collector debugging.
847  - added -DUSE_MUNMAP to allow the heap to shrink.  Suupported on only
848    a few UNIX-like platforms for now.
849  - added GC_dump_regions() for debugging of fragmentation issues.
850  - Changed PowerPC pointer alignment under Linux to 4.  (This needs
851    checking by someone who has one.  The suggestions came to me via a
852    rather circuitous path.)
853  - Changed the Linux/Alpha port to walk the data segment backwards until
854    it encounters a SIGSEGV.  The old way to find the start of the data
855    segment broke with a recent release.
856  - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of
857    GC_register_finalizer, so that it would continue to work with GC_DEBUG.
858  - allochblk sometimes cleared the wrong block for debugging purposes
859    when it dropped blacklisted blocks.  This could result in spurious
860    error reports with GC_DEBUG.
861  - added MACOS X Server support.  (Thanks to Andrew Stone.)
862  - Changed the Solaris threads code to ignore stack limits > 8 MB with
863    a warning.  Empirically, it is not safe to access arbitrary pages
864    in such large stacks.  And the dirty bit implementation does not
865    guarantee that none of them will be accessed.
866  - Integrated Martin Tauchmann's Amiga changes.
867  - Integrated James Dominy's OpenBSD/SPARC port.
868
869 Since 5.0alpha1
870  - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization).
871  - Added -DKEEP_BACK_PTRS and backptr.h interface.  (The implementation
872    idea came from Al Demers.)
873
874 Since 5.0alpha2
875  - Added some highly incomplete code to support a copied young generation.
876    Comments on nursery.h are appreciated.
877  - Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND,
878    so the same effect could be obtained with a runtime switch.   This is
879    a step towards standardizing on a single dynamic GC library.
880  - Significantly changed the way leak detection is handled, as a consequence
881    of the above.
882
883 Since 5.0 alpha3
884  - Added protection fault handling patch for Linux/M68K from Fergus
885    Henderson and Roman Hodek.
886  - Removed the tests for SGI_SOURCE in new_gc_alloc.h.  This was causing that
887    interface to fail on nonSGI platforms.
888  - Changed the Linux stack finding code to use /proc, after changing it
889    to use HEURISTIC1.  (Thanks to David Mossberger for pointing out the
890    /proc hook.)
891  - Added HP/UX incremental GC support and HP/UX 11 thread support.
892    Thread support is currently still flakey.
893  - Added basic Linux/IA64 support.
894  - Integrated Anthony Green's PicoJava support.
895  - Integrated Scott Ananian's StrongARM/NetBSD support.
896  - Fixed some fairly serious performance bugs in the incremental
897    collector.  These have probably been there essentially forever.
898    (Mark bits were sometimes set before scanning dirty pages.
899    The reclaim phase unnecessarily dirtied full small object pages.)
900  - Changed the reclaim phase to ignore nearly full pages to avoid
901    touching them.
902  - Limited GC_black_list_spacing to roughly the heap growth increment.
903  - Changed full collection triggering heuristic to decrease full GC
904    frequency by default, but to explicitly trigger full GCs during
905    heap growth.  This doesn't always improve things, but on average it's
906    probably a win.
907  - GC_debug_free(0, ...) failed.  Thanks to Fergus Henderson for the
908    bug report and fix.
909
910 Since 5.0 alpha4
911  - GC_malloc_explicitly_typed and friends sometimes failed to
912    initialize first word.
913  - Added allocation routines and support in the marker for mark descriptors
914    in a type structure referenced by the first word of an object.  This was
915    introduced to support gcj, but hopefully in a way that makes it
916    generically useful.
917  - Added GC_requested_heapsize, and inhibited collections in nonincremental
918    mode if the actual used heap size is less than what was explicitly
919    requested.
920  - The Solaris pthreads version of GC_pthread_create didn't handle a NULL
921    attribute pointer.  Solaris thread support used the wrong default thread
922    stack size.  (Thanks to Melissa O'Neill for the patch.)
923  - Changed PUSH_CONTENTS macro to no longer modify first parameter.
924    This usually doesn't matter, but it was certainly an accident waiting
925    to happen ...
926  - Added GC_register_finalizer_no_order and friends to gc.h.  They're
927    needed by Java implementations.
928  - Integrated a fix for a win32 deadlock resulting from clock() calling
929    malloc.  (Thanks to Chris Dodd.)
930  - Integrated Hiroshi Kawashima's port to Linux/MIPS.  This was designed
931    for a handheld platform, and may or may not be sufficient for other
932    machines.
933  - Fixed a va_arg problem with the %c specifier in cordprnt.c.  It appears
934    that this was always broken, but recent versions of gcc are the first to
935    report the (statically detectable) bug.
936  - Added an attempt at a more general solution to dlopen races/deadlocks.
937    GC_dlopen now temporarily disables collection.  Still not ideal, but ...
938  - Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64
939    prefetch instructions.  May improve performance measurably, but I'm not
940    sure the code will run correctly on processors that don't support the
941    instruction.  Won't build except with very recent gcc.
942  - Added caching for header lookups in the marker.  This seems to result
943    in a barely measurable performance gain.  Added support for interleaved
944    lookups of two pointers, but unconfigured that since the performance
945    gain is currently near zero, and it adds to code size.
946  - Changed Linux DATA_START definition to check both data_start and
947    __data_start, since nothing else seems to be portable.
948  - Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function
949    wrapping mechanism.  Probably currently useful only on Linux.
950  - Moved some variables for the scratch allocator into GC_arrays, on
951    Martin Hirzel's suggestion.
952  - Fixed a win32 threads bug that caused the collector to not look for
953    interior pointers from one of the thread stacks without
954    ALL_INTERIOR_POINTERS.  (Thanks to Jeff Sturm.)
955  - Added Mingw32 support.  (Thanks again to Jeff Sturm for the patch.)
956  - Changed the alpha port to use the generic register scanning code instead
957    of alpha_mach_dep.s.  Alpha_mach_dep.s doesn't look for pointers in fp
958    registers, but gcc sometimes spills pointers there.  (Thanks to Manuel
959    Serrano for helping me debug this by email.)  Changed the IA64 code to
960    do something similar for similar reasons.
961
962 [5.0alpha5 doesn't really exist, but it may have escaped.]
963
964 Since 5.0alpha6:
965  - -DREDIRECT_MALLOC was broken in alpha6. Fixed.
966  - Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to
967    accept it.
968  - Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be
969    linked into every executable.
970  - Added PREFETCH to bitmap marker.  Changed it to use the header cache.
971  - GC_push_marked sometimes pushed one object too many, resulting in a
972    segmentation fault in GC_mark_from_mark_stack.  This was probably an old
973    bug.  It finally showed up in gctest on win32.
974  - Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE
975    when SMALL_CONFIG was defined.  This was no doubt a major performance bug for
976    the default win32 configuration.
977  - Removed -DSMALL_CONFIG from NT_MAKEFILE.  It seemed like an anchronism now
978    that the average PC has 64MB or so.
979  - Integrated Bryce McKinley's patches for linux threads and dynamic loading
980    from the libgcj tree.  Turned on dynamic loading support for Linux/PPC.
981  - Changed the stack finding code to use environ on HP/UX.  (Thanks
982    to Gustavo Rodriguez-Rivera for the suggestion.)  This should probably
983    be done on other platforms, too.  Since I can't test those, that'll
984    wait until after 5.0.
985
986 Since 5.0alpha7:
987  - Fixed threadlibs.c for linux threads.  -DUSE_LD_WRAP was broken and
988    -ldl was omitted.  Fixed Linux stack finding code to handle
989    -DUSE_LD_WRAP correctly.
990  - Added MSWIN32 exception handler around marker, so that the collector
991    can recover from root segments that are unmapped during the collection.
992    This caused occasional failures under Windows 98, and may also be
993    an issue under Windows NT/2000.
994
995 Since 5.0
996  - Fixed a gc.h header bug which showed up under Irix.  (Thanks to
997    Dan Sullivan.)
998  - Fixed a typo in GC_double_descr in typd_mlc.c.
999    This probably could result in objects described by array descriptors not
1000    getting traced correctly.  (Thanks to Ben Hutchings for pointing this out.)
1001  - The block nearly full tests in reclaim.c were not correct for 64 bit
1002    environments.  This could result in unnecessary heap growth under unlikely
1003    conditions.
1004
1005 Since 5.1
1006  - dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it
1007    was defined as a macro.  This prevented the collector from building on
1008    Irix.
1009  - We quietly assumed that indirect mark descriptors were never 0.
1010    Our own typed allocation interface violated that.  This could result
1011    in segmentation faults in the marker with typed allocation.
1012  - Fixed a _DUSE_MUNMAP bug in the heap block allocation code.
1013    (Thanks to Ben Hutchings for the patch.)
1014  - Taught the collector about VC++ handling array operator new.
1015    (Thanks again to Ben Hutchings for the patch.)
1016  - The two copies of gc_hdrs.h had diverged.  Made one a link to the other
1017    again.
1018
1019 Since 5.2  (A few 5.2 patches are not in 6.0alpha1)
1020  - Fixed _end declaration for OSF1.
1021  - There were lots of spurious leak reports in leak detection mode, caused
1022    by the fact that some pages were not being swept, and hence unmarked
1023    objects weren't making it onto free lists.  (This bug dated back to 5.0.)
1024  - Fixed a typo in the liblinuxgc.so Makefile rule.
1025  - Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work
1026    around a Windows 95 GetOpenFileName problem.  (Thanks to Jacob Navia.)
1027
1028 Since 5.3
1029  - Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH.
1030    (Thanks to Shawn Wagner for actually testing this.)
1031  - Fixed GC_is_thread_stack in solaris_threads.c.  It forgot to return a value
1032    in the common case.  I wonder why nobody noticed?
1033  - Fixed another silly syntax problem in GC_double_descr.  (Thanks to
1034    Fergus Henderson for finding it.)
1035  - Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice.
1036
1037 Since 5.4  (A few 5.3 patches are not in 6.0alpha2)
1038  - Added HP/PA prefetch support.
1039  - Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve
1040    the reliability of generating pointer backtrace information, e.g. in
1041    the Bigloo environment.
1042  - Added parallel marking support (-DPARALLEL_MARK).  This currently
1043    works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt
1044    to other platforms.  This is intended to be a lighter-weight (less
1045    new code, probably not as scalable) solution than the work by Toshio Endo
1046    et al, at the University of Tokyo.  A number of their ideas were
1047    reused, though the code wasn't, and the underlying data structure
1048    is significantly different.  In particular, we keep the global mark
1049    stack as a single shared data structure, but most of the work is done
1050    on smaller thread-local mark stacks.
1051  - Changed GC_malloc_many to be cheaper, and to require less mutual exclusion
1052    with -DPARALLEL_MARK.
1053  - Added full support for thread local allocation under Linux
1054    (-DTHREAD_LOCAL_ALLOC).  This is a thin veneer on GC_malloc_many, and
1055    should be easily portable to other platforms, especially those that
1056    support pthreads.
1057  - CLEAR_DOUBLE was not always getting invoked when it should have been.
1058  - GC_gcj_malloc and friends used different out of memory handling than
1059    everything else, probably because I forgot about one when I implemented
1060    the other.  They now both call GC_oom_fn(), not GC_oom_action().
1061  - Integrated Jakub Jelinek's fixes for Linux/SPARC.
1062  - Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of
1063    GC_arrays, and separately registered the first two as excluded roots.
1064    This makes code compiled with gc_inl.h less dependent on the
1065    collector version.  (It would be nice to remove the inclusion of
1066    gc_priv.h by gc_inl.h completely, but we're not there yet.  The
1067    locking definitions in gc_priv.h are still referenced.)
1068    This change was later coniditoned on SEPARATE_GLOBALS, which
1069    is not defined by default, since it involves a performance hit.
1070  - Register GC_obj_kinds separately as an excluded root region.  The
1071    attempt to register it with GC_arrays was usually failing.  (This wasn't
1072    serious, but seemed to generate some confusion.) 
1073  - Moved backptr.h to gc_backptr.h.
1074
1075 Since 6.0alpha1
1076  - Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms
1077    for which that's expensive.
1078  - Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems.
1079  - Added a missing volatile to OR_WORD and renamed the parameter to
1080    GC_compare_and_swap so it's not a C++ reserved word.  (Thanks to
1081    Toshio Endo for pointing out both of those.)
1082  - Changed Linux dynamic library registration code to look at /proc/self/maps
1083    instead of the rld data structures when REDIRECT_MALLOC is defined.
1084    Otherwise some of the rld data data structures may be prematurely garbage
1085    collected.  (Thanks to Eric Benson for helping to track this down.)
1086  - Fixed USE_LD_WRAP a bit more, so it should now work without threads.
1087  - Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness.
1088    Tomporarily added some backward compatibility definitions.  Renamed
1089    USE_LD_WRAP to GC_USE_LD_WRAP.
1090  - Many MACOSX POWERPC changes, some additions to the gctest output, and
1091    a few minor generic bug fixes.  (Thanks to Dietmar Planitzer.)
1092
1093 Since 6.0 alpha2
1094  - Fixed the /proc/self/maps code to not seek, since that apparently is not
1095    reliable across all interesting kernels.
1096  - Fixed some compilation problems in the absence of PARALLEL_MARK
1097    (introduced in alpha2).
1098  - Fixed an algorithmic problem with PARALLEL_MARK.  If work needs to
1099    be given back to the main mark "stack", the BOTTOM entries of the local
1100    stack should be given away, not the top ones.  This has substantial
1101    performance impact, especially for > 2 processors, from what I can tell.
1102  - Extracted gc_lock.h from gc_priv.h.  This should eventually make it a
1103    bit easier to avoid including gc_priv.h in clients.
1104  - Moved all include files to include/ and removed duplicate links to the
1105    same file.  The old scheme was a bad idea because it was too easy to get the
1106    copies out of sync, and many systems don't support hard links.
1107    Unfortunately, it's likely that I broke some of the non-Unix Makefiles in
1108    the process, although I tried to update them appropriately.
1109  - Removed the partial support for a copied nursery.  It's not clear that
1110    this would be a tremendous win, since we don't consistently lose to
1111    generational copying collectors.  And it would significantly complicate
1112    many things.  May be reintroduced if/when it really turns out to win.
1113  - Removed references to IRIX_JDK_THREADS, since I believe there never
1114    were and never will be any clients.
1115  - Added some code to linux_threads.c to possibly support HPUX threads
1116    using the Linux code.  Unfortunately, it doesn't work yet, and is
1117    currently disabled.
1118  - Added support under Linux/X86 for saving the call chain, both in (debug)
1119    objects for client debugging, and in GC_arrays._last_stack for GC
1120    debugging.  This was previously supported only under Solaris.  It is
1121    not enabled by default under X86, since it requires that code be compiled
1122    to explicitly dave frame pointers on the call stack.  (With gcc this
1123    currently happens by default, but is often turned off explicitly.)
1124    To turn it on, define SAVE_CALL_CHAIN.
1125  
1126 Since 6.0 alpha3
1127  - Moved up the detection of mostly full blocks to the initiatiation of the
1128    sweep phase.  This eliminates some lock conention in the PARALLEL_MARK case,
1129    as multiple threads try to look at mostly full blocks concurrently.
1130  - Restored the code in GC_malloc_many that grabs a prefix of the global
1131    free list.  This avoids the case in which every GC_malloc_many call
1132    tries and fails to allocate a new heap block, and the returns a single
1133    object from the global free list.
1134  - Some minor fixes in new_hblk.c.  (Attempted to build free lists in order
1135    of increasing addresses instead of decreasing addresses for cache performance
1136    reasons.  But this seems to be only a very minor gain with -DEAGER_SWEEP,
1137    and a loss in other cases.  So the change was backed out.)
1138  - Fixed some of the documentation.  (Thanks in large part to Fergus
1139    Henderson.)
1140  - Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform
1141    large numbers of mmaps.  (Thanks to Eric Benson.)  Also fixed that code to
1142    deal with short reads.
1143  - Added GC_get_total_bytes(). 
1144  - Fixed leak detection mode to avoid spurious messages under linuxthreads.
1145    (This should also now be easy for the other supported threads packages.
1146    But the code is tricky enough that I'm hesitant to do it without being able
1147    to test.  Everything allocated in the GC thread support itself should be
1148    explicitly deallocated.)
1149  - Made it possible (with luck) to redirect malloc to GC_local_malloc.
1150
1151 Since 6.0 alpha4
1152  - Changed the definition of GC_pause in linux_threads.c to use a volatile
1153    asm.  Some versions of gcc apparently optimize away writes to local volatile
1154    variables.  This caused poor locking behaviour starting at about
1155    4 processors.
1156  - Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep
1157    to linux_threads.c.
1158    The first two calls could be used to generally avoid sending GC signals to
1159    blocked threads, avoiding both premature wakeups and unnecessary overhead.
1160  - Fixed a serious bug in thread-local allocation.  At thread termination,
1161    GC_free could get called on small integers.  Changed the code for thread
1162    termination to more efficiently return left-over free-lists.
1163  - Integrated Kjetil Matheussen's BeOS support.
1164  - Rearranged the directory structure to create the doc and tests
1165    subdirectories.
1166  - Sort of integrated Eric Benson's patch for OSF1.  This provided basic
1167    OSF1 thread support by suitably extending hpux_irix_threads.c.  Based
1168    on earlier email conversations with David Butenhof, I suspect that it
1169    will be more reliable in the long run to base this on linux_threads.c
1170    instead.  Thus I attempted to patch up linux_threads.c based on Eric's code.
1171    The result is almost certainly broken, but hopefully close enough that
1172    someone with access to a machine can pick it up.
1173  - Integrated lots of minor changes from the NetBSD distribution.  (These
1174    were supplied by David Brownlee.  I'm not sure about the original
1175    authors.)
1176  - Hacked a bit more on the HP/UX thread-support in linux_threads.c.  It
1177    now appears to work in the absence of incremental collection.  Renamed
1178    hpux_irix_threads.c back to irix_threads.c, and removed the attempt to
1179    support HPUX there.
1180  - Changed gc.h to define _REENTRANT in cases in which it should already
1181    have been defined. It is still safer to also define it on the command
1182    line. 
1183
1184 Since 6.0alpha5:
1185  - Changed the definition of DATASTART on ALPHA and IA64, where data_start
1186    and __data_start are not defined by earlier versions of glibc.  This might
1187    need to be fixed on other platforms as well.
1188  - Changed the way the stack base and backing store base are found on IA64.
1189    This should now remain reliable on future kernels.  But since it relies
1190    on /proc, it will no longer work in the simulated NUE environment.
1191  - Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent
1192    on the OS.  On non-Unix systems, rand() should be used instead.  Handled
1193    small RAND_MAX.  (Thanks to Peter Ross for pointing this out.)
1194  - Fixed the cord make rules to create the cord subdirectory, if necessary.
1195    (Thanks to Doug Moen.)
1196  - Changed fo_object_size calculation in finalize.c.  Turned finalization
1197    of nonheap object into a no-op.  Removed anachronism from GC_size()
1198    implementation.
1199  - Changed GC_push_dirty call in solaris_threads.c to GC_push_selected.
1200    It was missed in a previous renaming. (Thanks to Vladimir Tsichevski
1201    for pointing this out.)
1202  - Arranged to not not mask SIGABRT in linux_threads.c.  (Thanks to Bryce
1203    McKinlay.) 
1204  - Added GC_no_dls hook for applications that want to register their own
1205    roots.
1206  - Integrated Kjetil Matheussen's Amiga changes.
1207  - Added FREEBSD_STACKBOTTOM.  Changed the X86/FreeBSD port to use it.
1208    (Thanks to Matthew Flatt.)
1209  - Added pthread_detach interception for platforms supported by linux_threads.c
1210    and irix_threads.c.  Should also be added for Solaris?
1211  - Changed the USE_MMAP code to check for the case in which we got the
1212    high end of the address space, i.e. mem_ptr + mem_sz == 0.  It appears
1213    that this can happen under Solaris 7.  It seems to be allowed by what
1214    I would claim is an oversight in the mmap specification.  (Thanks to Toshio
1215    Endo for pointing out the problem.)
1216  - Cleanup of linux_threads.c.  Some code was originally cloned from
1217    irix_threads.c and now unnecessary.  Some comments were obviously wrong.
1218  - (Mostly) fixed a longstanding problem with setting of dirty bits from
1219    a signal handler.  In the presence of threads, dirty bits could get lost,
1220    since the etting of a bit in the bit vector was not atomic with respect
1221    to other updates.  The fix is 100% correct only for platforms for which
1222    GC_test_and_set is defined.  The goal is to make that all platforms with
1223    thread support.  Matters only if incremental GC and threads are both
1224    enabled.
1225  - made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an
1226    initialization time, instead of build-time option.  This is a 
1227    nontrivial, high risk change.  It should slow down the code measurably
1228    only if MERGE_SIZES is not defined, which is a very nonstandard
1229    configuration.   
1230  - Added doc/README.environment, and implemented what it describes.  This
1231    allows a number of additional configuration options to be set through
1232    the environment.  It documents a few previously undocumented options.
1233  - Integrated Eric Benson's leak testing improvements.
1234  - Removed the option to throw away the beginning of each page (DISCARD_WORDS).
1235    This became less and less useful as processors enforce stricter alignment.
1236    And it hadn't been tested in ages, and was thus probably broken anyway.
1237
1238 Since 6.0alpha6:
1239  - Added GC_finalizer_notifier.  Fixed GC_finalize_on_demand.  (The variable
1240    actually wasn't being tested at the right points.  The build-time flag
1241    was.)
1242  - Added Tom Tromey's S390 Linux patch.
1243  - Added code to push GC_finalize_now in GC_push_finalizer_structures.
1244    (Thanks to Matthew Flatt.)
1245  - Added GC_push_gc_structures() to push all GC internal roots.
1246  - Integrated some FreeBSD changes from Matthew Flatt.
1247  - It looks like USRSTACK is not always correctly defined under Solaris.
1248    Hacked gcconfig.h to attempt to work around the problem.  The result
1249    is not well tested.  (Thanks again to Matthew Flatt for pointing this
1250    out.  The gross hack is mine. - HB)
1251  - Added Ji-Yong Chung's win32 threads and C++ fixes.
1252  - Arranged for hpux_test_and_clear.s to no longer be needed or built.
1253    It was causing build problems with gas, and it's not clear this is
1254    better than the pthreads alternative on this platform.
1255  - Some MINGW32 fixes from Hubert Garavel.
1256  - Added Initial Hitachi SH4 port from Kaz Kojima.
1257  - Ported thread-local allocation and parallel mark code to HP/UX on PA_RISC.
1258  - Made include/gc_mark.h more public and separated out the really private
1259    pieces.  This is probably still not quite sufficient for clients that
1260    want to supply their own kind of type information.  But it's a start.
1261    This involved lots of identifier renaming to make it namespace clean.
1262  - Added GC_dont_precollect for clients that need complete control over
1263    the root set.
1264  - GC_is_visible didn't do the right thing with gcj objects.  (Not that
1265    many people are likely to care, but ...)
1266  - Don't redefine read with GC_USE_LD_WRAP.
1267  - Initial port to LINUX/HP_PA.  Incremental collection and threads are not
1268    yet supported.  (Incremental collection should work if you have the
1269    right kernel.  Threads may work with a sufficiently patched pthread
1270    library.)
1271  - Changed gcconfig.h to recognize __i386__ as an alternative to i386 in
1272    many places.  (Thanks to Benjamin Lerman.)
1273  - Made win32_threads.c more tolerant of detaching a thread that it didn't
1274    know about.  (Thanks to Paul Nash.)
1275  - Added Makefile.am and configure.in from gcc to the distribution, with
1276    minimal changes.  For the moment, those are just placeholders.  In the
1277    future, we're planning to switch to a GNU-style build environment for
1278    Un*x-like systems, though the old Makefile will remain as a backup.
1279  - Turned off STUBBORN_ALLOC by default, and added it back as a Makefile
1280    option.
1281  - Redistributed some functions between malloc.c and mallocx.c, so that
1282    simple statically linked apps no longer pull in mallocx.o.
1283  - Changed large object allocation to clear the first and last few words
1284    of each block before releassing the lock.  Otherwise the marker could see
1285    objects with nonsensical type descriptors.
1286  - Fixed a couple of subtle problems that could result in not recognizing
1287    interior pointers from the stack.  (I believe these were introduced
1288    in 6.0alpha6.)
1289  - GC_debug_free_inner called GC_free, which tried to reacquire the
1290    allocator lock, and hence deadlocked.  (DBG_HDRS_ALL probably never worked
1291    with threads?)
1292  - Fixed several problems with back traces.  Accidental references to a free
1293    list could cause the free list pointer to be overwritten by a back pointer.
1294    There seemed to be some problems with the encoding of root and finalizer
1295    references.
1296   
1297 Since 6.0alpha7:
1298  - Changed GC_debug_malloc_replacement and GC_debug_realloc_replacement
1299    so that they compile under Irix.  (Thanks to Dave Love.)
1300  - Updated powerpc_macosx_mach_dep.s so that it works if the collector
1301    is in a dynamic library.  (Thanks to Andrew Begel.)
1302  - Transformed README.debugging into debugging.html, updating and
1303    expanding it in the process.  Added gcdescr.html and tree.html
1304    from the web site to the GC distribution.
1305  - Fixed several problems related to PRINT_BLACK_LIST. This involved
1306    restructuring some of the marker macros.
1307  - Fixed some problems with the sizing of objects with debug information.
1308    Finalization was broken KEEP_BACK_PTRS or PRINT_BLACK_LIST.  Reduced the
1309    object size with SHORT_DEBUG_HDRS by another word.
1310  - The "Needed to allocate blacklisted ..." warning had inadvertently
1311    been turned off by default, due to a buggy test in allchblk.c.  Turned
1312    it back on.
1313  - Removed the marker macros to deal with 2 pointers in interleaved fashion.
1314    They were messy and the performance improvement seemed minimal.  We'll
1315    leave such scheduling issues to the compiler.
1316  - Changed Linux/PowerPC test to also check for __powerpc__ in response
1317    to a discussion on the gcc mailing list.
1318  - On Matthew Flatt's suggestion removed the "static" from the jmp_buf
1319    declaration in GC_generic_push_regs.  This was causing problems in
1320    systems that register all of their own roots.  It looks far more correct
1321    to me without the "static" anyway. 
1322  - Fixed several problems with thread local allocation of pointerfree or
1323    typed objects.  The collector was reclaiming thread-local free lists, since
1324    it wasn't following the link fields.
1325  - There was apparently a long-standing race condition related to multithreaded
1326    incremental collection.  A collection could be started and a thread stopped
1327    between the memory unprotect system call and the setting of the
1328    corresponding dirt bit.  I believe this did not affect Solaris or PCR, which
1329    use a different dirty-bit implementation.  Fixed this by installing
1330    signal handlers with sigaction instead of signal, and disabling the thread
1331    suspend signal while in the write-protect handler.  (It is unclear
1332    whether this scenario ever actually occurred.  I found it while tracking
1333    down the following:)
1334  - Incremental collection did not cooperate correctly with the PARALLEL_MARK
1335    implementation of GC_malloc_many or the local_malloc primitves.  It still
1336    doesn't work well, but it shouldn't lose memory anymore.
1337  - Integrated some changes from the gcc source tree that I had previously
1338    missed.  (Thanks to Bryce McKinley for the reminder/diff.)
1339  - Added Makefile.direct as a copy of the default Makefile, which would
1340    normally be overwritten if configure is run.
1341  - Changed the gc.tar target in Makefile.direct to embed the version number
1342    in the gc directory name.  This will affect future tar file distributions.
1343  - Changed the Irix dynamic library finding code to no longer try to
1344    eliminate writable text segments under Irix6.x, since that is probably no
1345    longer necessary, and can apparently be unsafe on occasion.  (Thanks to
1346    Shiro Kawai for pointing this out.)
1347  - GC_cleanup with GC_DEBUG enabled passed a real object base address to
1348    GC_debug_register_finalizer_ignore_self, which expected a pointer past the
1349    debug header.  Call GC_register_finalizer_ignore_self instead, even with
1350    debugging enabled.  (Thanks to Jean-Daniel Fekete for catching this.)
1351  - The collector didn't build with call chain saving enabled but NARGS=0.
1352    (Thanks to Maarten Thibaut.)
1353  - Fixed up the GNU-style build files enough so that they work in some
1354    obvious cases.
1355  - Added initial port to Digital Mars compiler for win32. (Thanks to Walter
1356    Bright.)
1357
1358 Since 6.0alpha8:
1359  - added README.macros.
1360  - Made gc.mak a symbolic link to work around winzip's tendency to ignore
1361    hard links.
1362  - Simplified the setting of NEED_FIND_LIMIT in os_dep.c, possibly breaking
1363    it on untested platforms.
1364  - Integrated initial GNU HURD port. (Thanks to Chris Lingard and Igor
1365    Khavkine.)
1366  - A few more fixes for Digital Mars compiler (Walter Bright).
1367  - Fixed gcc version recognition.  Renamed OPERATOR_NEW_ARRAY to
1368    GC_OPERATOR_NEW_ARRAY.  Changed GC_OPERATOR_NEW_ARRAY to be the default.
1369    It can be overridden with -DGC_NO_OPERATOR_NEW_ARRAY.  (Thanks to
1370    Cesar Eduardo Barros.) 
1371  - Changed the byte size to free-list mapping in thread local allocation
1372    so that size 0 allocations are handled correctly.
1373  - Fixed Linux/MIPS stackbottom for new toolchain. (Thanks to Ryan Murray.)
1374  - Changed finalization registration to invoke GC_oom_fn when it runs out
1375    of memory.
1376  - Removed lvalue cast in finalize.c.  This caused some debug configurations
1377    not to build with some non-gcc compilers.
1378
1379 Since 6.0alpha9:
1380  - Two more bug fixes for KEEP_BACK_PTRS and DBG_HDRS_ALL.
1381  - Fixed a stack clearing problem that resulted in SIGILL with a
1382    misaligned stack pointer for multithreaded SPARC builds.
1383  - Integrated another HURD patch (thanks to Igor Khavkine).
1384
1385 Since 6.0:
1386  - Non-debug, atomic allocations could result in bogus smashed object
1387    reports with debugging on.  (Thanks to Patrick Doyle for the small
1388    test case.)
1389  - Fixed GC_get_register_stack_base (Itanium only) to work around a glibc
1390    2.2.4 bug.
1391  - Initial port to HP/UX on Itanium.  Thread support and both 32 and 64
1392    bit ABIs appear to work.  Parallel mark support doesn't yet, due to
1393    some inline assembly code issues.  Thread local allocation does appear
1394    to work.
1395  - ifdef'ed out glibc2.1/Itanium workaround.  I suspect nobody is using
1396    that combination anymore.
1397  - Added a patch to make new_gc_alloc.h usable with gcc3.0.  (Thanks to
1398    Dimitris Vyzovitis for the patch.)
1399  - Debugged 64-bit support on HP/UX PA-RISC.
1400  - Turned on dynamic loading support for FreeBSD/ELF.  (Thanks to Peter
1401    Housel.)
1402  - Unregistering of finalizers with debugging allocation was broken.
1403    (Thanks to Jani Kajala for the test case.)
1404  - Old finalizers were not returned correctly from GC_debug_register_finalizer.
1405  - Disabled MPROTECT_VDB for Linux/M68K based on a report that it doesn't work.
1406  - Cleaned up some statistics gathering code in reclaim.c (Thanks to Walter
1407    Bright.)
1408  - Added some support for OpenBSD/ELF/Linux.  (Thanks to Suzuki Toshiya.)
1409  - Added Jakub Jelinek's patch to use dl_iterate_phdr for dynamic library
1410    traversal to dyn_load.c.  Changed it to weakly reference dl_iterate_phdr,
1411    so that the old code is stilll used with old versions of glibc.
1412  - Cleaned up feature test macros for various threads packages and
1413    integrated (partially functional) FreeBSD threads code from Loren Rittle.
1414    It's likely that the cleanup broke something, since it touched lots of
1415    code.  It's also likelly that it fixed some unreported bugs in the
1416    less common thread implementations, since some of the original code
1417    didn't stand up to close scrutiny.  Support for the next pthreads
1418    implementation should be easier to add.
1419
1420 Since 6.1alpha1:
1421  - No longer wrap read by default in multithreaded applications.  It was
1422    pointed out on the libgcj list that this holds the allocation lock for
1423    way too long if the read blocks.  For now, reads into the heap are
1424    broken with incremental collection.  It's possible to turn this back on
1425    if you make sure that read calls don't block (e.g. by calling select
1426    first).
1427  - Fix ifdef in Solaris_threads.h to refer to GC_SOLARIS_THREADS.
1428  - Added check for environment variable GC_IGNORE_GCJ_INFO.
1429  - Added printing of stop-the-world GC times if GC_PRINT_STATS environment
1430    variable is set.
1431  - The calloc definition in leak_detector.h was missing parentheses, and
1432    realloc was missing a second argument to GC_REALLOC.
1433    (Thanks to Elrond (elrond<at>samba-tng.org).)
1434  - Added GC_PRINT_BACK_HEIGHT environment variable and associated
1435    code, mostly in the new file backgraph.c.  See doc/README.environment.
1436  - Added -DUSE_GLOBAL_ALLOC to work around a Windows NT issue.  (Thanks to
1437    Jonathan Clark.)
1438  - Integrated port to NEC EWS4800 (MIPS-based workstation, with somewhat
1439    different address-space layout). This may help for other machines with
1440    holes in the data segment.  (Thanks to Hironori Sakamoto.)
1441  - Changed the order in which GC_push_roots and friends push things onto
1442    the mark stack.  GC_push_all calls need to come first, since we can't
1443    necessarily recovere if those overflow the mark stack.  (Thanks to
1444    Matthew Flatt for tracking down the problem.)
1445  - Some minor cleanups to mostly support the Intel compiler on Linux/IA64.
1446
1447 Since 6.1 alpha2:
1448  - Minor cleanup on the gcconfig.h section for SPARC.
1449  - Minor fix to support Intel compiler for I386/Linux. (Thanks to Sven
1450    Hartrumpf.)
1451  - Added SPARC V9 (64-bit) support.  (Thanks to Jeff Sturm.)
1452  - Restructured the way in which we determine whether or not to keep
1453    call stacks for debug allocation.  By default SAVE_CALL_COUNT is
1454    now zero on all platforms.  Added SAVE_CALL_NARGS parameters.
1455    If possible, use execinfo.h to capture call stack.  (This should
1456    add support for a number of new platforms, though often at
1457    considerable runtime expense.)
1458  - Try to print symbolic information for call stacks.  On Linux, we
1459    do this with a combination of execinfo.h and running addr2line in
1460    a separate process.  This is both much more expensive and much more
1461    useful.  Amazingly, it seems to be fast enough for most purposes.
1462  - Redefined strdup if -DREDIRECT_MALLOC is given.
1463  - Changed incremental collector and MPROTECT_VDB implementation so that,
1464    under favorable conditions, pointerfree objects are not protected.
1465    Added GC_incremental_protection_needs() to determine ahead of time whether
1466    pointerfree objects may be protected.  Replaced GC_write_hint() with
1467    GC_remove_protection().
1468  - Added test for GC_ENABLE_INCREMENTAL environment variable.
1469  - Made GC_time_limit runtime configurable.  Added GC_PAUSE_TIME_TARGET
1470    environment variable.
1471  - Eliminated GC_page_sz, a duplicate of GC_page_size.
1472  - Caused the Solaris and Irix thread creation primitives to call
1473    GC_init_inner().
1474  
1475 Since 6.1alpha3:
1476  - Fixed typo in sparc_mach_dep.S, preventing the 64-bit version from
1477    building.  Increased 64-bit heap size limit in test.c slightly, since
1478    a functional SPARC collector seems to slightly exceed the old limits.
1479    (Thanks again to Jeff Sturm.)
1480  - Use NPRGREG in solaris_threads.c, thus printing all registers if things
1481    go wrong.
1482  - Added GC_MARKERS environment variable to allow use of a single marker
1483    thread on an MP without confusing the lock implementation.
1484  - Collect much less aggressively in incremental mode with GC_TIME_UNLIMITED.
1485    This is really a purely generational mode, and we can afford to 
1486    postpone the collection until the heap is (nearly) full.
1487  - Remove read() wrapper for MPROTECT_VDB.  It was causing more harm than
1488    good.  It is often no longer needed if system calls avoid writing to
1489    pointerfull heap objects.
1490  - Fix MACOSX test in gcconfig.h. (Thanks to John Clements.)
1491  - Change GC_test_and_set so that it consistently has one argument.
1492    Add spaces to ::: in powerpc assembly code in gc_locks.h.
1493    (Thanks to Ryan Murray.)
1494  - Fixed a formatting error in dbg_mlc.c.  Added prototype to GC_abort()
1495    declaration.   (Thanks to Michael Smith.)
1496  - Removed "source" argument to GC_find_start().  Eliminate GC_FIND_START().
1497  - Added win32 recognition code in configure.in.  Changed some of the
1498    dllimport/export defines in gc.h.  (Thanks to Adam Megacz.)
1499  - GC_malloc_many didn't set hb_last_reclaimed when it called 
1500    GC_reclaim_generic.  (I'm not sure this matters much, but ...)
1501  - Allocating uncollectable objects with debug information sometimes
1502    allocated objects that were one byte too small, since uncollectable
1503    objects don't have the extra byte added at the end.  (Thanks to
1504    Wink Saville for pointing this out.)
1505  - Added a bit more assertion checking to make sure that gcj objects
1506    on free lists never have a nonzero second word.
1507  - Replaced BCC_MAKEFILE with an up-to-date one.  (Thanks to 
1508    Andre Leiradella.)
1509  - Upgraded libtool, cinfigure.in and some related files to hopefully
1510    support NetBSD/SPARC.  (Thanks to Adrian Bunk.)  Unfortunately,
1511    libtool 1.4.2 seemed to be buggy due to missing quotes in several
1512    "test" invocations.  Fixed those in the ltmain.sh script.
1513  - Some win32-specific patches, including the introduction of
1514    GC_CreateThread.  (Thanks to Adam Megacz.)
1515  - Merged in gcj changes from Anthony Green to support embedded systems.
1516  - Tried to consistently rename preprocessed assembly files with a capital
1517    .S extension.
1518  - Use alpha_mach_dep.S on ALPHA again.  It doesn't really matter, but this
1519    makes our distribution consistent with the gcc one, avoiding future merge
1520    problems.
1521  - Move GET_MEM definition into gcconfig.h.  Include gcconfig.h slightly
1522    later in gc_priv.h to avoid forward references to ptr_t.
1523  - Add some testing of local allocation to test.c.
1524  - Change definition of INVALID_QTID in specific.h.  The -1 value was used
1525    inconsistently, and too likely to collide with a valid stack address.
1526    Some general clean-up of specific.[ch].  Added assertions.  (Thanks
1527    to Michael Smith for tracking down an intermittent bug to this
1528    general area.  I'm not sure it has been squashed yet, however.)
1529  - On Pthread systems it was not safe to call GC_malloc() between fork()
1530    and exec().  According to the applicable standards, it doesn't appear
1531    to be safe to call malloc() or many other libc functions either, thus
1532    it's not clear this is fixable.  Added experimental support for
1533    -DHANDLE_FORK in linux_threads.c which tries to support it.  It may
1534    succeed if libc does the right thing.  I'm not sure whether it does.
1535    (Thanks to Kenneth Schalk for pointing out this issue.)
1536  - Documented thread local allocation primitives to require an
1537    explicit GC_init call.  GC_init_parallel is no longer declared to
1538    be a constructor function, since that isn't portable and often
1539    seems to lead to initialization order problems.
1540  - Changed gc_cpp.cc and gc_cpp.h in one more attempt to make them
1541    compatible with Visual C++ 6.  (Thanks to Wink Saville for the
1542    patch.)
1543  - Some more patches for Linux on HP PA-RISC.
1544  - Added include/gc_allocator.h.  It implements (hopefully) standard
1545    conforming (as opposed to SGI-style) allocators that allocate
1546    collectable (gc_allocator) or GC-traceable, but not collectable
1547    (traceable_allocator) objects.  This borrows heavily from libstc++,
1548    which borrows heavily from the SGI implementation, this part of
1549    which was written by Matt Austern.  Changed test_cpp.cc to very
1550    minimally test this.
1551  - On Linux/X86, retry mmap with a different start argument.  That should
1552    allow the collector to use more (closer to 3GB) of the address space.
1553    (Thanks to Jeffrey Mark Siskind for tracking this down.)
1554  - Force 64 bit alignment with GCJ support.  (Reflects Bryce McKinley's
1555    patch to the gcc tree.)
1556  - Refined the choice of sa_handler vs. sa_sigaction in GC_dirty_init
1557    to accomodate some glibc5 systems.  (Thanks to Dan Fandrich for the
1558    patch.)
1559  - Compensated for the fact that current versions of glibc set
1560    __libc_stack_end incorrectly on Linux/IA64 while initialization code
1561    is running.  This could cause the collector to miss 16 bytes of
1562    the memory stack if GC_malloc or friends where called before main().
1563  - Mostly integrated Takis Psarogiannakopoulos' port to DG/UX Inix 86.
1564    This will probably take another iteration to work, since his
1565    patch conflicted with the libtool upgrade. 
1566  - Added README.arm.cross containing some information about cross-
1567    compiling to an ARM processor from Margaret Fleck.
1568
1569 Since 6.1alpha4:
1570  - Added GC_finalizer_mem_freed, and changed some of the code that
1571    decided on heap expansion to look at it.  Memory explicitly
1572    deallocated by finalizers essentially needs to be counted as reclaimed
1573    by the GC.  Otherwise there are cases in which the heap can grow
1574    unboundedly.  (Thanks to Mark Reichert for the test case.)
1575  - Integrated Adam Megacz patches to not scan dynamic libraries if
1576    we are compiling with gcc on win32.  Otherwise we need structured
1577    exception handling to deal with asynchronously unmapped root
1578    segments, and gcc doesn't directly support that.
1579  - Integrated Anthony Green's patch to support Wine.
1580  - GC_OPERATOR_NEW_ARRAY was misspelled OPERATOR_NEW_ARRAY in several
1581    places, including gc_cpp.cc.  (Thanks to Wink Saville for pointing
1582    this out.)
1583  - Integrated Loren James Rittle's Alpha FreeBSD patches.  In
1584    response to Richard Henderson's suggestion, these also
1585    changed the declarations of symbols like _end on many platforms to
1586    that they wouldn't mistakenly be declared as short data symbols.
1587  - Integrated changes from the Debian distribution.  (Thanks to Ryan Murray
1588    for pointing these out.)  Fix C++ comments in POWERPC port.  Add ARM32
1589    incremental GC support.  Get rid of USE_GENERIC_PUSH_REGS for alpha/Linux,
1590    this time for real.  Use va_copy to get rid of cord printf problems
1591    (finally).
1592  - Close file descriptor used to count cpus.  Thanks to Jeff Sturm for
1593    pointing out the omission.
1594  - Don't just drop gcj free lists in GC_start_reclaim, since that can
1595    eventually cause the marker to see a bogus mark descriptor in the 
1596    dropped objects.  The usual symptom was a very intermittent segmentation
1597    fault in the marker.  This mattered only if one of the GC_gcj_malloc
1598    variants was used.  (Thanks to Michael Smith, Jeff Sturm, Bryce
1599    McKinley and Tom Tromey for helping to track this down.)
1600  - Fixed Linux and Solaris/64 SPARC configuration.  (Thanks to David Miller,
1601    Jeff Sturm, Tom Tromey, and Christian Joensson.)
1602  - Fixed a typo in strdup definition.  (Thanks to Gerard A Allan.)
1603  - Changed Makefile.direct to invoke $(CC) to assemble alpha_mach_dep.S.
1604    This is needed on Linux.  I'm not sure whether it's better or worse
1605    on Tru64.
1606  - Changed gc_cpp.h once more to declare operator new and friends only in
1607    a Microsoft environment.  This may need further fine tuning.  (Thanks to
1608    Johannes Schmidt for pointing out that the older code breaks on gcc3.0.4.)
1609  - Don't ever override strdup if it's already macro defined.  (Thanks to
1610    Adnan Ali for pointing out the problem.)
1611  - Changed gc_cpp.h yet again to also overload placement new.  Due to the
1612    C++ overloading rules, the other overloaded new operations otherwise hide
1613    placement new, which causes many STL uses to break.  (Thanks to Reza
1614    Shahidi for reporting this, and to Matt Austern for proposing a fix.)
1615  - Integrated cygwin pthreads support from Dan Bonachea.
1616  - Turn on DYNAMIC_LOADING for NetBSD.  (Thanks to Krister Walfridsson.)
1617  - Changed printing code to print more complete GC times.
1618  - Applied Mark Mitchell's Irix patch to correct some bitrot.
1619  - Clarified which object-printing routines in dbg_mlc.c should hold
1620    the allocation lock.  Restructured the code to allow reasonable object
1621    printing with -DREDIRECT_MALLOC.
1622  - Fix the Linux mmap code to always start with 0x1000 as the initial hint.
1623    Minor patches for 64-bit AIX, particularly to STACKBOTTOM.
1624    (Thanks again to Jeffrey Mark Siskind.)
1625  - Renamed "SUSPENDED" flag for Solaris threads support to avoid a conflict
1626    with a system header. (Thanks to Philp Brown.)
1627  - Cause win32_threads.c to handle an out of range stack pointer correctly,
1628    though currently with a warning.  (Thanks to Jonathan Clark for
1629    observing that win32 applications may temporarily use the stack
1630    pointer for other purposes, and suggesting a fix.  Unfortunately, it's
1631    not clear that there is a complete solution to this problem.)
1632
1633 Since 6.1alpha5:
1634  - Added GC_MAXIMUM_HEAP_SIZE environment variable.
1635  - Fix configure.in for MIPS/LINUX. (Thanks to H.J. Lu.)
1636  - Double page hash table size for -DLARGE_CONFIG.
1637  - Integrated Bo Thorsen's X86-64 support.
1638  - STACKBOTTOM definition for LINUX/MIPS was partially changed back.
1639    (Thanks to H.J. Lu and Hiroshi Kawashima for resolving this.)
1640  - Replaced all occurrences of LINUX_DATA_START in gcconfig.h with
1641    SEARCH_FOR_DATA_START.  It doesn't hurt to falll back to a search.
1642    And __data_start doesn't seem to get defined correctly of the GC
1643    library is loaded with LD_PRELOAD, e.g. for leak detection.
1644  - If the GC_find_leak environment variable is set, do a
1645    atexit(GC_gcollect) to give us at least one chance to detect leaks.
1646    This may report some very benign leaks, but ...
1647  - Addeded REDIRECT_FREE.  It's necessary if we want leak detection with
1648    LD_PRELOAD.
1649  - Defer printing of leaked objects, as for smashed objects.
1650  - Fixed process and descriptor leak in GC_print_callers.  Try for
1651    line number even if we got function name.)
1652  - Ported parallel GC support and thread local allocation to Alpha.
1653    Not yet well-tested.
1654  - Added GC_DUMP_REGULARLY and added finalization statistics to GC_dump().
1655  - Fixed Makefile.am to mention alpha_mach_dep.S instead of the defunct
1656    alpha_mach_dep.s.  (Thanks to Fergus Henderson.)
1657  - Incorporated a change to new_gc_alloc.h, suggested by Johannes Schmidt,
1658    which should make it work with gcc3.1.  (I would still like to encourage
1659    use of gc_allocator.h instead.) 
1660  - Use alpha_mach_dep.S only on Linux.  (It's not clear that this is
1661    optimal, but it otherwise didn't build on Tru64.  Thanks to Fergus
1662    Henderson.)
1663  - Added ifdef to guard free() in os_dep.c.  Otherwise we get a
1664    compilation error on Irix.  (Thanks to Dai Sato.)
1665  - Added an experimental version of GC_memalign to mallocx.c.  This can't
1666    always work, since we don't handle alignment requests in the hblk-level
1667    allocator, and we can't handle arbitrary pointer displacements unless
1668    GC_all_interior_pointers is enabled.  But it should work for alignment
1669    requests up to HBLKSIZE.  This is not yet documented in the standard
1670    places.
1671  - Finally debugged the OSF1/Tru64 thread support.  This needs more testing,
1672    since I needed to add a somewhat unconvincing workaround for signal
1673    delivery issues that I don't yet completely understand.  But it does
1674    pass my tests, even in parallel GC mode.  Incremental GC support is
1675    disabled if thread support is enabled, due to the signal issues.
1676  - Eliminated name-space-incorrect definition of _cdecl from gc_cpp.h.
1677  - Added GC_debug_malloc_replacement and GC_debug_realloc_replacement
1678    declarations to gc.h.  On IA64, this is required for REDIRECT_MALLOC
1679    to work correctly with these.
1680  - Fixed Linux USE_PROC_FOR_LIBRARIES to work with a 64-bit /proc format.
1681
1682 Since 6.1:
1683  - Guard the test for GC_DUMP_REGULARLY in misc.c with
1684    "#ifndef NO_DEBUGGING".  Otherwise it fails to build with NO_DEBUGGING
1685    defined.  (Thanks to Manuel Serrano.)
1686  - Message about retrying suspend signals was incorrectly generated even when
1687    flag was not set.
1688  - Cleaned up MACOSX/NEXT root registration code.  There was apparently a
1689    separate ifdef case in GC_register_data_segments() for no reason.
1690  - Removed MPROTECT_VDB for MACOSX port, based on one negative report.
1691  - Arrange for gc.h and friends to be correctly installed with GNU-style
1692    "make install".
1693  - Enable the GNU-style build facility include C++ support in the library
1694    with --enable-cplusplus. (Thanks to Thomas Maier for some of the patch.)
1695  - Mark from GC_thread_key in linux_threads.c, in case that's allocated
1696    from the garbage collected heap, as it is with our own thread-specific
1697    storage implementation.  (Thanks to Jeff Sturm.)
1698  - Mark all free list header blocks if they are heap allocated.  This avoids
1699    some unnecessary tracing.  And it remains correct if we clear the
1700    root set. (Thanks to Jeff Sturm for identifying the bug.)
1701  - Improved S390/Linux support.  Add S390/Linux 64-bit support.  (Thanks
1702    to Ulrich Weigand.)
1703  - Corrected the spelling of GC_{M,C}ALLOC_EXPLICTLY_TYPED to
1704    GC_{M,C}ALLOC_EXPLICITLY_TYPED in gc_typed.h.  This is technically
1705    an interface change.  Based on the fact that nobody reported this,
1706    I suspect/hope there were no clients.
1707  - Cleaned up gc_typed.h so that (1) it adds an extern "C" declaration
1708    when appropriate, (2) doesn't generate references to undefined internal
1709    macros, and (3) allows easier manual construction of descriptors.
1710  - Close the file descriptor used by GC_print_address_map().
1711  - Set the "close-on-exec" bit for various file descriptors maintained
1712    for the collector's internal use.
1713  - Added a hack to find memory segments owned by the system allocator
1714    under win32.  Based on my tests, this tends to eventually find all
1715    segments, though it may take a while.  There appear to be cleaner,
1716    but slower solutions under NT/XP.  But they rely on an API that's
1717    unsupported under 9X.
1718  - Changed Linux PowerPC stack finding to LINUX_STACKBOTTOM.  (Thanks
1719    to Akira Tagoh for pointing out that HEURISTIC1 doesn't work on
1720    64-bit kernels.)
1721  - Added GC_set_free_space_divisor to avoid some Windows dll issues.
1722  - Added FIXUP_POINTER, POINTER_SHIFT, POINTER_MASK to allow preprocessing
1723    of candidate pointers for tagging, etc.
1724  - Always lock around GC_notify_full_gc().  Simplified code for
1725    invoking GC_notify_full_gc().
1726  - Changed the way DATASTART is defined on FreeBSD to be robust against
1727    an unmapped page after etext.  (Thanks to Hironori Sakamoto for
1728    tracking down the intermittent failure.)
1729  - Made GC_enable() and GC_disable() official.  Deprecated direct update
1730    of GC_dont_gc.  Changed GC_gcollect to be a noop when garbage collection
1731    is disabled.
1732  - Call GC_register_dynamic_libraries before stopping the world on Linux,
1733    in order to avoid a potential deadlock due to the dl_iterate_phdr lock.
1734  - Introduced a more general mechanism for platform-dependent code to
1735    decide whether the main data segment should be handled separately
1736    from dynamic libraries, or registered by GC_register_dynamic_libraries.
1737    The latter is more reliable and easier on Linux with dl_iterate_phdr. 
1738
1739 Since 6.2alpha1:
1740  - Fixed the completely broken FreeBSD code in 6.2alpha1.  (Thanks to
1741    Hironori Sakamoto for the patch.)
1742  - Changed IRIX reference in dbg_mlc.c to IRIX5. (Thanks to Marcus Herbert.)
1743  - Attempted to work around the problems with .S filenames and the SGI
1744    compiler.  (Reported by several people. Untested.)
1745  - Worked around an HP/UX make issue with the GNU-style build process.
1746  - Fixed the --enable-cplusplus build machinery to allow builds without
1747    a C++ compiler.  (That was always the intent ...)
1748  - Changed the debugging allocation macros to explicitly pass the return
1749    address for Linux and XXXBSD on hardware for which we can't get stack
1750    traces.  Use __builtin_return_address(0) to generate it when possible.
1751    Some of the configuration work was cleaned up (good) and moved to gc.h
1752    (bad, but necessary).  This should make leak detection more useful
1753    on a number of platforms.  (Thanks to Fabian Thylman for the suggestion.)
1754  - Fixed compilation problems in dbg_mlc.c with GC_ADD_CALLER.
1755  - Bumped revision number for dynamic library.
1756
1757 Since 6.2alpha2:
1758  - Don't include execinfo.h in os_dep.c when it's not needed, and may not exist.
1759
1760 Since 6.2alpha3:
1761  - Use LINUX_STACKBOTTOM for >= glibc2.2 on Linux/MIPS.  (See Debian bug
1762    # 177204)
1763  - Integrated Jeff Sturm and Jesse Rosenstock's MACOSX threads patches.
1764  - Integrated Grzegorz Jakacki's substantial GNU build patch.  "Make dist"
1765    should now work for the GNU build process.  Documentation files
1766    are installed under share/gc.
1767  - Tweaked gc_cpp.h to again support the Borland compiler.  (Thanks to
1768    Rene Girard for pointing out the problems.)
1769  - Updated BCC_MAKEFILE (thanks to Rene Girard).
1770  - Added GC_ASSERT check for minimum thread stack size.
1771  - Added --enable-gc-assertions.
1772  - Added some web documentation to the distribution.  Updated it in the
1773    process.
1774  - Separate gc_conf_macros.h from gc.h.
1775  - Added generic GC_THREADS client-defined macro to set the appropriate
1776    GC_XXX_THREADS internal macro.  (gc_config_macros.h.)
1777  - Add debugging versions of _ignore_off_page allocation primitves.
1778  - Moved declarations of GC_make_closure and GC_debug_invoke_finalizer
1779    from gc.h to gc_priv.h.
1780  - Reset GC_fail_count even if only a small allocation succeeds.
1781  - Integrated Brian Alliet's patch for dynamic library support on Darwin.
1782  - gc_cpp.h's gc_cleanup destructor called GC_REGISTER_FINALIZER_IGNORE_SELF
1783    when it should have called the lower case version, since it was
1784    explicitly computing a base pointer.
1785
1786 Since 6.2alpha4:
1787  - GC_invoke_finalizers could, under rare conditions, set
1788    GC_finalizer_mem_freed to an essentially random value.  This could
1789    possibly cause unbounded heap growth for long-running applications
1790    under some conditions.  (The bug was introduced in 6.1alpha5, and
1791    is not in gcc3.3.  Thanks to Ben Hutchings for finding it.)
1792  - Attempted to sanitize the various DLL macros.  GC_USE_DLL disappeared.
1793    GC_DLL is used instead.  All internal tests are now on GC_DLL.
1794    README.macros is now more precise about the intended meaning.
1795  - Include DllMain in the multithreaded win32 version only if the
1796    collector is actually built as a dll.  (Thanks to Mohan Embar for
1797    a version of the patch.)
1798  - Hide the cygwin threadAttach/Detach functions.  They were violating our
1799    namespace rules.  
1800  - Fixed an assertion in GC_check_heap_proc.  Added GC_STATIC_ASSERT.
1801    (Thanks again to Ben Hutchings.)
1802  - Removed some obsolete definitions for Linux/PowerPC in gcconfig.h.
1803  - CORD_cat was not rebalancing unbalanced trees in some cases, violating
1804    a CORD invariant.  Also tweaked the rebalancing rule for
1805    CORD_cat_char_star.  (Thanks to Alexandr Petrosian for the bug report
1806    and patch.)
1807  - Added hand-coded structured exception handling support to mark.c.
1808    This should enable support of dynamic libraries under win32 with
1809    gcc-compiled code.  (Thanks to Ranjit Mathew for the patch.)
1810    Turned on dynamic library scanning for win32/gcc.
1811  - Removed some remnants of read wrapping.  (Thanks to Kenneth Schalk.)
1812    GC_USE_LD_WRAP ws probably broken in recent versions.
1813  - The build could fail on some platforms since gcconfig.h could include
1814    declarations mentioning ptr_t, which was not defined, e.g. when if_mach
1815    was built.  (Thanks to Yann Dirson for pointing this out.)  Also
1816    cleaned up tests for GC_PRIVATE_H in gcconfig.h a bit. 
1817  - The GC_LOOP_ON_ABORT environment variable interfered with incremental
1818    collection, since the write fault handler was erroneously overridden.
1819    Handlers are now set up in the correct order.
1820  - It used to be possible to call GC_mark_thread_local_free_lists() while
1821    the world was not stopped during an incremental GC.  This was not safe.
1822    Fortunately, it was also unnecessary.  Added GC_world_stopped flag
1823    to avoid it.  (This caused occasional crashes in GC_set_fl_marks
1824    with thread local allocation and incremental GC.  This probably happened
1825    primarily on old, slow multiprocessors.)
1826  - Allowed overriding of MAX_THREADS in win32_threads.c from the build
1827    command line.  (Patch from Yannis Bres.)
1828  - Taught the IA64/linux code to determine the register backing store base from
1829    /proc/self/maps after checking the __libc symbol, but before guessing.
1830    (__libc symbols are on the endangered list, and the guess is likely to not
1831    always be right for 2.6 kernels.)  Restructured the code to read and parse
1832    /proc/self/maps so it only exists in one place (all platforms).
1833  - The -DUSE_PROC_FOR_LIBRARIES code was broken on Linux.  It claimed that it
1834    also registered the main data segment, but didn't actually do so.  (I don't
1835    think anyone actually uses this configuration, but ...)
1836  - Made another attempt to get --enablecplusplus to do the right thing.
1837    Since there are unavoidable problems with C programs linking against a
1838    dynamic library that includes C++ code, I separated out the c++ code into
1839    libgccpp.
1840
1841 Since 6.2alpha5:
1842  - There was an extra underscore in the name of GC_save_registers_in_stack
1843    for NetBSD/SPARC.  (Thanks to Jaap Boender for the patch.)
1844  - Integrated Brian Alliet's patch for Darwin.  This restructured the
1845    linuxthreads/pthreads support to separate generic pthreads support
1846    from more the system-dependent thread-stopping code.  I believe this
1847    should make it easier to eliminate the code duplication between
1848    pthreads platforms in the future.  The patch included some other
1849    code cleanups.
1850  - Integrated Dan Bonachea's patch to support AIX threads.  This required
1851    substantial manual integration, mostly due to conflicts with other
1852    recent threads changes.  It may take another iteration to
1853    get it to work.
1854  - Removed HPUX/PA-RISC support from aix_irix_threads.c.  It wasn't used
1855    anyway and it cluttered up the code.  And anything we can do to migrate
1856    towards generic pthreads support is a good thing.
1857  - Added a more explicit test for tracing of function arguments to test.c.
1858    (Thanks to Dan Grayson.)
1859  - Added Akira Tagoh's PowerPC64 patch.
1860  - Fixed some bit rot in the Cygwin port.  (Thanks to Dan Bonachea for
1861    pointing it out.)  Gc.h now includes just windows.h, not winbase.h.
1862  - Declared GC_save_regs_in_stack() in gc_priv.h.  Remove other declarations.
1863  - Changed --enable-cplusplus to use automake consitionals.  The old way
1864    confused libtool.  "Make install" didn't work correctly for the old version.
1865    Previously --enable-cplusplus was broken on cygwin.
1866  - Changed the C version of GC_push_regs to fail at compile time if it is
1867    generated with an empty body.  This seems to have been the cause of one
1868    or two subtle failures on unusual platforms.  Those failures should
1869    now occur at build time and be easily fixable.
1870
1871 Since 6.2alpha6:
1872  - Integrated a second round of Irix/AIX patches from Dan Bonachea.
1873    Renamed mips_sgi_mach_dep.S back to mips_sgi_mach_dep.s, since it requires
1874    the Irix assembler to do the C preprocessing; gcc -E doesn't work.
1875  - Fixed Makefile.direct for DARWIN.  (Thanks to Manuel Serrano.)
1876  - There was a race between GC_pthread_detach and thread exit that could
1877    result in a thread structure being deallocated by GC_pthread_detach
1878    eventhough it was still needed by the thread exit code.  (Thanks to
1879    Dick Porter for the small test case that allowed this to be debugged.)
1880  - Fixed version parsing for non-alpha versions in acinclude.m4 and
1881    version checking in version.h.
1882
1883 Since 6.2:
1884  - Integrated some NetBSD patches forwarded to me by Marc Recht.  These
1885    were already in the NetBSD package.    
1886  - GC_pthread_create waited for the semaphore even if pthread_create failed.
1887    Thanks to Dick Porter for the pthread_support.c patch.  Applied the
1888    analogous fix for aix_irix_threads.c.
1889  - Added Rainer Orth's Tru64 fixes.
1890  - The check for exceeding the thread table size in win32 threadDetach
1891    was incorrect.  (Thanks to Alexandr Petrosian for the patch.)
1892  - Applied Andrew Begel's patch to correct some reentrancy issues
1893    with dynamic loading on Darwin.
1894  - GC_CreateThread() was neglecting to duplicate the thread handle in
1895    the table.  (Thanks to Tum Nguyen for the patch.)
1896  - Pass +ESdbgasm only on PA-RISC machines with vendor compiler.
1897    (Thanks to Roger Sayle for the patch.)
1898  - Applied more AIX threads patches from Scott Ananian.
1899
1900 Since 6.3alpha1:
1901  - Reenabled I_HOLD_LOCK assertion in aix_irix_threads.h.
1902  - Put back the WINABI qualifier for GC_CreateThread.  (Thanks to
1903    Danny Smith for the patch.  6.3alpha1 had the qualifier in one place
1904    but not elsewhere, which was clearly wrong.)
1905  - Sometimes explicitly define __private_extern__ before DARWIN dyld.h
1906    include.  (Thanks to Andreas Tobker for postting the patch.)
1907  - Included signal.h from pthread_support.c.  Removed GC_looping_handler,
1908    which was dead code.
1909  - GC_find_start was misdeclared by gc_pmark.h if PRINT_BLACK_LIST was
1910    defined.  (Thanks to Glauco Masotti for testing and reporting this.)
1911    Changed GC_find_start to never just return 0.  According to its
1912    comment it doesn't, and it's unclear that's correct.
1913  - GC_alloc_large had several largely compensating bugs in the
1914    computation of GC_words_wasted.  (It was confused about bytes vs.
1915    words in two places.)
1916  - Integrated Slava Sysoltev's patch to support more recent versions of
1917    the Intel compiler on IA64/Linux.
1918  - Changed win32 spinlock initialization to conditionally set a spin count.
1919    (Emmanual Stumpf pointed out that enabling this makes a large performance
1920    difference on win32 multiprocessors.)  Also cleaned up the win32 spinlock
1921    initialization code a bit.
1922  - Fixed thread support for HP/UX/IA64.  The register backing store base for
1923    the main thread was sometimes not set correctly.  (Thanks to Laurent
1924    Morichetti.)
1925  - Added -DEMPTY_GETENV_RESULTS flag to work around Wine problem.
1926  - Declare GC_stack_alloc and GC_stack_free in solaris_threads.h to
1927    avoid 64-bit size mismatches.  (Thanks to Bernie Solomon.)
1928  - Fixed GC_generic_push_regs to avoid a potential and very unfortunate
1929    tail call optimization.  This could lead to prematurely reclaimed
1930    objects on configurations that used the generic routine and the new
1931    build infrastructure (which potentially optimizes mach_dep.c).
1932    This was a serious bug, but it's unclear whether it has resulted in
1933    any real failures.
1934  - Fixed CORD_str to deal with signed characters.  (Thanks to Alexandr
1935    Petrosian for noticing the problem and supplying the patch.)
1936  - Merged a couple of NOSYS/ECOS tests into os_dep.c from gcj.  (Thanks
1937    to Anthony Green.)
1938  - Partially merged a win32 patch from Ben Hutchings, and substantially
1939    revised other parts of win32_threads.c.  It had several problems.
1940    Under MinGW with a statically linked library, the main thread was
1941    not registered.  Cygwin detached threads leaked thread descriptors.
1942    There were several race conditions.  For now, unfortunately the
1943    static threads limit remains, though we increased it, and made table
1944    traversal cost depend on the actual thread count.
1945    There is also still some code duplication with pthread_support.c.
1946    (Thread descriptors did become much smaller, since Ben Hutchings
1947    removed the thread context from them.)
1948  - Integrated a Solaris configure.in patch from Rainer Orth.
1949  - Added GC_IGNORE_FB and associated warning to very partially address
1950    the issue of the collector treating a mapped frame buffer as part
1951    of the root set.  (Thanks to David Peroutka for providing some
1952    insight.  More would be helpful.  Is there anything that can be used
1953    to at least partially identify such memory segments?)
1954    
1955 Since 6.3alpha2:
1956  - Removed -DSMALL_CONFIG from BCC_MAKEFILE.
1957  - Changed macros to test for an ARM processor (Patch from Richard Earnshaw.)
1958  - Mostly applied a DJGPP patch from Doug Kaufman.  Especially Makefile.dj
1959    had suffered from serious bit rot.
1960  - Rewrote GC_apply_to_maps, eliminating an off-by-one subscript error,
1961    and a call to alloca (for lcc compatibility).
1962  - Changed USE_MUNMAP behavior on posixy platforms to immediately remap
1963    the memory with PROT_NONE instead of unmapping it.  The latter risks
1964    an intervening mmap grabbing the address space out from underneath us.
1965    Updated this code to reflect a cleaner patch from Ulrich Drepper.
1966  - Replaced _T with _Tp in new_gc_alloc.h to avoid a MACOS X conflict.
1967    (Patch from Andrew Begel.)
1968  - Dynamically choose whether or not lock should spin on win32.  (Thanks
1969    to Maurizio Vairani for the patch.)  This may be a significant performance
1970    improvement for win32.
1971  - Fix Makefile.direct to actually include NT_STATIC_THREADS_MAKEFILE
1972    in the distribution.  (Again thanks to Maurizio Vairani.)
1973  - Maybe_install_looping_handler() was accidentally exported, violating
1974    our name space convention.
1975  - Made os_dep.c use sigsetjmp and SA_NODEFER for NetBSD.  (Thanks to
1976    Christian Limpach.)  (I generalized the patch to use sigsetjmp on all
1977    UNIX_LIKE platforms, admittedly a slightly risky move.  But it may avoid
1978    similar problems on some other platforms. I also cleaned up the defn
1979    of UNIX_LIKE a bit. - Hans)
1980  - Integrated Andrew Begel's Darwin threads patch, adjusted according to
1981    some of Fergus Hendersons's comments.  (Patch didn't apply cleanly,
1982    errors are possible.)
1983  - Added another test or two for the Intel 8.0 compiler to avoid
1984    confusing it with gcc.  The single-threaded collector should now build
1985    with icc, at least on ia64. 
1986
1987 Since 6.3alpha3:
1988  - USE_MMAP was broken by confusion in the code dealing with USE_MMAP_ANON.
1989    (This was pointed out, and fixes were suggested by several other people.)
1990  - Darwin supprt was broken in alpha3 as a result of my misintegration of
1991    Andrew Begel's patches.  Fixed with another patch from Andrew Begel.
1992  - A new sanity check in pthread_stop_world.c:GC_push_all_stacks() was
1993    overly aggressive.  We may collect from an unregistered thread during
1994    thread creation.  Fixed by explicitly checking for that case.  (Added
1995    GC_in_thread_creation.)
1996
1997 Since 6.3alpha4:
1998  - Fix & vs && typo in GC_generic_malloc and
1999    GC_generic_malloc_ignore_off_page.  (Propagated from the gcc tree.)
2000  - Removed SA_NODEFER hack from NetBSD and Solaris write-protect handler.
2001    (According to Christian Limpach, the NetBSD problem is fixed.
2002    Presumably so is the Solaris 2.3 problem.)
2003  - Removed placement delete from gc_cpp.h for the SGI compiler.
2004    (Thanks to Simon Gornall for the patch.)
2005  - Changed semantics of the GC_IGNORE_FB environment variable, based 
2006    on experimentation by Nicolas Cannasse pointing out that the old
2007    interpretation was useless.  We still need help in identifying win32
2008    graphics memory mappings.  The current "solution" is a hack.
2009  - Removed "MAKEOVERRIDES =" from Makefile.am and thus Makefile.in.
2010    It probably made more sense in the gcc context.
2011  - Explicitly ensure that NEED_FIND_LIMIT is defined for {Open,Net}BSD/ELF.
2012  - Replaced USE_HPUX_TLS macro by USE_COMPILER_TLS, since gcc often
2013    supports the same extension on various platforms.
2014  - Added some basic (completely untested) defines for win64, in support
2015    of future work.
2016  - Declared GC_jmp_buf in os_dep.s as JMP_BUF instead of jmp_buf, fixing
2017    a memory overwrite bug on Solaris and perhaps other platforms.
2018  - Added 0 != __libc_stack_end test to GC_linux_stack_base.  (Thanks to Jakub
2019    Jelinek, both for the patch, and for explaining the problem to me.)
2020    Otherwise "prelink"ing could cause the collector to fail.
2021  - Changed default thread local storage implementation to USE_PTHREAD_SPECIFIC
2022    for HP/UX with gcc.  The compiler-based implementation appears to work
2023    only with the vendor compiler.
2024  - Export GC_debug_header_size and GC_USR_PTR_FROM_BASE from gc_mark.h,
2025    making client mark code cleaner and less dependent on GC version.
2026  - Export several new procedures and GC_generic_malloc from gc_mark.h
2027    to support user-defined kinds.  Use the new procedures to replace existing
2028    code in gcj_mlc.c and typd_mlc.c.
2029  - Added support for GC_BACKTRACES.
2030  - Fixed a remaining problem in CORD_str with signed characters.  (Thanks
2031    to Alexandr Petrosian for the patch.)
2032  - Removed supposedly redundant, but very buggy, definitions of finalizer
2033    macros from javaxfc.h.  Fortunately this file probably has no users.
2034    The correct declarations were already in gc.h.
2035  - Also need to set GC_in_thread_creation while waiting for GC during
2036    thread termination, since it is also possible to collect from an
2037    unregistered thread in that case.
2038  - Define NO_GETENV for Windows CE, since getenv doesn't appear to exist.
2039    + some other minor WinCE fixes. (Thanks to Alain Novak.)
2040  - Added GC_register_describe_type_fn.
2041  - Arrange for debugging finalizer registration to ignore non-heap
2042    registrations, since the regular version of the routine also behaves
2043    that way.
2044  - GC_gcj_malloc and friends need to check for finalizers waiting to be run.
2045    One of the more obscure allocation routines with missing a LOCK() call.
2046  - Fixed cvtres invocations in NT_MAKEFILE and NT_STATIC_THREADS_MAKEFILE
2047    to work with VS.NET.
2048  - Cleaned up GC_INIT calls in test.  Updated gc.man to encourage GC_INIT
2049    use in portable code.
2050  - Taught the GC to use libunwind if --enable-full-debug is specified on
2051    IA64 and libunwind is present.
2052  - The USE_MUNMAP code could get confused about the age of a block and
2053    prematurely unmap it.  GC_unmap_old had a bug related to wrapping of
2054    GC_gc_no.  GC_freehblk and GC_merge_unmapped didn't maintain
2055    hb_last_reclaimed reasonably when blocks were merged.  The code was
2056    fixed to reflect original intent, but that may not always be an
2057    improvement.  See todo list item.
2058
2059 Since 6.3alpha5:
2060  - Define USE_GENERIC_PUSH_REGS for NetBSD/M68K.
2061  - Fixed the X86_64 PREFETCH macros to correctly handle ia32e (which uses
2062    different prefetch instructions from AMD64).  (Thanks to H.J. Lu.)
2063  - GC_config_macros.h did not correctly define GC_WIN32_THREADS from
2064    GC_THREADS. 
2065  - Added simple_example.html.
2066  - Merged Andrew Gray's patch to correctly restore signal handlers on
2067    FreeBSD.
2068  - Merged a patch from Andreas Jaeger to deal with prefetch-related warnings
2069    on x86-64.  Added some other casts so that the PREFETCH macros
2070    always get a ptr_t argument.  Removed some casts inthe PREFETCH
2071    implementations.
2072  - At Jesse Jones suggestion: Added a header guard for gc_allocator.h
2073    and changed GC_debug_free to clobber contents of deallocated object.
2074  - The signal masking code in pthread_stop_world.c contained some errors.
2075    In particular SIGSEGV was masked in the handler, in spite of the fact that
2076    it wrote to the heap.  This could lead to an uncaught SIGSEGV, which
2077    apparently became much more likely in Linux 2.6.  Also fixed some
2078    typos, and reduced code duplication in the same area.
2079  - Remove ltconfig, clean up configure messages for DGUX (thanks to
2080    Adrian Bunk for the patches).
2081  - Integrated NetBSD/OpenBSD patches from Marc Recht and Matthias Drochner.
2082
2083 Since 6.3alpha6:
2084  - Compile test_cpp.cc with CXXCOMPILE instead of COMPILE.
2085  - Very large allocations could cause a collector hang.  Correct
2086    calculation of GC_collect_at_heapsize.
2087  - GC_print_hblkfreelist printed some bogus results if USE_MUNMAP
2088    was defined.
2089  - Include gc_config_macros.h in threadlibs.c.
2090  - Correct MacOSX thread stop code. (Thanks to Dick Porter.)
2091  - SMALL_OBJ definition was off by one.  This could cause crashes
2092    at startup.  (Thanks to Zoltan Varga for narrowing this down to
2093    a trivial test case.)
2094  - Integrate Paolo Molara's patch to deal with a race in the Darwin
2095    thread stopping code.
2096  - Changed X86_64 implementation to use SA_SIGINFO in the MPROTECT_VDB
2097    implementation.  The old approach appears to have been broken by
2098    recent kernels.
2099  - Added GC_ATTR_UNUSED to eliminate a warning in gc_allocator.h (Thanks
2100    to Andrew Begel.)
2101  - Fix GC_task_self declaration in os_dep.c.  (Thanks to Andrew Pinski.)
2102  - Increase INITIAL_BUF_SZ in os_dep.c for Solaris /proc reads.
2103
2104 Since gc6.3:
2105  - Merge gcconfig.h changes from gcc tree.
2106  - Unconditionally include gc_priv.h in solaris_pthreads.c, win32_threads.h,
2107    aix_irix_threads.c, and solaris_threads.c to get thread definitions.
2108  - Start marker threads in GC_thr_init, so that they get started even
2109    if no other threads are ever started.  (Oddly enough, the parallel
2110    collector worked correctly, though not well, with no helper threads.)
2111  - Go ahead and split large blocks in GC_allochblk_nth if GC_dont_gc
2112    is set.  (Thanks to Alexander Petrossian.)
2113  - GC_PRINT_BACK_HEIGHT would deadlock with thread support.
2114  - Let in_progress_space in backgraph.s grow dynamically.
2115  - Fix README.solaris2.  The GC_thr_init() hack doesn't work anymore.
2116  - Convert GC_finalizer_mem_freed to bytes in allchblk.c.
2117  - Add missing declaration for GC_generic_malloc_words_small_inner.
2118    Without it, s390x breaks.  (Thanks to Ulrich Weigand.)
2119  - Applied several MacOSX patches to support older tool chains.
2120    (Thanks to Stefan Ring.)
2121  - Bug fix for NetBSD/amd64.  (Thanks to Marc Recht.)  Add NetBSD/sh3
2122    support.  (Thanks to Uchiyama Yasushi.)
2123  - Fixed an uninitialized variable in cordprnt.c.  (Thanks to gcc for
2124    providing the warning.)
2125  - Eliminated some, but not all, gcc -Wall warnings.
2126  - Changed some old style casts to reinterpret_cast in new_gc_alloc.h.
2127    (Thanks to Dan Grayson.)
2128  - GC_extend_size_map shouldn't adjust for GC_all_interior_pointers if
2129    GC_DONT_ADD_BYTE_AT_END is set.
2130  - Changed some (long) casts to (word) in preparation for win64.
2131    (Thanks to Peter Colson.)
2132  - Changed "int stack_size" declaration in pthread_support.c to use
2133    size_t.  (Only mattered with GC_ASSERTIONS enabled.)
2134  - Added CRIS (etrax) support.  (Thanks to Simon Posnjak and
2135    Hans-Peter Nilsson.)
2136  - Removed GC_IGNORE_FB frame buffer recognition, and replaced
2137    it with a check that the mapping type is MEM_IMAGE.
2138    In theory, this should work much better, but it is a high
2139    risk change for win32.  (Thanks to Ashley Bone for the crucial
2140    experimental data behind this, and to Rutger Ovidus for
2141    some further experiments.)
2142  - GC_allochblk_nth incremented GC_words_wasted by bytes rather than
2143    words.
2144  - Consider GC_words_wasted in GC_adj_words_allocd only if it is within
2145    reason.  (A hack to avoid some extremely unlikely scenarios in which
2146    we manage to allocate only "wasted" space.  7.0 has a better fix.)
2147  - Changed PowerPC GC_clear implementation to use lwsync instead of
2148    eieio, since the documentation recommends against eieio, and
2149    it seems to be incorrect if the preceding memory op is a load.
2150  - Fixed print_block_list to print the correct kind number for
2151    STUBBORN.  (Thanks to Rutger Ovidus.)
2152  - Have configure.in generate an error if it is asked to support
2153    pthreads, but doesn't know how to.
2154  - Added Kazuhiro Inaoka's patch for Renesas M32R support.
2155  - Have the GNU build mechanism link with -ldl.  Rename THREADLIBS
2156    to THREADDLLIBS to reflect this.  (Thanks to Sven Verdoolaege.)
2157  - Added Hannes Mehnert's patch for FreeBSD/SPARC support.
2158  - Merged some FreeBSD specific patches to threadlibs.c and dyn_load.c.
2159    (Thanks tp John Merryweather Cooper.)
2160  - Define MPROTECT_VDB on MACOSX only if threads are being used, since the
2161    dirty page tracking mechanism uses threads.  (This avoids an undefined
2162    reference to _GC_darwin_register_mach_handler_thread.)
2163  - By popular demand, use __libc symbols only if we are built with
2164    USE_LIBC_PRIVATES, which is off by default, and not otherwise documented.
2165  - Ignore GC_enable_incremental() requests when KEEP_BACK_PTRS is set.
2166    The GC itself will dirty lots of pages in this cases, probably making
2167    it counterproductive on all platforms.  And the DARWIN port crashes.
2168  
2169 Since gc6.4:
2170  - Integrated Paolo Molaro's patch to deal with EINTR in sem_wait.
2171  - Make GC_approx_sp() write to dummy location to ensure that stack
2172    is grown here, when sp looks reasonable, rather than later, when
2173    it might look like a bad memory reference.  (Problem was never
2174    observed that I know of.  But on rereading the code it seemed
2175    dubious.)
2176  - Separate out GC_with_callee_saves_pushed and sometimes call
2177    it from GC_suspend_handler in pthread_stop_world.c.  Callee-save
2178    register values sometimes failed to get traced under HP/UX on
2179    PA-RISC.  Linux/IA64 had the same problem, though non-stacked
2180    callee-save registers seem to be so rarely used there that nobody
2181    ever noticed.
2182  - Integrated an ancient Darwin powerpc_darwin_machine_dep.s patch
2183    from Andreas Tobler, which I had lost.
2184  - Fix compare_and_exchange implementation for gcc/IA64 to deal with
2185    pickier compiler versions.
2186  - Fixed Itanium 32-bit ABI support (HP/UX).  In particular, the
2187    compare_and_exchange implementation didn't consider that possibility.
2188  - Undefine GC_pthread_detach in win32_threads.c.  (Thanks to
2189    Tagliapietra Tommaso.)
2190  - Fixed inclusion of frame.h for NETBSD in os_dep.c.
2191  - Applied Dan Bonachea's patch to use mmap on AIX.
2192  - Several fixes to resurrect the Irix port on recent OS versions.
2193  - Change ALPHA to use LINUX_STACKBOTTOM.
2194  - Change SPARC64/LINUX to also use LINUX_STACKBOTTOM.  Deal with potential
2195    bad values of __libc_stack_end on that platform.  (Thanks to David Miller.)
2196  - Relax gctest to allow larger heap if ALIGN_DOUBLE isn't set.
2197    (Unnecessary in 7.0)
2198  - Force a define of __STDC__=0 for the IBM compiler on AIX, so that
2199    we get prototypes.  (Unnecessary in 7.0)
2200  - GC_INIT definition for AIX and CYGWIN referred to DATASTART and DATAEND
2201    which are only defined in private include files.
2202  - Integrated some small gcconfig.h patches from Dan Bonachea.  Also
2203    relaxed assertion about FreeBSD stack size in pthread_support.c.
2204  - Integrated Andrew Begel's darwin_stop_world.c patch for 64-bit
2205    support.  This may need additional work.
2206  - Avoided potentially infinite recursion in GC_save_callers if
2207    the system backtrace calls malloc.  The workaround currently requires
2208    __thread support if this code is used with threads.
2209  - Avoided another similar infinite recursion by conditionally
2210    invoking GC_save_callers in alloc.c.  (Thanks to Matthias Andree
2211    for helping to track down both of these.)
2212  - Removed all traces of aix_irix_threads.c.  AIX and Irix now use
2213    pthread_support.c and pthread_stop_world.c.  The old code appeared
2214    to be unreliable for AIX, and was not regularly maintained.
2215  - On Irix, ignore segments with MA_FETCHOP or MA_NOTCACHED attributed;
2216    they're not always safe to read.
2217  - Fixed a previously vacuous assertion (diagnosed by the SGI compiler)
2218    in GC_remove_from_fl.
2219  - Fix stack_size assertion in GC_pthread_create.
2220  - Fix assertion in GC_steal_mark_stack.
2221
2222 Since gc6.5:
2223  - Fix CPU count detection for Irix and FreeBSD. (Thanks to Dan Bonachea.)
2224  - Integrate Dan Bonachea's patch for the IBM XLC compiler on Darwin.
2225  - Integrated Andreas Tobler's FreeBSD/PowerPC patch.
2226  - Don't access the GC thread structure from the restart handler.  It's
2227    unsafe, since the handler may run too late.  (Thanks to Ben Maurer for
2228    tracking this down.)
2229  - Applied Christian Thalinger's patch to change comment syntax in
2230    alpha_mach_dep.S.
2231  - Added test for GC_no_dls in GC_dyld_image_add for DARWIN. (Thanks to
2232    Juan Jose Garcia Ripoli).
2233  - Use LINUX_STACKBOTTOM for Linux/SH and LINUX/ARM. (Thanks to Sugioka
2234    Toshinobu and Christian Thalinger.)
2235  - Rewrote GC_parse_map_entry.  This assumed a fixed column layout of
2236    /proc/self/maps on Linux.  This ceased to be true about 2 years ago.
2237    The old code is probably quite problemetic with -DREDIRECT_MALLOC.  It
2238    is also used by default for IA64, though I haven't seen actual failures
2239    there.
2240  - More consistently define HBLKSIZE to 4096 on 64 bit architectures with
2241    4K pages.  (Thanks to Andrew Haley.)
2242  - With win32 threads, GC_stop_world needs to acquire GC_write_cs.  (Thanks
2243    to Ben Hutchings for the observation and patch.)
2244  - Move up struct callinfo declaration to make gcc 4.0.2. happy.
2245
2246 Since 6.6:
2247  - Add "int" to Solaris "end" and "etext" declaration in gc.h.  Declared
2248    the symbols with underscores and as arrays, since that's what's actually
2249    used.  Perhaps this could all just be removed?  (Thanks to John Bowman.)
2250  - Fixed ARM GC_test_and_set code.  (Thanks to Kazu Hirata and Paul Brook.)
2251  - Added casts for assignments to hb_last_reclaimed, which truncate the
2252    value.  Added a cast to GC_adj_words_allocd.  Use GetModuleHandleA
2253    when retrieving a handle to kernel32.dll under win32.  (Thanks to the
2254    Visual Prolog developers.)
2255  - Added Tandem S-Series support.  (Thanks to Craig McDaniel.  A modified
2256    version of his patch was applied, and hence breakage is probably not
2257    his fault.)
2258  - Remove spurious gc:: qualifier for operator delete[] in gc_cpp.h.
2259    (Thanks to Hanno Boeck.)
2260  - Changed a test for LINUX in config_macros.h to one for __linux__.
2261  - Add prototypes for GC_finalizer_notifier and GC_thr_init.  (Thanks to
2262    David Ayers.)
2263  - Use ld instead of nonexitent ldz instruction in Darwin FindTopOfStack.
2264    (Thanks to Andreas Tobler.)
2265  - Add support for Darwin/X86.  (Thanks to Geoff Norton and the Mono
2266    developers.)
2267  - Merge in some recent gcc fixes.  Add ppc64 asm code.  (Thanks to Bryce
2268    McKinley and other gcj developers.)
2269  - Scan MEM_PRIVATE sections under Windows ME and predecessors.
2270  - Interior pointers with some largish offsets into large objects could
2271    be ignored, if GC_all_interior_pointers was set.  (Oddly this worked
2272    correctly for stack references if it was not set.  Otherwise it failed
2273    for both stack and heap references.)  Thanks to Andrew McKinlay for the
2274    critical test case.
2275  - Integrated Tatsuya Bizenn's NETBSD threads support, with some
2276    untested changes.
2277  - Added GC_strdup and friends to make leak detection work correctly
2278    for strdup clients.  (Thanks to Jon Moore.)  Fixed the existing strdup
2279    with malloc redirection to handle a null malloc return correctly.
2280
2281 Since gc6.7:
2282  - Added some support for Dragonfly BSD.  (Thanks to Joerg Sonnenberger and
2283    Thomas Klausner.)
2284  - Improvements to the HP/UX section of configure.in/configure.ac.
2285    (Thanks to Andreas Tobler)
2286  - GC_unix_get_mem could neglect to release the malloc lock on Irix, under
2287    extremely unlikely circumstances.  Thanks to Jean-Baptiste Nivois for
2288    some careful code reading.
2289  - Added support for kFreeBSD + glibc (Thanks to Petr Salinger)
2290  - Fix more MacOS threads memory leaks (Thanks to Allan Hsu)
2291  - Added initial Solaris/X86-64 support (Thanks to Rainer Orth)
2292
2293 Since gc6.8:
2294  - Fix typo in PREFETCH implementation for X86_64.  (Thanks to Peter Wang.)
2295  - Fix M68K LINUX port. (Thanks to Debian packagers.)
2296  - __GNUC__ was misspelled as __GNUC in new_gc_alloc.h. (Thanks to Peter Wang.)
2297  - Integrated Allan Hsu's patch for OS X VM deallocation problems.
2298  - Applied FreeBSD/X86_64 patch.
2299
2300 Since gc6.9:
2301  - Remove GC_PROTO, VOLATILE, GC_PTR, and GC_CONST.  Assume ANSI C compiler
2302    and use ANSI constructs unconditionally.
2303  - Introduce #elif and #error in some of the appropriate places.
2304  - Remove GC_printf cruft. Use stdargs.
2305  - Remove separate Solaris threads support.  Use the more generic Posix
2306    implementation.
2307  - Use atomic_ops for atomic operations and memory barriers.
2308  - Clean up MPROTECT_VDB implementation.  Use SA_SIGINFO wherever
2309    possible.
2310  - Remove broken SIGNALS stuff.
2311  - Use size_t instead of word, where appropriate.
2312  - Add .S.o rule to Makefile.am.
2313  - Officially unsupport SunOS4, several old flavors of M68K (SunOS4,
2314    A/UX, HP), IBM PC/RTs and RISCOS/Irix4.  (I doubt the old code worked.
2315    If anyone cares, these should be easy to resurrect.)
2316  - Add EXPECT() in some critical places.
2317  - Redefined hb_sz and hb_body to deal with bytes rather than words.
2318    This affected a great deal of code.  I would like to consistently use
2319    byte offsets and sizes where there's not a convincing reason to do
2320    otherwise.
2321  - Redefined several other variables (GC_mem_found, GC_words_allocd)
2322    etc. to use units of bytes.  Most of these were also renamed to
2323    reflect that fact.
2324  - Killed as many "register" declarations as possible.
2325  - Partially replaced stubborn allocation with manual write barrier.
2326    It's currently broken.
2327  - Restructured mark code, to allow mark bits to be kept either on
2328    a per allocation granule or per object basis.  The emphasis is
2329    now on the -DUSE_MARK_BYTES option, since individual bits perform
2330    quite badly on hyperthreaded P4s, and are probably suboptimal on
2331    other architectures.  -DUSE_MARK_BITS is currently broken, and may
2332    be resurrected only for the single-threaded case.  This significantly
2333    reduced the cache footprint required by auxiliary GC data structures.
2334    It also reduces space overhead for small heaps.  It probably slows
2335    things down slightly if interior pointers are very common.
2336  - As part of the above, we now maintain an approximate count of set
2337    mark bits in each heap block.
2338  - As part of the above, the semantics of hb_map changed drastically.
2339    For MARK_BIT_PER_OBJ, it doesn't exist.  For MARK_BIT_PER_GRANULE,
2340    it is purely a way to replace a mod instruction with a table lookup.
2341    (Somewhat to my surprise, this still wins on modern hardware.)
2342  - Removed PRINTSTATS, GATHERSTATS, and SILENT macros.  Everything is
2343    now controlled by GC_print_stats variable and GC_PRINT_STATS
2344    and new GC_PRINT_VERBOSE_STATS environment variables.
2345  - Add GC_log_printf and use it consistently for logging output.
2346  - Unconditionally count the objects we reclaim in the sweep phase.
2347    For thread local allocation, we need that anyway, and we expect
2348    that's increasingly the only case that matters.  And it simplifies
2349    the code.  In general expect minor performance hacks that benefit
2350    only the single-threaded case to disappear.
2351  - Remove GC_quiet from gc.h and elsewhere.
2352  - Changed the heap expansion heuristic, and the definition of
2353    GC_free_space_divisor, to refer to live data size, instead of total
2354    heap size.  I believe this is much more robust.  It wasn't previously
2355    possible, because we didn't have access to live data size.
2356  - Thread local allocation added the extra byte in twice: Once in
2357    thread_local_alloc, and once in malloc_many.
2358  - Removed GC_malloc_words_small and GC_gcj_fast_malloc.  A new
2359    mechanism based on the thread local allocation data structures
2360    is expected to be added instead.  This should allow inlined code
2361    that is both fast and doesn't rely on collector internals.
2362  - Changed both free lists and reclaim lists to be indexed by granules
2363    instead of words, norming halving their size.
2364  - MERGE_SIZE is now the only option, and the macro was removed.
2365    (Without it, we need a memory reference to GC_all_interior_pointers
2366    anyway.  Thus it costs us nothing.)
2367  - Change GC_size_map to map to granules instead of words.  Make sure
2368    that every possible size up to TINY_FREELISTS is present.
2369  - Split of macros need for fast inline allocation into gc_tiny_fl.h
2370    in anticipation of a new inline allocator that doesn't rely on GC
2371    internals.
2372  - Changed thread local allocation to use GRANULE_BYTES and TINY_FREELISTS
2373    in anticipation of a merge with the inline allocation code.
2374  - Removed ALIGN_DOUBLE.  This is mostly handled by GRANULE_BYTES.
2375  - Make locking on most platforms conditional on GC_need_to_lock.
2376
2377 Since gc7.0alpha1:
2378  - GC_bytes_allocd was incremented by a possibly uninitialized variable
2379    in GC_generic_malloc_inner.  (Bug introduced in gc7.0alpha1.  Thanks
2380    to Ben Hutchings for tracking it down.)
2381  - Win32 fixes.  (Thanks to Ben Hutchings and Maurizio Vairani.)
2382  - Integrated Ben Hutchings' GetWriteWatch-based virtual dirty bit
2383    implementation for win32.
2384  - Removed pc_gc.tar and floppy targets in Makefile.direct.  Removed
2385    pc_excludes file.
2386  - No longer include GC_bytes_wasted when evaluating allocation progress.
2387    Since we are now counting live memory, it no longer makes sense.
2388  - Applied Davide Angelocola's configury patch.  There are now separate
2389    Makefile.am's in the cord and tests subdirectory, more tests, etc.
2390  - Renamed configure.in to configure.ac.
2391  - Merged a very small number of Nathanael Nerode's configure.ac
2392    cleanups from the gcc tree.  Unfortunately, that file is a bit
2393    different from ours.
2394  - Changed EINTR handling in sem_wait slightly.
2395  - Restructure the root marking code.  Remove all traces of
2396    USE_GENERIC_PUSH_REGS, and effectively make it the default.
2397    Make it easier to pass a context pointer to the mark routine, in
2398    case we ever want to do precise stack marking.
2399  - Replace GC_start_blocking() and GC_end_blocking() with GC_do_blocking().
2400    This remains undocumented, and only implemented for pthreads.  But it
2401    removes an otherwise unavoidable race with stores of callee-save
2402    registers.
2403  - Fix GC_n_mark_bits for the default MARK_BIT_PER_GRANULE case.  This
2404    resulted in bogus complaints in heap dumps.
2405  - Upgrade to libatomic_ops-1.0, and update build structure to match.
2406  - Remove SRC_M3 support. Clean up lock initialization code in misc.c.
2407  - Removed gc_local_alloc.h.  If THREAD_LOCAL_ALLOC is defined, the
2408    thread local allocation routines are now called automatically.
2409  - Renamed gc_inl.h back to gc_inline.h.  Changed the interface appreciably
2410    since locking has turned into a dominant issue, and in-line allocation
2411    only makes sense if it's no worse than thread-local allocation.
2412    Gc_inline.h is now also used to implement thread-local allocation.
2413  - Finished replacing stubborn allocation with manual write barrier.
2414    Untested.
2415  - Use thread-local allocation code by default.
2416  - Added GC_register_my_thread and friends for Posix and win32.
2417  - Patch for GWW_VDB from Ben Hutchings.
2418  - Removed explicit THREAD_LOCAL_ALLOC tests, since that now always
2419    redefines GC_malloc.
2420  - Removed now unused AIX memory allocation code.
2421  - Various minor fixes for bugs introduced in 7.0alpha1.
2422
2423 Since gc7.0alpha2
2424  - Added support for dlopen-based interception of pthread functions.
2425    This is only half done.  The gc.h redefinitions currently interfere.
2426  - Integrated major automake overhaul from Petter Urkedal.
2427
2428 Since gc7.0alpha3
2429    (various 6.5, 6.6 changes)
2430  - Removed GC_brief_async_signal_safe_sleep and used atomic_ops instead.
2431    (Thanks to Ben Maurer.)
2432  - Integrated build patches from David Angelocola and Petter Urkedal.
2433  - Fix dynamic-linker-based pthread call redirection.
2434  - Renamed RS6000 to POWERPC/AIX.
2435  - Allow recovery from SIGSEGV in marker on Linux.  This works around
2436    a race in thread stack marking if /proc is used to find roots.  We do
2437    that by default with malloc redirection and threads.  This involved
2438    moving some GC_find_limit and SETJMP related declarations to gc_priv.h.
2439  - Added doc/porting.html file.
2440  - Added ADD_HEAP_GUARD_PAGES for sbrk/*nix platforms to debug extreme
2441    memory overwrite errors.
2442  - Added trivial NO_INCREMENTAL flag to facilitate debugging.
2443  - Added GC_getattr_np-based GC_get_stack_base (untested).
2444  - Separated thread local allocation into a separate file and added the
2445    beginning of win32 support for that.
2446
2447 Since gc7.0alpha4
2448    (more 6.6, 6.7 changes)
2449  - Some Solaris fixes, including some more general changes in how
2450    the assembly pieces of mach_dep.c are handled.
2451  - Removed a lot of SOLARIS_THREADS-specific code that was only
2452    needed with the old implementation.  This included many (mostly no-op)
2453    versions of GC_is_fresh.
2454  - Don't use atomic_ops in gc_locks.h unless we need threads.
2455  - Fixed USE_MARK_BITS, which is once againthe default without PARALLEL_MARK.
2456  - Removed Solaris GC_INIT hack.  It's a workaround for a long dead bug,
2457    and it seemed to be wrong anyway.
2458  - Changed win32_threads.c to require preprocessor-based interception
2459    of thread routines by default.  A client call to GC_use_DllMain is
2460    now required to get the old behavior in which DllMain is used to implicitly
2461    register threads.  This was doen for uniformity with other platforms, and
2462    because the DllMain solution seemed to require very tricky code which,
2463    at least in the past, imposed hard bounds onthe number of threads.
2464  - Many small changes to make thread support work again on Cygwin.
2465  - Moved definition of allocator lock etc. to pthread_support.c and
2466    win32_threads.c for those two cases.
2467  - Got rid of the FASTLOCK() machinery.  It doesn't seem useful on modern
2468    platforms.
2469  - Cleaned up the uncollectable allocation routines, speeding up the
2470    slower paths.  The code did enough unnecessary work off the critical path
2471    that the underlying logic was getting hard to extract.
2472  - No longer turn off THREAD_LOCAL_ALLOC with DBG_HDRS_ALL.  Indications
2473    are it just works, and I think the reasons for it not working disappeared
2474    a while ago.
2475  - Fixed bugs in hb_n_marks calculation and assertion.
2476  - Don't use __builtin_expect for pre-3.0 gcc.
2477  - Define GWW_VDB only for recent Microsoft tool chains.
2478  - Add overview.html to doc directory.
2479  - Fix NT_STATIC_THREADS_MAKEFILE, various compiler warnings.
2480  - Made thread local allocation sort of work with Cygwin.  The code should
2481    be there to deal with other Windows variants, But non-Cygwin Windows
2482    threads need more bug fixes.
2483
2484 Since gc7.0alpha5
2485    (more 6.7 changes)
2486  - Declare GC_dump() in gc.h.
2487  - Add --enable-large-config, which just defines the LARGE_CONFIG macro.
2488  - Make GlobalAlloc address alignment a bit more intuitive.  (Thanks to
2489    Charles Mills.)
2490  - Use #elif in the definitions of GET_MEM.
2491  - Overhaul porting.html.  Remove corresponding text from README.
2492  - Fix typo in DARWIN section of gcconfig.h.
2493  - Fix Darwin thread memory leak.  (Thanks to Bruce Mitchener.)
2494  - Update x86 AO_test_and_set implementation to use "=q".
2495  - Add $(EXEEXT) to many tests in tests/tests.am.  (Corresponds to a
2496    6.7 fix, which no longer applied.)
2497  - Fix Darwin/PPC port.
2498  - Fix Cygwin/threads port.
2499  - Fix gcj malloc support.
2500  - For GNU-style make, don't build libatomic_ops unless threads are requested.
2501    This should allow single-threaded builds on platforms which do not
2502    currently support libatomic_ops.
2503  - Clean up and hopefully fix the CFLAGS calculation for GNU build.
2504    (Substantially improves things on HP/UX.)
2505  - Integrated Andrei Polushin's Visual C++ patches.  These provide for
2506    stack traces, better C++ debug support, and better log file handling.
2507    Note that these change the location of the log file to a the path of the
2508    executable with a .log extension.  To get the old behavior back, define
2509    OLD_WIN32_LOG_FILE.  For the time being, I'm checking his project
2510    files and the like into a windows-untested subdirectory.  They
2511    are almost certainly already out of date, but better than what we had
2512    before.
2513  - Fixed some win32 threads bugs, and added support for _beginthreadex.
2514  - Fix zero size thread local allocation so that explicit deallocation
2515    works correctly.
2516  - Removed serious bug in GC_malloc_uncollectable(large size).
2517  - Do not try to do thread-local gcj allocation in incremental mode.  There
2518    are races in setting up the descriptor.
2519  - Add GC_INIT() to middle.c, fix some more GC_printfn calls.
2520  - Some assertions erroneously used I_HOLD_LOCK() negatively, eventhough
2521    it can now spuriously return TRUE.
2522  - Rename SUNOS5 macro and OS name to SOLARIS and SUNOS5DL to SOLARISDL.
2523  - On Linux and some Un*x variants, allocate memory by first trying sbrk,
2524    and then switching to mmap if that fails.
2525  - Fixed /proc/x/maps reading to deal with asynchronous deletions.
2526  - Fix REDIRECT_MALLOC with threads on Linux.  It now usually seems to work
2527    with ugly hacks that include having calloc behave differently when it is
2528    called from ld.so or the pthreads library.  A reasonable amount of
2529    infrastructure was added to support some of this.  Thanks to Roland McGrath
2530    for ideas and information.
2531  - Import various updated build scripts.
2532  - Add GC_register_has_static_roots_callback.  (Thanks to Andrew Haley.)
2533  - Fix serious bugs in GC_malloc_atomic_uncollectable().
2534  - Return GC_SUCCESS form GC_get_stack_base().
2535  - Fix several atomic_ops problems on IA64 with HP Compiler.
2536  - Update to atomic_ops-1.2.
2537  - Fix hb_n_marks description and reclaim.c assertion.
2538  - Various additional win32 threads fixes.
2539  - Enable GC_ASSERTIONS for Debug build with NT_THREADS_MAKEFILE.
2540
2541 [gc7.0alpha7 was released and version bumped to gc7.0alpha8]
2542
2543 Since first gc7.0alpha8 version:
2544  [ Some gc6.9 changes ]
2545  - Change FindTopOfStack decl in darwin_stop_world.c.
2546  - Move some static tests from misc.c to gcconfig.h.  Use #error.
2547  - Add GC_print_free_list() function.  (Thanks to Bruce Hoult.)
2548  - Add GC_GNU_THREADS support on HURD. (Thanks to Aleksey Demakov,
2549    Barry DeFreese, and possibly other Debian maintainers.)
2550  - __GNUC__ was misspelled as __GNUC in thread_local_alloc.h.
2551    (Thanks to Peter Wang.)
2552  - Integrated various MacOSX patches and tried to reconcile them.
2553    Thanks to Allan Hsu, several contributers at Apple, and probably
2554    others.
2555  - Added some casts to powerpc.h in libatomic_ops to silence warnings.
2556
2557 FOR FURTHER UPDATES SEE ../ChangeLog FILE.
2558   
2559 To do:
2560  - REDIRECT_MALLOC and threads combination should work on more platforms,
2561    and needs more testing on Linux.
2562  - Clone marker inner loop to support arch-dependent prefetching,
2563    and counting of objects marked for finalization.
2564  - The USE_MUNMAP code should really use a separate data structure
2565    indexed by physical page to keep track of time since last use of
2566    a page.  Using hblk headers means we lose track of ages when
2567    blocks are merged, and we can't unmap pages that have been allocated and
2568    dropped by the blacklisting code.  I suspect both of these matter.
2569  - A dynamic libgc.so references dlopen unconditionally, but doesn't link
2570    against libdl.
2571  - GC_proc_fd for Solaris is not correctly updated in response to a
2572    fork() call.  Thus incremental collection in the child won't work
2573    correctly.  (Thanks to Ben Cottrell for pointing this out.)
2574  - --enable-redirect-malloc is mostly untested and known not to work
2575    on some platforms. 
2576  - There seem to be outstanding issues on Solaris/X86, possibly with
2577    finding the data segment starting address.  Information/patches would
2578    be appreciated.
2579  - Very large root set sizes (> 16 MB or so) could cause the collector
2580    to abort with an unexpected mark stack overflow.  (Thanks again to
2581    Peter Chubb.)  NOT YET FIXED.  Workaround is to increase the initial
2582    size.
2583  - The SGI version of the collector marks from mmapped pages, even
2584    if they are not part of dynamic library static data areas.  This
2585    causes performance problems with some SGI libraries that use mmap
2586    as a bitmap allocator.  NOT YET FIXED.  It may be possible to turn
2587    off DYNAMIC_LOADING in the collector as a workaround.  It may also
2588    be possible to conditionally intercept mmap and use GC_exclude_static_roots.
2589    The real fix is to walk rld data structures, which looks possible.
2590  - Incremental collector should handle large objects better.  Currently,
2591    it looks like the whole object is treated as dirty if any part of it
2592    is.
2593  
2594 FOR FURTHER UPDATES SEE ../ChangeLog FILE.