ww: import toolchain — C bootstrap + ww-side self-host (phases 0-10)
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.
This commit is contained in:
16
rt/syscall.s
Normal file
16
rt/syscall.s
Normal file
@@ -0,0 +1,16 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user