Commit graph

7607 commits

Author SHA1 Message Date
Helmut Eller
13027dc8f4 Add another workaround for the ephemeron pool
Disabling write barrier deferral in config.h, uncovered a second
problem: mps/test/function/eph1.c fails because segments aren't scanned
if the segment's summary doesn't intersect with the white set.

* mps/code/trace.c (traceFindGrey): Force rescanning by adding the white
set to the segments summary.
2026-02-11 09:53:40 +01:00
Helmut Eller
e34e1bc58d Add a workaround for a failing assertion
In traceScanSegRes, the assertion

  AVER(RefSetSub(ScanStateUnfixedSummary(ss), SegSummary(seg)));

can fail if we call MPS_FIX1 on a reference but not MPS_FIX2.  In a
normal Emacs session that tends to happen after ~10 minutes.  If "write
barrier deferral" is disabled in config.h, then the tests in
mps/test/function/eph1.c will also run into this assertion.

I failed to create a reproducible test with write barrier deferral
enabled.  Obvioulsy, I don't understand this issue fully.

* mps/code/poolawl.c (aephFixKey): Include the key in the SegSummary.
(aephIsWhite): Return the new reference, so that we can avoid calling
MPS_FIX2 twice.
2026-02-11 09:53:40 +01:00
Helmut Eller
53fa8e0791 Minor simplifications
* mps/test/test/testlib/ephfmt.c (make_pair, make_weak_pair): Simplify.
(eph_scan, eph_skip): Use the header.size field to skip to the next
object.
2026-02-11 09:53:40 +01:00
Eli Zaretskii
dc87175c50 ; * mps/TESTING: Make the MS-Windows part less confusing. 2026-02-07 12:32:35 +02:00
Helmut Eller
e8b9677acd Handle accesses to protected AMC segments while in ephemeron band
* mps/code/trace.c (TraceRankForAccess): While in the ephemeron band,
use RankFINAL for final segments and RankEXACT for the others.
* mps/test/function/eph5.c: New Test.
* mps/test/testsets/passing: Include eph5.c.
* mps/test/test/testlib/ephfmt.h (union header): Use a one-word header.
* mps/test/test/testlib/ephfmt.c: Update accordingly.
* mps/test/function/eph1.c: Update accordingly.
2026-02-02 17:27:23 +01:00
Helmut Eller
07c893264b * mps/.clang-format: New file. Configuration for MPS conventions. 2026-01-23 09:41:27 +01:00
Helmut Eller
cc1aa65f17 Add a pool for ephemerons
Ephemerons solve the key-in-value problem for weak key/value pairs.  It
seems that it's not possible to solve that problem with weak pointers or
finalizers.  Basically we want a weak key/value pair that implements the
rule:

  The value is reachable, if the key is reachable.

The key-in-value problem occurs if all paths to the key go through the
value.  In this situation, the key is considered reachable only if the
value is "externally reachable", i.e. the value is reachable through a
path other than through the weak pair.

Such weak pairs seem to need an extra phase in the GC algorithm.  See
[1] for some variants of the algorithm.

https://www.haible.de/bruno/papers/cs/weak/WeakDatastructures-writeup.html

