Documentación de syscall de 64 bits para ensamblaje de MacOS

Tengo problemas para encontrar la buena documentación para escribir ensamblados de 64 bits en MacOS.

losSysV ABI de 64 bits dice lo siguiente en la sección A.2.1 yesta publicación SO lo cita:

Una llamada al sistema se realiza mediante la instrucción syscall. El núcleo destruye los registros% rcx y% r11.

Al regresar de la llamada al sistema, el registro% rax contiene el resultado de la llamada al sistema. Un valor en el rango entre -4095 y -1 indica un error, es -errno.

Esas dos oraciones están bien en Linux pero están mal en macOS Sierra con el siguiente código:

global _start
extern _exit

section .text
_start:

; Align stack to 16 bytes for libc
and rsp, 0xFFFFFFFFFFFFFFF0

; Call write
mov rdx, 12             ; size
mov rsi, hello          ; buf
mov edi, 1              ; fd
mov rax, 0x2000004      ; write ; replace to mov rax, 0x1 on linux
syscall

jc .err                 ; Jumps on error on macOS, but why?
jnc .ok

.err:
mov rdi, -1
call _exit              ; exit(-1)

.ok:
; Expect rdx to be 12, but it isn't on macOS!
mov rdi, rdx
call _exit              ; exit(rdx)

; String for write
section .data
hello:
.str, db `Hello world\n`
.len equ $-hello.str

Compilar con NASM:

; MacOS: nasm -f macho64 syscall.asm && ld syscall.o -lc -macosx_version_min 10.12 -e _start -o syscall
; Linux: nasm -f elf64 syscall.asm -o syscall.o && ld syscall.o -lc -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o syscall

Ejecutar en macOS:

./syscall      # Return value 0
./syscall >&-  # Return value 255 (-1)

Descubrí que:

Un regreso syscallerrno un establece el indicador de acarreo en caso de error, en lugar de regresar-errno enraxrdx registrarse es golpeado porsyscallEn Linux, todo funciona como se esperaba

Por que esrdx golpeado? ¿Por qué no regresa un syscall?-errno? ¿Dónde puedo encontrar la documentación real?

El único lugar que encontré donde alguien habla sobre la bandera de acarreo por errores de syscall esaquí

Respuestas a la pregunta(1)

Su respuesta a la pregunta