The RAD Debugger on macOS

generation mac8 · upstream base 7a5a649b · september 2026

What had to change

The port is a stack of branches on one pinned upstream commit. Each branch owns one concern. The sections follow the branches; each compare link shows that branch’s changes only.

Portable footing

mac8/portable-host-footing · compare ↗
mac8/x64-cpuid-host-cleanup · compare ↗

Upstream assumes an x64 host.

POSIX parity

mac8/portable/posix-base-parity · compare ↗
mac8/portable/posix-linker-helper-parity · compare ↗

Brings the POSIX base layer up to parity with the Win32 one.

DWARF, RDI, and Mach-O

mac8/portable/dwarf-rdi-correctness · compare ↗
mac8/portable/macho-dwarf-tools · compare ↗

The debugger consumes symbols in its own RDI format; on macOS the platform format is DWARF in Mach-O binaries and dSYM bundles.

New: Mach-O DWARF section extraction, radbin Mach-O and dSYM discovery, and MACHO32/MACHO64 as radbin input formats.

The AppKit shell

mac8/mac/appkit-shell · compare ↗

A native AppKit application: bundle, windows, menus, file dialogs, input.

CoreText and Metal

mac8/mac/coretext-metal · compare ↗

ARM64 core and disassembly

mac8/portable/arm64-core · compare ↗
mac8/portable/arm64-disasm · compare ↗

Upstream understands x64 and, partially, x86; the port adds ARM64 as a first-class architecture.

Darwin process control

mac8/darwin/process-control-x64 · compare ↗

The debugger’s low-level backend exists upstream for Windows and Linux. The Darwin implementation:

The ARM64 runtime, target calls, and TLS

mac8/darwin/arm64-runtime · compare ↗
mac8/darwin/target-call-tls · compare ↗

On top of process control: ARM64 registers, traps, dyld fixups, compact unwind with fallback, function-start reads, continuation traps, and runtime tests. Then target calls and TLS:

Fork policy

mac8/portable/metagen-preserve-line-endings · compare ↗
mac8/portable/crash-dump-format-guards · compare ↗