Opened 4 weeks ago

Last modified 4 weeks ago

#74439 assigned defect

sbcl-bootstrap @2.4.0: ARM64 static-space allocation failure on macOS 27 blocks sbcl @2.6.8

Reported by: JeffreyRacine (Jeffrey S. Racine) Owned by: easye
Priority: Normal Milestone:
Component: ports Version: 2.12.6
Keywords: goldengate arm64 Cc:
Port: sbcl-bootstrap sbcl

Description

On macOS 27.0 Golden Gate (26A428), ARM64, with MacPorts 2.12.6, building SBCL 2.6.8 fails because the managed SBCL 2.4.0 bootstrap cannot start: it cannot allocate its static space at 0x300100000. This also blocks Maxima when configured to use SBCL. The failure occurs before compiling the target SBCL, and was reproduced by starting the bootstrap directly. Memory limits were unlimited.

The current sbcl-bootstrap Portfile still selects 2.4.0 for ARM64:

​https://github.com/macports/macports-ports/blob/master/lang/sbcl-bootstrap/Portfile

SBCL already changed the macOS 27 ARM64 static-space address in 2.6.6, referencing upstream issue lp#2156072:

​https://github.com/sbcl/sbcl/blob/sbcl-2.6.6/NEWS

A compatible host compiler resolved the build on this machine. I verified a signed MacPorts SBCL 2.6.8 ARM64 archive built for Darwin 25 and extracted it solely as a temporary bootstrap. Startup, ASDF/SB-POSIX loading, and Lisp compile/load/arithmetic checks passed, including under the actual MacPorts build account. That bootstrap then built native Darwin 27 SBCL 2.6.8 +fancy from source. The installed target passed the same checks, and Maxima built and passed symbolic/matrix smoke checks.

This did not register the Darwin 25 archive as the migrated target or replace the managed bootstrap port. The working outcome supports adding a compatible bootstrap choice for ARM64 on Darwin 27, while preserving the old bootstrap choices for platforms that need them. A clean bootstrap distribution, checksum and platform coverage should be chosen by the maintainer; the extracted archive was a local recovery tool.

The attached bootstrap-and-build-evidence.txt contains retained output from the successful replacement bootstrap and native target checks. It is supporting evidence for the workaround, not the original failure log.

Attachments (3)

bootstrap-and-build-evidence.txt​ (2.3 KB) - added by JeffreyRacine (Jeffrey S. Racine) 4 weeks ago.
Sanitized retained output: compatible bootstrap checks under the MacPorts build account and successful native SBCL 2.6.8 build/runtime checks.
sbcl-bootstrap-darwin27.patch​ (3.3 KB) - added by JeffreyRacine (Jeffrey S. Racine) 4 weeks ago.
Candidate Portfile patch for ARM64 Darwin >= 27 using the verified MacPorts 2.6.8 archive; scratch-tested, not a full port-install validation.
archive-provenance-and-patch-checks.txt​ (8.2 KB) - added by JeffreyRacine (Jeffrey S. Racine) 4 weeks ago.
Exact archive/signature URLs, MacPorts-key verification and hashes, plus sanitized scratch checks and explicit validation limits for the candidate Portfile.

Download all attachments as: .zip

Change History (6)

Changed 4 weeks ago by JeffreyRacine (Jeffrey S. Racine)

Sanitized retained output: compatible bootstrap checks under the MacPorts build account and successful native SBCL 2.6.8 build/runtime checks.

comment:1 Changed 4 weeks ago by jmroot (Joshua Root)

Owner: set to easye
Status: new → assigned

comment:2 Changed 4 weeks ago by easye

The current sbcl-bootstrap Portfile still selects 2.4.0 for ARM64

Hey, clanker, the ARM64 sbcl-2.4.0 binary is the latest available as <​https://sbcl.org/platform-table.html> shows.

I verified a signed MacPorts SBCL 2.6.8 ARM64 archive built for Darwin 25 and extracted it solely as a temporary bootstrap

Where did you obtain this archive from? Who signed it? Why do you trust it?

A patch showing your proposed modifications would be appreciated.

Changed 4 weeks ago by JeffreyRacine (Jeffrey S. Racine)

Candidate Portfile patch for ARM64 Darwin >= 27 using the verified MacPorts 2.6.8 archive; scratch-tested, not a full port-install validation.

Changed 4 weeks ago by JeffreyRacine (Jeffrey S. Racine)

Exact archive/signature URLs, MacPorts-key verification and hashes, plus sanitized scratch checks and explicit validation limits for the candidate Portfile.

comment:3 Changed 4 weeks ago by JeffreyRacine (Jeffrey S. Racine)

Replying to easye:

Thank you for checking. You are right that 2.4.0 is the latest macOS ARM64 binary on the SBCL download page. The replacement I used was a MacPorts-built binary, and I should have included its precise provenance in the report.

Archive and signature

The retained recovery log records this verification, and a fresh download on September 16 also verifies successfully:

/usr/bin/openssl dgst -ripemd160 \
  -verify /opt/local/share/macports/macports-pubkey.pem \
  -signature sbcl-2.6.8_0+fancy.darwin_25.arm64.tbz2.rmd160 \
  sbcl-2.6.8_0+fancy.darwin_25.arm64.tbz2
Verified OK

Archive SHA-256:

86ddb6062268ea65b01918ce10b1d1581b9725837543a2bd86b585eb4b2129c0

By "signed" I meant an archive signature verifiable with that MacPorts public key. I cannot identify an individual signer from it. My basis for trusting the bootstrap was its official MacPorts package-server origin and verification against the MacPorts-distributed key. The checksum above identifies the exact bytes; the detached signature is the authentication check.

Proposed patch and validation scope

Attached sbcl-bootstrap-darwin27.patch​ is a candidate change to lang/sbcl-bootstrap/Portfile. It selects this pinned archive for ARM64 on Darwin >= 27, preserves the existing bootstrap selections elsewhere, and stages only the runtime, core, contribs and copyright files below libexec/sbcl-bootstrap. It sets SBCL_HOME for that layout and declares the zstd dependency used by the +fancy runtime. For a non-default prefix it adjusts that library reference and applies an ad-hoc Mach-O signature to the changed runtime.

The successful full source build reported earlier used a temporary extracted bootstrap passed through --xc-host; it did not install this candidate Portfile or register the Darwin 25 archive as the target SBCL. Its build-account checks and native Darwin 27 target results are in the original attachment.

For this patch, I checked the unchanged platform selections, executed the destroot body in scratch, and ran the generated wrapper on macOS 27 through ASDF/SB-POSIX loading, arithmetic and Lisp compile/load checks. These used a Tcl harness with MacPorts option setters stubbed; they are not a full MacPorts pipeline or a clean target rebuild with this Portfile. The non-default-prefix test used a scratch link to the existing zstd library. Only macOS 27 was runtime-tested. archive-provenance-and-patch-checks.txt​ records the provenance and these checks.

This is a proposed packaging change for review. A dedicated, retained bootstrap distfile may be preferable to depending on long-term retention of this package-server archive; I defer to the maintainers on that distribution choice.

Note: See TracTickets for help on using tickets.