* predict.c (estimate_bb_frequencies): Initialize the sreal
[official-gcc.git] / boehm-gc / doc / README.changes
blob232938b437595b5e344f245807c6bf679cf65e70
1 This is a rough history of garbage collector bugs and versions.
3 This has been maintained with varying diligence over the years.
5 I made an attempt to include recent contributors here.  I apologize for any
6 omissions.
8 -------------------------
10   Version 1.3 and immediately preceding versions contained spurious
11 assembly language assignments to TMP_SP.  Only the assignment in the PC/RT
12 code is necessary.  On other machines, with certain compiler options,
13 the assignments can lead to an unsaved register being overwritten.
14 Known to cause problems under SunOS 3.5 WITHOUT the -O option.  (With
15 -O the compiler recognizes it as dead code.  It probably shouldn't,
16 but that's another story.)
18   Version 1.4 and earlier versions used compile time determined values
19 for the stack base.  This no longer works on Sun 3s, since Sun 3/80s use
20 a different stack base.  We now use a straightforward heuristic on all
21 machines on which it is known to work (incl. Sun 3s) and compile-time
22 determined values for the rest.  There should really be library calls
23 to determine such values.
25   Version 1.5 and earlier did not ensure 8 byte alignment for objects
26 allocated on a sparc based machine.
28   Version 1.8 added ULTRIX support in gc_private.h.
29   
30   Version 1.9 fixed a major bug in gc_realloc.
31   
32   Version 2.0 introduced a consistent naming convention for collector
33 routines and added support for registering dynamic library data segments
34 in the standard mark_roots.c.  Most of the data structures were revamped.
35 The treatment of interior pointers was completely changed.  Finalization
36 was added.  Support for locking was added.  Object kinds were added.
37 We added a black listing facility to avoid allocating at addresses known
38 to occur as integers somewhere in the address space.  Much of this
39 was accomplished by adapting ideas and code from the PCR collector.
40 The test program was changed and expanded.
42   Version 2.1 was the first stable version since 1.9, and added support
43 for PPCR.
45   Version 2.2 added debugging allocation, and fixed various bugs.  Among them:
46 - GC_realloc could fail to extend the size of the object for certain large object sizes.
47 - A blatant subscript range error in GC_printf, which unfortunately
48   wasn't exercised on machines with sufficient stack alignment constraints.
49 - GC_register_displacement did the wrong thing if it was called after
50   any allocation had taken place.
51 - The leak finding code would eventually break after 2048 byte
52   byte objects leaked.
53 - interface.c didn't compile.
54 - The heap size remained much too small for large stacks.
55 - The stack clearing code behaved badly for large stacks, and perhaps
56   on HP/PA machines.
58   Version 2.3 added ALL_INTERIOR_POINTERS and fixed the following bugs:
59 - Missing declaration of etext in the A/UX version.
60 - Some PCR root-finding problems.
61 - Blacklisting was not 100% effective, because the plausible future
62   heap bounds were being miscalculated.
63 - GC_realloc didn't handle out-of-memory correctly.
64 - GC_base could return a nonzero value for addresses inside free blocks.
65 - test.c wasn't really thread safe, and could erroneously report failure
66   in a multithreaded environment.  (The locking primitives need to be
67   replaced for other threads packages.)
68 - GC_CONS was thoroughly broken.
69 - On a SPARC with dynamic linking, signals stayed diabled while the
70   client code was running.
71   (Thanks to Manuel Serrano at INRIA for reporting the last two.)
72   
73   Version 2.4 added GC_free_space_divisor as a tuning knob, added
74   support for OS/2 and linux, and fixed the following bugs:
75 - On machines with unaligned pointers (e.g. Sun 3), every 128th word could
76   fail to be considered for marking.
77 - Dynamic_load.c erroneously added 4 bytes to the length of the data and
78   bss sections of the dynamic library.  This could result in a bad memory
79   reference if the actual length was a multiple of a page.  (Observed on
80   Sun 3.  Can probably also happen on a Sun 4.)
81   (Thanks to Robert Brazile for pointing out that the Sun 3 version
82   was broken.  Dynamic library handling is still broken on Sun 3s
83   under 4.1.1U1, but apparently not 4.1.1.  If you have such a machine,
84   use -Bstatic.)
85   
86   Version 2.5 fixed the following bugs:
87 - Removed an explicit call to exit(1)
88 - Fixed calls to GC_printf and GC_err_printf, so the correct number of
89   arguments are always supplied.  The OS/2 C compiler gets confused if
90   the number of actuals and the number of formals differ.  (ANSI C
91   doesn't require this to work.  The ANSI sanctioned way of doing things
92   causes too many compatibility problems.)
93   
94   Version 3.0  added generational/incremental collection and stubborn
95   objects.
97   Version 3.1 added the following features:
98 - A workaround for a SunOS 4.X SPARC C compiler
99   misfeature that caused problems when the collector was turned into
100   a dynamic library.  
101 - A fix for a bug in GC_base that could result in a memory fault.
102 - A fix for a performance bug (and several other misfeatures) pointed
103   out by Dave Detlefs and Al Dosser.
104 - Use of dirty bit information for static data under Solaris 2.X.
105 - DEC Alpha/OSF1 support (thanks to Al Dosser).
106 - Incremental collection on more platforms.
107 - A more refined heap expansion policy.  Less space usage by default.
108 - Various minor enhancements to reduce space usage, and to reduce
109   the amount of memory scanned by the collector.
110 - Uncollectable allocation without per object overhead.
111 - More conscientious handling of out-of-memory conditions.
112 - Fixed a bug in debugging stubborn allocation.
113 - Fixed a bug that resulted in occasional erroneous reporting of smashed
114   objects with debugging allocation.
115 - Fixed bogus leak reports of size 4096 blocks with FIND_LEAK.
117   Version 3.2 fixed a serious and not entirely repeatable bug in
118   the incremental collector.  It appeared only when dirty bit info
119   on the roots was available, which is normally only under Solaris.
120   It also added GC_general_register_disappearing_link, and some
121   testing code.  Interface.c disappeared.
123   Version 3.3 fixes several bugs and adds new ports:
124 - PCR-specific bugs.
125 - Missing locking in GC_free, redundant FASTUNLOCK
126   in GC_malloc_stubborn, and 2 bugs in
127   GC_unregister_disappearing_link.
128   All of the above were pointed out by Neil Sharman
129   (neil@cs.mu.oz.au).
130 - Common symbols allocated by the SunOS4.X dynamic loader
131   were not included in the root set.
132 - Bug in GC_finalize (reported by Brian Beuning and Al Dosser)
133 - Merged Amiga port from Jesper Peterson (untested)
134 - Merged NeXT port from Thomas Funke (significantly
135   modified and untested)
137   Version 3.4:
138 - Fixed a performance bug in GC_realloc.
139 - Updated the amiga port.
140 - Added NetBSD and 386BSD ports.
141 - Added cord library.
142 - Added trivial performance enhancement for
143   ALL_INTERIOR_POINTERS.  (Don't scan last word.)
144   
145   Version 3.5
146 - Minor collections now mark from roots only once, if that
147   doesn't cause an excessive pause.
148 - The stack clearing heuristic was refined to prevent anomalies
149   with very heavily recursive programs and sparse stacks.
150 - Fixed a bug that prevented mark stack growth in some cases.
151   GC_objects_are_marked should be set to TRUE after a call
152   to GC_push_roots and as part of GC_push_marked, since
153   both can now set mark bits.  I think this is only a performance
154   bug, but I wouldn't bet on it.  It's certainly very hard to argue
155   that the old version was correct.
156 - Fixed an incremental collection bug that prevented it from
157   working at all when HBLKSIZE != getpagesize()
158 - Changed dynamic_loading.c to include gc_priv.h before testing
159   DYNAMIC_LOADING.  SunOS dynamic library scanning
160   must have been broken in 3.4.
161 - Object size rounding now adapts to program behavior.
162 - Added a workaround (provided by Manuel Serrano and
163   colleagues) to a long-standing SunOS 4.X (and 3.X?) ld bug
164   that I had incorrectly assumed to have been squished.
165   The collector was broken if the text segment size was within
166   32 bytes of a multiple of 8K bytes, and if the beginning of
167   the data segment contained interesting roots.  The workaround
168   assumes a demand-loadable executable.  The original may have
169   have "worked" in some other cases.
170 - Added dynamic library support under IRIX5.
171 - Added support for EMX under OS/2 (thanks to Ari Huttunen).
172   
173 Version 3.6:
174 - fixed a bug in the mark stack growth code that was introduced
175   in 3.4.
176 - fixed Makefile to work around DEC AXP compiler tail recursion
177   bug.
179 Version 3.7:
180 - Added a workaround for an HP/UX compiler bug.
181 - Fixed another stack clearing performance bug.  Reworked
182   that code once more.
183   
184 Version 4.0:
185 - Added support for Solaris threads (which was possible
186   only by reimplementing some fraction of Solaris threads,
187   since Sun doesn't currently make the thread debugging
188   interface available).
189 - Added non-threads win32 and win32S support.
190 - (Grudgingly, with suitable muttering of obscenities) renamed
191   files so that the collector distribution could live on a FAT
192   file system.  Files that are guaranteed to be useless on
193   a PC still have long names.  Gc_inline.h and gc_private.h
194   still exist, but now just include  gc_inl.h and gc_priv.h.
195 - Fixed a really obscure bug in finalization that could cause
196   undetected mark stack overflows.  (I would be surprised if
197   any real code ever tickled this one.)
198 - Changed finalization code to dynamically resize the hash
199   tables it maintains.  (This probably does not matter for well-
200   -written code.  It no doubt does for C++ code that overuses
201   destructors.)
202 - Added typed allocation primitives.  Rewrote the marker to
203   accommodate them with more reasonable efficiency.  This
204   change should also speed up marking for GC_malloc allocated
205   objects a little.  See gc_typed.h for new primitives.
206 - Improved debugging facilities slightly.  Allocation time
207   stack traces are now kept by default on SPARC/SUNOS4.
208   (Thanks to Scott Schwartz.)
209 - Added better support for small heap applications.
210 - Significantly extended cord package.  Fixed a bug in the
211   implementation of lazily read files.  Printf and friends now
212   have cord variants.  Cord traversals are a bit faster.
213 - Made ALL_INTERIOR_POINTERS recognition the default.
214 - Fixed de so that it can run in constant space, independent
215   of file size.  Added simple string searching to cords and de.
216 - Added the Hull-Ellis C++ interface.
217 - Added dynamic library support for OSF/1.
218   (Thanks to Al Dosser and Tim Bingham at DEC.)
219 - Changed argument to GC_expand_hp to be expressed
220   in units of bytes instead of heap blocks.  (Necessary
221   since the heap block size now varies depending on
222   configuration.  The old version was never very clean.)
223 - Added GC_get_heap_size().  The previous "equivalent"
224   was broken.
225 - Restructured the Makefile a bit.  
227 Since version 4.0:
228 - Changed finalization implementation to guarantee that
229   finalization procedures are called outside of the allocation
230   lock, making direct use of the interface a little less dangerous.
231   MAY BREAK EXISTING CLIENTS that assume finalizers
232   are protected by a lock.  Since there seem to be few multithreaded
233   clients that use finalization, this is hopefully not much of
234   a problem.
235 - Fixed a gross bug in CORD_prev.
236 - Fixed a bug in blacklst.c that could result in unbounded
237   heap growth during startup on machines that do not clear
238   memory obtained from the OS (e.g. win32S).
239 - Ported de editor to win32/win32S.  (This is now the only
240   version with a mouse-sensitive UI.)
241 - Added GC_malloc_ignore_off_page to allocate large arrays
242   in the presence of ALL_INTERIOR_POINTERS.
243 - Changed GC_call_with_alloc_lock to not disable signals in
244   the single-threaded case.
245 - Reduced retry count in GC_collect_or_expand for garbage
246   collecting when out of memory.
247 - Made uncollectable allocations bypass black-listing, as they
248   should.
249 - Fixed a bug in typed_test in test.c that could cause (legitimate)
250   GC crashes.
251 - Fixed some potential synchronization problems in finalize.c
252 - Fixed a real locking problem in typd_mlc.c.
253 - Worked around an AIX 3.2 compiler feature that results in
254   out of bounds memory references.
255 - Partially worked around an IRIX5.2 beta problem (which may
256   or may not persist to the final release).
257 - Fixed a bug in the heap integrity checking code that could
258   result in explicitly deallocated objects being identified as
259   smashed.  Fixed a bug in the dbg_mlc stack saving code
260   that caused old argument pointers to be considered live.
261 - Fixed a bug in CORD_ncmp (and hence CORD_str).
262 - Repaired the OS2 port, which had suffered from bit rot
263   in 4.0.  Worked around what appears to be CSet/2 V1.0
264   optimizer bug.
265 - Fixed a Makefile bug for target "c++".
267 Since version 4.1:
268 - Multiple bug fixes/workarounds in the Solaris threads version.
269   (It occasionally failed to locate some register contents for
270   marking.  It also turns out that thr_suspend and friends are
271   unreliable in Solaris 2.3.  Dirty bit reads appear
272   to be unreliable under some weird 
273   circumstances.  My stack marking code
274   contained a serious performance bug.  The new code is
275   extremely defensive, and has not failed in several cpu
276   hours of testing.  But  no guarantees ...)
277 - Added MacOS support (thanks to Patrick Beard.)
278 - Fixed several syntactic bugs in gc_c++.h and friends.  (These
279   didn't bother g++, but did bother most other compilers.)
280   Fixed gc_c++.h finalization interface.  (It didn't.)
281 - 64 bit alignment for allocated objects was not guaranteed in a
282   few cases in which it should have been.
283 - Added GC_malloc_atomic_ignore_off_page.
284 - Added GC_collect_a_little.
285 - Added some prototypes to gc.h.
286 - Some other minor bug fixes (notably in Makefile).
287 - Fixed OS/2 / EMX port (thanks to Ari Huttunen).
288 - Fixed AmigaDOS port. (thanks to Michel Schinz).
289 - Fixed the DATASTART definition under Solaris.  There
290   was a 1 in 16K chance of the collector missing the first
291   64K of static data (and thus crashing).
292 - Fixed some blatant anachronisms in the README file.
293 - Fixed PCR-Makefile for upcoming PPCR release.
295 Since version 4.2:
296 - Fixed SPARC alignment problem with GC_DEBUG.
297 - Fixed Solaris threads /proc workaround.  The real
298   problem was an interaction with mprotect.
299 - Incorporated fix from Patrick Beard for gc_c++.h (now gc_cpp.h).
300 - Slightly improved allocator space utilization by
301   fixing the GC_size_map mechanism.
302 - Integrated some Sony News and MIPS RISCos 4.51
303   patches.  (Thanks to Nobuyuki Hikichi of
304   Software Research Associates, Inc. Japan)
305 - Fixed HP_PA alignment problem.  (Thanks to
306   xjam@cork.cs.berkeley.edu.)
307 - Added GC_same_obj and friends.  Changed GC_base
308   to return 0 for pointers past the end of large objects.
309   Improved GC_base performance with ALL_INTERIOR_POINTERS
310   on machines with a slow integer mod operation.
311   Added GC_PTR_ADD, GC_PTR_STORE, etc. to prepare
312   for preprocessor.
313 - changed the default on most UNIX machines to be that
314   signals are not disabled during critical GC operations.
315   This is still ANSI-conforming, though somewhat dangerous
316   in the presence of signal handlers. But the performance
317   cost of the alternative is sometimes problematic.
318   Can be changed back with a minor Makefile edit.
319 - renamed IS_STRING in gc.h, to CORD_IS_STRING, thus
320   following my own naming convention.  Added the function
321   CORD_to_const_char_star.
322 - Fixed a gross bug in GC_finalize.  Symptom: occasional
323   address faults in that function.  (Thanks to Anselm
324   Baird-Smith (Anselm.BairdSmith@inria.fr)
325 - Added port to ICL DRS6000 running DRS/NX.  Restructured
326   things a bit to factor out common code, and remove obsolete
327   code.  Collector should now run under SUNOS5 with either
328   mprotect or /proc dirty bits.  (Thanks to Douglas Steel
329   (doug@wg.icl.co.uk)).
330 - More bug fixes and workarounds for Solaris 2.X.  (These were
331   mostly related to putting the collector in a dynamic library,
332   which didn't really work before.  Also SOLARIS_THREADS
333   didn't interact well with dl_open.)  Thanks to btlewis@eng.sun.com.
334 - Fixed a serious performance bug on the DEC Alpha.  The text
335   segment was getting registered as part of the root set.
336   (Amazingly, the result was still fast enough that the bug
337   was not conspicuous.) The fix works on OSF/1, version 1.3.
338   Hopefully it also works on other versions of OSF/1 ...
339 - Fixed a bug in GC_clear_roots.
340 - Fixed a bug in GC_generic_malloc_words_small that broke
341   gc_inl.h.  (Reported by Antoine de Maricourt.  I broke it
342   in trying to tweak the Mac port.) 
343 - Fixed some problems with cord/de under Linux.
344 - Fixed some cord problems, notably with CORD_riter4.
345 - Added DG/UX port.
346   Thanks to Ben A. Mesander (ben@piglet.cr.usgs.gov)
347 - Added finalization registration routines with weaker ordering
348   constraints.  (This is necessary for C++ finalization with
349   multiple inheritance, since the compiler often adds self-cycles.)
350 - Filled the holes in the SCO port. (Thanks to Michael Arnoldus
351   <chime@proinf.dk>.)
352 - John Ellis' additions to the C++ support:  From John:
354 * I completely rewrote the documentation in the interface gc_c++.h
355 (later renamed gc_cpp.h).  I've tried to make it both clearer and more
356 precise.
358 * The definition of accessibility now ignores pointers from an
359 finalizable object (an object with a clean-up function) to itself.
360 This allows objects with virtual base classes to be finalizable by the
361 collector.  Compilers typically implement virtual base classes using
362 pointers from an object to itself, which under the old definition of
363 accessibility prevented objects with virtual base classes from ever
364 being collected or finalized.
366 * gc_cleanup now includes gc as a virtual base.  This was enabled by
367 the change in the definition of accessibility.
369 * I added support for operator new[].  Since most (all?) compilers
370 don't yet support operator new[], it is conditionalized on
371 -DOPERATOR_NEW_ARRAY.  The code is untested, but its trivial and looks
372 correct.
374 * The test program test_gc_c++ (later renamed test_cpp.cc)
375 tries to test for the C++-specific functionality not tested by the
376 other programs.
377 - Added <unistd.h> include to misc.c.  (Needed for ppcr.)
378 - Added PowerMac port. (Thanks to Patrick Beard again.)
379 - Fixed "srcdir"-related Makefile problems.  Changed things so
380   that all externally visible include files always appear in the
381   include subdirectory of the source.  Made gc.h directly
382   includable from C++ code.  (These were at Per
383   Bothner's suggestion.)
384 - Changed Intel code to also mark from ebp (Kevin Warne's
385   suggestion).
386 - Renamed C++ related files so they could live in a FAT
387   file system. (Charles Fiterman's suggestion.)
388 - Changed Windows NT Makefile to include C++ support in
389   gc.lib.  Added C++ test as Makefile target.
390   
391 Since version 4.3:
392  - ASM_CLEAR_CODE was erroneously defined for HP
393    PA machines, resulting in a compile error.
394  - Fixed OS/2 Makefile to create a library.  (Thanks to
395    Mark Boulter (mboulter@vnet.ibm.com)).
396  - Gc_cleanup objects didn't work if they were created on
397    the stack.  Fixed.
398  - One copy of Gc_cpp.h in the distribution was out of 
399    synch, and failed to document some known compiler
400    problems with explicit destructor invocation.  Partially
401    fixed.  There are probably other compilers on which
402    gc_cleanup is miscompiled.
403  - Fixed Makefile to pass C compiler flags to C++ compiler.
404  - Added Mac fixes.
405  - Fixed os_dep.c to work around what appears to be
406    a new and different VirtualQuery bug under newer
407    versions of win32S.
408  - GC_non_gc_bytes was not correctly maintained by
409    GC_free.  Fixed.  Thanks to James Clark (jjc@jclark.com).
410  - Added GC_set_max_heap_size.
411  - Changed allocation code to ignore blacklisting if it is preventing
412    use of a very large block of memory.  This has the advantage
413    that naive code allocating very large objects is much more
414    likely to work.  The downside is you might no
415    longer find out that such code should really use
416    GC_malloc_ignore_off_page.
417  - Changed GC_printf under win32 to close and reopen the file
418    between calls.  FAT file systems otherwise make the log file
419    useless for debugging.
420  - Added GC_try_to_collect and GC_get_bytes_since_gc.  These
421    allow starting an abortable collection during idle times. 
422    This facility does not require special OS support.  (Thanks to
423    Michael Spertus of Geodesic Systems for suggesting this.  It was
424    actually an easy addition.  Kumar Srikantan previously added a similar
425    facility to a now ancient version of the collector.  At the time
426    this was much harder, and the result was less convincing.)
427  - Added some support for the Borland development environment.  (Thanks
428    to John Ellis and Michael Spertus.)
429  - Removed a misfeature from checksums.c that caused unexpected 
430    heap growth.  (Thanks to Scott Schwartz.)
431  - Changed finalize.c to call WARN if it encounters a finalization cycle.
432    WARN is defined in gc_priv.h to write a message, usually to stdout.
433    In many environments, this may be inappropriate.
434  - Renamed NO_PARAMS in gc.h to GC_NO_PARAMS, thus adhering to my own
435    naming convention.
436  - Added GC_set_warn_proc to intercept warnings.
437  - Fixed Amiga port. (Thanks to Michel Schinz (schinz@alphanet.ch).)
438  - Fixed a bug in mark.c that could result in an access to unmapped
439    memory from GC_mark_from_mark_stack on machines with unaligned
440    pointers.
441  - Fixed a win32 specific performance bug that could result in scanning of
442    objects allocated with the system malloc.
443  - Added REDIRECT_MALLOC.
445 Since version 4.4:
446  - Fixed many minor and one major README bugs. (Thanks to Franklin Chen
447    (chen@adi.com) for pointing out many of them.)
448  - Fixed ALPHA/OSF/1 dynamic library support. (Thanks to Jonathan Bachrach
449    (jonathan@harlequin.com)).
450  - Added incremental GC support (MPROTECT_VDB) for Linux (with some
451    help from Bruno Haible).
452  - Altered SPARC recognition tests in gc.h and config.h (mostly as
453    suggested by Fergus Henderson).
454  - Added basic incremental GC support for win32, as implemented by
455    Windows NT and Windows 95.  GC_enable_incremental is a noop
456    under win32s, which doesn't implement enough of the VM interface.
457  - Added -DLARGE_CONFIG.
458  - Fixed GC_..._ignore_off_page to also function without
459    -DALL_INTERIOR_POINTERS.
460  - (Hopefully) fixed RS/6000 port.  (Only the test was broken.)
461  - Fixed a performance bug in the nonincremental collector running
462    on machines supporting incremental collection with MPROTECT_VDB
463    (e.g. SunOS 4, DEC AXP).  This turned into a correctness bug under
464    win32s with win32 incremental collection.  (Not all memory protection
465    was disabled.)
466  - Fixed some ppcr related bit rot.
467  - Caused dynamic libraries to be unregistered before reregistering.
468    The old way turned out to be a performance bug on some machines.
469  - GC_root_size was not properly maintained under MSWIN32.
470  - Added -DNO_DEBUGGING and GC_dump.
471  - Fixed a couple of bugs arising with SOLARIS_THREADS +
472    REDIRECT_MALLOC.
473  - Added NetBSD/M68K port.  (Thanks to Peter Seebach
474    <seebs@taniemarie.solon.com>.)
475  - Fixed a serious realloc bug.  For certain object sizes, the collector
476    wouldn't scan the expanded part of the object.  (Thanks to Clay Spence
477    (cds@peanut.sarnoff.com) for noticing the problem, and helping me to
478    track it down.)
479    
480 Since version 4.5:
481  - Added Linux ELF support.  (Thanks to Arrigo Triulzi <arrigo@ic.ac.uk>.)
482  - GC_base crashed if it was called before any other GC_ routines.
483    This could happen if a gc_cleanup object was allocated outside the heap
484    before any heap allocation.
485  - The heap expansion heuristic was not stable if all objects had finalization
486    enabled.  Fixed finalize.c to count memory in finalization queue and
487    avoid explicit deallocation.  Changed alloc.c to also consider this count.
488    (This is still not recommended.  It's expensive if nothing else.)  Thanks
489    to John Ellis for pointing this out.
490  - GC_malloc_uncollectable(0) was broken.  Thanks to Phong Vo for pointing
491    this out.
492  - The collector didn't compile under Linux 1.3.X.  (Thanks to Fred Gilham for
493    pointing this out.)  The current workaround is ugly, but expected to be
494    temporary.
495  - Fixed a formatting problem for SPARC stack traces.
496  - Fixed some '=='s in os_dep.c that should have been assignments.
497    Fortunately these were in code that should never be executed anyway.
498    (Thanks to Fergus Henderson.)
499  - Fixed the heap block allocator to only drop blacklisted blocks in small
500    chunks.  Made BL_LIMIT self adjusting.  (Both of these were in response
501    to heap growth observed by Paul Graham.)
502  - Fixed the Metrowerks/68K Mac code to also mark from a6.  (Thanks
503    to Patrick Beard.)
504  - Significantly updated README.debugging.
505  - Fixed some problems with longjmps out of signal handlers, especially under
506    Solaris.  Added a workaround for the fact that siglongjmp doesn't appear to
507    do the right thing with -lthread under Solaris.
508  - Added MSDOS/djgpp port.  (Thanks to Mitch Harris  (maharri@uiuc.edu).)
509  - Added "make reserved_namespace" and "make user_namespace".  The
510    first renames ALL "GC_xxx" identifiers as "_GC_xxx".  The second is the
511    inverse transformation.  Note that doing this is guaranteed to break all
512    clients written for the other names.
513  - descriptor field for kind NORMAL in GC_obj_kinds with ADD_BYTE_AT_END
514    defined should be -ALIGNMENT not WORDS_TO_BYTES(-1).  This is
515    a serious bug on machines with pointer alignment of less than a word.
516  - GC_ignore_self_finalize_mark_proc didn't handle pointers to very near the
517    end of the object correctly.  Caused failures of the C++ test on a DEC Alpha
518    with g++.
519  - gc_inl.h still had problems.  Partially fixed.  Added warnings at the
520    beginning to hopefully specify the remaining dangers.
521  - Added DATAEND definition to config.h.
522  - Fixed some of the .h file organization.  Fixed "make floppy".
524 Since version 4.6:
525  - Fixed some compilation problems with -DCHECKSUMS (thanks to Ian Searle)
526  - Updated some Mac specific files to synchronize with Patrick Beard.
527  - Fixed a serious bug for machines with non-word-aligned pointers.
528    (Thanks to Patrick Beard for pointing out the problem.  The collector
529    should fail almost any conceivable test immediately on such machines.)
531 Since version 4.7:
532  - Changed a "comment" in a MacOS specific part of mach-dep.c that caused
533    gcc to fail on other platforms.
535 Since version 4.8
536  - More README.debugging fixes.
537  - Objects ready for finalization, but not finalized in the same GC
538    cycle, could be prematurely collected.  This occasionally happened
539    in test_cpp.
540  - Too little memory was obtained from the system for very large
541    objects.  That could cause a heap explosion if these objects were
542    not contiguous (e.g. under PCR), and too much of them was blacklisted.
543  - Due to an improper initialization, the collector was too hesitant to
544    allocate blacklisted objects immediately after system startup.
545  - Moved GC_arrays from the data into the bss segment by not explicitly
546    initializing it to zero.  This significantly
547    reduces the size of executables, and probably avoids some disk accesses
548    on program startup.  It's conceivable that it might break a port that I
549    didn't test.
550  - Fixed EMX_MAKEFILE to reflect the gc_c++.h to gc_cpp.h renaming which
551    occurred a while ago.
553 Since 4.9:
554  - Fixed a typo around a call to GC_collect_or_expand in alloc.c.  It broke
555    handling of out of memory.  (Thanks to Patrick Beard for noticing.)
557 Since 4.10:
558  - Rationalized (hopefully) GC_try_to_collect in an incremental collection
559    environment.  It appeared to not handle a call while a collection was in
560    progress, and was otherwise too conservative.
561  - Merged GC_reclaim_or_delete_all into GC_reclaim_all to get rid of some
562    code.
563  - Added Patrick Beard's Mac fixes, with substantial completely untested
564    modifications.
565  - Fixed the MPROTECT_VDB code to deal with large pages and imprecise
566    fault addresses (as on an UltraSPARC running Solaris 2.5).  Note that this
567    was not a problem in the default configuration, which uses PROC_VDB.
568  - The DEC Alpha assembly code needed to restore $gp between calls.
569    Thanks to Fergus Henderson for tracking this down and supplying a
570    patch.
571  - The write command for "de" was completely broken for large files.
572    I used the easiest portable fix, which involved changing the semantics
573    so that f.new is written instead of overwriting f.  That's safer anyway.
574  - Added README.solaris2 with a discussion of the possible problems of
575    mixing the collector's sbrk allocation with malloc/realloc.
576  - Changed the data segment starting address for SGI machines.  The
577    old code failed under IRIX6.
578  - Required double word alignment for MIPS.
579  - Various minor fixes to remove warnings.
580  - Attempted to fix some Solaris threads problems reported by Zhiying Chen.
581    In particular, the collector could try to fork a thread with the
582    world stopped as part of GC_thr_init.  It also failed to deal with
583    the case in which the original thread terminated before the whole
584    process did.
585  - Added -DNO_EXECUTE_PERMISSION.  This has a major performance impact
586    on the incremental collector under Irix, and perhaps under other
587    operating systems.
588  - Added some code to support allocating the heap with mmap.  This may
589    be preferable under some circumstances.
590  - Integrated dynamic library support for HP.
591    (Thanks to Knut Tvedten <knuttv@ifi.uio.no>.)
592  - Integrated James Clark's win32 threads support, and made a number
593    of changes to it, many of which were suggested by Pontus Rydin.
594    This is still not 100% solid.
595  - Integrated Alistair Crooks' support for UTS4 running on an Amdahl
596    370-class machine.
597  - Fixed a serious bug in explicitly typed allocation.  Objects requiring
598    large descriptors where handled in a way that usually resulted in
599    a segmentation fault in the marker.  (Thanks to Jeremy Fitzhardinge
600    for helping to track this down.)
601  - Added partial support for GNU win32 development.  (Thanks to Fergus
602    Henderson.)
603  - Added optional support for Java-style finalization semantics.  (Thanks
604    to Patrick Bridges.)  This is recommended only for Java implementations.
605  - GC_malloc_uncollectable faulted instead of returning 0 when out of
606    memory.  (Thanks to dan@math.uiuc.edu for noticing.)
607  - Calls to GC_base before the collector was initialized failed on a
608    DEC Alpha.  (Thanks to Matthew Flatt.)
609  - Added base pointer checking to GC_REGISTER_FINALIZER in debugging
610    mode, at the suggestion of Jeremy Fitzhardinge.
611  - GC_debug_realloc failed for uncollectable objects.  (Thanks to
612    Jeremy Fitzhardinge.)
613  - Explicitly typed allocation could crash if it ran out of memory.
614    (Thanks to Jeremy Fitzhardinge.)
615  - Added minimal support for a DEC Alpha running Linux.
616  - Fixed a problem with allocation of objects whose size overflowed
617    ptrdiff_t.  (This now fails unconditionally, as it should.)
618  - Added the beginning of Irix pthread support.
619  - Integrated Xiaokun Zhu's fixes for djgpp 2.01.
620  - Added SGI-style STL allocator support (gc_alloc.h).
621  - Fixed a serious bug in README.solaris2.  Multithreaded programs must include
622    gc.h with SOLARIS_THREADS defined.
623  - Changed GC_free so it actually deallocates uncollectable objects.
624    (Thanks to Peter Chubb for pointing out the problem.)
625  - Added Linux ELF support for dynamic libararies.  (Thanks again to
626    Patrick Bridges.)
627  - Changed the Borland cc configuration so that the assembler is not
628    required.
629  - Fixed a bug in the C++ test that caused it to fail in 64-bit
630    environments.
632 Since 4.11:
633  - Fixed ElfW definition in dyn_load.c. (Thanks to Fergus Henderson.)
634    This prevented the dynamic library support from compiling on some
635    older ELF Linux systems.
636  - Fixed UTS4 port (which I apparently mangled during the integration)
637    (Thanks to again to Alistair Crooks.)
638  - "Make C++" failed on Suns with SC4.0, due to a problem with "bool".
639    Fixed in gc_priv.h.
640  - Added more pieces for GNU win32.  (Thanks to Timothy N. Newsham.)
641    The current state of things should suffice for at least some
642    applications.
643  - Changed the out of memory retry count handling as suggested by
644    Kenjiro Taura.  (This matters only if GC_max_retries > 0, which
645    is no longer the default.)
646  - If a /proc read failed repeatedly, GC_written_pages was not updated
647    correctly.  (Thanks to Peter Chubb for diagnosing this.)
648  - Under unlikely circumstances, the allocator could infinite loop in
649    an out of memory situation.  (Thanks again to Kenjiro Taura for
650    identifying the problem and supplying a fix.)
651  - Fixed a syntactic error in the DJGPP code.  (Thanks to Fergus
652    Henderson for finding this by inspection.)  Also fixed a test program
653    problem with DJGPP (Thanks to Peter Monks.)
654  - Atomic uncollectable objects were not treated correctly by the
655    incremental collector.  This resulted in weird log statistics and
656    occasional performance problems.  (Thanks to Peter Chubb for pointing
657    this out.)
658  - Fixed some problems resulting from compilers that dont define
659    __STDC__.  In this case void * and char * were used inconsistently
660    in some cases.  (Void * should not have been used at all.  If
661    you have an ANSI superset compiler that does not define __STDC__,
662    please compile with -D__STDC__=0. Thanks to Manuel Serrano and others
663    for pointing out the problem.)
664  - Fixed a compilation problem on Irix with -n32 and -DIRIX_THREADS.
665    Also fixed some other IRIX_THREADS problems which may or may not have
666    had observable symptoms.
667  - Fixed an HP PA compilation problem in dyn_load.c.  (Thanks to
668    Philippe Queinnec.)
669  - SEGV fault handlers sometimes did not get reset correctly.  (Thanks
670    to David Pickens.)
671  - Added a fix for SOLARIS_THREADS on Intel.  (Thanks again to David
672    Pickens.)  This probably needs more work to become functional.
673  - Fixed struct sigcontext_struct in os_dep.c for compilation under
674    Linux 2.1.X. (Thanks to Fergus Henderson.)
675  - Changed the DJGPP STACKBOTTOM and DATASTART values to those suggested
676    by Kristian Kristensen.  These may still not be right, but it is
677    it is likely to work more often than what was there before.  They may
678    even be exactly right.
679  - Added a #include <string.h> to test_cpp.cc.  This appears to help
680    with HP/UX and gcc.  (Thanks to assar@sics.se.)
681  - Version 4.11 failed to run in incremental mode on recent 64-bit Irix
682    kernels.  This was a problem related to page unaligned heap segments.
683    Changed the code to page align heap sections on all platforms.
684    (I had mistakenly identified this as a kernel problem earlier.
685    It was not.)
686  - Version 4.11 did not make allocated storage executable, except on
687    one or two platforms, due to a bug in a #if test.  (Thanks to Dave
688    Grove for pointing this out.)
689  - Added sparc_sunos4_mach_dep.s to support Sun's compilers under SunOS4.
690  - Added GC_exclude_static_roots.
691  - Fixed the object size mapping algorithm.  This shouldn't matter,
692    but the old code was ugly.
693  - Heap checking code could die if one of the allocated objects was
694    larger than its base address.  (Unsigned underflow problem.  Thanks
695    to Clay Spence for isolating the problem.)
696  - Added RS6000 (AIX) dynamic library support and fixed STACK_BOTTOM.
697    (Thanks to Fred Stearns.)
698  - Added Fergus Henderson's patches for improved robustness with large
699    heaps and lots of blacklisting.
700  - Added Peter Chubb's changes to support Solaris Pthreads, to support
701    MMAP allocation in Solaris, to allow Solaris to find dynamic libraries
702    through /proc, to add malloc_typed_ignore_off_page, and a few other
703    minor features and bug fixes.
704  - The Solaris 2 port should not use sbrk.  I received confirmation from
705    Sun that the use of sbrk and malloc in the same program is not
706    supported.  The collector now defines USE_MMAP by default on Solaris.
707  - Replaced the djgpp makefile with Gary Leavens' version.
708  - Fixed MSWIN32 detection test.
709  - Added Fergus Henderson's patches to allow putting the collector into
710    a DLL under GNU win32.
711  - Added Ivan V. Demakov's port to Watcom C on X86.
712  - Added Ian Piumarta's Linux/PowerPC port.
713  - On Brian Burton's suggestion added PointerFreeGC to the placement
714    options in gc_cpp.h.  This is of course unsafe, and may be controversial.
715    On the other hand, it seems to be needed often enough that it's worth
716    adding as a standard facility.
718 Since 4.12:
719  - Fixed a crucial bug in the Watcom port.  There was a redundant decl
720    of GC_push_one in gc_priv.h.
721  - Added FINALIZE_ON_DEMAND.
722  - Fixed some pre-ANSI cc problems in test.c.
723  - Removed getpagesize() use for Solaris.  It seems to be missing in one
724    or two versions.
725  - Fixed bool handling for SPARCCompiler version 4.2.
726  - Fixed some files in include that had gotten unlinked from the main
727    copy.
728  - Some RS/6000 fixes (missing casts).  Thanks to Toralf Foerster.
729  - Fixed several problems in GC_debug_realloc, affecting mostly the
730    FIND_LEAK case.
731  - GC_exclude_static_roots contained a buggy unsigned comparison to
732    terminate a loop.  (Thanks to Wilson Ho.)
733  - CORD_str failed if the substring occurred at the last possible position.
734    (Only affects cord users.)
735  - Fixed Linux code to deal with RedHat 5.0 and integrated Peter Bigot's
736    os_dep.c code for dealing with various Linux versions.
737  - Added workaround for Irix pthreads sigaction bug and possible signal
738    misdirection problems.
739 Since alpha1:
740  - Changed RS6000 STACKBOTTOM.
741  - Integrated Patrick Beard's Mac changes.
742  - Alpha1 didn't compile on Irix m.n, m < 6.
743  - Replaced Makefile.dj with a new one from Gary Leavens.
744  - Added Andrew Stitcher's changes to support SCO OpenServer.
745  - Added PRINT_BLACK_LIST, to allow debugging of high densities of false
746    pointers.
747  - Added code to debug allocator to keep track of return address
748    in GC_malloc caller, thus giving a bit more context.
749  - Changed default behavior of large block allocator to more
750    aggressively avoid fragmentation.  This is likely to slow down the
751    collector when it succeeds at reducing space cost.
752  - Integrated Fergus Henderson's CYGWIN32 changes.  They are untested,
753    but needed for newer versions.
754  - USE_MMAP had some serious bugs.  This caused the collector to fail
755    consistently on Solaris with -DSMALL_CONFIG.
756  - Added Linux threads support, thanks largely to Fergus Henderson.
757 Since alpha2:
758  - Fixed more Linux threads problems.
759  - Changed default GC_free_space_divisor to 3 with new large block allocation.
760    (Thanks to Matthew Flatt for some measurements that suggest the old
761    value sometimes favors space too much over time.)
762  - More CYGWIN32 fixes.
763  - Integrated Tyson-Dowd's Linux-M68K port.
764  - Minor HP PA and DEC UNIX fixes from Fergus Henderson.
765  - Integrated Christoffe Raffali's Linux-SPARC changes.
766  - Allowed for one more GC fixup iteration after a full GC in incremental
767    mode.  Some quick measurements suggested that this significantly
768    reduces pause times even with smaller GC_RATE values.
769  - Moved some more GC data structures into GC_arrays.  This decreases
770    pause times and GC overhead, but makes debugging slightly less convenient.
771  - Fixed namespace pollution problem ("excl_table").
772  - Made GC_incremental a constant for -DSMALL_CONFIG, hopefully shrinking
773    that slightly.
774  - Added some win32 threads fixes.
775  - Integrated Ivan Demakov and David Stes' Watcom fixes.
776  - Various other minor fixes contributed by many people.
777  - Renamed config.h to gcconfig.h, since config.h tends to be used for
778    many other things.
779  - Integrated Matthew Flatt's support for 68K MacOS "far globals".
780  - Fixed up some of the dynamic library Makefile targets for consistency
781    across platforms.
782  - Fixed a USE_MMAP typo that caused out-of-memory handling to fail
783    on Solaris.
784  - Added code to test.c to test thread creation a bit more.
785  - Integrated GC_win32_free_heap, as suggested by Ivan Demakov.
786  - Fixed Solaris 2.7 stack base finding problem.  (This may actually
787    have been done in an earlier alpha release.)
788 Since alpha3:
789  - Fixed MSWIN32 recognition test, which interfered with cygwin.
790  - Removed unnecessary gc_watcom.asm from distribution.  Removed
791    some obsolete README.win32 text.
792  - Added Alpha Linux incremental GC support.  (Thanks to Philipp Tomsich
793    for code for retrieving the fault address in a signal handler.)
794    Changed Linux signal handler context argument to be a pointer.
795  - Took care of some new warnings generated by the 7.3 SGI compiler.
796  - Integrated Phillip Musumeci's FreeBSD/ELF fixes.
797  - -DIRIX_THREADS was broken with the -o32 ABI (typo in gc_priv.h>
799 Since 4.13:
800  - Fixed GC_print_source_ptr to not use a prototype.
801  - generalized CYGWIN test.
802  - gc::new did the wrong thing with PointerFreeGC placement.
803    (Thanks to Rauli Ruohonen.)
804  - In the ALL_INTERIOR_POINTERS (default) case, some callee-save register
805    values could fail to be scanned if the register was saved and
806    reused in a GC frame.  This showed up in verbose mode with gctest
807    compiled with an unreleased SGI compiler.  I vaguely recall an old
808    bug report that may have been related.  The bug was probably quite old.
809    (The problem was that the stack scanning could be deferred until
810    after the relevant frame was overwritten, and the new save location
811    might be outside the scanned area.  Fixed by more eager stack scanning.)
812  - PRINT_BLACK_LIST had some problems.  A few source addresses were garbage.
813  - Replaced Makefile.dj and added -I flags to cord make targets.
814    (Thanks to Gary Leavens.)
815  - GC_try_to_collect was broken with the nonincremental collector.
816  - gc_cleanup destructors could pass the wrong address to
817    GC_register_finalizer_ignore_self in the presence of multiple
818    inheritance.  (Thanks to Darrell Schiebel.)
819  - Changed PowerPC Linux stack finding code.
821 Since 4.14alpha1
822  - -DSMALL_CONFIG did not work reliably with large (> 4K) pages.
823    Recycling the mark stack during expansion could result in a size
824    zero heap segment, which confused things.  (This was probably also an
825    issue with the normal config and huge pages.)
826  - Did more work to make sure that callee-save registers were scanned
827    completely, even with the setjmp-based code.  Added USE_GENERIC_PUSH_REGS
828    macro to facilitate testing on machines I have access to.
829  - Added code to explicitly push register contents for win32 threads.
830    This seems to be necessary.  (Thanks to Pierre de Rop.)
832 Since 4.14alpha2
833  - changed STACKBOTTOM for DJGPP (Thanks to Salvador Eduardo Tropea).
835 Since 4.14
836  - Reworked large block allocator.  Now uses multiple doubly linked free
837    lists to approximate best fit.
838  - Changed heap expansion heuristic.  Entirely free blocks are no longer
839    counted towards the heap size.  This seems to have a major impact on
840    heap size stability; the old version could expand the heap way too
841    much in the presence of large block fragmentation.
842  - added -DGC_ASSERTIONS and some simple assertions inside the collector.
843    This is mainlyt for collector debugging.
844  - added -DUSE_MUNMAP to allow the heap to shrink.  Suupported on only
845    a few UNIX-like platforms for now.
846  - added GC_dump_regions() for debugging of fragmentation issues.
847  - Changed PowerPC pointer alignment under Linux to 4.  (This needs
848    checking by someone who has one.  The suggestions came to me via a
849    rather circuitous path.)
850  - Changed the Linux/Alpha port to walk the data segment backwards until
851    it encounters a SIGSEGV.  The old way to find the start of the data
852    segment broke with a recent release.
853  - cordxtra.c needed to call GC_REGISTER_FINALIZER instead of
854    GC_register_finalizer, so that it would continue to work with GC_DEBUG.
855  - allochblk sometimes cleared the wrong block for debugging purposes
856    when it dropped blacklisted blocks.  This could result in spurious
857    error reports with GC_DEBUG.
858  - added MACOS X Server support.  (Thanks to Andrew Stone.)
859  - Changed the Solaris threads code to ignore stack limits > 8 MB with
860    a warning.  Empirically, it is not safe to access arbitrary pages
861    in such large stacks.  And the dirty bit implementation does not
862    guarantee that none of them will be accessed.
863  - Integrated Martin Tauchmann's Amiga changes.
864  - Integrated James Dominy's OpenBSD/SPARC port.
866 Since 5.0alpha1
867  - Fixed bugs introduced in alpha1 (OpenBSD & large block initialization).
868  - Added -DKEEP_BACK_PTRS and backptr.h interface.  (The implementation
869    idea came from Al Demers.)
871 Since 5.0alpha2
872  - Added some highly incomplete code to support a copied young generation.
873    Comments on nursery.h are appreciated.
874  - Changed -DFIND_LEAK, -DJAVA_FINALIZATION, and -DFINALIZE_ON_DEMAND,
875    so the same effect could be obtained with a runtime switch.   This is
876    a step towards standardizing on a single dynamic GC library.
877  - Significantly changed the way leak detection is handled, as a consequence
878    of the above.
880 Since 5.0 alpha3
881  - Added protection fault handling patch for Linux/M68K from Fergus
882    Henderson and Roman Hodek.
883  - Removed the tests for SGI_SOURCE in new_gc_alloc.h.  This was causing that
884    interface to fail on nonSGI platforms.
885  - Changed the Linux stack finding code to use /proc, after changing it
886    to use HEURISTIC1.  (Thanks to David Mossberger for pointing out the
887    /proc hook.)
888  - Added HP/UX incremental GC support and HP/UX 11 thread support.
889    Thread support is currently still flakey.
890  - Added basic Linux/IA64 support.
891  - Integrated Anthony Green's PicoJava support.
892  - Integrated Scott Ananian's StrongARM/NetBSD support.
893  - Fixed some fairly serious performance bugs in the incremental
894    collector.  These have probably been there essentially forever.
895    (Mark bits were sometimes set before scanning dirty pages.
896    The reclaim phase unnecessarily dirtied full small object pages.)
897  - Changed the reclaim phase to ignore nearly full pages to avoid
898    touching them.
899  - Limited GC_black_list_spacing to roughly the heap growth increment.
900  - Changed full collection triggering heuristic to decrease full GC
901    frequency by default, but to explicitly trigger full GCs during
902    heap growth.  This doesn't always improve things, but on average it's
903    probably a win.
904  - GC_debug_free(0, ...) failed.  Thanks to Fergus Henderson for the
905    bug report and fix.
907 Since 5.0 alpha4
908  - GC_malloc_explicitly_typed and friends sometimes failed to
909    initialize first word.
910  - Added allocation routines and support in the marker for mark descriptors
911    in a type structure referenced by the first word of an object.  This was
912    introduced to support gcj, but hopefully in a way that makes it
913    generically useful.
914  - Added GC_requested_heapsize, and inhibited collections in nonincremental
915    mode if the actual used heap size is less than what was explicitly
916    requested.
917  - The Solaris pthreads version of GC_pthread_create didn't handle a NULL
918    attribute pointer.  Solaris thread support used the wrong default thread
919    stack size.  (Thanks to Melissa O'Neill for the patch.)
920  - Changed PUSH_CONTENTS macro to no longer modify first parameter.
921    This usually doesn't matter, but it was certainly an accident waiting
922    to happen ...
923  - Added GC_register_finalizer_no_order and friends to gc.h.  They're
924    needed by Java implementations.
925  - Integrated a fix for a win32 deadlock resulting from clock() calling
926    malloc.  (Thanks to Chris Dodd.)
927  - Integrated Hiroshi Kawashima's port to Linux/MIPS.  This was designed
928    for a handheld platform, and may or may not be sufficient for other
929    machines.
930  - Fixed a va_arg problem with the %c specifier in cordprnt.c.  It appears
931    that this was always broken, but recent versions of gcc are the first to
932    report the (statically detectable) bug.
933  - Added an attempt at a more general solution to dlopen races/deadlocks.
934    GC_dlopen now temporarily disables collection.  Still not ideal, but ...
935  - Added -DUSE_I686_PREFETCH, -DUSE_3DNOW_PREFETCH, and support for IA64
936    prefetch instructions.  May improve performance measurably, but I'm not
937    sure the code will run correctly on processors that don't support the
938    instruction.  Won't build except with very recent gcc.
939  - Added caching for header lookups in the marker.  This seems to result
940    in a barely measurable performance gain.  Added support for interleaved
941    lookups of two pointers, but unconfigured that since the performance
942    gain is currently near zero, and it adds to code size.
943  - Changed Linux DATA_START definition to check both data_start and
944    __data_start, since nothing else seems to be portable.
945  - Added -DUSE_LD_WRAP to optionally take advantage of the GNU ld function
946    wrapping mechanism.  Probably currently useful only on Linux.
947  - Moved some variables for the scratch allocator into GC_arrays, on
948    Martin Hirzel's suggestion.
949  - Fixed a win32 threads bug that caused the collector to not look for
950    interior pointers from one of the thread stacks without
951    ALL_INTERIOR_POINTERS.  (Thanks to Jeff Sturm.)
952  - Added Mingw32 support.  (Thanks again to Jeff Sturm for the patch.)
953  - Changed the alpha port to use the generic register scanning code instead
954    of alpha_mach_dep.s.  Alpha_mach_dep.s doesn't look for pointers in fp
955    registers, but gcc sometimes spills pointers there.  (Thanks to Manuel
956    Serrano for helping me debug this by email.)  Changed the IA64 code to
957    do something similar for similar reasons.
959 [5.0alpha5 doesn't really exist, but it may have escaped.]
961 Since 5.0alpha6:
962  - -DREDIRECT_MALLOC was broken in alpha6. Fixed.
963  - Cleaned up gc_ccp.h slightly, thus also causing the HP C++ compiler to
964    accept it.
965  - Removed accidental reference to dbg_mlc.c, which caused dbg_mlc.o to be
966    linked into every executable.
967  - Added PREFETCH to bitmap marker.  Changed it to use the header cache.
968  - GC_push_marked sometimes pushed one object too many, resulting in a
969    segmentation fault in GC_mark_from_mark_stack.  This was probably an old
970    bug.  It finally showed up in gctest on win32.
971  - Gc_priv.h erroneously #defined GC_incremental to be TRUE instead of FALSE
972    when SMALL_CONFIG was defined.  This was no doubt a major performance bug for
973    the default win32 configuration.
974  - Removed -DSMALL_CONFIG from NT_MAKEFILE.  It seemed like an anchronism now
975    that the average PC has 64MB or so.
976  - Integrated Bryce McKinley's patches for linux threads and dynamic loading
977    from the libgcj tree.  Turned on dynamic loading support for Linux/PPC.
978  - Changed the stack finding code to use environ on HP/UX.  (Thanks
979    to Gustavo Rodriguez-Rivera for the suggestion.)  This should probably
980    be done on other platforms, too.  Since I can't test those, that'll
981    wait until after 5.0.
983 Since 5.0alpha7:
984  - Fixed threadlibs.c for linux threads.  -DUSE_LD_WRAP was broken and
985    -ldl was omitted.  Fixed Linux stack finding code to handle
986    -DUSE_LD_WRAP correctly.
987  - Added MSWIN32 exception handler around marker, so that the collector
988    can recover from root segments that are unmapped during the collection.
989    This caused occasional failures under Windows 98, and may also be
990    an issue under Windows NT/2000.
992 Since 5.0
993  - Fixed a gc.h header bug which showed up under Irix.  (Thanks to
994    Dan Sullivan.)
995  - Fixed a typo in GC_double_descr in typd_mlc.c.
996    This probably could result in objects described by array descriptors not
997    getting traced correctly.  (Thanks to Ben Hutchings for pointing this out.)
998  - The block nearly full tests in reclaim.c were not correct for 64 bit
999    environments.  This could result in unnecessary heap growth under unlikely
1000    conditions.
1002 Since 5.1
1003  - dyn_load.c declared GC_scratch_last_end_ptr as an extern even if it
1004    was defined as a macro.  This prevented the collector from building on
1005    Irix.
1006  - We quietly assumed that indirect mark descriptors were never 0.
1007    Our own typed allocation interface violated that.  This could result
1008    in segmentation faults in the marker with typed allocation.
1009  - Fixed a _DUSE_MUNMAP bug in the heap block allocation code.
1010    (Thanks to Ben Hutchings for the patch.)
1011  - Taught the collector about VC++ handling array operator new.
1012    (Thanks again to Ben Hutchings for the patch.)
1013  - The two copies of gc_hdrs.h had diverged.  Made one a link to the other
1014    again.
1016 Since 5.2  (A few 5.2 patches are not in 6.0alpha1)
1017  - Fixed _end declaration for OSF1.
1018  - There were lots of spurious leak reports in leak detection mode, caused
1019    by the fact that some pages were not being swept, and hence unmarked
1020    objects weren't making it onto free lists.  (This bug dated back to 5.0.)
1021  - Fixed a typo in the liblinuxgc.so Makefile rule.
1022  - Added the GetExitCodeThread to Win32 GC_stop_world to (mostly) work
1023    around a Windows 95 GetOpenFileName problem.  (Thanks to Jacob Navia.)
1025 Since 5.3
1026  - Fixed a typo that prevented compilation with -DUSE_3DNOW_PREFETCH.
1027    (Thanks to Shawn Wagner for actually testing this.)
1028  - Fixed GC_is_thread_stack in solaris_threads.c.  It forgot to return a value
1029    in the common case.  I wonder why nobody noticed?
1030  - Fixed another silly syntax problem in GC_double_descr.  (Thanks to
1031    Fergus Henderson for finding it.)
1032  - Fixed a GC_gcj_malloc bug: It tended to release the allocator lock twice.
1034 Since 5.4  (A few 5.3 patches are not in 6.0alpha2)
1035  - Added HP/PA prefetch support.
1036  - Added -DDBG_HDRS_ALL and -DSHORT_DBG_HDRS to reduce the cost and improve
1037    the reliability of generating pointer backtrace information, e.g. in
1038    the Bigloo environment.
1039  - Added parallel marking support (-DPARALLEL_MARK).  This currently
1040    works only under IA32 and IA64 Linux, but it shouldn't be hard to adapt
1041    to other platforms.  This is intended to be a lighter-weight (less
1042    new code, probably not as scalable) solution than the work by Toshio Endo
1043    et al, at the University of Tokyo.  A number of their ideas were
1044    reused, though the code wasn't, and the underlying data structure
1045    is significantly different.  In particular, we keep the global mark
1046    stack as a single shared data structure, but most of the work is done
1047    on smaller thread-local mark stacks.
1048  - Changed GC_malloc_many to be cheaper, and to require less mutual exclusion
1049    with -DPARALLEL_MARK.
1050  - Added full support for thread local allocation under Linux
1051    (-DTHREAD_LOCAL_ALLOC).  This is a thin veneer on GC_malloc_many, and
1052    should be easily portable to other platforms, especially those that
1053    support pthreads.
1054  - CLEAR_DOUBLE was not always getting invoked when it should have been.
1055  - GC_gcj_malloc and friends used different out of memory handling than
1056    everything else, probably because I forgot about one when I implemented
1057    the other.  They now both call GC_oom_fn(), not GC_oom_action().
1058  - Integrated Jakub Jelinek's fixes for Linux/SPARC.
1059  - Moved GC_objfreelist, GC_aobjfreelist, and GC_words_allocd out of
1060    GC_arrays, and separately registered the first two as excluded roots.
1061    This makes code compiled with gc_inl.h less dependent on the
1062    collector version.  (It would be nice to remove the inclusion of
1063    gc_priv.h by gc_inl.h completely, but we're not there yet.  The
1064    locking definitions in gc_priv.h are still referenced.)
1065    This change was later coniditoned on SEPARATE_GLOBALS, which
1066    is not defined by default, since it involves a performance hit.
1067  - Register GC_obj_kinds separately as an excluded root region.  The
1068    attempt to register it with GC_arrays was usually failing.  (This wasn't
1069    serious, but seemed to generate some confusion.) 
1070  - Moved backptr.h to gc_backptr.h.
1072 Since 6.0alpha1
1073  - Added USE_MARK_BYTES to reduce the need for compare-and-swap on platforms
1074    for which that's expensive.
1075  - Fixed a locking bug ib GC_gcj_malloc and some locking assertion problems.
1076  - Added a missing volatile to OR_WORD and renamed the parameter to
1077    GC_compare_and_swap so it's not a C++ reserved word.  (Thanks to
1078    Toshio Endo for pointing out both of those.)
1079  - Changed Linux dynamic library registration code to look at /proc/self/maps
1080    instead of the rld data structures when REDIRECT_MALLOC is defined.
1081    Otherwise some of the rld data data structures may be prematurely garbage
1082    collected.  (Thanks to Eric Benson for helping to track this down.)
1083  - Fixed USE_LD_WRAP a bit more, so it should now work without threads.
1084  - Renamed XXX_THREADS macros to GC_XXX_THREADS for namespace correctness.
1085    Tomporarily added some backward compatibility definitions.  Renamed
1086    USE_LD_WRAP to GC_USE_LD_WRAP.
1087  - Many MACOSX POWERPC changes, some additions to the gctest output, and
1088    a few minor generic bug fixes.  (Thanks to Dietmar Planitzer.)
1090 Since 6.0 alpha2
1091  - Fixed the /proc/self/maps code to not seek, since that apparently is not
1092    reliable across all interesting kernels.
1093  - Fixed some compilation problems in the absence of PARALLEL_MARK
1094    (introduced in alpha2).
1095  - Fixed an algorithmic problem with PARALLEL_MARK.  If work needs to
1096    be given back to the main mark "stack", the BOTTOM entries of the local
1097    stack should be given away, not the top ones.  This has substantial
1098    performance impact, especially for > 2 processors, from what I can tell.
1099  - Extracted gc_lock.h from gc_priv.h.  This should eventually make it a
1100    bit easier to avoid including gc_priv.h in clients.
1101  - Moved all include files to include/ and removed duplicate links to the
1102    same file.  The old scheme was a bad idea because it was too easy to get the
1103    copies out of sync, and many systems don't support hard links.
1104    Unfortunately, it's likely that I broke some of the non-Unix Makefiles in
1105    the process, although I tried to update them appropriately.
1106  - Removed the partial support for a copied nursery.  It's not clear that
1107    this would be a tremendous win, since we don't consistently lose to
1108    generational copying collectors.  And it would significantly complicate
1109    many things.  May be reintroduced if/when it really turns out to win.
1110  - Removed references to IRIX_JDK_THREADS, since I believe there never
1111    were and never will be any clients.
1112  - Added some code to linux_threads.c to possibly support HPUX threads
1113    using the Linux code.  Unfortunately, it doesn't work yet, and is
1114    currently disabled.
1115  - Added support under Linux/X86 for saving the call chain, both in (debug)
1116    objects for client debugging, and in GC_arrays._last_stack for GC
1117    debugging.  This was previously supported only under Solaris.  It is
1118    not enabled by default under X86, since it requires that code be compiled
1119    to explicitly dave frame pointers on the call stack.  (With gcc this
1120    currently happens by default, but is often turned off explicitly.)
1121    To turn it on, define SAVE_CALL_CHAIN.
1123 Since 6.0 alpha3
1124  - Moved up the detection of mostly full blocks to the initiatiation of the
1125    sweep phase.  This eliminates some lock conention in the PARALLEL_MARK case,
1126    as multiple threads try to look at mostly full blocks concurrently.
1127  - Restored the code in GC_malloc_many that grabs a prefix of the global
1128    free list.  This avoids the case in which every GC_malloc_many call
1129    tries and fails to allocate a new heap block, and the returns a single
1130    object from the global free list.
1131  - Some minor fixes in new_hblk.c.  (Attempted to build free lists in order
1132    of increasing addresses instead of decreasing addresses for cache performance
1133    reasons.  But this seems to be only a very minor gain with -DEAGER_SWEEP,
1134    and a loss in other cases.  So the change was backed out.)
1135  - Fixed some of the documentation.  (Thanks in large part to Fergus
1136    Henderson.)
1137  - Fixed the Linux USE_PROC_FOR_LIBRARIES code to deal with apps that perform
1138    large numbers of mmaps.  (Thanks to Eric Benson.)  Also fixed that code to
1139    deal with short reads.
1140  - Added GC_get_total_bytes(). 
1141  - Fixed leak detection mode to avoid spurious messages under linuxthreads.
1142    (This should also now be easy for the other supported threads packages.
1143    But the code is tricky enough that I'm hesitant to do it without being able
1144    to test.  Everything allocated in the GC thread support itself should be
1145    explicitly deallocated.)
1146  - Made it possible (with luck) to redirect malloc to GC_local_malloc.
1148 Since 6.0 alpha4
1149  - Changed the definition of GC_pause in linux_threads.c to use a volatile
1150    asm.  Some versions of gcc apparently optimize away writes to local volatile
1151    variables.  This caused poor locking behaviour starting at about
1152    4 processors.
1153  - Added GC_start_blocking(), GC_end_blocking() calls and wrapper for sleep
1154    to linux_threads.c.
1155    The first two calls could be used to generally avoid sending GC signals to
1156    blocked threads, avoiding both premature wakeups and unnecessary overhead.
1157  - Fixed a serious bug in thread-local allocation.  At thread termination,
1158    GC_free could get called on small integers.  Changed the code for thread
1159    termination to more efficiently return left-over free-lists.
1160  - Integrated Kjetil Matheussen's BeOS support.
1161  - Rearranged the directory structure to create the doc and tests
1162    subdirectories.
1163  - Sort of integrated Eric Benson's patch for OSF1.  This provided basic
1164    OSF1 thread support by suitably extending hpux_irix_threads.c.  Based
1165    on earlier email conversations with David Butenhof, I suspect that it
1166    will be more reliable in the long run to base this on linux_threads.c
1167    instead.  Thus I attempted to patch up linux_threads.c based on Eric's code.
1168    The result is almost certainly broken, but hopefully close enough that
1169    someone with access to a machine can pick it up.
1170  - Integrated lots of minor changes from the NetBSD distribution.  (These
1171    were supplied by David Brownlee.  I'm not sure about the original
1172    authors.)
1173  - Hacked a bit more on the HP/UX thread-support in linux_threads.c.  It
1174    now appears to work in the absence of incremental collection.  Renamed
1175    hpux_irix_threads.c back to irix_threads.c, and removed the attempt to
1176    support HPUX there.
1177  - Changed gc.h to define _REENTRANT in cases in which it should already
1178    have been defined. It is still safer to also define it on the command
1179    line. 
1181 Since 6.0alpha5:
1182  - Changed the definition of DATASTART on ALPHA and IA64, where data_start
1183    and __data_start are not defined by earlier versions of glibc.  This might
1184    need to be fixed on other platforms as well.
1185  - Changed the way the stack base and backing store base are found on IA64.
1186    This should now remain reliable on future kernels.  But since it relies
1187    on /proc, it will no longer work in the simulated NUE environment.
1188  - Made the call to random() in dbg_mlc.c with -DKEEP_BACK_PTRS dependent
1189    on the OS.  On non-Unix systems, rand() should be used instead.  Handled
1190    small RAND_MAX.  (Thanks to Peter Ross for pointing this out.)
1191  - Fixed the cord make rules to create the cord subdirectory, if necessary.
1192    (Thanks to Doug Moen.)
1193  - Changed fo_object_size calculation in finalize.c.  Turned finalization
1194    of nonheap object into a no-op.  Removed anachronism from GC_size()
1195    implementation.
1196  - Changed GC_push_dirty call in solaris_threads.c to GC_push_selected.
1197    It was missed in a previous renaming. (Thanks to Vladimir Tsichevski
1198    for pointing this out.)
1199  - Arranged to not not mask SIGABRT in linux_threads.c.  (Thanks to Bryce
1200    McKinlay.) 
1201  - Added GC_no_dls hook for applications that want to register their own
1202    roots.
1203  - Integrated Kjetil Matheussen's Amiga changes.
1204  - Added FREEBSD_STACKBOTTOM.  Changed the X86/FreeBSD port to use it.
1205    (Thanks to Matthew Flatt.)
1206  - Added pthread_detach interception for platforms supported by linux_threads.c
1207    and irix_threads.c.  Should also be added for Solaris?
1208  - Changed the USE_MMAP code to check for the case in which we got the
1209    high end of the address space, i.e. mem_ptr + mem_sz == 0.  It appears
1210    that this can happen under Solaris 7.  It seems to be allowed by what
1211    I would claim is an oversight in the mmap specification.  (Thanks to Toshio
1212    Endo for pointing out the problem.)
1213  - Cleanup of linux_threads.c.  Some code was originally cloned from
1214    irix_threads.c and now unnecessary.  Some comments were obviously wrong.
1215  - (Mostly) fixed a longstanding problem with setting of dirty bits from
1216    a signal handler.  In the presence of threads, dirty bits could get lost,
1217    since the etting of a bit in the bit vector was not atomic with respect
1218    to other updates.  The fix is 100% correct only for platforms for which
1219    GC_test_and_set is defined.  The goal is to make that all platforms with
1220    thread support.  Matters only if incremental GC and threads are both
1221    enabled.
1222  - made GC_all_interior_pointers (a.k.a. ALL_INTERIOR_POINTERS) an
1223    initialization time, instead of build-time option.  This is a 
1224    nontrivial, high risk change.  It should slow down the code measurably
1225    only if MERGE_SIZES is not defined, which is a very nonstandard
1226    configuration.   
1227  - Added doc/README.environment, and implemented what it describes.  This
1228    allows a number of additional configuration options to be set through
1229    the environment.  It documents a few previously undocumented options.
1230  - Integrated Eric Benson's leak testing improvements.
1231  - Removed the option to throw away the beginning of each page (DISCARD_WORDS).
1232    This became less and less useful as processors enforce stricter alignment.
1233    And it hadn't been tested in ages, and was thus probably broken anyway.
1235 Since 6.0alpha6:
1236  - Added GC_finalizer_notifier.  Fixed GC_finalize_on_demand.  (The variable
1237    actually wasn't being tested at the right points.  The build-time flag
1238    was.)
1239  - Added Tom Tromey's S390 Linux patch.
1240  - Added code to push GC_finalize_now in GC_push_finalizer_structures.
1241    (Thanks to Matthew Flatt.)
1242  - Added GC_push_gc_structures() to push all GC internal roots.
1243  - Integrated some FreeBSD changes from Matthew Flatt.
1244  - It looks like USRSTACK is not always correctly defined under Solaris.
1245    Hacked gcconfig.h to attempt to work around the problem.  The result
1246    is not well tested.  (Thanks again to Matthew Flatt for pointing this
1247    out.  The gross hack is mine. - HB)
1248  - Added Ji-Yong Chung's win32 threads and C++ fixes.
1249  - Arranged for hpux_test_and_clear.s to no longer be needed or built.
1250    It was causing build problems with gas, and it's not clear this is
1251    better than the pthreads alternative on this platform.
1252  - Some MINGW32 fixes from Hubert Garavel.
1253  - Added Initial Hitachi SH4 port from Kaz Kojima.
1254  - Ported thread-local allocation and parallel mark code to HP/UX on PA_RISC.
1255  - Made include/gc_mark.h more public and separated out the really private
1256    pieces.  This is probably still not quite sufficient for clients that
1257    want to supply their own kind of type information.  But it's a start.
1258    This involved lots of identifier renaming to make it namespace clean.
1259  - Added GC_dont_precollect for clients that need complete control over
1260    the root set.
1261  - GC_is_visible didn't do the right thing with gcj objects.  (Not that
1262    many people are likely to care, but ...)
1263  - Don't redefine read with GC_USE_LD_WRAP.
1264  - Initial port to LINUX/HP_PA.  Incremental collection and threads are not
1265    yet supported.  (Incremental collection should work if you have the
1266    right kernel.  Threads may work with a sufficiently patched pthread
1267    library.)
1268  - Changed gcconfig.h to recognize __i386__ as an alternative to i386 in
1269    many places.  (Thanks to Benjamin Lerman.)
1270  - Made win32_threads.c more tolerant of detaching a thread that it didn't
1271    know about.  (Thanks to Paul Nash.)
1272  - Added Makefile.am and configure.in from gcc to the distribution, with
1273    minimal changes.  For the moment, those are just placeholders.  In the
1274    future, we're planning to switch to a GNU-style build environment for
1275    Un*x-like systems, though the old Makefile will remain as a backup.
1276  - Turned off STUBBORN_ALLOC by default, and added it back as a Makefile
1277    option.
1278  - Redistributed some functions between malloc.c and mallocx.c, so that
1279    simple statically linked apps no longer pull in mallocx.o.
1280  - Changed large object allocation to clear the first and last few words
1281    of each block before releassing the lock.  Otherwise the marker could see
1282    objects with nonsensical type descriptors.
1283  - Fixed a couple of subtle problems that could result in not recognizing
1284    interior pointers from the stack.  (I believe these were introduced
1285    in 6.0alpha6.)
1286  - GC_debug_free_inner called GC_free, which tried to reacquire the
1287    allocator lock, and hence deadlocked.  (DBG_HDRS_ALL probably never worked
1288    with threads?)
1289  - Fixed several problems with back traces.  Accidental references to a free
1290    list could cause the free list pointer to be overwritten by a back pointer.
1291    There seemed to be some problems with the encoding of root and finalizer
1292    references.
1293   
1294 Since 6.0alpha7:
1295  - Changed GC_debug_malloc_replacement and GC_debug_realloc_replacement
1296    so that they compile under Irix.  (Thanks to Dave Love.)
1297  - Updated powerpc_macosx_mach_dep.s so that it works if the collector
1298    is in a dynamic library.  (Thanks to Andrew Begel.)
1299  - Transformed README.debugging into debugging.html, updating and
1300    expanding it in the process.  Added gcdescr.html and tree.html
1301    from the web site to the GC distribution.
1302  - Fixed several problems related to PRINT_BLACK_LIST. This involved
1303    restructuring some of the marker macros.
1304  - Fixed some problems with the sizing of objects with debug information.
1305    Finalization was broken KEEP_BACK_PTRS or PRINT_BLACK_LIST.  Reduced the
1306    object size with SHORT_DEBUG_HDRS by another word.
1307  - The "Needed to allocate blacklisted ..." warning had inadvertently
1308    been turned off by default, due to a buggy test in allchblk.c.  Turned
1309    it back on.
1310  - Removed the marker macros to deal with 2 pointers in interleaved fashion.
1311    They were messy and the performance improvement seemed minimal.  We'll
1312    leave such scheduling issues to the compiler.
1313  - Changed Linux/PowerPC test to also check for __powerpc__ in response
1314    to a discussion on the gcc mailing list.
1315  - On Matthew Flatt's suggestion removed the "static" from the jmp_buf
1316    declaration in GC_generic_push_regs.  This was causing problems in
1317    systems that register all of their own roots.  It looks far more correct
1318    to me without the "static" anyway. 
1319  - Fixed several problems with thread local allocation of pointerfree or
1320    typed objects.  The collector was reclaiming thread-local free lists, since
1321    it wasn't following the link fields.
1322  - There was apparently a long-standing race condition related to multithreaded
1323    incremental collection.  A collection could be started and a thread stopped
1324    between the memory unprotect system call and the setting of the
1325    corresponding dirt bit.  I believe this did not affect Solaris or PCR, which
1326    use a different dirty-bit implementation.  Fixed this by installing
1327    signal handlers with sigaction instead of signal, and disabling the thread
1328    suspend signal while in the write-protect handler.  (It is unclear
1329    whether this scenario ever actually occurred.  I found it while tracking
1330    down the following:)
1331  - Incremental collection did not cooperate correctly with the PARALLEL_MARK
1332    implementation of GC_malloc_many or the local_malloc primitves.  It still
1333    doesn't work well, but it shouldn't lose memory anymore.
1334  - Integrated some changes from the gcc source tree that I had previously
1335    missed.  (Thanks to Bryce McKinley for the reminder/diff.)
1336  - Added Makefile.direct as a copy of the default Makefile, which would
1337    normally be overwritten if configure is run.
1338  - Changed the gc.tar target in Makefile.direct to embed the version number
1339    in the gc directory name.  This will affect future tar file distributions.
1340  - Changed the Irix dynamic library finding code to no longer try to
1341    eliminate writable text segments under Irix6.x, since that is probably no
1342    longer necessary, and can apparently be unsafe on occasion.  (Thanks to
1343    Shiro Kawai for pointing this out.)
1344  - GC_cleanup with GC_DEBUG enabled passed a real object base address to
1345    GC_debug_register_finalizer_ignore_self, which expected a pointer past the
1346    debug header.  Call GC_register_finalizer_ignore_self instead, even with
1347    debugging enabled.  (Thanks to Jean-Daniel Fekete for catching this.)
1348  - The collector didn't build with call chain saving enabled but NARGS=0.
1349    (Thanks to Maarten Thibaut.)
1350  - Fixed up the GNU-style build files enough so that they work in some
1351    obvious cases.
1352  - Added initial port to Digital Mars compiler for win32. (Thanks to Walter
1353    Bright.)
1355 Since 6.0alpha8:
1356  - added README.macros.
1357  - Made gc.mak a symbolic link to work around winzip's tendency to ignore
1358    hard links.
1359  - Simplified the setting of NEED_FIND_LIMIT in os_dep.c, possibly breaking
1360    it on untested platforms.
1361  - Integrated initial GNU HURD port. (Thanks to Chris Lingard and Igor
1362    Khavkine.)
1363  - A few more fixes for Digital Mars compiler (Walter Bright).
1364  - Fixed gcc version recognition.  Renamed OPERATOR_NEW_ARRAY to
1365    GC_OPERATOR_NEW_ARRAY.  Changed GC_OPERATOR_NEW_ARRAY to be the default.
1366    It can be overridden with -DGC_NO_OPERATOR_NEW_ARRAY.  (Thanks to
1367    Cesar Eduardo Barros.) 
1368  - Changed the byte size to free-list mapping in thread local allocation
1369    so that size 0 allocations are handled correctly.
1370  - Fixed Linux/MIPS stackbottom for new toolchain. (Thanks to Ryan Murray.)
1371  - Changed finalization registration to invoke GC_oom_fn when it runs out
1372    of memory.
1373  - Removed lvalue cast in finalize.c.  This caused some debug configurations
1374    not to build with some non-gcc compilers.
1376 Since 6.0alpha9:
1377  - Two more bug fixes for KEEP_BACK_PTRS and DBG_HDRS_ALL.
1378  - Fixed a stack clearing problem that resulted in SIGILL with a
1379    misaligned stack pointer for multithreaded SPARC builds.
1380  - Integrated another HURD patch (thanks to Igor Khavkine).
1382 Since 6.0:
1383  - Non-debug, atomic allocations could result in bogus smashed object
1384    reports with debugging on.  (Thanks to Patrick Doyle for the small
1385    test case.)
1386  - Fixed GC_get_register_stack_base (Itanium only) to work around a glibc
1387    2.2.4 bug.
1388  - Initial port to HP/UX on Itanium.  Thread support and both 32 and 64
1389    bit ABIs appear to work.  Parallel mark support doesn't yet, due to
1390    some inline assembly code issues.  Thread local allocation does appear
1391    to work.
1392  - ifdef'ed out glibc2.1/Itanium workaround.  I suspect nobody is using
1393    that combination anymore.
1394  - Added a patch to make new_gc_alloc.h usable with gcc3.0.  (Thanks to
1395    Dimitris Vyzovitis for the patch.)
1396  - Debugged 64-bit support on HP/UX PA-RISC.
1397  - Turned on dynamic loading support for FreeBSD/ELF.  (Thanks to Peter
1398    Housel.)
1399  - Unregistering of finalizers with debugging allocation was broken.
1400    (Thanks to Jani Kajala for the test case.)
1401  - Old finalizers were not returned correctly from GC_debug_register_finalizer.
1402  - Disabled MPROTECT_VDB for Linux/M68K based on a report that it doesn't work.
1403  - Cleaned up some statistics gathering code in reclaim.c (Thanks to Walter
1404    Bright.)
1405  - Added some support for OpenBSD/ELF/Linux.  (Thanks to Suzuki Toshiya.)
1406  - Added Jakub Jelinek's patch to use dl_iterate_phdr for dynamic library
1407    traversal to dyn_load.c.  Changed it to weakly reference dl_iterate_phdr,
1408    so that the old code is stilll used with old versions of glibc.
1409  - Cleaned up feature test macros for various threads packages and
1410    integrated (partially functional) FreeBSD threads code from Loren Rittle.
1411    It's likely that the cleanup broke something, since it touched lots of
1412    code.  It's also likelly that it fixed some unreported bugs in the
1413    less common thread implementations, since some of the original code
1414    didn't stand up to close scrutiny.  Support for the next pthreads
1415    implementation should be easier to add.
1417 Since 6.1alpha1:
1418  - No longer wrap read by default in multithreaded applications.  It was
1419    pointed out on the libgcj list that this holds the allocation lock for
1420    way too long if the read blocks.  For now, reads into the heap are
1421    broken with incremental collection.  It's possible to turn this back on
1422    if you make sure that read calls don't block (e.g. by calling select
1423    first).
1424  - Fix ifdef in Solaris_threads.h to refer to GC_SOLARIS_THREADS.
1425  - Added check for environment variable GC_IGNORE_GCJ_INFO.
1426  - Added printing of stop-the-world GC times if GC_PRINT_STATS environment
1427    variable is set.
1428  - The calloc definition in leak_detector.h was missing parentheses, and
1429    realloc was missing a second argument to GC_REALLOC.
1430    (Thanks to Elrond (elrond<at>samba-tng.org).)
1431  - Added GC_PRINT_BACK_HEIGHT environment variable and associated
1432    code, mostly in the new file backgraph.c.  See doc/README.environment.
1433  - Added -DUSE_GLOBAL_ALLOC to work around a Windows NT issue.  (Thanks to
1434    Jonathan Clark.)
1435  - Integrated port to NEC EWS4800 (MIPS-based workstation, with somewhat
1436    different address-space layout). This may help for other machines with
1437    holes in the data segment.  (Thanks to Hironori Sakamoto.)
1438  - Changed the order in which GC_push_roots and friends push things onto
1439    the mark stack.  GC_push_all calls need to come first, since we can't
1440    necessarily recovere if those overflow the mark stack.  (Thanks to
1441    Matthew Flatt for tracking down the problem.)
1442  - Some minor cleanups to mostly support the Intel compiler on Linux/IA64.
1444 Since 6.1 alpha2:
1445  - Minor cleanup on the gcconfig.h section for SPARC.
1446  - Minor fix to support Intel compiler for I386/Linux. (Thanks to Sven
1447    Hartrumpf.)
1448  - Added SPARC V9 (64-bit) support.  (Thanks to Jeff Sturm.)
1449  - Restructured the way in which we determine whether or not to keep
1450    call stacks for debug allocation.  By default SAVE_CALL_COUNT is
1451    now zero on all platforms.  Added SAVE_CALL_NARGS parameters.
1452    If possible, use execinfo.h to capture call stack.  (This should
1453    add support for a number of new platforms, though often at
1454    considerable runtime expense.)
1455  - Try to print symbolic information for call stacks.  On Linux, we
1456    do this with a combination of execinfo.h and running addr2line in
1457    a separate process.  This is both much more expensive and much more
1458    useful.  Amazingly, it seems to be fast enough for most purposes.
1459  - Redefined strdup if -DREDIRECT_MALLOC is given.
1460  - Changed incremental collector and MPROTECT_VDB implementation so that,
1461    under favorable conditions, pointerfree objects are not protected.
1462    Added GC_incremental_protection_needs() to determine ahead of time whether
1463    pointerfree objects may be protected.  Replaced GC_write_hint() with
1464    GC_remove_protection().
1465  - Added test for GC_ENABLE_INCREMENTAL environment variable.
1466  - Made GC_time_limit runtime configurable.  Added GC_PAUSE_TIME_TARGET
1467    environment variable.
1468  - Eliminated GC_page_sz, a duplicate of GC_page_size.
1469  - Caused the Solaris and Irix thread creation primitives to call
1470    GC_init_inner().
1473 To do:
1474  - There seem to be outstanding issues on Solaris/X86, possibly with
1475    finding the data segment starting address.  Information/patches would
1476    be appreciated.
1477  - Very large root set sizes (> 16 MB or so) could cause the collector
1478    to abort with an unexpected mark stack overflow.  (Thanks again to
1479    Peter Chubb.)  NOT YET FIXED.  Workaround is to increase the initial
1480    size.
1481  - The SGI version of the collector marks from mmapped pages, even
1482    if they are not part of dynamic library static data areas.  This
1483    causes performance problems with some SGI libraries that use mmap
1484    as a bitmap allocator.  NOT YET FIXED.  It may be possible to turn
1485    off DYNAMIC_LOADING in the collector as a workaround.  It may also
1486    be possible to conditionally intercept mmap and use GC_exclude_static_roots.
1487    The real fix is to walk rld data structures, which looks possible.
1488  - Incremental collector should handle large objects better.  Currently,
1489    it looks like the whole object is treated as dirty if any part of it
1490    is.
1491  - Cord/cordprnt.c doesn't build on a few platforms (notably PowerPC), since
1492    we make some unwarranted assumptions about how varargs are handled.  This
1493    currently makes the cord-aware versions of printf unusable on some platforms.
1494    Fixing this is unfortunately not trivial.