summaryrefslogtreecommitdiff
path: root/asm/syscallasm.s
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-17 17:51:51 +0200
committerMiguel <m.i@gmx.at>2018-08-17 17:51:51 +0200
commit51d4dd040a291b62c648ff6cc0d7e0058cf4056f (patch)
tree142b7db302ba038dba526f99e5854cfc87b5f92e /asm/syscallasm.s
parent006214f8c63189500b6ca55e0ef8f97eb35d47f5 (diff)
starting implicit function calls cleanup
Diffstat (limited to 'asm/syscallasm.s')
-rw-r--r--asm/syscallasm.s22
1 files changed, 22 insertions, 0 deletions
diff --git a/asm/syscallasm.s b/asm/syscallasm.s
new file mode 100644
index 0000000..8860d89
--- /dev/null
+++ b/asm/syscallasm.s
@@ -0,0 +1,22 @@
+.global syscall
+
+// call from c with 4 x 32bit params
+// syscall number, p1,p2,p3,p4
+
+// TODO: push stack frame?
+
+syscall:
+
+ push %ebx // preserve (sysV abi convnetion)
+
+ mov 0x8(%esp),%eax //syscall number
+ mov 0xC(%esp),%edx //p1
+ mov 0x10(%esp),%ecx //p2
+ mov 0x14(%esp),%ebx //p3
+
+ int $0x80
+ mov %ebx, %eax // set as return value
+
+ pop %ebx // preserve
+ ret
+