* mps/code/mpmst.h (SegStruct): Add fields propagationNeeded,
marksChanged, and propagationFinished.
* mps/code/mpmtypes.h (RANK_LIST): Add EPHEMERON rank.
* mps/code/mps.s (mps_rank_ephemeron): New prototype.
* mps/code/mpscawl.h (mps_class_aeph, mps_fix_weak_pair)
(mps_fix_weak_or_pair, mps_fix_weak_and_pair): New prototypes.
* mps/code/mpsi.c (mps_rank_ephemeron): New function.
* mps/code/poolawl.c (AEPHSegStruct, AEPHPoolStruct): New. The
implementation the ephemeron pool.
* mps/code/seg.c (segAbsInit): Initialize propagationNeeded,
marksChanged, and propagationFinished.
* mps/code/trace.c (traceBandRetreat, tracePropagateToLowerRanks)
(moveSegToEndOfGreyRing): New helpers.
(TraceRankForAccess): Handle the RankEPHEMERON.
(traceFindGrey, traceScanSegRes): Add special handling for ephemeron
segments.
* mps/test/function/eph1.c: New test file.
* mps/test/function/eph2.c: New test file.
* mps/test/function/eph3.c: New test file.
* mps/test/function/eph4.c: New test file.
* mps/test/test/testlib/ephfmt.c: New file.
* mps/test/test/testlib/ephfmt.h: New file.
* mps/test/test/testlib/manifest: Add ephfmt.c.
* mps/test/testsets/passing: Include eph{1,2,3,4}.c.
2026-01-23 08:48:40 +01:00
Helmut Eller
7dfa9e76eb * mps/code/global.c (GlobalsDescribe): Include tracedTime. 2025-11-26 10:41:34 +01:00
Helmut Eller
70667d3aa2 * mps/code/poolamc.c (AMCBufInit): Accept optional MPS_KEY_GEN arg. 2025-11-17 20:57:18 +01:00
Helmut Eller
698a403d32 Recognize some Amd64 instruction patterns
* mps/code/prmci6.c (IsSimpleMov): Actually do something.
(IsRexPrefix, DecodeSimpleMov, RexR, RexB, RexX, DecodeDisp32)
(SignedInsElt, RegValue, DecodeModRM, DecodeSIB, DecodeCB): New helpers.
* mps/code/prmctest.c: New file.
* mps/code/comm.gmk: Add prmctest.
* mps/tool/testcases.txt: Here too.
2025-10-11 20:33:40 +02:00
Helmut Eller
51e1001a70 Ignore dangling-pointer warning
* mps/code/ss.c (StackHot): [MPS_BUILD_GC]: On more platforms, not only
__MINGW32__.
2025-10-11 20:18:34 +02:00
Helmut Eller
a7c2557dfc * mps/code/poolawl.c (AWL0Init): Stick to C89. 2025-10-11 20:15:09 +02:00
Eli Zaretskii
5a417cef74 ; * mps/code/arenacv.c (TEST_ARENA_SIZE): Fix a typo. 2025-10-10 10:01:44 +03:00
Helmut Eller
0ffab88172 Implement an experimental AWL0 pool
Mostly boilerplate code to override the SegAccess method of AWLSeg.

* mps/code/poolawl.c (AWL0Pool, AWL0Seg): New classes.
(awl0SegAccess, awl0BufferFill): New methods.
2025-10-09 18:32:21 +02:00
Ken Brown
15bddbabf9 Support the Cygwin build of MPS
* mps/code/prmccyi6.c:
* mps/code/cyi6gc.gmk: New files, for the Cygwin build.

* mps/code/config.h:
* mps/code/lockix.c:
* mps/code/prmcix.c:
* mps/code/protix.c:
* mps/code/protsgix.c:
* mps/code/pthrdext.c:
* mps/code/testthr.h:
* mps/code/thix.c:
* mps/code/vmix.c: Port to Cygwin.

* mps/configure.ac (x86_64-*-cygwin*/no): Add definitions for
Cygwin.

* mps/code/mps.c [MPS_PF_CYI6GC]:
* mps/code/mpstd.h: Define 64-bit Cygwin stuff.

* mps/code/gcbench.c: [MPS_OS_CY]:
* mps/code/djbench.c [MPS_OS_CY]: Include alloca.h.

