Skip to content

zld 0.0.3

Compare
Choose a tag to compare
@kubkon kubkon released this 23 Dec 06:59
· 676 commits to main since this release

A complete MachO driver rewrite + ELF x86_64 support

  • MachO driver has been fully redesigned mainly so that we can easily plug it in into Zig much like we did with the ELF driver.
  • This is the first tagged release of the ELF x86_64 driver.
  • Thanks to @Luukdegram we also get some Wasm linker support πŸŽ‰

Better MachO link times (on Apple Silicon)

Seems we have regressed in link times prior to the MachO rewrite. Below you will find a quick benchmark of linking Zig's stage4 binary. You can also see what Rui meant when he mentioned that Apple stepped up their game - Apple's stock linker crushed zld before and after the rewrite and so it did with LLVM's LLD. That's good though - it's something we can strive for. The results are also good news for us since the rewrite is significantly faster than what we had before (zld_old is based on 19ccd5c FWIW), and I haven't yet even started thinking about parallelising parsing input objects, etc., a trick that all three linkers currently employ (Apple's ld, ld64.lld and Rui's sold linker).

$ hyperfine ./zld ./zld_old ./lld ./ld64
Benchmark 1: ./zld
  Time (mean Β± Οƒ):      3.236 s Β±  0.014 s    [User: 3.460 s, System: 0.750 s]
  Range (min … max):    3.219 s …  3.269 s    10 runs

Benchmark 2: ./zld_old
  Time (mean Β± Οƒ):      4.419 s Β±  0.011 s    [User: 4.671 s, System: 0.761 s]
  Range (min … max):    4.398 s …  4.430 s    10 runs

Benchmark 3: ./lld
  Time (mean Β± Οƒ):      1.497 s Β±  0.019 s    [User: 1.700 s, System: 0.308 s]
  Range (min … max):    1.457 s …  1.529 s    10 runs

Benchmark 4: ./ld64
  Time (mean Β± Οƒ):     627.0 ms Β±   7.2 ms    [User: 2140.1 ms, System: 385.3 ms]
  Range (min … max):   617.8 ms … 639.4 ms    10 runs

Summary
  ./ld64 ran
    2.39 Β± 0.04 times faster than ./lld
    5.16 Β± 0.06 times faster than ./zld
    7.05 Β± 0.08 times faster than ./zld_old

The actual full linker invocation is as follows:

