C bootstrap (phases 0-9):
cmd/wwc, cmd/6c, cmd/6a, cmd/6l, cmd/ww, rt, lib/*.
ww-side self-host (phase 10):
selfhost/cmd/wwc — ww-cgen frontend; bootstrap fixed point.
selfhost/cmd/6a — assembler; byte-identical to C 6a (test 991).
selfhost/cmd/6l — linker w/ archive (.a) support; byte-identical
to C 6l (test 992).
selfhost/cmd/ww — driver (build/run/version); byte-identical to
C ww (test 993).
make test: 15/15. make bootstrap: ww2.s == ww3.s, ww2.o == ww3.o,
ww2 == ww3 byte-identical, with the full ww-tooled chain.
17 lines
495 B
ArmAsm
17 lines
495 B
ArmAsm
// rt/syscall.s — Linux amd64 syscall trampoline. Args go in
|
|
// DI, SI, DX, R10, R8, R9 (the kernel ABI; userspace 4th is CX). We
|
|
// keep things minimal: rt_syscall(num, a1, a2, a3, a4, a5) → result.
|
|
//
|
|
// The first ww arg lands in DI (caller side); to use it as the
|
|
// syscall number we move it into AX. The 4th C-ABI arg comes in CX
|
|
// and must be moved to R10 for the kernel.
|
|
TEXT rt_syscall,$0
|
|
MOVQ DI, AX
|
|
MOVQ SI, DI
|
|
MOVQ DX, SI
|
|
MOVQ CX, DX
|
|
MOVQ R8, R10
|
|
MOVQ R9, R8
|
|
SYSCALL
|
|
RET
|