feat: Phase 1 syscall fixes for Nix compatibility
Implement the core syscall fixes needed for Nix to run inside Darling:
renameatx_np (syscall 488) — Task 1.3:
New syscall translating macOS renameatx_np to Linux renameat2(2).
RENAME_SWAP → RENAME_EXCHANGE, RENAME_EXCL → RENAME_NOREPLACE.
Unblocks mv (coreutils) which was aborting on unimplemented syscall.
setattrlist ATTR_CMN_FLAGS — Task 1.1:
Extended setattrlist/fsetattrlist/setattrlistat to accept ATTR_CMN_FLAGS
(silently succeeds for any value). Also added ATTR_CMN_CRTIME and
ATTR_CMN_CHGTIME (silently ignored). Extended getattrlist/fgetattrlist/
getattrlistat to return flags=0 when ATTR_CMN_FLAGS is requested.
This is the #1 blocker: lchflags(path, 0) was returning EINVAL.
clonefile/fclonefileat — Task 1.5:
Changed stubs from ENOSYS to ENOTSUP so Nix gracefully falls back to
regular read/write copy.
Also fixes a pre-existing bug in getattrlist: ATTR_FILE_RSRCLENGTH was
using XATTR_FINDER_INFO instead of XATTR_RESOURCE_FORK.
Tests:
tests/syscall/test_renameatx_np.c — 5 test cases
tests/syscall/test_setattrlist_flags.c — 10 test cases