* mps/code/arenacv.c (TEST_ARENA_SIZE) [MPS_OS_CY]: Increase to
make test pass.  (Bug#74805)

* mps/code/arenavm.c (VMArenaCreate): Avoid compiler warning.
2025-10-08 10:33:45 -04:00
Eli Zaretskii
aa13157f79 ; * mps/TESTING: Fix instructions for MS-Windows. 2025-09-27 10:26:36 +03:00
Eli Zaretskii
7bf01b5edf ; * mps/.gitignore: Ignore aclocal.m4. 2025-09-27 10:11:15 +03:00
Eli Zaretskii
6f72646fbd Fix MinGW build of mps/code/eventsql.c
* mps/code/eventsql.c (PRINTF_ARCHETYPE) [__MINGW32__]: Define as
__gnu_printf__ for MinGW builds, to support ANSI- and GNU-compatible
format specs.
(vlog, evlog, error): Use PRINTF_ARCHETYPE.
2025-09-27 10:07:26 +03:00
Helmut Eller
af04dc0777 * mps/Makefile.in (config.status): Use config.status --recheck 2025-09-26 17:50:43 +02:00
Helmut Eller
151cf74c07 * mps/tool/testrun.sh (testansi, testpollnone): Skip Unix & Windows 2025-09-25 20:42:14 +02:00
Helmut Eller
16f58d81a6 * mps/configure.ac: Remove message about alternative build systems 2025-09-25 20:14:24 +02:00
Helmut Eller
0ee25efb2e Exclude two more tests on the anangc platform
* mps/tool/testcases.txt (awlut, awluthe): Mark those as
multi-threaded.
2025-09-25 18:40:39 +02:00
Helmut Eller
cc6b939bd6 Don't compile forktest on the anangc platform
* mps/code/comm.gmk (TEST_TARGETS): Exclude forktest.
2025-09-25 18:38:13 +02:00
Helmut Eller
0c93a0044f Don't run Unix-only test on Msys
Detect Msys and use the existing X flag in testcases.txt to
exclude the forktest.

* mps/tool/testrun.sh (EXCLUDE_OS): New variable.
2025-09-25 18:33:30 +02:00
Helmut Eller
b142f39be0 * mps/code/comm.gmk (testratio): Add EXEEXT. 2025-09-25 18:27:44 +02:00
Eli Zaretskii
e850bcf6c6 ; * mps/code/mps.h (mps_word_t): Fix condition for MinGW64. 2025-09-25 11:39:05 +03:00
Eli Zaretskii
03d6ca27ec * mps/TESTING: New file. 2025-09-25 10:27:29 +03:00
Eli Zaretskii
e473734445 Support the MinGW build of MPS and tests, part 2
* mps/code/mingw.gmk (CFLAGSCOMPILERSTRICT): Use gnu99, not gnu89.

* mps/configure.ac (EXEEXT): Define and use for program names.
(i*86-*-mingw*/no, x86_64-*-mingw*/no): Add definitions for MinGW.
2025-09-24 16:28:33 +03:00
Eli Zaretskii
74492583e5 Support the MinGW build of MPS and tests, part 1
* mps/code/w3i6gc.gmk:
* mps/code/w3i3gc.gmk:
* mps/code/mingw.gmk: New files, for the MinGW build.

* mps/code/ss.c (StackHot) [__MINGW32__ && __GNUC__ >= 12]: Ignore
dangling-pointer warnings.

* mps/code/global.c (ArenaFinalize): Avoid compiler warnings.

* mps/code/thw3.c (ThreadScan): Avoid compilation errors due to
prototype mismatch.

* mps/code/testlib.h (alloca): Don't redefine for MinGW.
(setenv): Don't redefine for mingw.org's MinGW.
(ulongest_t, longest_t): Separate definitions for MinGW64.

* mps/code/testlib.c (sizelog2) [__MINGW32__]: Fix comparison.
(rnd_align): Avoid name clashes with 'min' and 'max'.

* mps/code/spw3i3.c (StackProbe) [__GNUC__]: Implementation for
MinGW.

* mps/code/protw3.c: Avoid compiler warning.

* mps/code/mpstd.h: Define MinGW (_X86_) and MinGW64 (__X86_64)
configurations.

* mps/code/mpsiw3.c (mps_SEH_filter, mps_SEH_handler): Add
prototypes.

* mps/code/mps.c [MPS_PF_W3I3GC]: Define 32-bit MinGW stuff.
[MPS_PF_W3I6GC]: Define 64-bit MinGW64 stuff.

* mps/code/lockw3.c (RTL_RUN_ONCE, PRTL_RUN_ONCE_INIT_FN)
(RTL_RUN_ONCE_INIT, INIT_ONCE_STATIC_INIT, RTL_RUN_ONCE INIT_ONCE)
(PRTL_RUN_ONCE PINIT_ONCE, PINIT_ONCE_FN, InitOnceExecuteOnce):
Define for mingw.org's MinGW.

* mps/code/comm.gmk (EVENT_TARGETS, EXTRA_TARGETS, TEST_TARGETS)
(UNBUILDABLE_TARGETS): Add $(EXEEXT) to program names.
(TESTTHR): Define correct test for MS-Windows.
Don't fail the build if the *.d dependency files don't exist.
2025-09-24 13:02:30 +03:00
Helmut Eller
1507199e35 Support out-of-tree builds
* mps/example/scheme/Makefile.in (VPATH): Set VPATH.
* mps/Makefile.in (COMMON_OPTS): New.  Pass SRCDIR down to sub-make.
* mps/code/comm.gmk (VPATH): Set VPATH from SRCDIR parameter
* mps/configure.ac (AC_CONFIG_COMMANDS): Copy .gmk makefiles and some
other things to the biuld directory.
2025-09-22 16:56:02 +02:00
Helmut Eller
a97f6d888f Better support for parallel make
* mps/code/comm.gmk (LIB_TARGETS, TEST_TARGETS, EVENT_TARGETS)
(TEST_SUITES, testmmqa): If VARIETY is not defined, then disable
parallism with .NOTPARALLEL.  Otherwise, avoid the recursive make with
a static pattern rule.
(clean-testansi, clean-testpollnone): New.
* mps/Makefile.in (build-via-make): Invoke submake explicit
VARIETY argument to allow more parallelism.
(test-make-build): Use clean-testansi and clean-testpollnone.
2025-09-15 08:23:25 +02:00
Helmut Eller
685167848a Remove some autoconf-generated files 2025-09-13 15:39:24 +02:00
Helmut Eller
baa2ffe03c Relax compiler flags in Makefile
We don't want to abort on every warning.

* mps/configure.ac (CFLAGS_GC): Remove -Werror.
* mps/Makefile.in (CFLAGSCOMPILERSTRICT): Add -Wno-error.
2025-09-13 13:51:28 +02:00
Gerd Möllmann
10b079d8c5 * mps/code/mps.h (MPS_RM_PROT_INNER): Fix MPS issue #285. 2025-09-13 13:26:07 +02:00
Helmut Eller
b38d8789fe * mps/code/global.c (ArenaStep): Fix calculation of available time. 2025-09-13 13:23:52 +02:00
Helmut Eller
255a1e6872 Un-rename .gitignore 2025-09-13 10:03:13 +02:00
Richard Brooksby
028ac3804d Clarifying that two avers are implementing .assume.parked in response to review comment <https://github.com/ravenbrook/mps/pull/298#issuecomment-2503792676>. 2024-11-27 13:25:08 +00:00
Richard Brooksby
189d6cb193 Removing unused variable that triggered the unused-but-set-variable warning when building on macos 14.7.1 with clang 15.0. 2024-11-27 13:25:08 +00:00
Richard Brooksby
3a6770cc63 Merging branch/2024-11-26/fix-manual-build for github pull request <https://github.com/ravenbrook/mps/pull/297>
Removing use of deprecated alias of VersionChange

GitHub-reference: https://github.com/Ravenbrook/mps/issues/297
2024-11-27 13:14:49 +00:00
Richard Brooksby
96dce32c69 Merging branch/2024-11-26/dont-fail-fast for github pull request <https://github.com/ravenbrook/mps/pull/296>
Tell GitHub not to cancel builds in the posix matrix

GitHub-reference: https://github.com/Ravenbrook/mps/issues/296
2024-11-27 12:31:38 +00:00
Richard Brooksby
cf1b64ab4c Merging branch mavit/build-link for github pull request <https://github.com/ravenbrook/mps/pull/290>.
Fix link in readme to build docs.

GitHub-reference: https://github.com/Ravenbrook/mps/issues/290
2024-11-27 11:29:58 +00:00
Richard Brooksby
d5161ab7be Merging waywardmonkeys/fix-typos for github pull request <https://github.com/ravenbrook/mps/pull/282>
GitHub-reference: https://github.com/Ravenbrook/mps/issues/282
2024-11-27 11:19:17 +00:00
Richard Brooksby
15dfee6a38 Removing use of deprecated alias of versionchange, which was removed in sphinx 8 <https://www.sphinx-doc.org/en/master/changes/8.0.html#release-8-0-0-released-jul-29-2024> and breaks the manual build. 2024-11-26 17:52:58 +00:00
Richard Brooksby
ee54576a73 Tell github not to cancel builds in the posix matrix when one of them fails. 2024-11-26 16:33:39 +00:00
Richard Brooksby
6469f1a814 Adding documentation reference to use of checkout action to help clarify why we say "@v4", in response to review comment <https://github.com/ravenbrook/mps/pull/284#pullrequestreview-2461989972>. 2024-11-26 16:19:41 +00:00
Bruce Mitchener
96bceb2f6b Ci: update actions/checkout to v4 from v3.
This updates internally to using Node 20 and removes some deprecation
notices within the GitHub Actions UI about Node 16 being deprecated.
2024-11-26 16:19:41 +00:00
Bruce Mitchener
1497445a45 Fix typos. 2024-11-26 22:10:23 +07:00
Peter Oliver
6b5906ff73 Fix link in readme to build docs. 2024-08-21 11:11:18 +01:00
Bruce Mitchener
84908c9ee5 Update config.guess to the version from autoconf 2.72
Fixes https://github.com/Ravenbrook/mps/issues/281. Identification of newer systems such as macOS on Apple
Silicon was not working correctly with the old version of this
file.
2024-02-29 23:03:00 +07:00
Richard Brooksby
c86a2c34a4 Breaking up the glossary index with punctuation and spaces, in response to review <https://github.com/ravenbrook/mps/pull/166#pullrequestreview-1687977425>. 2023-10-21 09:57:09 +01:00