diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2019-10-07 13:25:32 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2019-10-07 14:33:43 +0300 |
| commit | 1248eae0617555a4f13f7bbee9f120ad3d46c5f3 (patch) | |
| tree | 1927f43a8c4b59118877c5a7cf7c8e83decda519 /sys.s | |
Diffstat (limited to 'sys.s')
| -rw-r--r-- | sys.s | 69 |
1 files changed, 69 insertions, 0 deletions
@@ -0,0 +1,69 @@ +.ifndef __SYS__ +.set __SYS__, 1 + +.include "syscall.s" + +# sys call args: +# %rdi +# %rsi +# %rdx +# %rcx +# %r8 +# %r9 + +.macro __putargs6 arg:req, args:vararg + movq \arg, %r9 +.endm + +.macro __putargs5 arg:req, args:vararg + movq \arg, %r8 +.ifnb \args + __putargs6 \args +.endif +.endm + +.macro __putargs4 arg:req, args:vararg + movq \arg, %rcx +.ifnb \args + __putargs5 \args +.endif +.endm + +.macro __putargs3 arg:req, args:vararg + movq \arg, %rdx +.ifnb \args + __putargs4 \args +.endif +.endm + +.macro __putargs2 arg:req, args:vararg + movq \arg, %rsi +.ifnb \args + __putargs3 \args +.endif +.endm + +.macro __putargs1 arg:req, args:vararg + movq \arg, %rdi +.ifnb \args + __putargs2 \args +.endif +.endm + +.macro sysargs args:vararg +.ifnb \args + __putargs1 \args +.endif +.endm + +.macro sys func:req, args:vararg + sysargs \args + movq $__NR_\func, %rax + syscall +.endm + +.set STDIN, 0 +.set STDOUT, 1 +.set STDERR, 2 + +.endif |