/Users/kubkon/dev/zld/zig-out/bin/ld64.zld -dynamic -platform_version macos 13.6.3 14.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -headerpad_max_install_names /Users/kubkon/dev/zig/build/zigcpp/libzigcpp.a /Users/kubkon/opt/llvm17-release/lib/libclangFrontendTool.a /Users/kubkon/opt/llvm17-release/lib/libclangCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libclangFrontend.a /Users/kubkon/opt/llvm17-release/lib/libclangDriver.a /Users/kubkon/opt/llvm17-release/lib/libclangSerialization.a /Users/kubkon/opt/llvm17-release/lib/libclangSema.a /Users/kubkon/opt/llvm17-release/lib/libclangStaticAnalyzerFrontend.a /Users/kubkon/opt/llvm17-release/lib/libclangStaticAnalyzerCheckers.a /Users/kubkon/opt/llvm17-release/lib/libclangStaticAnalyzerCore.a /Users/kubkon/opt/llvm17-release/lib/libclangAnalysis.a /Users/kubkon/opt/llvm17-release/lib/libclangASTMatchers.a /Users/kubkon/opt/llvm17-release/lib/libclangAST.a /Users/kubkon/opt/llvm17-release/lib/libclangParse.a /Users/kubkon/opt/llvm17-release/lib/libclangSema.a /Users/kubkon/opt/llvm17-release/lib/libclangBasic.a /Users/kubkon/opt/llvm17-release/lib/libclangEdit.a /Users/kubkon/opt/llvm17-release/lib/libclangLex.a /Users/kubkon/opt/llvm17-release/lib/libclangARCMigrate.a /Users/kubkon/opt/llvm17-release/lib/libclangRewriteFrontend.a /Users/kubkon/opt/llvm17-release/lib/libclangRewrite.a /Users/kubkon/opt/llvm17-release/lib/libclangCrossTU.a /Users/kubkon/opt/llvm17-release/lib/libclangIndex.a /Users/kubkon/opt/llvm17-release/lib/libclangToolingCore.a /Users/kubkon/opt/llvm17-release/lib/libclangExtractAPI.a /Users/kubkon/opt/llvm17-release/lib/libclangSupport.a /Users/kubkon/opt/llvm17-release/lib/liblldMinGW.a /Users/kubkon/opt/llvm17-release/lib/liblldELF.a /Users/kubkon/opt/llvm17-release/lib/liblldCOFF.a /Users/kubkon/opt/llvm17-release/lib/liblldWasm.a /Users/kubkon/opt/llvm17-release/lib/liblldMachO.a /Users/kubkon/opt/llvm17-release/lib/liblldCommon.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWindowsManifest.a /Users/kubkon/opt/llvm17-release/lib/libLLVMXRay.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLibDriver.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDlltoolDriver.a /Users/kubkon/opt/llvm17-release/lib/libLLVMCoverage.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLineEditor.a /Users/kubkon/opt/llvm17-release/lib/libLLVMXCoreDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMXCoreCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMXCoreDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMXCoreInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMX86TargetMCA.a /Users/kubkon/opt/llvm17-release/lib/libLLVMX86Disassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMX86AsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMX86CodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMX86Desc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMX86Info.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWebAssemblyDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWebAssemblyAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWebAssemblyCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWebAssemblyUtils.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWebAssemblyDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWebAssemblyInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMVEDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMVEAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMVECodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMVEDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMVEInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSystemZDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSystemZAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSystemZCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSystemZDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSystemZInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSparcDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSparcAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSparcCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSparcDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSparcInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRISCVTargetMCA.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRISCVDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRISCVAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRISCVCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRISCVDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRISCVInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMPowerPCDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMPowerPCAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMPowerPCCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMPowerPCDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMPowerPCInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMNVPTXCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMNVPTXDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMNVPTXInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMSP430Disassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMSP430AsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMSP430CodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMSP430Desc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMSP430Info.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMipsDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMipsAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMipsCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMipsDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMipsInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLoongArchDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLoongArchAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLoongArchCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLoongArchDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLoongArchInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLanaiDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLanaiCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLanaiAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLanaiDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLanaiInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMHexagonDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMHexagonCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMHexagonAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMHexagonDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMHexagonInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBPFDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBPFAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBPFCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBPFDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBPFInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAVRDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAVRAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAVRCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAVRDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAVRInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMARMDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMARMAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMARMCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMARMDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMARMUtils.a /Users/kubkon/opt/llvm17-release/lib/libLLVMARMInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUTargetMCA.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUDesc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUUtils.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAMDGPUInfo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAArch64Disassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAArch64AsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAArch64CodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAArch64Desc.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAArch64Utils.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAArch64Info.a /Users/kubkon/opt/llvm17-release/lib/libLLVMOrcJIT.a /Users/kubkon/opt/llvm17-release/lib/libLLVMWindowsDriver.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMCJIT.a /Users/kubkon/opt/llvm17-release/lib/libLLVMJITLink.a /Users/kubkon/opt/llvm17-release/lib/libLLVMInterpreter.a /Users/kubkon/opt/llvm17-release/lib/libLLVMExecutionEngine.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRuntimeDyld.a /Users/kubkon/opt/llvm17-release/lib/libLLVMOrcTargetProcess.a /Users/kubkon/opt/llvm17-release/lib/libLLVMOrcShared.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDWP.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoLogicalView.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoGSYM.a /Users/kubkon/opt/llvm17-release/lib/libLLVMOption.a /Users/kubkon/opt/llvm17-release/lib/libLLVMObjectYAML.a /Users/kubkon/opt/llvm17-release/lib/libLLVMObjCopy.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMCA.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMCDisassembler.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLTO.a /Users/kubkon/opt/llvm17-release/lib/libLLVMPasses.a /Users/kubkon/opt/llvm17-release/lib/libLLVMCFGuard.a /Users/kubkon/opt/llvm17-release/lib/libLLVMCoroutines.a /Users/kubkon/opt/llvm17-release/lib/libLLVMipo.a /Users/kubkon/opt/llvm17-release/lib/libLLVMVectorize.a /Users/kubkon/opt/llvm17-release/lib/libLLVMLinker.a /Users/kubkon/opt/llvm17-release/lib/libLLVMInstrumentation.a /Users/kubkon/opt/llvm17-release/lib/libLLVMFrontendOpenMP.a /Users/kubkon/opt/llvm17-release/lib/libLLVMFrontendOpenACC.a /Users/kubkon/opt/llvm17-release/lib/libLLVMFrontendHLSL.a /Users/kubkon/opt/llvm17-release/lib/libLLVMExtensions.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDWARFLinkerParallel.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDWARFLinker.a /Users/kubkon/opt/llvm17-release/lib/libLLVMGlobalISel.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMIRParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAsmPrinter.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSelectionDAG.a /Users/kubkon/opt/llvm17-release/lib/libLLVMCodeGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMTarget.a /Users/kubkon/opt/llvm17-release/lib/libLLVMObjCARCOpts.a /Users/kubkon/opt/llvm17-release/lib/libLLVMCodeGenTypes.a /Users/kubkon/opt/llvm17-release/lib/libLLVMIRPrinter.a /Users/kubkon/opt/llvm17-release/lib/libLLVMInterfaceStub.a /Users/kubkon/opt/llvm17-release/lib/libLLVMFileCheck.a /Users/kubkon/opt/llvm17-release/lib/libLLVMFuzzMutate.a /Users/kubkon/opt/llvm17-release/lib/libLLVMScalarOpts.a /Users/kubkon/opt/llvm17-release/lib/libLLVMInstCombine.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAggressiveInstCombine.a /Users/kubkon/opt/llvm17-release/lib/libLLVMTransformUtils.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBitWriter.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAnalysis.a /Users/kubkon/opt/llvm17-release/lib/libLLVMProfileData.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSymbolize.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoBTF.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoPDB.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoMSF.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoDWARF.a /Users/kubkon/opt/llvm17-release/lib/libLLVMObject.a /Users/kubkon/opt/llvm17-release/lib/libLLVMTextAPI.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMCParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMIRReader.a /Users/kubkon/opt/llvm17-release/lib/libLLVMAsmParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMMC.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDebugInfoCodeView.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBitReader.a /Users/kubkon/opt/llvm17-release/lib/libLLVMFuzzerCLI.a /Users/kubkon/opt/llvm17-release/lib/libLLVMCore.a /Users/kubkon/opt/llvm17-release/lib/libLLVMRemarks.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBitstreamReader.a /Users/kubkon/opt/llvm17-release/lib/libLLVMBinaryFormat.a /Users/kubkon/opt/llvm17-release/lib/libLLVMTargetParser.a /Users/kubkon/opt/llvm17-release/lib/libLLVMTableGen.a /Users/kubkon/opt/llvm17-release/lib/libLLVMSupport.a /Users/kubkon/opt/llvm17-release/lib/libLLVMDemangle.a /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/usr/lib/libz.tbd /opt/homebrew/lib/libzstd.a /opt/homebrew/opt/ncurses/lib/libcurses.a /Users/kubkon/dev/zig/zig-cache/o/788cf4223c49f608e5802528f1c13b38/zig.o /Users/kubkon/.cache/zig/o/c1f114e8bf241e222694edf5fdaf1fc1/libcompiler_rt.a /Users/kubkon/.cache/zig/o/a2e3f9b077377eacfcc4074f52b3b03b/libc++abi.a /Users/kubkon/.cache/zig/o/e11d8307ad378132166a93b1ce4b1c1d/libc++.a -o zig_zld -lSystem -L/Users/kubkon/opt/llvm17-release/lib -L/Users/kubkon/opt/llvm17-release/lib

