forked from ivmai/bdwgc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog
11391 lines (10402 loc) · 551 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
== [8.3.0] (development) ==
* Acquire allocator lock in GC_is_tmp_root and GC_register_disclaim_proc
* Add 'lib' prefix to build artifact names in Makefile.direct
* Add API to get total stopped-world marking time
* Add I_HOLD_LOCK assertion to callers of GC_get_maps (refactoring)
* Add Linux example to README.cmake
* Add assertion about kind argument range in GC_register_describe_type_fn
* Add assertion that custom setspecific is not called to overwrite value
* Add assertion that result is not forwarding address in GC_install_header
* Add assertion to GC_maybe_gc that GC is not in progress
* Add assertion to ensure GC_unmapped_bytes cannot underflow
* Add assertion to verify GC_threads hash table entries are chained properly
* Add assertions about GC_mark_state to alloc.c and mark.c
* Add assertions about hidden ptr lowest bit in toggle-refs implementation
* Add callback API to support ephemeron marking
* Add check that gc_hdrs.h and gc_locks.h are included only from gc_priv.h
* Add check-deps goal to Makefiles to build the tests but not execute them
* Add debug logging to GC_clear_exclusion_table and GC_exclude_static_roots
* Add minimal testing of GC_allow_register_threads
* Add missing cast in GC_is_init_called (refactoring)
* Add missing undef GC_NO_THREAD_REDIRECTS in threaded tests
* Add support of wasm32-wasi target
* Add testing of remaining API functions (gctest and leaktest)
* Add verbose logging of events of getting memory from OS
* Add visionOS simulator support
* Adjust comments in block_unmap_inner
* Adjust comments referring glibc version (documentation)
* Adjust header includes in cord .c files (refactoring)
* Adjust indent inside case statements in configure.ac (reformatting)
* Adjust indentation in C preprocessor directives (reformatting)
* Adjust naming of Win32/64 and x86/64 words in comments and documentation
* Adjust pointer-to-int cast in GC_register_dynamic_libraries for WinCE
* Adjust printing on amount of unmapped memory after GC
* Allow GC_push_roots to work even when no exclusions registered
* Allow custom AO_SRC_DIR, CURSES, EXEEXT, HOSTCC/CFLAGS for Makefile.direct
* Allow disable USE_PROC_FOR_LIBRARIES even if malloc is redirected on Linux
* Allow gc_allocator<T> and friends to be defined in namespace boehmgc
* Allow incremental GC on OpenBSD
* Allow mprotect-based incremental GC on AIX and for all Linux targets
* Allow passing custom CC and CXX to Makefile.direct
* Allow passing custom CFLAGS[_EXTRA] to Makefile.direct
* Allow single signal usage for both world suspend and resume in gctest
* Allow testing of retry-signals functionality
* Allow to build with forced WRAP_MARK_SOME
* Allow to compile tests with custom NTHREADS set to zero
* Allow to cross-compile for MacOS with missing mach-o/getsect.h
* Allow to randomly choose a CPU core if AO ops are emulated with locks
* Allow to skip heap expansion in GC_init
* Allow to unmap memory block right in GC cycle where block is freed
* Allow to use print/check_marks_int_list() in gctest
* Allow to use same signal for thread suspend and restart (default on E2K)
* Always declare GC_set_and_save_fault_handler before its definition
* Always invoke pending finalizers in GC_generic_malloc_uncollectable
* Always print error details message when gctest fails
* Always set only one bit past end in GC_set_hdr_marks
* Always specify relative path for private headers mentioned in .md docs
* Assert SET_HDR does not write to GC_all_nils
* Assert allocator lock held in GC_add_roots_inner and its callers
* Assert allocator lock held in GC_reset_finalizer_nested
* Assert allocator lock held in add_leaked/smashed, check_heap_proc
* Assert allocator lock held in scratch_alloc/recycle and their callers
* Assert allocator lock held in start/continue_reclaim and reclaim_all
* Assert allocator lock held to ensure no race on reveal hidden pointers
* Assert allocator lock held while GC_our_memory is updated
* Assert in typed_mark_proc that allocator lock held by some collecting thread
* Assert that bm_table is already initialized when GC_double_descr used
* Assert that disappearing links are accessible during registration and GC
* Assert that size of element of a typed object is non-zero (refactoring)
* Avoid code duplication between pthread_support.c and win32_threads.c
* Avoid code duplication in GC_core_gcj_malloc (refactoring)
* Avoid code duplication in GC_dyld_image_add/remove on Darwin (refactoring)
* Avoid code duplication in GC_incremental_protection_needs (refactoring)
* Avoid code duplication in GC_make_array_descriptor (refactoring)
* Avoid code duplication in HAVE_FLAG_WNO_FRAME_ADDRESS of CMake script
* Avoid code duplication in IGNORE_OFF_PAGE-specific malloc functions
* Avoid code duplication regarding GC_push_roots in GC_mark_some_inner
* Avoid duplication of magic numbers in disclaim.c, weakmap.c (refactoring)
* Avoid fn call inlining in GC_call_with_stack_base/gc_active
* Avoid unmap of memory allocated during GC init regardless of threshold
* Better document GC_generate_random_heap/valid_address API functions
* Better document GC_no_dls and NO_DEBUGGING macro
* Better document GC_print_free_list regarding allocator lock
* Better document link argument of GC_general_register_disappearing_link
* Better document missing debugging version for aligned allocation routines
* Better document preprocessor-related pointer checking routines in gc.h
* Better document why REVEAL_POINTER should be used with allocator lock held
* Better separate libgc build- and use-time macro descriptions in README
* Build cord/de test by WCC_MAKEFILE on Win32
* Build extra/gc.c in digimars.mak
* Build with GC_wcsdup support if wcslen exists
* Call GC_init_parallel only from GC_init (refactoring)
* Call syscall() to get E2K procedure stack directly in caller function
* Change GC_Thread_Rep in pthread_support.h to match that of win32_threads.c
* Change NOT_MARKED value to non-zero (refactoring)
* Change default GC_time_limit value from 50 to 15 ms
* Change default value of max_prior_attempts to 3
* Change enable_threads default to off if threads are unsupported (CMake)
* Change file extension of README.* to lower case in doc/platforms
* Change minimum heap growth to one block if requested explicitly
* Change p local variable to current_p in push_all/conditional_eager
* Change type of GC_collecting variable to match atomic operations over it
* Check highest bit of word using SIGNB instead of cast to signed_word
* Check out-of-memory and set in_thread_creation inside GC_new_thread
* Check pointer tag in all mark procedures (E2K)
* Clear GC_thread_key thread-local value on unregistering the thread
* Collapse arch macro defines where possible (refactoring)
* Comment out argument names of functions in cord public headers
* Compile gc_dlopen.c and specific.c conditionally in Makefile.am
* Consistent naming of GC_thread local variables (refactoring)
* Consistent naming of variables of obj_kind type (refactoring)
* Consistent use of CHECK_OUT_OF_MEMORY() in tests (refactoring)
* Consistently use GC_word (instead of word) type in tests (refactoring)
* Declare GC_noop1 as public function unconditionally
* Declare GC_register_stackbottom symbol as internal on IA64 (refactoring)
* Define ALIGNMENT macro based on CPP_WORDSZ value by default (refactoring)
* Define GC_GLIBC_PREREQ internal macro (refactoring)
* Define GC_GRANULE_BYTES macro based on GC_GRANULE_WORDS value (refactoring)
* Define GC_VERSION_VAL_T public macro (refactoring)
* Define GC_get_parallel and GC_set_markers_count in single-threaded GC
* Define GC_print_stats as GC_INNER (refactoring)
* Define GC_save_regs_ret_val variable only if used on IA64 (refactoring)
* Define GC_self_thread_inner to lookup GC_thread of current thread
* Define GC_thread type in a single place both for pthreads and Win32
* Define LAZY_THRESHOLD const value as long in cord (refactoring)
* Define and use SIGNAL_BASED_STOP_WORLD macro internally (refactoring)
* Define counter variables as static in gctest (refactoring)
* Define internal macro NO_SEH_AVAILABLE where SEH is absent (refactoring)
* Define internal macro for pointers rounding up by a mask (refactoring)
* Define macros in gcconfig.h to use sigaction for SIGSEGV and SIGBUS
* Define marker_[b]sp only if needed (refactoring)
* Define op and nwords local variables consistently across typd_mlc.c
* Define public GC_MALLOC_EXPLICITLY_TYPED_IGNORE_OFF_PAGE()
* Define public GC_[p]valloc() and redirect to them in leak_detector.h
* Define sized delete operator in 'gc' class
* Define tunable values in cordtest as macro (refactoring)
* Detect presence of pthread_sigmask() in configure and cmake scripts
* Disable H/W tag checking in mark procedures by default (E2K)
* Disable memory unmapping explicitly in gcconfig.h for Emscripten
* Disallow explicit unregister of non-main thread if registered by DllMain
* Discard sections with pseudo-paths except heap in register_map_entries
* Do incremental mark some in GC_collect_a_little even if GC is disabled
* Do not add extra byte to large ignore-off-page and uncollectible objects
* Do not check INV_SZ_COMPUTATION_CHECK macro (refactoring)
* Do not check dl_iterate_phdr presence by build scripts on OS X and Win32
* Do not check presence of getcontext and dl_iterate_phdr by cmake on Win32
* Do not compile pthread_start.c on Cygwin even if build shared libs (CMake)
* Do not compile pthread_stop_world.c on Darwin (CMake)
* Do not count time spent processing toggle-refs in stopped_mark
* Do not define GC_pthread_start/exit for Orbis and Sony PSP (refactoring)
* Do not define GETPAGESIZE on Win32 (refactoring)
* Do not define SIG_HNDLR_PTR on Darwin unless really used
* Do not define THREAD_SANITIZER if GC is built w/o threads support
* Do not do unnecessary GC_read_dirty() from GC_enable_incremental
* Do not expose GC_nacl_gc_thread_self variable outside pthread_stop_world.c
* Do not flush registers before reading procedure stack on E2K
* Do not free entry in GC_delete_gc_thread to match that on Win32
* Do not hard-code page size for wasm32-wasi (refactoring)
* Do not include gcconfig.h from extra/symbian source files (refactoring)
* Do not include sched.h from pthread_start.c (refactoring)
* Do not invoke GC_approx_sp() repeatedly in GC_stopped_mark (refactoring)
* Do not invoke finalizers during thread creation or destruction
* Do not prohibit threaded builds with malloc redirection on non-Linux
* Do not put atomic_ops[_sysdeps].o to libgc.a in Makefile.direct
* Do not reference internal files in comments of public header files
* Do not set SIGBUS handler to catch write faults on Linux
* Do not store E2K procedure stack to GC heap (refactoring)
* Do not treat warnings as errors by default in digimars.mak
* Do not use GC lock in GC_print_callers (refactoring)
* Do not use atomic intrinsic in assertion of GC_reclaim_generic
* Do not use deprecated _dyld_bind_fully_image_containing_address (Darwin)
* Do not use deprecated get_etext and get_end on Darwin
* Do not use deprecated getsectbynamefromheader_64 (Darwin)
* Do not use integer division in GC_soft_read_dirty
* Do not wrap mark_some to catch faults if libraries registration is off
* Document GC_ENABLE_SUSPEND_THREAD better in configure
* Document GC_print_free_list shortly in gc_inline.h
* Document GC_with_callee_saves_pushed better
* Document argument of GC_is_marked in gc_mark.h
* Document assumption about allocator lock for GC_clear_exclusion_table
* Document macros in config.h not referring to README (configure)
* Document that GC_is_X API functions may return only zero or one
* Document that GC_unregister_my_thread result value is dummy
* Eliminate 'array subscript has type char' compiler warnings in os_dep
* Eliminate 'atomic_thread_fence is unsupported with tsan' gcc-11 warning
* Eliminate 'boolean result used in bitwise op' cppcheck FP in GC_thr_init
* Eliminate 'cast discards const from target ptr type' clang warning in cord
* Eliminate 'cast discards const/volatile from target type' warnings in libgc
* Eliminate 'cast discards volatile from type' warnings in cordxtra, gctest
* Eliminate 'checking if 1U<<12 is less than zero' cppcheck FP warning
* Eliminate 'compound assignment with volatile left operand' g++ warning
* Eliminate 'conversion may change sign' clang warnings in cord and tests
* Eliminate 'increment for volatile-qualified type deprecated' g++ warning
* Eliminate 'n obtained from untrusted source' code defect FP in test_cpp
* Eliminate 'no previous prototype' clang warnings
* Eliminate 'parameter can be declared as const pointer' cppcheck warnings
* Eliminate 'scope of p variable could be reduced' cppcheck warning in de.c
* Eliminate 'skipping config since static_assert is unknown' cppcheck FP
* Eliminate 'struct treenode member is never used' cppcheck warning
* Eliminate 'volatile-qualified arg parameter' g++ warning in mach_dep.c
* Eliminate code duplication in GC_PREFETCH_FOR_WRITE generic definition
* Eliminate data race FP reported in need_unreachable_finalization by TSan
* Eliminate duplicate use of GC_obj_kinds[k] in GC_generic_malloc_many
* Enable HBLKSIZE values up to 64K
* Enable prefetch for MSVC (Windows/x86 and Windows/x64)
* Enable prefetch loop in GC_mark_from on E2K
* Enable without_libatomic_ops for targets requiring atomic_ops.c (CMake)
* Ensure GC is initialized when GC_push_all_stacks() is called (refactoring)
* Ensure GC_enable_incremental variable is accessed holding the lock
* Ensure GC_n_set_marks() does not count extra bits in hb_marks
* Ensure a collection occurs between adjacent heap expansions
* Ensure all macros defined in public cord_pos.h have 'CORD_' prefix
* Ensure const value has proper type before negation operation in msvc_dbg
* Ensure every test prints a message on success
* Ensure that GC_init does not allocate any object itself (refactoring)
* Explicitly check that word has at least 32 bits in shifts by 20+ bits
* Export CORD_ec_append_cord(), CORD_ec_flush_buf() from cord shared library
* Export CORD_oom_fn public variable from cord shared library
* Export GC_apply_to_all_blocks() and GC_is_black_listed() as public API
* Export get/set_abort_func even in case of SMALL_CONFIG
* Export get/set_manual_vdb_allowed even in case of SMALL_CONFIG
* Export setter and getter for pointer checking print procedures
* Fail threadkeytest on pthread_create error in main loop
* Fix 'possibly undefined macro AC_ENABLE_SHARED' autoreconf error
* Fix digimars.mak to build 'all' by default
* Fix double call of unregister_my_thread if thread registered by DllMain
* Fix thread_id variable definition placement in main of subthreadcreatetest
* Force pthread_mutex_lock usage for allocator lock if ThreadSanitizer
* Get libpthread.so '.text' mapping only for glibc prior to v2.34 (Linux)
* Group NEED_FIND_LIMIT definitions in gcconfig.h (refactoring)
* Group all thread id fields together in GC_thread (refactoring)
* Group char-width fields together in GC_arrays (refactoring)
* Group functions related to GC_calloc_explicitly_typed (refactoring)
* Implement LONG_MULT in portable way using multiplication of 32-bit words
* Implement shared locks and provide enable_rwlock build script option
* Improve ABORT message in GC_darwin_sigbus
* Improve GC_memalign and friends to always return object base pointer
* Include gc/gc[_cpp].h directly except for cord and tests (refactoring)
* Include gc_inline.h from gc_priv.h (refactoring)
* Include signal.h conditionally
* Include stdio.h and stdlib.h only from gc_priv.h (refactoring)
* Include sys/types.h and unistd.h from a single place (refactoring)
* Increase number of iterations in leak and middle tests
* Increment allocated objects count after GC_memalign in gctest
* Initial support of KOS/arm64
* Initialize GC_retry_signals to true in GC_stop_init (refactoring)
* Install ChangeLog among doc files
* Introduce READER_LOCK/UNLOCK macros (refactoring)
* Make abort message unique in write_fault_handler
* Make all functions static in msvc_dbg.c except for backtrace[_symbols]
* Make comparisons to the lowest heap boundary strict
* Make links to mentioned platforms/README files in doc .md files
* Make shift size smaller in GC_CLANG/GNUC/GLIBC_PREREQ (refactoring)
* Mark GC_add_roots_inner() as GC_INNER (refactoring)
* Mention CMake-based build in README.md and README.QUICK
* Mention all doc files in overview document
* Mention gc_allocator.h in README.win32 (documentation)
* Mention proper CURSES value in Makefile.direct to build cord/de test
* Minimize THREADS-specific code in GC_invoke_finalizers (refactoring)
* Minimize code difference between GC_push_marked/unconditionally
* More clear message about total duration of full collections in gctest
* Move GC_NO_THREADS_DISCOVERY definition to gcconfig.h (refactoring)
* Move GC_unblock_gc_signals to pthread_stop_world.c (refactoring)
* Move HAVE_CLOCK_GETTIME definition from gc_priv.h to gcconfig.h
* Move fields common between Concatenation and Function to Generic structure
* Move increment of GC_bytes_allocd to GC_alloc_large (refactoring)
* Move internals of GC_[signed_]word definition to gc_config_macros.h
* Move non-cord [pkg]include_HEADERS assignments to include.am (refactoring)
* Move non-license info from LICENSE file to README and vice versa
* Move platform-dependent getspecific() call to a dedicated function
* Move platform-specific README files to doc/platforms
* Move pthread_atfork() call to a separate function (refactoring)
* Move public header files to include/gc in source tree
* Move stack-related fields out of GC_thread to GC_stack_context_t
* Move thread-only functions to pthread_support.c (refactoring)
* Name all tests consistently (refactoring)
* Never use mmap() for storing procedure stack on E2K (refactoring)
* New API for disappearing links registration accepting interior pointers
* New API for more optimal usage of GC_calloc_explicitly_typed
* New API function (GC_get_hblk_size) to get HBLKSIZE value
* New API function (GC_set_interrupt_finalizers) to break finalizer loop
* New CMake option to link with external libatomic_ops (system library)
* New GC_count_set_marks_in_hblk and GC_iterate_free_hblks API functions
* New macro (NO_MANUAL_VDB) to disallow manual VDB mode
* New public function (get_supported_vdbs) to list available VDB techniques
* New public function GC_get_actual_vdb
* Order libgc .c files lexicographically in build scripts
* Output finalization information by GC_dump
* Pass ATOMIC_OPS_LIBS to tests using AO primitives directly (Automake)
* Prefix size_t and ptrdiff_t with namespace 'std' in C++ files
* Preserve doc folders structure on package install
* Prevent requesting blocks past max_heapsize in GC_collect_or_expand
* Prevent use of redirected posix_memalign in GC_haiku_get_mem
* Print heap size in bytes (not MB) in out-of-memory warning if small heap
* Print in-use heap statistic on heap growth
* Print iteration number on thread creation or join failure in tests
* Print objs_in_block as zero for large objects in GC_print_block_list
* Print thread number on marker thread creation failure
* Print value of links in GC_dump_finalization_links
* Provide GC_HIDE/REVEAL_NZ_POINTER public macros
* Provide GC_init_gcj_malloc_mp with argument of GC_mark_proc type
* Provide a macro to check dirty bits consistency between MPROTECT/SOFT_VDB
* Provide debugging variant of GC_toggleref_add
* Provide global non-throwing operator new/delete in gccpp library
* Provide one flag in each add_compile_options/definitions of CMake script
* Put faq.html to codebase, update it and convert it to Markdown format
* Put gc_badalc/cpp.cpp instead of .cc ones in CMake script (MSVC/BCC/WCC)
* Really ignore bad GC_INITIAL/MAXIMUM_HEAP_SIZE values
* Redirect GC_gcj_malloc_ignore_off_page to GC_gcj_malloc for small objects
* Redirect GC_malloc_explicitly_typed_ignore_off_page for small objects
* Redirect _aligned_malloc/free() in leak_detector.h
* Redirect aligned_alloc() and reallocarray() in leak_detector.h
* Reduce number of iterations in disclaim and cpp tests
* Reduce scope of local variables used for assertion checking in add_to_fl
* Reduce some of big constants in tests to fit into 16-bit int type
* Refactoring of GC_n_set_marks and GC_print_block_descr
* Refactoring of rt_hash()
* Refine WARN message in GC_proc_read_dirty regarding buffer size
* Refine column names output by GC_print_block_list
* Refine comment of LOG_PHT_ENTRIES for the case of impossible collisions
* Refine comments in code regarding DllMain-based threads registration
* Refine comparisons to GC_greatest_plausible_heap_addr
* Refine debug message in GC_suspend_handler_inner
* Refine documentation of GC_MALLOC_WORDS_KIND
* Refine documentation of GC_init_gcj_malloc and GC_get_back_ptr_info
* Refine documentation of GC_register_disclaim_proc and GC_finalized_malloc
* Refine gcinterface.md that the allocator belongs to SGI STL
* Refine main README about the ways available to build the library
* Refine that GC_save_regs_in_stack is used by save_callers only on SPARC
* Relax required dependencies for atomicopstest (CMake)
* Remove -o option where not needed in Makefile.direct (refactoring)
* Remove CORD_max_len debugging symbol
* Remove EXPORTED_FUNCTIONS linker flag for gctest (Emscripten)
* Remove GC_copyright symbol
* Remove GC_mark_threads variable (refactoring)
* Remove GC_min/max() and simplify heap bounds update in expand_hp_inner
* Remove GC_save/print_callers duplicate declaration (refactoring)
* Remove GC_world_is_stopped variable (refactoring)
* Remove IF_IA64 macro in pthread_stop_world (refactoring)
* Remove MAIN_THREAD flag in GC_thread (refactoring)
* Remove MARK_BIT_PER_GRANULE macro (refactoring)
* Remove OpenBSD uthreads (GC_OPENBSD_UTHREADS) support
* Remove STACK_GROWS_DOWN explicit definitions in gcconfig.h (refactoring)
* Remove STACK_GROWS_DOWN macro usage (refactoring)
* Remove Symbian makefile
* Remove USED_HEAP_SIZE macro (refactoring)
* Remove ancient OS2_MAKEFILE, PCR-Makefile, SMakefile.amiga
* Remove code duplication in GC_free[_inner] (refactoring)
* Remove code duplication in gcconfig.h for Hurd (refactoring)
* Remove comment from gc_cpp.h about bugs in ancient compilers
* Remove commented out code in de_win
* Remove de_win.h dependency on cord.h (refactoring)
* Remove doc.am, and move gc.man to base folder (refactoring)
* Remove duplicate 'called once' check in GC_init_lib_bounds (refactoring)
* Remove duplicate documentation of GC_UNDERSCORE_STDCALL in configure
* Remove duplication of random numbers generator formula (refactoring)
* Remove empty default cases in configure (refactoring)
* Remove extra parentheses in return statement (refactoring)
* Remove extra space after sizeof (reformatting)
* Remove extra variable and rename argument of GC_new_hblk (refactoring)
* Remove main_altstack group of static variables (refactoring)
* Remove main_pthread_id variable (refactoring)
* Remove msvc_dbg.h file (refactoring)
* Remove obsolete AC_PROG_LIBTOOL in configure.ac (refactoring)
* Remove oom_fn internal type from cord source (refactoring)
* Remove outdated info from README about Linux/m68k bug
* Remove private pthread_stop_world.h and darwin_stop_world.h (refactoring)
* Remove redundant 'private' prefix in include directives in include/private
* Remove redundant GC_ATTR_UNUSED for GC_mark_and_push
* Remove redundant HOST_TIZEN macro check for SEARCH_FOR_DATA_START
* Remove redundant Linux/SPARC checks (refactoring)
* Remove redundant check a predefined macro of BCC (refactoring)
* Remove redundant includes from tools and disclaim tests (refactoring)
* Remove specific DATASTART definition for ancient OpenBSD/m68k
* Remove thread_blocked field in GC_thread (refactoring)
* Remove trailing dot in WARN messages
* Remove unneeded cast to word in GC_PUSH_ONE_HEAP/STACK (refactoring)
* Remove unneeded casts in GC_PUSH_ALL_SYM (refactoring)
* Remove unneeded n_blocks local variable in malloc.c and reclaim.c
* Remove unprefixed GRANULE_BYTES, TINY_FREELISTS, WORDSZ macros
* Remove unreachable code in GC_lookup_pthread (refactoring)
* Remove unused DCL_LOCK_STATE (refactoring)
* Remove use of emscripten_scan_stack (refactoring)
* Remove volatile qualifier for GC_dirty_pages except for MPROTECT_VDB
* Remove volatile qualifier for GC_threads (pthreads)
* Remove warning at GC_init about USE_PROC_FOR_LIBRARIES and Linux threads
* Rename GC_[inner_]start_routine to match that for Win32 (refactoring)
* Rename GC_enclosing_mapping to GC_enclosing_writable_mapping (refactoring)
* Rename MAP_LEN internal macro to OBJ_MAP_LEN (refactoring)
* Rename README.QUICK to LICENSE and install it by default
* Rename README.rs6000 to README.aix
* Rename ROUNDED_UP_GRANULES macro to ALLOC_REQUEST_GRANS (refactoring)
* Rename doc folder to docs
* Rename stack[_size] in GC_Thread_Rep and GC_register_altstack (refactoring)
* Rename thread_args and GC_main_thread in win32_threads.c (refactoring)
* Reorder macro definitions for rare architectures in gcconfig.h
* Replace C style comments to C++ ones in gc_allocator.h
* Replace C-style casts in C++ headers and cpptest (refactoring)
* Replace GC_MARK_FO macro with inline functions (refactoring)
* Replace comments about GC is held or not with relevant assertions
* Replace hard-coded 0x80000000 to SIGNB for pointer-sized values
* Replace init_netbsd_elf with init_linux_data_start on NetBSD (refactoring)
* Replace obsolete AC_TRY_COMPILE/LINK/RUN in configure.ac (refactoring)
* Replace target names with '$@' in Makefile.direct (refactoring)
* Report 'none' if no machine-dependent code-to-use detected in configure
* Require to specify CPP_WORDSZ in gcconfig.h for each supported arch
* Return free memory to OS explicitly before getting new memory from OS
* Roundup size passed to GC_expand_hp
* Set name of GC marker threads on OpenBSD
* Simplify MacOS-related code in GC_register_data_segments (refactoring)
* Simplify code of GC_allochblk_nth (refactoring)
* Simplify code to define USE_x_SPECIFIC macros in thread_local_alloc.h
* Simplify expression to clear extra bits in add_ext_descriptor (refactoring)
* Simplify gcconfig code to define IRIX5 and ULTRIX on mips (refactoring)
* Simplify test_basics() and test_extras() in cordtest (refactoring)
* Specify GC_CALLBACK calling conventions for GC_mark_proc
* Specify all public headers without path prefix in documentation
* Specify that error conditions are unlikely to be true in threads code
* Specify that internal allocations failure is unlikely (refactoring)
* Specify that out-of-memory is unlikely in typed alloc and make descriptor
* State explicitly that license is MIT-style
* Support 32-bit mode on E2K
* Support CFLAGS_EXTRA in rare build scripts (NT/WCC_MAKEFILE, digimars.mak)
* Support Embox/x86 (single-threaded)
* Support GC_memalign with alignments greater than HBLKSIZE
* Support Linux/sw_64 (sunway-linux)
* Support QNX on arm[64] and x86[_64]
* Support ThreadSanitizer (GCC)
* Support building with Zig (experimental)
* Support client stop function properly in maybe_gc and collect_a_little
* Support disable_single_obj_compilation option in cmake script
* Support malloc redirection on E2K
* Support pointer mask/shift set at runtime
* Support saving procedure stack at an offset on E2K (multi-threaded only)
* Suppress a data race report in debug-related GC_n_set_marks
* Test garbage collection from a deep recursion in gctest
* Test manual self-suspend in gctest
* Test realloc() in leaktest
* Test that CORD_oom_fn variable could be set from cordtest
* Test world stop while other thread in deep recursion in gctest (pthreads)
* Treat GC_arrays as a part of internal memory when printing its size
* Treat warnings as errors in C++ code if configure --enable-werror
* Try find libatomic_ops installed by cmake if with_libatomic_ops (CMake)
* Turn on MAKE_BACK_GRAPH for all Linux architectures in cmake and configure
* Undefine PUSHn macros after use in win32_threads.c (refactoring)
* Uniform usage of IS_FORWARDING_ADDR_OR_NIL() and FORWARDED_ADDR()
* Uniform use of GC_lookup_by_pthread in GC_pthread_join/detach (refactoring)
* Unify GC_Thread_Rep and thread id type in win32_threads.c (refactoring)
* Unify GC_[mark_]lock_holder variable definition (refactoring)
* Unify comments about the allocator lock (documentation)
* Update next_random_no state using AO primitive
* Update time statistics about stopped marking even if abandoned
* Use AO primitive in GC_noop1 instead of no_sanitize attribute
* Use AO primitives in GC_RAND_NEXT instead of no_sanitize attribute
* Use AS_HELP_STRING consistently for AC_ARG_WITH in configure (refactoring)
* Use BZERO in GC_save_callers (refactoring)
* Use EXPECT in GC_add_to_heap, GC_lookup_thread and GC_lookup_by_pthread
* Use EXPECT in checks of MAIN_THREAD bit (refactoring)
* Use GC_HIDE_NZ_POINTER() for hiding ci_arg value in GC_save_callers
* Use GC_delete_thread instead of GC_delete_gc_thread_no_free (refactoring)
* Use GC_printf in cpptest consistently (refactoring)
* Use IS_PTRFREE() consistently (refactoring)
* Use LOGWL to define WORDS_TO_BYTES() and BYTES_TO_WORDS() (refactoring)
* Use __typeof__ in GC_PTR_ADD and similar if MS Clang
* Use a dedicated integer type to hold function pointers (refactoring)
* Use a macro internally to designate Cygwin and MSWin/WinCE (refactoring)
* Use a macro internally to designate Free/Net/OpenBSD (refactoring)
* Use cast to void instead of the attribute to indicate unused arguments
* Use consistent variables naming in typd_mlc.c (refactoring)
* Use distinct MACH_TYPE for WebAssembly (refactoring)
* Use inline keyword in GC_INLINE (bcc)
* Use modHBLKSZ where possible (refactoring)
* Use register_my_thread_inner to add initial thread in pthread_support.c
* Use signed_word instead of ptrdiff_t for pointers delta (refactoring)
* Use single-argument suspend_handler for E2K, HP_PA, IA64, M68K
* Use unsigned32 type for all internal 32-bit variables and literals
* Warn if heap has grown while GC was disabled
* Workaround 'TEXT is unknown macro' cppcheck FP warning
* Workaround 'data access w/o lock' code defect FP in GC_incr_bytes_freed
* Workaround 'returning pointer to local variable base' cppcheck FP in misc
* Workaround 'total_time<0 is always false' cppcheck FP warning
== [8.2.6] 2024-02-04 ==
* Avoid unexpected heap growth in gctest for the case of VERY_SMALL_CONFIG
* Change gc.man to include gc/gc.h
* Check for out-of-memory on every memory allocation in tests
* Do not compile pthread_start.c on Cygwin even if build shared libs (CMake)
* Eliminate 'alloc_small declared but unused' gcc warning in gctest
* Eliminate 'make_key is defined but unused' gcc warning in threadkeytest
* Eliminate 'old_segv_handler is defined but unused' gcc warning on OpenBSD
* Eliminate 'rand() may return deterministic values' warning
* Eliminate 'unused parameter' compiler warnings reported by MS clang
* Eliminate 'unused parameter' gcc warning in free() if IGNORE_FREE
* Eliminate 'unused value' gcc warnings in init_global_static_roots (Symbian)
* Eliminate GCC warning of unsafe __builtin_return_address(1) in Cmake script
* Eliminate compiler warning of missing cast in LONG_MULT after shift
* Eliminate warning of unused expression result in GC_FreeBSDGetDataStart
* Ensure _GNU_SOURCE is defined if HAVE_DLADDR is defined by configure
* Fix 'g++ not found' error on OpenBSD (Makefile.direct)
* Fix 'implicit declaration of function pthread_atfork' gcc error on MinGW
* Fix 'implicit declaration of function sbrk' gcc error on Symbian
* Fix 'implicit declaration of iscntrl()' warning in cord/de_win (MinGW)
* Fix 'info' buffer potential overrun in GC_save_callers
* Fix 'l-value specifies const object' MSVC error in GC_push_many_regs
* Fix 'linker input unused' error inside check_c_compiler_flag (CMake)
* Fix 'missing binary operator before token' gcc error in gcconfig.h
* Fix 'missing sysconf() prototype' gcc error in setjmp_t tool (OpenBSD)
* Fix 'sigset_t undeclared' MS VC error if pthreads-w32 is used
* Fix 'undefined reference' linker errors if shared build on OpenBSD (CMake)
* Fix 'unused GC_set_and_save_fault_handler' warning on OS X
* Fix GC_push_stack_for() to push also Xmm registers on Windows/x64
* Fix GC_set_handle_fork(1) on Darwin when MPROTECT_VDB but no threads
* Fix MACH_TYPE macro redefinition on Symbian/arm
* Fix SVR4 macro definition order
* Fix asm constraint in LONG_MULT for gcc/x86
* Fix assertion violation in GC_get_maps on Linux if malloc redirection
* Fix back graph and checksums support in WCC_MAKEFILE
* Fix bitwise negation and rounding direction in setjmp_t tool
* Fix checksums GC_record_fault invocation on Darwin
* Fix closing bracket placement for case statement in configure
* Fix deprecation warning about support of CMake older than v3.5
* Fix extra 'extern C' for include signal.h in gcconfig.h
* Fix getcontext() detection by CMake on OpenBSD
* Fix handling of GC_gc_no counter wrap in GC_clear_stack
* Fix handling of GC_gc_no counter wrap in GC_notify_or_invoke_finalizers
* Fix indent of a closing curly brace in GC_forward_exception
* Fix lock assertion violation in GC_try_to_collect_inner on OS X
* Fix missing GC_pthread_sigmask on FreeBSD and NetBSD
* Fix missing _setjmp() on djgpp
* Fix missing atomic barriers in CORD_from_file_lazy
* Fix missing outermost parentheses in CORD_pos_cur_char_addr and hugetest
* Fix missing redirect and implementation of pthread_sigmask() on OpenBSD
* Fix missing type widening before left shift in GC_MAKE_PROC
* Fix misspelled GC_HEADERS_H macro in gc_priv.h
* Fix null dereference in check_finalizer_nested if redirect malloc on Linux
* Fix posix_memalign() to overwrite pointer storage only on success
* Fix race in init_lib_bounds on Linux with glibc v2.34+ if redirect malloc
* Fix skipped removal of page protection in case of address hash collision
* Fix typos in comments
* Fix undefined GC_real_pthread_sigmask if redirect malloc on OS X
* Fix update of last_back_trace_gc_no if KEEP_BACK_PTRS is not defined
* Handle GC_gc_no counter overflow properly in GC_print_trace
* Include Darwin CoreFoundation.h only if 32-bit ARM
* Make gc_allocator<void> members public
* Re-enable incremental mode on OS X (arm64)
* Remove .log and cordtest .tmp files by 'make clean' (Makefile.direct)
* Remove a redundant check of HOST_ANDROID in gcconfig.h
* Remove duplication of random numbers generator formula
* Specify constexpr in GC allocators if C++20 or later
* Support NetBSD/riscv64
* Support non-msys MinGW build by CMake
* Turn on handle fork by default on Darwin (multi-threaded only)
* Use AO primitives in GC_RAND_NEXT instead of no_sanitize attribute
* Workaround 'malloc inconsistent dll linkage' MS VC error in CMake script
* Workaround MS Clang failure to compile de_win.rc
* Workaround mark stack overflow in GC_push_finalizer_structures on MinGW
== [8.2.4] 2023-05-26 ==
* Abort with appropriate message if first call of mmap fails with EPERM
* Adjust CORD_ec comment placement in ec.h
* Adjust WoW64 workaround to work on UWP/WinRT
* Adjust naming of Win32/64 and x86/64 words in comments and documentation
* Avoid potential race between realloc and GC_block_was_dirty
* Do not double-clear first two words of object in GC_generic_malloc_aligned
* Do not mention FASTLOCK in comment
* Do not mix debug and non-debug allocations in disclaim tests
* Do not prohibit threaded builds with malloc redirection on non-Linux
* Do not prohibit zero proc argument in GC_register_disclaim_proc
* Eliminate '&array may not produce intended result' wcc warnings
* Eliminate 'GC_unmap_end declared but unused' bcc warning in disclaim_bench
* Eliminate 'ISO C++17 does not allow register specifier' gcc warning
* Eliminate 'cast signed to bigger unsigned' CSA warning in WARNs, new_thread
* Eliminate 'n obtained from untrusted source' code defect FP in test_cpp
* Eliminate 'skipping config since MAXSIG/_NSIG is unknown' cppcheck FP
* Eliminate data race FP between remove_protection and write_fault_handler
* Eliminate data race FP reported in need_unreachable_finalization by TSan
* Ensure 'new' system header is included by gc_cpp.h if GC_INCLUDE_NEW
* Ensure GC_NO_PTHREAD_SIGMASK defined if no GC_pthread_sigmask prototype
* Fix 'EMSCRIPTEN macro redefined' compile error
* Fix 'ISO C90 forbids mixed decl and code' warning in SOFT_VDB dirty_init
* Fix 'call to undeclared pthread_setname_np' errors in configure and cmake
* Fix 'failed to create new win32 semaphore' Cygwin fatal error at fork
* Fix 'operator new is missing throw(bad_alloc)' clang warning in gc_cpp.h
* Fix 'overflow in conversion from word' g++ warning in GC_init
* Fix 'unknown option --no-undefined' linker error in cmake script (OS X)
* Fix 'unresolved _end' linker error when targeting Android bitcode
* Fix CORD_next() indent inside loop in test_basics() of cordtest
* Fix DCL_LOCK_STATE placement in GC_set_oom_fn
* Fix GC_excl_table overrun on overflow in GC_exclude_static_roots
* Fix GC_thread_is_registered for finished threads
* Fix GC_unreachable_finalize_mark_proc to ensure its unique address
* Fix GC_unregister_my_thread call before GC functions usage in gctest
* Fix IRIX5 defined wrongly on FreeBSD/mips, WinCE/mips, Tandem S-Series
* Fix allocated objects count increment in alloc8bytes of gctest
* Fix alt-stack handling in GC_push_all_stacks if stack grows up
* Fix comparisons to heap boundary in GC_get_back_ptr_info and GC_mark_from
* Fix data race in GC_heapsize_at_forced_unmap variable
* Fix description of client promise for IGNORE_OFF_PAGE allocated objects
* Fix disabling of automatic dynamic libraries registration
* Fix double initialization of main thread local free lists on Win32
* Fix gccpp and gctba library names in gcinterface.md
* Fix infinite loop in disable_gc_for_dlopen and GC_wait_for_gc_completion
* Fix infinite wait in pthread_join/detach if thread already finished (Win32)
* Fix joinable threads shutdown on NaCl
* Fix loop condition over dll_thread_table in GC_lookup_pthread (Win32)
* Fix missing GC_CALLBACK for GC_waitForSingleObjectInfinite
* Fix missing extern C for __asan_default_options
* Fix missing libalphagc.so dependency in Makefile.direct
* Fix missing lock while updating GC_in_thread_creation in GC_exit_check
* Fix missing recovery from faults in GC_mark_some on Win64 if MinGW
* Fix missing result check of pthread_attr_getdetachstate in pthread_create
* Fix mistyped function name in documentation of REDIRECT_REALLOC
* Fix negative heap size values reported in WARN
* Fix null pointer dereference in TRACE_TARGET
* Fix of GC_bytes_allocd increment in GC_generic_malloc_inner
* Fix overlapping region assertion in mark_some if malloc redirect on Linux
* Fix potential SIGSEGV on out-of-memory in gctest
* Fix signals delivery fail in find-leak mode if init from non-main thread
* Fix stack top/bottom print order in GC_push_all_stacks if stack grows up
* Fix store-and-dirty call in GC_CONS
* Fix unregistering of thread created by intercepted pthread_create on NaCl
* Fix unused GC_parse_version if no SOFT_VDB and no parallel mark on Linux
* Fix use of unset errno after pthread_create/sigmask calls
* Fix various typos in comments and documentation
* Increment allocated objects count after GC_GCJ_MALLOC() in gctest
* Invoke GC_oom_fn if GC_make_array_descriptor failed because of no memory
* Make Emscripten Asyncify feature optional
* Mention gctba library in README.cmake
* Prevent 'function should return a value' BCC error in CMake script
* Provide meaningful error message in case of Emscripten threaded build
* Reduce local variable scope in resend_lost_signals_retry for cppcheck
* Remove disable-warning options from WCC_MAKEFILE unrecognized by wcc v2.0
* Remove false warning of missing libpthread.so on Linux
* Remove redundant 'ifdef THREADS' around LOCK/UNLOCK in call_with_alloc_lock
* Remove redundant GC_ATTR_UNUSED for GC_mark_and_push
* Remove unused GC_old_sig_mask from gc_locks.h
* Replace WARN in GC_mark_some wrapper back to GC_COND_LOG_PRINTF
* Specify throw and noexcept for operator new/delete in gc_cpp.h for MS VC
* Support Hurd/x86_64
* Support client-defined stack pointer adjustment before thread stack push
* Suppress 'unreachable code' wcc warning in I_HOLD_LOCK assertion (CMake)
* Update autotools for release preparation (ac-2.71, am-1.16.5, m4-1.14.19)
* Update dump function name in GC_DUMP_REGULARLY variable documentation
* Use emscripten_stack_get_base instead of emscripten_scan_stack
* Use sbrk() to get OS memory on Emscripten
* Workaround 'writing into region of size 0' gcc warning in suspend_handler
* Workaround CSA null pointer dereference FP in invalidate_map of cord/de
* Workaround a malfunction of soft-dirty bits clearing on Power9
== [8.2.2] 2022-08-26 ==
* Abort if no progress with thread suspend/resume signals resending
* Add CMake option to force libatomic_ops headers usage
* Add _PROP suffix to CORD/GC[CPP]_VERSION variables in CMake script
* Allow not to bypass pthread_cancel hardening in pthread_start
* Allow to start marker threads in child of single-threaded client
* Avoid potential race in GC_init_real_syms after GC_allow_register_threads
* Avoid potential signal loss before sigsuspend in suspend_handler if TSan
* Define SUNOS5SIGS macro for kFreeBSD
* Distribute gc_gcj.h and some other headers in single-obj-compilation
* Do not assert that GC is initialized at DLL_THREAD_DETACH (Win32)
* Do not call SET_HDR() to remove forwarding counts if none exists in hblk
* Do not call mprotect/mmap to GC_unmap/remap (Linux)
* Do not count unmapped regions if GC_unmap is madvise-based (Linux)
* Do not define NEED_FIND_LIMIT in case of OpenBSD user threads
* Do not fail tests if pthread_create returns resource unavailable error
* Do not name GCC intrinsics as C11 ones
* Do not probe to find main data root start if dl_iterate_phdr exists
* Do not send signal to thread which is suspended manually
* Do not use usleep between signals resend if ThreadSanitizer
* Eliminate '-pedantic is not option that controls warnings' GCC-6.3 message
* Eliminate '/GS can not protect parameters' MS VC warning in msvc_dbg
* Eliminate 'R_AARCH64_ABS64 used with TLS symbol' linker warning (clang)
* Eliminate 'buffer overflow detected' FP error in realloc_test
* Eliminate 'extension used' clang warning in sparc_mach_dep.S (configure)
* Eliminate 'function/data pointer conversion in expression' MSVC warning
* Eliminate 'implicit decl of _setjmp' gcc warning if -std=c11 on Cygwin
* Eliminate 'layout of aggregates has changed in GCC 5' warning in test_cpp
* Eliminate 'new_l may be used uninitialized' gcc warning in os_dep (Cygwin)
* Eliminate 'old_gc_no is initialized but not referenced' MS VC false warning
* Eliminate 'possible loss of data' compiler warning in GC_envfile_getenv
* Eliminate 'potentially uninitialized local variable tc' warning (MSVC)
* Eliminate 'skipping config since MAX_HEAP_SECTS is unknown' cppcheck FP
* Eliminate 'unused but set variable' gcc warnings in cpptest
* Eliminate 'value exceeds maximum size' warnings in debug_malloc, huge_test
* Eliminate 'writing into region of size 0' gcc FP warning in realloc
* Eliminate ASan stack-buffer-underflow FP in GC_mark_and_push_stack (E2K)
* Eliminate code defect about incorrect size of allocated object (leaktest)
* Eliminate data race reported by TSan in GC_have_errors
* Eliminate division-by-zero FP warning in GC_ASSERT in reclaim_block
* Eliminate stringop-overflow gcc-12 warning in CORD__next
* Ensure typed objects descriptor is never located in the first word
* Fix 'GC_greatest_stack_base_below is defined but not used' warning (IA64)
* Fix 'GC_text_mapping not used' GCC warning if redirect malloc w/o threads
* Fix 'ISO C forbids conversion of function pointer to object' warning
* Fix 'undeclared getpagesize' compiler warning on AIX and OSF1
* Fix 'undefined reference to __data_start' linker error on Linux/aarch64
* Fix 'unresolved __imp__wsprintfA' linker error in msvc_dbg.c (MSVC)
* Fix 'unresolved symbol GetModuleHandle' error in win32_threads.c (UWP)
* Fix (workaround) stack overflow in gctest on Alpine Linux/s390x
* Fix GC_ATTR_NO_SANITIZE_THREAD definition for GCC
* Fix GC_allocate_ml incorrect cleanup in GC_deinit if pthreads (MinGW)
* Fix GC_dirty() argument in GC_malloc_explicitly_typed_ignore_off_page
* Fix GC_make_descriptor for zero length argument
* Fix GC_suspend_thread if called before thread destructor
* Fix GC_unmapped_bytes update in GC_unmap for Sony PS/3
* Fix SIGSEGV caused by dropped stack access from child process in gctest
* Fix SUNOS5SIGS documentation to match macro definition in gcconfig.h
* Fix abort in Win32 DllMain if PARALLEL_MARK
* Fix abort when GC_repeat_read returns zero
* Fix assertion about built-in AO_test_and_set_acquire on sparc64 (gcc-12)
* Fix assertion violation in GC_allow_register_threads on Windows
* Fix assertion violation of GC_thread_key alignment if pthread-based TLS
* Fix comment in GC_init regarding GC_init_parallel call
* Fix context saving when GC_suspend_thread(self)
* Fix data race in fail_proc1 of gctest
* Fix hang in GC_free if GC_PREFER_MPROTECT_VDB (Mingw64)
* Fix hang in select() called from suspend signal handler if TSan
* Fix hang on sem_wait in GC_suspend_thread if thread was resumed recently
* Fix hb_obj_kind type in documentation (ASCII diagram) describing hblkhdr
* Fix incremental mode enabling in gctest if TEST_MANUAL_VDB
* Fix linking of tests in case of finalization is off
* Fix lock assertion violation in GC_find_limit if always multi-threaded
* Fix memory return to OS in GC_unmap
* Fix missing lock when GC_generate_random_valid_address is called
* Fix missing write() declaration if CONSOLE_LOG (Watcom)
* Fix nodist_libgc_la_SOURCES value in Makefile.am for Solaris/sparc
* Fix oldProc initialization in gc_cleanup and eliminate related warnings
* Fix parallel_initialized assertion violation in initsecondarythread (Win32)
* Fix potential race if start_mark_threads called from threads in child
* Fix propagation of out-of-memory occurred in GC_make_sequence_descriptor
* Fix pthread_setname_np and dladdr detection by CMake
* Fix race between calloc_explicitly_typed and push_complex_descriptor
* Fix typos in comments and debugging.md
* Fix undefined __stack_base__ on UWP/arm64 (llvm-mingw)
* Force GC_with_callee_saves_pushed in suspend_handler if NO_SA_SIGACTION
* Link with rt library to get clock_gettime where necessary
* Make finalizer_closure pointer read/write atomic in malloc and callback
* Move platform-specific sleep call to GC_usleep (refactoring)
* Pass -lrt linker option in CMake script on HP/UX, NetBSD
* Prevent (fix) parallel custom mark procs run in single-threaded clients
* Prevent changing of GC_markers_m1 value while collection in progress
* Refer to Makefile.direct instead of deleted Makefile file in README
* Relax assertion of hb_n_marks in reclaim_block if more than two markers
* Remove IF_IA64 macro in pthread_stop_world (refactoring)
* Remove checking of RS6000 completely
* Remove duplicate check of MSWIN_XBOX1 in os_dep.c
* Remove duplicate include gc_tiny_fl.h in gc_priv.h
* Remove non-working check of M68K in gctest
* Remove useless TSan W/A about read of mark_lock_holder for Windows
* Replace RAISE_SIGNAL macro with a static function (refactoring)
* Replace SSH cloning with HTTPS one in README
* Retry pthread_kill if EAGAIN (Linux)
* Revert "Check real-symbols are already initialized in pthread_join/detach"
* Revert "Remove nested always-false ifdef for HPUX and FREEBSD"
* Revert addition of msvc_dbg.h in include.am
* Set default build type to RelWithDebInfo (CMake)
* Start configure help messages with a lower case letter
* Support 'z' format modifier by CORD_vsprintf
* Support Elbrus 2000 (Linux/e2k)
* Support GCC MCF thread model (mcfgthreads) in configure (MinGW)
* Support GC_remove_roots on Win32
* Support OpenBSD/riscv64
* Support build using Makefile.direct on Linux/sparc
* Support space-separated flags in CFLAGS_EXTRA passed to CMake
* Update README.win32 about default build configuration (configure, cmake)
* Update documentation of GC_RATE and MAX_PRIOR_ATTEMPTS
* Use SIGRTMIN+6 as suspend signal if sigrt-signals on OpenBSD
* Use SIGUSR1/2 on FreeBSD/arm64
* Use compiler TLS on NetBSD only if at least gcc-4.4 or clang-3.9
* Workaround 'info is not assigned' cppcheck FP if assertions on (OS X)
* Workaround SIG_SUSPEND delivery to thread inside mutex_lock fail if TSan
* Workaround TSan FP about race between generic_malloc and array_mark_proc
* Workaround TSan FP in acquire_mark_lock called from fork_prepare_proc
* Workaround TSan FP warning in finalized_malloc, push_unconditionally
* Workaround TSan FP warning in fork_prepare_proc
* Workaround TSan FP warning in push_marked1/2/4, ptr_store_and_dirty
* Workaround Thread Sanitizer (TSan) FP warning in is_valid_displacement
* Workaround call stack size exceeded in gctest (Wasm)
* Workaround crash in FreeBSD rand() by avoiding its concurrent usage
* Workaround gctest hang if test compiled as C++ code by MSVC (CMake)
* Workaround msvc_dbg.c build failure on arm[64] (MSVC)
== [8.2.0] 2021-09-29 ==
* Add API for accessing incremental GC time limit with nanosecond precision
* Add API function to force start of incremental collection
* Add GC_ prefix to scan_ptr and some other static variables (refactoring)
* Add GC_get/set_disable_automatic_collection API
* Add I_HOLD_LOCK assertion to expand_hp_inner and related functions
* Add assertion on free-list argument and result of GC_new_kind
* Add assertion that GC is initialized to base incremental_protection_needs
* Add assertions that GC_page_size is initialized
* Add cordtest, staticrootstest, test_cpp, tracetest, disclaim tests (CMake)
* Add debug messages on thread suspend/resume (Win32)
* Add dummy testing of GC_incr_bytes_allocd/freed
* Add table of contents in gcdescr.md
* Add testing of GC_CALLOC/MALLOC_EXPLICITLY_TYPED (gctest)
* Adjust formatting of numbered lists in README.md to match other .md files
* Adjust highlighting of API prototypes in gcinterface.md
* Adjust macro def/usage for AVR32, CRIS, NETBSD, OPENBSD, SH4 in gcconfig.h
* Adjust printf calls in gctest check_heap_stats so that each has new-line
* Allow incremental GC on Cygwin
* Allow memory unmapping in case of MPROTECT_VDB
* Allow to disable GWW or mprotect-based VDB at build
* Allow to disable Glibc FPU exception mask and TSX workarounds (Linux)
* Allow to disable __builtin_return_address(1) usage (x86 and x64)
* Allow to specify custom value of LOG_PHT_ENTRIES
* Always abort on failure to access /proc/self/maps (Linux)
* Always define default_push_other_roots (code refactoring)
* Avoid gcc stringop-overflow warning for intended overflow in smashtest
* Avoid initial 3ms pause on world stop/start with GC_retry_signals (Linux)
* Build cord.lib by Makefile.direct, NT_MAKEFILE, OS2_MAKEFILE, WCC_MAKEFILE
* Build gc as a shared multi-threaded library by default (CMake)
* Build gccpp library by Makefile.direct, NT_MAKEFILE and WCC_MAKEFILE
* Build gctba library
* Build shared libraries by default (WCC_MAKEFILE)
* Change CLOCK_TYPE to timespec for Nintendo Switch (code refactoring)
* Change EMSCRIPTEN macro for internal use to no-underscore format
* Change log_size fields of finalizer to unsigned type (code refactoring)
* Change type of toggleref_array_size/capacity to size_t (code refactoring)
* Check leak of objects allocated by CRT malloc in gctest (MS VC)
* Check real-symbols are already initialized in pthread_join/detach
* Collapse multiple includes of windows.h (code refactoring)
* Comments reformatting in mark.c to properly delimit sentences
* Compile de test GUI app with resources (CMake)
* Compile gc.c unless building static libraries (NT_MAKEFILE, WCC_MAKEFILE)
* Compile msvc_dbg.c by CMake script (MS VC)
* Declare API function and print amount of memory obtained from OS
* Define GC_win32_free_heap API function for all Windows targets
* Define STATIC macro to static by default
* Depend number of fork_a_thread calls on NTHREADS (gctest)
* Detect dladdr() presence in CMake script
* Detect presence of execinfo.h system header in CMake script
* Detect presence of getcontext and dl_iterate_phdr in CMake script
* Detect sigsetjmp() availability in CMake script
* Disable Clang/GCC aliasing optimization in CMake script by default
* Do not build tests by default (Makefile.direct and other Makefiles)
* Do not build the tests by default (CMake)
* Do not call GC_push_conditional unless PROC_VDB
* Do not call add_to_our_memory with null pointer (refactoring)
* Do not compile pthread_*.c files in Cygwin or MSYS (CMake)
* Do not define GC_write_cs for Xbox One target
* Do not define HAVE_NO_FORK for all Unix-like systems
* Do not hard-code CMAKE_DL_LIBS value and install paths (CMake)
* Do not hard-code finalizable objects limit which triggers GC
* Do not update scratch_last_end_ptr unless used by reg dynamic libraries
* Document GC_incr_bytes_allocd/freed API function
* Eliminate '(long)size<=0 is always false' cppcheck FP
* Eliminate 'Consecutive return is unnecessary' cppcheck style warning
* Eliminate 'accessing GC_dont_gc without lock' in GC_init code defect FP
* Eliminate 'bytes_freed access w/o lock in incr_bytes_free' code defect FP
* Eliminate 'checking if unsigned i < 0' cppcheck FP in is_heap_base
* Eliminate 'hash_val value is never used' cppcheck false positive
* Eliminate 'passing tainted var maps_buf to tainted sink' code defect FP
* Eliminate 'retry_cnt is assigned value but never used' cppcheck FP
* Eliminate 'stop variable is always 0' compiler warning in print_callers
* Eliminate 'struct member os_callback is never used' cppcheck warning
* Eliminate 't->flags not atomically updated' code defect FP
* Eliminate 'tmpl might be accessed at non-zero index' cppcheck error
* Eliminate GCC warning of unsafe __builtin_return_address(1)
* Eliminate code duplication in reclaim_clear and disclaim_and_reclaim
* Eliminate double lock code defect false positive in generic_lock
* Eliminate memory leak reported in add_current_malloc_heap at exit (Win32)
* Emscripten single-threaded support (detect stack base, push registers)
* Enable CMake-based build for Borland and Watcom compilers
* Enable compilation without C runtime (Win32)
* Enable fork testing in single-thread builds (Unix-like)
* Enable mprotect-based incremental GC for Linux/arm and Linux/aarch64
* Enable true incremental collection even if parallel marker is on
* Enable use of __builtin_unwind_init() if clang-8 or later
* Ensure ELFSIZE is defined in dyn_load.c for OpenBSD (code refactoring)
* Ensure add_to_heap_inner arguments are valid (refactoring)
* Ensure all getters and setters are run at least once by gctest (pthreads)
* Export CMake targets with namespace BDWgc
* Fix 'const obj must be initialized if not extern' error in gc_alloc_ptrs.h
* Fix ./libgc.la dependency on FreeBSD (Automake)
* Fix HOST determination in CMake script
* Fix copyright message in de_win.rc, gc_cpp.cc, ec.h and specific.h
* Fix missing OS_TYPE definition for some targets
* Fix mmap(PROT_NONE) failure if RLIMIT_AS value is low (Linux)
* Generate cordtest and de executable files in GC base folder
* Generate pkg-config metadata file (CMake)
* Get rid of some non-ELF ifdefs (code refactoring)
* Handle potential incomplete buffer read in GC_linux_main_stack_base
* Implement GET_TIME for Nintendo Switch
* Increase NTHREADS value in tests if code coverage analysis
* Install docs and man page if enable_docs (CMake)
* Install gc_gcj.h and gc_pthread_redirects.h only if appropriate
* Log abort message details even if not print_stats (unless SMALL_CONFIG)
* Mark buffer returned by get_maps as const (code refactoring)
* Move C++ GC_ATTR_EXPLICIT and GC_NOEXCEPT definition to gc_config_macros.h
* Move GC state non-pointer variables into GC_arrays (code refactoring)
* Move GC state pointer variables into GC_arrays
* Move GC_scratch_recycle_inner() to alloc.c (refactoring)
* Move GC_throw_bad_alloc definition to new C++ file
* Move QNX and Emscripten macro definitions to proper place in gcconfig.h
* Move definition of GC_n_mark_procs and GC_n_kinds from mark.c to misc.c
* New API (GC_set_markers_count) to control number of parallel markers
* New API function to clear GC exclusion table
* New API function to get size of object debug header
* New API standalone functions to acquire and release the allocator lock
* New CMake option (disable_gc_debug) to remove debugging code
* New CMake option (disable_handle_fork) to disable fork handling completely
* New macro (CONSOLE_LOG) to enable logging to console on Win32
* New macro (GCTEST_PRINT_VERBOSE) to enable verbose logging in test.c only
* New macro (NO_MSGBOX_ON_ERROR) to avoid message box on GC abort (Win32)
* OpenBSD does not use ELF_CLASS (code refactoring)
* Pass -D GC_DLL -fvisibility=hidden if default configure build is requested
* Pass -no-undefined linker flag if building shared libraries (CMake)
* Print pid of child processes if verbose logging (gctest)
* Read environment variables from a file on WinCE (CMake script)
* Reduce stack-allocated buffer in get_nprocs from 4KB to 1.7KB
* Refine flags field comment in pthread_support.h
* Reflect result of VDB selection at runtime in incremental_protection_needs
* Reformat code of GC_push_roots
* Reformat gc.man (wrap long lines)
* Reformatting and code refactoring of CMake script
* Remove 'current users' section from overview.md
* Remove 'distributed ports', 'scalable versions' sections from overview.md
* Remove AC_MSG_RESULT for THREADDLLIBS (dgux386)
* Remove Borland-specific Makefile and gc.mak script
* Remove GC_eobjfreelist variable in typd_mlc.c (code refactoring)
* Remove GC_gcj_malloc_initialized variable (code refactoring)
* Remove Linux-specific commands for building cord/de from Makefile.direct
* Remove Win32 main_thread static variable if threads discovery is disabled
* Remove code duplication between GC_unmap and GC_unmap_gap (refactoring)
* Remove code duplication between PROTECT and UNPROTECT macros (refactoring)
* Remove commented out assignment of gc_use_mmap in configure (refactoring)
* Remove dash characters comprising prefix of some verbose logs (gctest)
* Remove dependency on user32.dll import library from static libgc (Win32)
* Remove documentation specific to particular old BDWGC releases
* Remove duplicate Linux-related macro definitions in gcconfig.h
* Remove duplicate macro definitions in gcconfig.h except for Linux
* Remove gcmt-dll generation, rename libgc-lib.a to libgc.a (CMake)
* Remove goto statement in print_callers (code refactoring)
* Remove limit on number of heap sections
* Remove new_gc_alloc.h file
* Remove redundant GC_with_callee_saves_pushed call in multi-threaded builds
* Remove redundant check of GC_free argument in register_finalizer
* Remove redundant type casts in backgraph HEIGHT_UNKNOWN/IN_PROGRESS
* Remove unused GC_prev_heap_addr (refactoring)
* Remove unused STACK_GRAN macro definitions (code refactoring)
* Remove unused sparc_sunos4_mach_dep.s file
* Remove useless empty statements after block ones (refactoring)
* Remove weakobj_free_list variable in disclaim_weakmap_test (refactoring)
* Rename READ to PROC_READ in os_dep.c (code refactoring)
* Rename cord/cord test executable to de (CMake)
* Rename ext_descr to typed_ext_descr_t (code refactoring)
* Rename gc64.dll to gc.dll and gc[64]_dll.lib to gc.lib in NT_MAKEFILE
* Rename gc68060.lib to gc.lib, cord/cord68060.lib to cord.lib in SMakefile
* Rename make_as_lib option to enable_static in NT_MAKEFILE and WCC_MAKEFILE
* Rename nothreads option to disable_threads in NT_MAKEFILE
* Repeat run_one_test NTHREADS times by gctest if single-threaded
* Replace "msecs" with "ms" in all comments and messages
* Replace 'stack base' with 'stack bottom' in the documentation
* Replace SN_TARGET_ORBIS to PLATFORM_* and GC_NO_* macros
* Replace _M_AMD64 macro with _M_X64 (code refactoring)
* Replace find_limit_openbsd to find_limit_with_bound (OpenBSD 5.2+)
* Replace obsolete AC_HELP_STRING with AS_HELP_STRING (refactoring)
* Replace push_one calls with push_many_regs one for Win32 thread context
* Report memory region bounds and errno on GC_unmap/remap failure
* Report presence of process fork testing (gctest)
* Report time with a nanosecond precision where available
* Retry suspend/resume signals on all platforms by default
* Run tree and typed tests in child process (gctest)
* Set GC_collecting hint for GC_collect_a_little_inner calls (pthreads)
* Set name of GC marker threads
* Set so-version for installed shared libraries (CMake)
* Simplify logged message in scratch_recycle
* Simplify loops of collect_a_little/stopped_mark invoking mark_some
* Support -fvisibility=hidden option in CMake script
* Support CFLAGS_EXTRA to pass extra user-defined compiler flags (CMake)
* Support FreeBSD/RISC-V, Linux/arc, LoongArch, OpenBSD/powerpc64
* Support header files installation (CMake)
* Support most configure options in CMake script
* Suppress warnings in test_tinyfl() of gctest reported by Watcom C complier
* Take nanoseconds into account when updating full_gc_total_time
* Turn off C++ API by default, export it in gccpp library (CMake)
* Turn on automatic fork() handling by default on Android
* Update README.cmake regarding Unix, C++ and tests
* Update libgc.so version info to differentiate against v8.0.x
* Update the ASCII diagrams describing the tree structure for pointer lookups
* Update the documentation to match the current GC implementation
* Upgrade cmake_minimum_required(version) to 3.1
* Use CreateThread without GC_ prefix in gctest (code refactoring)
* Use KB/MB/GB abbreviations uniformly across entire documentation
* Use USE_MMAP_ANON when USE_MMAP is configured on OpenBSD
* Use a specific Emscripten allocator for Tiny
* Use atomic primitives for Sony PlayStation Portable 2 and PS4
* Use better precision Windows timers
* Use clock_gettime() instead of clock() on Cygwin and Linux
* Use compiler TLS on FreeBSD and NetBSD