Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
-
4acf3a86
by Ben Gamari at 2025-07-15T05:46:32-04:00
-
45efaf71
by Teo Camarasu at 2025-07-15T05:47:13-04:00
-
f7247a8d
by Ben Gamari at 2025-07-15T09:55:33-04:00
-
1c4c8097
by Ben Gamari at 2025-07-15T09:55:33-04:00
-
86943ca2
by Wen Kokke at 2025-07-15T09:55:36-04:00
10 changed files:
- configure.ac
- docs/users_guide/eventlog-formats.rst
- m4/find_ld.m4
- rts/sm/NonMoving.c
- rts/sm/NonMoving.h
- rts/sm/NonMovingAllocate.c
- rts/sm/Sanity.c
- testsuite/tests/driver/recomp015/all.T
- utils/ghc-toolchain/src/GHC/Toolchain/Tools/Link.hs
- utils/haddock/haddock-api/haddock-api.cabal
Changes:
... | ... | @@ -13,7 +13,7 @@ dnl |
13 | 13 | # see what flags are available. (Better yet, read the documentation!)
|
14 | 14 | #
|
15 | 15 | |
16 | -AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.14.0], [glasgow-haskell-bugs@haskell.org], [ghc-AC_PACKAGE_VERSION])
|
|
16 | +AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.15], [glasgow-haskell-bugs@haskell.org], [ghc-AC_PACKAGE_VERSION])
|
|
17 | 17 | # Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable
|
18 | 18 | # to be useful (cf #19058). However, the version must have three components
|
19 | 19 | # (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are
|
... | ... | @@ -693,6 +693,8 @@ A single fixed-width event emitted during program start-up describing the sample |
693 | 693 | :field String: retainer filter
|
694 | 694 | :field String: biography filter
|
695 | 695 | |
696 | +The profile ID field is reserved for future use.
|
|
697 | + |
|
696 | 698 | Cost centre definitions
|
697 | 699 | ^^^^^^^^^^^^^^^^^^^^^^^
|
698 | 700 | |
... | ... | @@ -792,6 +794,7 @@ Otherwise, a :event-type:`HEAP_PROF_SAMPLE_STRING` event is emitted instead. |
792 | 794 | :field Word8: stack depth
|
793 | 795 | :field Word32[]: cost centre stack starting with inner-most (cost centre numbers)
|
794 | 796 | |
797 | +The profile ID field is reserved for future use.
|
|
795 | 798 | |
796 | 799 | String break-down
|
797 | 800 | ^^^^^^^^^^^^^^^^^
|
... | ... | @@ -818,6 +821,8 @@ If the heap profile type is set to :rts-flag:`-hc` or :rts-flag:`-hb`, a :event- |
818 | 821 | :field Word64: heap residency in bytes
|
819 | 822 | :field String: sample label
|
820 | 823 | |
824 | +The profile ID field is reserved for future use.
|
|
825 | + |
|
821 | 826 | .. _time-profiler-events:
|
822 | 827 | |
823 | 828 | Time profiler event log output
|
... | ... | @@ -21,14 +21,7 @@ AC_DEFUN([FIND_LD],[ |
21 | 21 | return
|
22 | 22 | fi
|
23 | 23 | |
24 | - case $CPU in
|
|
25 | - i386)
|
|
26 | - # We refuse to use ld.gold on i386 due to #23579, which we don't
|
|
27 | - # have a good autoconf check for.
|
|
28 | - linkers="ld.lld ld" ;;
|
|
29 | - *)
|
|
30 | - linkers="ld.lld ld.gold ld" ;;
|
|
31 | - esac
|
|
24 | + linkers="ld.lld ld"
|
|
32 | 25 | |
33 | 26 | # Manually iterate over possible names since we want to ensure that, e.g.,
|
34 | 27 | # if ld.lld is installed but gcc doesn't support -fuse-ld=lld, that we
|
... | ... | @@ -603,7 +603,6 @@ void nonmovingPushFreeSegment(struct NonmovingSegment *seg) |
603 | 603 | if (cas((StgVolatilePtr) &nonmovingHeap.free, (StgWord) old, (StgWord) seg) == (StgWord) old)
|
604 | 604 | break;
|
605 | 605 | }
|
606 | - __sync_add_and_fetch(&nonmovingHeap.n_free, 1);
|
|
607 | 606 | }
|
608 | 607 | |
609 | 608 | static int
|
... | ... | @@ -621,20 +620,26 @@ cmp_segment_ptr (const void *x, const void *y) |
621 | 620 | void nonmovingPruneFreeSegmentList(void)
|
622 | 621 | {
|
623 | 622 | trace(TRACE_nonmoving_gc, "Pruning free segment list.");
|
623 | + |
|
624 | 624 | // Atomically grab the entire free list.
|
625 | 625 | struct NonmovingSegment *free;
|
626 | - size_t length;
|
|
627 | 626 | while (true) {
|
628 | 627 | free = ACQUIRE_LOAD(&nonmovingHeap.free);
|
629 | - length = ACQUIRE_LOAD(&nonmovingHeap.n_free);
|
|
630 | 628 | if (cas((StgVolatilePtr) &nonmovingHeap.free,
|
631 | 629 | (StgWord) free,
|
632 | 630 | (StgWord) NULL) == (StgWord) free) {
|
633 | - atomic_dec((StgVolatilePtr) &nonmovingHeap.n_free, length);
|
|
634 | 631 | break;
|
635 | 632 | }
|
636 | - // Save the current free list so the sanity checker can see these segments.
|
|
637 | - nonmovingHeap.saved_free = free;
|
|
633 | + }
|
|
634 | + // Save the current free list so the sanity checker can see these segments.
|
|
635 | + nonmovingHeap.saved_free = free;
|
|
636 | + |
|
637 | + // Calculate the length of the list we've taken
|
|
638 | + size_t length = 0;
|
|
639 | + struct NonmovingSegment *free1 = free;
|
|
640 | + while (free1) {
|
|
641 | + length++;
|
|
642 | + free1 = free1->link;
|
|
638 | 643 | }
|
639 | 644 | |
640 | 645 | // Sort the free list by address.
|
... | ... | @@ -692,7 +697,6 @@ void nonmovingPruneFreeSegmentList(void) |
692 | 697 | if (cas((StgVolatilePtr) &nonmovingHeap.free,
|
693 | 698 | (StgWord) rest,
|
694 | 699 | (StgWord) free) == (StgWord) rest) {
|
695 | - __sync_add_and_fetch(&nonmovingHeap.n_free, new_length);
|
|
696 | 700 | break;
|
697 | 701 | }
|
698 | 702 | }
|
... | ... | @@ -134,8 +134,6 @@ struct NonmovingHeap { |
134 | 134 | // saved free segment list, so the sanity checker can
|
135 | 135 | // see the segments while the free list is being pruned.
|
136 | 136 | struct NonmovingSegment *saved_free;
|
137 | - // how many segments in free segment list? accessed atomically.
|
|
138 | - unsigned int n_free;
|
|
139 | 137 | |
140 | 138 | // records the current length of the nonmovingAllocator.current arrays
|
141 | 139 | unsigned int n_caps;
|
... | ... | @@ -183,7 +183,6 @@ static struct NonmovingSegment *nonmovingPopFreeSegment(void) |
183 | 183 | if (cas((StgVolatilePtr) &nonmovingHeap.free,
|
184 | 184 | (StgWord) seg,
|
185 | 185 | (StgWord) seg->link) == (StgWord) seg) {
|
186 | - __sync_sub_and_fetch(&nonmovingHeap.n_free, 1);
|
|
187 | 186 | return seg;
|
188 | 187 | }
|
189 | 188 | }
|
... | ... | @@ -990,7 +990,6 @@ static void checkGeneration (generation *gen, |
990 | 990 | #endif
|
991 | 991 | |
992 | 992 | if (isNonmovingGen(gen)) {
|
993 | - ASSERT(countNonMovingSegments(nonmovingHeap.free) == (W_) nonmovingHeap.n_free * NONMOVING_SEGMENT_BLOCKS);
|
|
994 | 993 | ASSERT(countBlocks(nonmoving_large_objects) == n_nonmoving_large_blocks);
|
995 | 994 | ASSERT(countBlocks(nonmoving_marked_large_objects) == n_nonmoving_marked_large_blocks);
|
996 | 995 |
... | ... | @@ -5,7 +5,11 @@ test('recomp015', |
5 | 5 | # See ticket:11022#comment:7
|
6 | 6 | unless(opsys('linux') or opsys('solaris2') or opsys('openbsd'), skip),
|
7 | 7 | when(arch('arm'), skip),
|
8 | - js_skip # JS backend doesn't support .s assembly files
|
|
8 | + js_skip, # JS backend doesn't support .s assembly files
|
|
9 | + |
|
10 | + # the linker sometimes throws warnings since we don't
|
|
11 | + # generate a .note.GNU-stack section
|
|
12 | + ignore_stderr,
|
|
9 | 13 | ],
|
10 | 14 | makefile_test, [])
|
11 | 15 |
... | ... | @@ -91,7 +91,7 @@ findLinkFlags enableOverride cc ccLink |
91 | 91 | -- executable exists before trying cc.
|
92 | 92 | do _ <- findProgram (linker ++ " linker") emptyProgOpt ["ld."++linker]
|
93 | 93 | prog <$ checkLinkWorks cc prog
|
94 | - | linker <- ["lld", "gold", "bfd"]
|
|
94 | + | linker <- ["lld", "bfd"]
|
|
95 | 95 | , let prog = over _prgFlags (++["-fuse-ld="++linker]) ccLink
|
96 | 96 | ]
|
97 | 97 | <|> (ccLink <$ checkLinkWorks cc ccLink)
|
... | ... | @@ -79,7 +79,7 @@ library |
79 | 79 | |
80 | 80 | -- this package typically supports only single major versions
|
81 | 81 | build-depends: base >= 4.16 && < 4.23
|
82 | - , ghc ^>= 9.14
|
|
82 | + , ghc ^>= 9.15
|
|
83 | 83 | , haddock-library ^>= 1.11
|
84 | 84 | , xhtml ^>= 3000.2.2
|
85 | 85 | , parsec ^>= 3.1.13.0
|