What's Changed

  • Add Tracy integration and fix performance regression in MachO x86_64 by @kubkon in #13
  • Upstream zwld by @Luukdegram in #14
  • macho: skip atomless synthetic globals in dead_strip by @kubkon in #15
  • wasm: check-in Options.zig file by @Luukdegram in #17
  • Various wasm-linker improvements by @Luukdegram in #18
  • bump CI dependency versions by @Luukdegram in #19
  • misc fixes by @Luukdegram in #20
  • macho: backport strict layout adherence from Zig by @kubkon in #21
  • support --export and --export-dynamic by @Luukdegram in #22
  • allow exporting function table by @Luukdegram in #23
  • wasm: export data using correct virtual address by @Luukdegram in #24
  • Implement ctors for WebAssembly by @Luukdegram in #25
  • Support linking with WASI-libc by @Luukdegram in #27
  • wasm: implement __heap_end by @Luukdegram in #28
  • macho: add support for parsing and synthesising unwind records by @kubkon in #29
  • update build.zig to Zig master by @Luukdegram in #30
  • macho: sync with zig master by @kubkon in #31
  • macho: sync with zig by @kubkon in #33
  • wasm: Implement shared-memory and TLS by @Luukdegram in #32
  • update to latest master build of Zig by @Luukdegram in #35
  • wasm: refactor virtual addresses by @Luukdegram in #36
  • Update to latest Zig master by @Luukdegram in #37
  • Sync macho fixes for Go; actually run tests by @kubkon in #38
  • elf: auto-infer target CPU architecture by @kubkon in #39
  • macho: handle cases where entrypoint in an archive or dylib by @kubkon in #40
  • Update build script to use latest Zig by @kubkon in #41
  • zld: update zig-dis-x86_64 dependency by @kubkon in #42
  • elf: a complete rewrite by @kubkon in #43
  • test: bundle libSystem.tbd for cross-tests by @kubkon in #45
  • Refactor Options parsing and introduce dedicated warning/error reporting tool by @kubkon in #46
  • elf: minimal gcc compatibility by @kubkon in #47
  • elf: handle --strip-debug and --strip-all flags by @kubkon in #48
  • elf: dynamic linking - first (baby) steps! by @kubkon in #49
  • elf: add handling of local static TLS by @kubkon in #50
  • elf: simplify acquiring a handle to a File by @kubkon in #51
  • elf: reorg and cleanup by @kubkon in #52
  • elf: clean up "path" naming conundrum + dedup shared object by their SO name by @kubkon in #53
  • elf: add prelim support for C++ linking by @kubkon in #54
  • elf: sort init/fini/preinit entries by @kubkon in #55
  • elf: more static TLS + misc fixes and improvements by @kubkon in #56
  • elf: handle GNU symbol versioning for executables by @kubkon in #57
  • elf: link Zig stage3 correctly! by @kubkon in #58
  • elf: implement parsing and emitting DWARF CFI (.eh_frame) by @kubkon in #59
  • macho: hash the entire file contents for UUID but calc in parallel by @kubkon in #60
  • macho: add fixes to __eh_frame parsing emitted by Nix compiler by @kubkon in #61
  • elf: support position-independent executables by @kubkon in #62
  • Some ELF DSO gen support, but mostly a new test harness by @kubkon in #64
  • elf: add tests requiring -static flag and implement missing functionality for static glibs by @kubkon in #65
  • elf: add support for -static -pie by @kubkon in #66
  • wasm: Finish TLS & shared-memory implementation by @Luukdegram in #68
  • elf: let's finish off TLS implementation by @kubkon in #67
  • elf: final stretch before upstreaming by @kubkon in #69
  • elf: weed out bugs when linking against musl-libc by @kubkon in #70
  • macho: fix matching target triples for TBDv3 lib stubs by @kubkon in #71
  • macho: unwind info fixes for objects without MH_SUBSECTIONS_VIA_SYMBOLS by @kubkon in #72
  • macho: convert all log.err sites to Zld.ErrorMsg by @kubkon in #73
  • wasm - implement garbage collection by @Luukdegram in #74
  • macho: tie FDEs and unwind records to all symbol aliases by @kubkon in #76
  • wasm: improve linker performance by @Luukdegram in #77
  • macho: improve platform and SDK detection by @kubkon in #75
  • wasm: parse atoms lazily by @Luukdegram in #78
  • elf: sync with Zig master by @kubkon in #80
  • macho: reuse elf's ArgParser for parsing cmdline args by @kubkon in #81
  • update to latest zig by @kubkon in #82
  • Mach-O rewrite, part 1: x86_64 by @kubkon in #83
  • elf: refactor various things by @kubkon in #84
  • macho: misc fixes, link duckdb project correctly by @kubkon in #85
  • macho: actually handle re-exports and dylib hoisting by @kubkon in #86
  • macho: handle -flat_namespace by @kubkon in #87
  • macho: more flat namespace tests and update to new API by @kubkon in #88
  • macho: handle -ObjC, implement synthesising of objc selector stubs, misc all-around improvements by @kubkon in #89
  • Better error handling by @kubkon in #90
  • macho: pass all non-x86_64 tests on aarch64 by @kubkon in #91
  • macho: more arm64 tests by @kubkon in #92
  • macho: implement range extension thunks by @kubkon in #93
  • macho: add more tracy hooks and speed up findAtomInSection function by @kubkon in #94

New Contributors

Full Changelog: v0.0.2...v0.0.3