mescc: Add fsync.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 15 Apr 2017 13:13:38 +0000 (15:13 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 15 Apr 2017 13:13:38 +0000 (15:13 +0200)
* module/mes/libc-i386.mes (i386:fsync): New function.
  (i386:libc): Export it.
* mlibc.c (fsync): New function.

mlibc.c
module/mes/libc-i386.mes

diff --git a/mlibc.c b/mlibc.c
index 562079b6835ba14f35dc28af9ab3b411bc845430..1e64cfb4161a820afa8214c31d2d111006d996d3 100644 (file)
--- a/mlibc.c
+++ b/mlibc.c
@@ -114,6 +114,24 @@ write (int fd, char const* s, int n)
        );
 }
 
+int
+fsync (int fd)
+{
+  int r;
+  //syscall (SYS_fsync, fd));
+  asm (
+       "mov %1,%%ebx\n\t"
+
+       "mov $0x76, %%eax\n\t"
+       "int $0x80\n\t"
+       "mov %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (fd)
+       : "eax", "ebx"
+       );
+  return r;
+}
+
 void *
 brk (void *p)
 {
index 1bc66129e6b1409eb99625993ef228d9f3fb784f..b72a750be1ca4ed6e46a865708cefa9d0be07f46 100644 (file)
     #xc3                                ; ret
     ))
 
+(define (i386:fsync f g ta t d)
+  '(
+    #x55                                ; push   %ebp
+    #x89 #xe5                           ; mov    %esp,%ebp
+
+    #x8b #x5d #x08                      ; mov    0x8(%ebp),%ebx
+    #xb8 #x76 #x00 #x00 #x00            ; mov    $0x76,%eax
+    #xcd #x80                           ; int    $0x80
+
+    #xc9                                ; leave
+    #xc3                                ; ret
+    ))
 
 (define (i386:_start)
  (string-append ".byte"
    (cons "open" (list i386:open))
    (cons "read" (list i386:read))
    (cons "write" (list i386:write))
+   (cons "fsync" (list i386:fsync))
    (cons "brk" (list i386:brk))))